Linux命令太多眼花缭乱的,在这整理一下我觉着最基础常用的命令及其选项。 // 文中还有几个”传送门“,后续会”打通“
一般语法形式:命令 [选项] (s) 参数(s)
本文中形式:命令 [选项] (s) 参数(s) 指令解释 // 每条最后的汉字部分都是解释,前面的可能会有缺省
首先是这几个命令用法
1.help [命令] 详细帮助信息 help -d?输出每个主题的简短描述 help -m 以伪 man 手册的格式显示使用方法
2.man [命令] 查看相应的手册 man -w [名称] 查看对应手册位置
3.指令 --help
大部分命令可以在这三种方法中找的帮助信息,在其中一种方法里没有找到就找另外两种方法,再没有就百度
poweroff 关闭系统
shutdown 关闭或重启系统 ?直接看例子: ?shutdown -r now 立即重启系统 ?shutdown -r 02:11 2点11重启系统 ?shutdown -h now 立即关闭系统 ?shutdown -h +45 45分钟后关闭系统 ?shutdown -c 取消运行shutdown
halt 关闭系统 (和poweroff区别就是halt不会断电,在虚拟机里试试就看出来了)
reboot 重启
init 切换系统运行级别 ?init 0 关闭系统 ?init 6 重启系统
vi [选项] [文件]
vim
vi vim详细看这:
pwd 显示当前路径
cd [路径] 更改工作路径 // change directory
ls 列出当前目录下所有子目录和文件信息 ?-C 多列输出,纵向排序 ?-R 递归列出遇到的子目录 ?-a (all) 列出所有文件,包括以 “.” 开头的隐含文件 ?-A 显示除 “.” 和 “…” 外的所有文件。 ?-c 使用“状态改变时间”代替“文件修改时间”为依据来排序(使用“ -t ”选项时)或列出(使用“ -l ”选项时)。 ?-u 使用最近访问时间代替最近修改时间为依据来排序(使用 “ -t ”选项时)或列出(使用“ -l ”选项时)。 ?-r 逆序排列。 ?-t 按时间信息排序。 ?-1 单列输出。 ?-l 除每个文件名外,增加显示文件类型、权限、硬链接数、所有者名、组名、大小(byte)、及时间信息(如未指明是其它时间即指修改时间)。对于6个月以上的文件或超出未来1时的文件,时间信息中的时分将被年代取代。 ?dir ( 也被安装为命令 d ) 等同于“ ls -C ”;即,文件缺省是多列输出,纵向排序。 ?vdir ( 也被安装为命令 v ) 等同于“ ls -l ”;即,文件缺省是按长格式输出。
dir 和 ls作用一样, 用ls输出的有颜色,试试就看出来了
dirs 显示当前目录 例:
[root@localhost eclipse-workspace]# dirs
~/eclipse-workspace
dirname 名称 输出去除尾部’/'字符部分的名称 ?dirname /usr/bin/ -> /usr ?dirname dir1/str dir2/str -> dir1 dir2 ?dirname stdio.h -> .
basename [选项] 名称 [后缀] // 去除前面的部分 ?basename /usr/bin/sort -> sort ?basename include/stdio.h .h -> stdio ?basename -s .h include/stdio.h -> stdio ?basename -a any/str1 any/str2 -> str1 str2 (必须有-a 和dirname多个参数的情况区别)
touch [选项] 文件名 创建文件 ?-c, --no-create 不创建文件如果不存在的话 touch [选项] 文件名 修改时间 ?-a 修改文件的访问时间atime ?-m 修改文件修改时间mtime ?-r file 将参照文件file相应的时间戳记的数值作为指定文件时间戳记的新值( use this file’s times instead of current time) ?-t [[CC]YY]MMDDhhmm[.ss] 用[[CC]YY]MMDDhhmm[.ss]将当前时间改为指定时间 ??// [[CC]YY]MMDDhhmm[.ss]从左至右分别是月份,日期,小时,分钟,可选的世纪和年,以及可选的秒 ?-d, --date=字符串 使用指定字符串表示时间而非当前时间 ?(-d, --date=time 使用时间值 time 代替指定文件的戳记值.可以包含月份 名,时区名以及`am’和 `pm’等等)
mkdir 目录名 创建目录 默认权限755 ?-m 设置权限 ?-p 创建多级目录 ?(-p, --parents 为所给出的目录建立丢失了的父目录)
rmdir 删除空目录。如果[目录]由多个路径名组成,从最后一个路径名开始依次删除,如果所给出的目录不为空,则报错,删除非空目录可以用rm -r ?-p [目录] 递归删除空目录,当子目录删除后其父目录为空时,父目录一并被删除(如果你在某上一级目录中执行的操作的话,你在的这一级空目录不会被删除,递归到这停止)
cp 源文件|目录 目标文件|目录 复制文件或目录 ?Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. ?-r -R (recursive)递归复制 ?-l (link)不复制只链接文件 硬链接 ?-f, --force 在覆盖目标文件前不给提示要求用户确认 ?-i,–interactive(交互的,互动的) 在覆盖目标文件前给出提示要求确认
install 复制文件和设置属性 ?install 和cp差不多 但比cp还多一个-m选项 ?-m, --mode=模式?自行设置权限模式(像chmod) ?例:install -m 744 a.txt /opt
mv 源文件|目录 目标文件|目录 改名,移动 ?Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY. ?源可以有多个 [root@localhost opt]# mv a.txt b.txt module ?-f, --force 覆盖前不询问 ??-i, --interactive 覆盖前询问 ??-n, --no-clobber 不覆盖已存在文件 ??如果指定了-i、-f、-n 中的多个,仅最后一个生效。 ?-u, --update move only when the SOURCE file is newer than the destination file or when the destination file is missing
rm 删除文件或目录 ?-f, --force ignore nonexistent files and arguments, never prompt ?-i prompt before every removal ?-r, -R, --recursive remove directories and their contents recursively ?这类比前面的选项就好了
file du tree ln 直接上使用的例子:
??file 文件名 查询文件类型
??du 文件|目录(s) 查看文件目录磁盘占用量 ??du 查看当前目录的磁盘占用量
??tree 目录 以树状图逐级列出目录的内容 ??tree 当前目录的树状图
??ln 源文件 链接文件 创建硬链接 ??ln -s 源文件 链接文件 创建软链接 (符号链接)
stat 显示文件或文件系统状态 ?stat [选项] 文件|目录 ?-f 显示文件或目录所在文件系统的状态信息 ?-t 简明形式显示 ?例: ?
[root@localhost spark-local]# stat README.md
文件:"README.md"
大小:4488  块:16 IO 块:4096 普通文件
设备:802h/2050d Inode:6419561 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ a2416) Gid:( 1000/ a2416)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2021-10-18 23:06:59.978664827 +0800
最近更改:2020-06-06 21:34:17.000000000 +0800
最近改动:2021-10-10 19:09:47.293271005 +0800
创建时间:- 
scp 安全复制(远程文件复制程序) ?usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 … [[user@]host2:]file2 这用法看这很乱,看下面的例子。 ? -r 递归复制整个目录。 ?例:scp -r /opt/module/jdk a2416@192.168.1.111:/opt/module ?// a2416是用户名,目标主机上的用户,192.168.1.111是目标主机 ?这个例子是是将本主机的文件jdk传给192.168.1.111。scp还可以将其他主机的文件传给自己,或将其他主机的文件传给其他主机,就和cp命令类似,就是在写参数地址时要加上用户和主机,有权限就行。
还有个rcp 没用过
rsync (remote sync)是一个文件传输程序,能够有效的远程更新 (sync是一个将缓冲文件写入磁盘中的命令。如果学Hadoop或spark或其他的需要同步文件等操作的,会做一个集群分发脚本xsync) ?-v, --verbose 显示复制过程 ?-a,–archive 存档模式; = -rlptgoD // 下面是rlptgoD 一个-a选项就够用了 ?-r, --recursive recurse into directories 递归复制 ?-l, --links copy symlinks as symlinks 将符号链接复制为符号链接 ?-p, --perms preserve permissions 保留权限 ?-t, --times preserve modification times 保留修改时间 ?-g, --group preserve group 保留组 ?-o, --owner preserve owner (super-user only) 保留所有者(仅限超级用户) ?-D same as --devices --specials 保留设备信息 ?例:rsync -av hadoop-3.1.3/ a2416@hadoop103:/opt/module/hadoop-3.1.3/
cat [选项]… [文件]… // 只读 ?-b, --number-nonblank 对非空输出行编号 ?-E, --show-ends 在每行结束处显示"$" ?-n, --number 对输出的所有行编号 ?-s, --squeeze-blank 不输出多行空行 (多行空格替换为一行空格)
more 分页显示文本文件
less 回卷显示文本文件
more less 区别用法详细看这:
head 显示文件前若干行 默认10行 ?-n K 显示前K行 ?-n -K 显示除了最后K行以外的所有内容 ?-c K 显示前K字节 ?-v 显示文件头
tail 显示文件最后若干行 默认10行 ?使用方法类比head
grep 查找符合条件的字符串 ?grep [选项]… 查找模式 [文件]… ?-i, --ignore-case 忽略大小写 ?-n, --line-number 输出的同时打印行号 ?-H, --with-filename 为每一匹配项打印文件名 ?例:grep -n ‘ss’ a.txt 在a.txt文件中搜索匹配‘ss’字符串并加上行号 ???gerp ‘ss’ a* .txt 查找所有以a开头的txt文件里的’ss‘字符串 ???history | grep ls 查找历史命令中的ls命令(history命令和 管道符| 下面写)
find 列出所有符合条件的文件 ?基础用法: ?find 文件名 ?不基础用法: ?find --help 值得你拥有(使用find时选项很重要,需要详细了解的可以去看help命令文档)
cal 显示日历信息 了解了解练着玩玩,还挺好玩的 ?用法:cal [选项] [[[日] 月] 年] ?选项: ?-1, --one 只显示当前月份(默认) ?-3, --three 显示上个月、当月和下个月 ?-s, --sunday 周日作为一周第一天 ?-m, --monday 周一用为一周第一天 ?-j, --julian 输出儒略日(儒略日是一种不记年·月,只记日的历法) ?-y, --year 输出整年
date 超级用户可以显示和设置系统日期和时间 一般用户可以显示日期和时间 ?-d, --date=STRING display time described by STRING, not ‘now’ 显示字符串时间 ?-r, --reference=文件??显示文件指定文件的最后修改时间 ?-s, --set=STRING set time described by STRING 设置时间 date 显示日期和时间 ?date +‘%m’ 显示月份 // 指定格式输出 显示时间是可以使用时间域 ?date “+%Y-%m-%d %H:%M:%S”(功能描述:显示年月日时分秒) ?date -s 20201103 设置日期为2020年11月03日
clockdiff 主机之间测量时钟差 ?例: ?
[root@localhost ~]# clockdiff 192.168.219.100
..
host=192.168.219.100 rtt=562(280)ms/0ms delta=18ms/18ms Tue Oct 19 22:03:18 2021
sleep 暂停指定时间 ?'m’表示分钟,'h’表示小时,'d’表示天。给定两个或多个参数,暂停时间为参数值的和。 ?例:sleep 20 暂停20秒 ???sleep 2h 暂停2小时
> 输出重定向 : 会将原来的文件的内容覆盖
>> 追加: 不会覆盖原来文件的内容,而是追加到文件的尾部。 ?例: history>a.txt cal>>a.txt
| 管道符 ?“|”左边命令的输出就会作为“|”右边命令的输入,此命令可连续使用,第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。 ?例: ?
[root@localhost ~]# ls | grep b
b.txt
b.txt.zip
例子中ls命令列出当前目录下文件和目录通过管道符传给grep命令进行筛选查找名称包括’b’的文件或目录
xargs(英文全拼: eXtended ARGuments)xargs 作用有很多,详细去看https://www.runoob.com/linux/linux-comm-xargs.html和这https://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html ?在这只说它的一个作用,将左侧命令的输出作为右边命令的参数(对我现在刚入门的水平来说,我觉着这个命令简直了,真的很有用) ?例:
[root@localhost a]# find *c*
abc.txt
c
ffc
[root@localhost a]# find *c* | xargs rm -rf
找到所有包含’c’的文件或文件夹全部删掉
source 在当前shell环境中从指定文件读入和执行命令 ?例:source /etc/profile
history 查看命令历史记录 ?-c?删除所有条目从而清空历史列表。 ?例:history 查看所有历史命令 ???history 10 查看最近10条命令 ???history -c 清空命令历史记录
fc 从历史列表中列出或者重新编辑并执行命令 ?-l ?列出行而不编辑 ?-n?列举时省略行号 ?-r?反转行的顺序(最新行在前)
fc 详细看这:Linux_fc用法_-s选项https://blog.csdn.net/a2416258499/article/details/120857378
alias 定义或显示别名 ?用法:alias 别名=命令 ?例:alias lsl=‘ls -l’ 定义别名ok // 可以看看自己的已定义的别名,里面可能有个alias ll=‘ls -l --color=auto’ ???alias 查看所有已定义的别名
unalias 取消别名 ?例:unalias lsl
export 显示或设置环境变量 ?-n 删除指定的环境变量 ?-p 列出所有的环境变量 ?例:export -p 列出所有环境变量 ???export NIHAO=2 设置环境变量NIHAO的值为2 ???export -n NIHAO 删除环境变量NIHAO ?// 一开始学Linux时配置环境变量时,比如jdk,都会用到export,打开profile文件,然后加入 export PATH="$PATH:/opt/jdk/bin"
set 显示和设置shell变量 ?set A 10
unset 删除变量或函数 ?unset A
以上三个命令在shell编程时常用
env 查看和设置环境变量
passwd 给用户指定或者修改密码 ?-d 删除用户密码 ?例:passwd lala 给lala设置密码 ???passwd -d lala 删除lala的密码
useradd 创建用户 // 创建的用户是锁定的,需要用passwd设置密码后使用 ?还有个adduser 和它用法一样 ?例:useradd lala 创建一个lala用户 // 打开/home 然后会看到一个叫lala的文件夹
usermod 修改用户 ?-g, --gid GROUP 强制使用 GROUP 为新主组 ?例:user -g mm lala 将lala修改到mm组
userdel 删除用户 ?-r, --remove 删除主目录和邮件池 ?-f, --force 强制删除
groupadd 创建组群 ?例:groupadd mm 新建mm组
groupmod 修改组群
groupdel 删除组
gpasswd 设置组密码或向组中添加或删除用户
以上都是useradd、usermod、groupadd、groupmod、gpasswd的基础用法
用户和组的操作详细看这:
groups 显示指定用户的组
id 显示用户的uid gid 选项有-u -G -g ?例: ?
[root@localhost home]# id lala
uid=1008(lala) gid=1008(lala) 组=1008(lala)
su 切换其他用户 ?例:su lala 切换到lala用户
sudo 以另一个用户执行命令 ?菜鸟教程是这么说的:Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。 ?也就是说临时赋予当前用户root权限 ?比如我们现在不是超级用户,需要编辑某个只有root才有权限编辑的文件,就可以使用sudo,比如: ?sudo vim profile
w 详细查询已登录当前计算机的用户 who 显示已登录当前计算机的用户的简单信息 whoami 显示与当前的有效 用户ID相关联的用户名 logname 显示当前用户的登录名称 users 用单独的一行显示出当前登录的用户 last 显示近期用户登录情况 lastb 列出登录系统失败的用户信息 lastlog 查看用户上次登录的时间
chmod 改变文件和目录的访问权限 ?-R, --recursive 递归改变目录及其所有子目录的文件的权限 ?例:chmod -R 744 a 递归改变文件夹a的权限
权限操作详细看这:
chown 更改文件和目录的用户所有者和组所有者 ?-R 递归将下级的所有文件和目录一起更改 ?例: chown -R lala a 将文件夹及其下级目录的用户所有者改为lala ???chown .lala a 将文件a的组改为lala ???chown :lala a 将文件a的组改为lala
chgrp 更改文件或目录的所属组 ?例:chgrp lala a
getfacl 查看文件的ACL ?例:
[root@localhost ~]# getfacl a
# file: a
# owner: lala
# group: lala
user::rwx
group::r--
other::r--
还有setfacl和chacl命令,–help 值得你拥有
lsattr -a -R -v 可以执行试试
接下来是几个压缩和解压缩命令
tar 将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。 ?例:tar 常用的两种: ???tar -zcvf a.tar.gz a1.txt 将a1.txt压缩为a.tar.gz ???tar -zxvf a.tar.gz [目录] 将a.tar.gz解压到[目录]下(缺省目录的话就是解压到当前目录;a.tar.gz文件可以通过 目录/a.tar.gz确定,不一定是在a.tar.gz的父目录下解压,啊,应该不用我说吧,多嘴了)
gzip 压缩或解压缩gzip文件 ?例:gzip b.txt 压缩b.txt文件 ???gzip -d b.txt.gz 解压b.txt.gz文件
gunzip 解药gzip文件 ?例:gunzip b.txt.gz
zip 压缩zip文件 ?例:zip b.txt.zip b.txt 将文件b.txt压缩为b.txt.zip
unzip 解压缩zip文件 ?例:unzip b.txt.zip 解压b.txt.zip文件
压缩解压,查看压缩文件等更多操作看这:
rpm RedHat Package Manager(RedHat 软件包管理工具) ?例:rpm -i XXX.rpm 安装XXX.rpm
yum 管理器 ?例:yum install XXX 安装XXX
rpm yum详细看这
Ubuntu用的是apt
ps 报告当前进程的快照。显示有关选择活动进程的信息。如果你想要重复更新选择和显示的信息,使用top代替。 ?常用形式:ps -aux
top 显示Linux进程。top程序提供了一个运行系统的动态实时视图。 它可以显示系统摘要信息,以及当前由Linux内核管理的进程或线程列表。 显示的系统摘要信息的类型以及为进程显示的信息的类型、顺序和大小都是用户可配置的,并且该配置可以在重启时保持不变。
kill 终止进程 通过进程号杀死进程 ?-9 强制终止 ?例:kill -9 1000
killall 通过进程名称杀死进程 ?-u 杀死指定用户的进程 ?例:killall 进程名 ???killall -u lala 杀死用户lala的进程
ntsysv 配置服务在系统启动时自启
chkconfig 为系统服务更新和查询运行级别信息
用法:chkconfig [--list] [--type <type>] [name]
chkconfig --add <name>
chkconfig --del <name>
chkconfig --override <name>
chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>
??例:chkconfig --list 查看不同运行级别下个服务开机启动情况 ??centos7里chkconfig有变动,在这就不深究了,可以执行下面的 ??systemctl list-unit-files 列出 systemd 服务 ??systemctl list-dependencies [target] 查看在具体 target 启用的服务
service 运行System V init脚本 ?选项: --status-all 查看系统中所有服务现在的运行状态 ?start 启动服务 ?stop 停止服务 ?restart 重启服务 ?status 查看状态 ?reload 重新载入服务配置 ?例:service iptables start 启动防火墙 ?注意:centos7中 service和iptables都有所变动,centos7中使用 systemctl 和 firewalld
firewalld具体看这:
systemctl 查询或发送控制命令到systemd管理器。 ?例:systemctl restart firewalld 重启防火墙
crontab 针对个人用户维护crontab文件 ?-e edit user’s crontab 编辑用户的crontab ?-l list user’s crontab 列出用户的crontab ?-r delete user’s crontab 删除用户的crontab
crontab具体操作看这
ifconfig 显示和配置网络接口
ifdown <设备名> 关闭网络接口 ?例:ifdown ens33
ifup 开启网络接口 ?例:ifup ens33
ping 测试与目标计算机中间的连通性 ?例:ping www.baidu.com ???ping 192.168.1.100
mtr 进行网络诊断 ?例:mtr 192.168.1.100
netstat 查看系统网络情况 ?常用选项例子:netstat -anp | more ????????netstat -tulnp
netstat详细看这:
ip 显示/操作路由、设备、策略路由和隧道 ?例:ip address 查看网卡协议地址 ???ip address show ens33 查看网卡ens33
setup 文本模式系统配置工具
nmap详细看这:
ssh 远程登录主机
还有一些试着玩玩的命令:
lsmod 显示内核中模块的状态
lscpu 显示CPU信息
nproc 显示当前进程可用CPU数
lspci 显示所有PCI设备
lsscsi 显示SCSI设备
lsusb 显示USB设备
dmidecode 查看服务器型号,主板序列号,系统系列号,内存信息等
arch 显示计算机主机的体系结构
sestatus 查看当前SELinux状态
lsblk 显示块设备
time ls /root 查看执行ls /root命令的资源使用时间
uptime 显示系统已经运行的时间
ipcs 提供IPC设备信息
ssh-keygen 创建ssh密钥
sshagent 存储用于公钥验证的私钥
ssh-add 添加RSA或DSA身份的认证代理
ssh-keyscan 收集主机公钥
echo 在显示器上显示文字
printf 格式打印数据
clear 清屏 快捷键Ctrl+L 也行
type 显示命令类型
mysql -uroot -p 登录mysql数据库
hostname 显示或修改计算机主机名
本文除参考命令帮助文档外,还参考了《Linux命令应用大词典》於岳编著
|