https://wangchujiang.com/linux-command/
1.线上查询及帮助命令(3个)
man ls
help
info
2.文件和目录操作命令(13个)
$ ls # 仅列出当前目录可见文件
$ ls -l # 列出当前目录可见文件详细信息 √
$ ls -hl # 列出详细信息并以可读大小显示文件大小
$ ls -al # 列出所有文件(包括隐藏)的详细信息 √
$ ls --human-readable --size -1 -S --classify # 按文件大小排序
$ du -sh * | sort -h # 按文件大小排序(同上)
cd
cd # 进入用户主目录;
cd / # 进入根目录
cd ~ # 进入用户主目录;
cd .. # 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. # 返回上两级目录;
cd !$ # 把上个命令的参数作为cd参数使用。写脚本才用
关于切换到上一个工作目录的说明
cd -
# 命令会首先显示要切换到的目标目录,然后再进入。
cd ${OLDPWD}
# 命令会直接切换到上一个工作目录。
cp
将源文件或目录复制到目标文件或目录中
cp -r
# 如果是目录需要加-r参数,递归作用
find
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-depth:从指定目录下最深层的子目录开始查找;
-empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-size<文件大小>:查找符合指定的文件大小的文件;
-type<文件类型>:只寻找符合指定的文件类型的文件;递归查找
find / -type f -empty | xagrs rm -rf
# 检索空文件并删除
find / -type f -size +500M
# 查询大于500mb的文件
find /home/yuanbao/ -type f -name "t*"
find ./ -type f -mtime +3 -name "*.log"
# 查找当前目录下 3天前 有更新的文件
find ./ -type f -mmin -900 # 查找当前目录下 900min 以内更新的文件
find ./ -type f -perm 764 # 递归查找当前目录下 权限为764 的文件
ll -i # 查看当前文件夹下文件的inum号 find ./ -inum 18775420 # 查找inum为18775420的文件 find ./ -inum 18775420 | xargs -i rm -rf {} # 查找并删除inum为18775420的文件
UNIX/Linux文件系统每个文件都有三种时间戳:
-
访问时间 (-atime/天,-amin/分钟):用户最近一次访问时间。
-
修改时间 (-mtime/天,-mmin/分钟):文件最后一次修改时间。
-
变化时间 (-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
seq 100 > test.java # 创建100行的文件(清空原内容,标准输出新内容) find ./ -type f -name "*.java"|xargs cat|grep -v "^$"|wc -l # 代码行数统计,排除空行
mkdir
mkdir -p dir # 递归创建
mv
用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中
mv old new # 修改文件、文件夹名
rm
rm file # 运行后询问是否删除 rm -rf file # 强制删除
touch
touch file # 普通创建 touch test_{1..100} # 创建以test_开头的1~100的文件
file
file * file test.sh # 查看文件信息,一般看是否是shell脚本,或者executable可执行文件
[root@localhost ~]# file install.log install.log: UTF-8 Unicode text[root@localhost ~]# file -b install.log <== 不显示文件名称
UTF-8 Unicode text[root@localhost ~]# file -i install.log <== 显示MIME类别。
install.log: text/plain; charset=utf-8[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8
tree
tree -L 1 # 列出当前文件夹的第1层级
了解
basename
dirname
写脚本用的
chattr
用来改变文件属性
chattr +i /etc/fstab # 防止文件被修改和删除 chattr -i /etc/fstab # 移除属性
lsattr
查看文件的第二扩展文件系统属性
lsattr file
md5sum
计算和校验文件报文摘要的工具程序
md5sum test.sh # 记录文件的md5sum值,若文件被修改,其值也会变,防黑客用
# 检查文件testfile是否被修改过 md5sum testfile > testfile.md5 # 首先生成md5文件 md5sum testfile -c testfile.md5 # 检查文件
3.查看文件及内容处理命令 (19个)
vi
vim
:set nu # 打印行号 :wq! # 强制保存shift+g # 跳到最后一行
shift+zz # 强制保存并退出
gg # 跳到第一行
dd # 删除当前行
3dd # 删3行
yy # 复制当前行
p # 粘贴在光标下方
o # 进入编辑模式,并往下方插入一行
cat
cat > test.java <<EOF > 1 > 2 > 3 > EOF # 清空原内容,标准追加新内容
more
显示文件内容,每次显示一屏
-
按
Space
键:显示文本的下一屏内容。 -
按
Enter
键:只显示文本的下一行内容。 -
按H键:显示帮助屏,该屏上有相关的帮助信息。
-
按B键:显示上一屏内容。
-
按Q键:退出more命令。
head
cat test.java | head -n 2 # 查看文件前两行
tail
默认输出文件的末尾10行
cat test.java | head -n 2 | tail -n 1 # 查看文件第2行
tail test.java # 实时查看文件后10行
sort
对文本文件中所有行进行排序
cat 1.txt | sort -nr # 打印文件内容,并进行降序排序
netstat -ant | awk 'NR>1{print $NF}' |sort |uniq -c # 打印最后一列,排序,去重并统计
netstat -ant | awk 'NR>1{print $NF}' |sort |uniq -c|sort -nrk 1 # 在上图的基础上再排序,倒叙,以第一列 # -n是按照数字大小排序,-r是以相反顺序,-k是指定需要排序的栏位
ifconfig ens33|awk 'NR==2{print $2}' # 提取网卡ip # ip于第2行 第2个
uniq
显示或忽略重复的行
uniq test
wc
统计文件的字节数、字数、行数
-c # 统计字节数,或--bytes:显示Bytes数。 -l # 统计行数,或--lines:显示列数。 -m # 统计字符数,或--chars:显示字符数。 -w # 统计字数,或--words:显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
wc -l test # 统计文件行数
cat test|wc -l # 统计文件行数
grep
egrep
强大的文本搜索工具,一般用egrep
-A <显示行数> --after-context=<显示行数> # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。 -B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。 -o # 只输出文件中匹配到的部分。 -n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。 -G --basic-regexp # 将范本样式视为普通的表示法来使用。 -i --ignore-case # 忽略字符大小写的差别。
egrep -A 3 "2" test # 看后3行
egrep -ri -A 3 "error" app.log # 例:查找日志文件中报错的后3行信息
正则表达式
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。 $ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。 . # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 * # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .* # 一起用代表任意字符。 [] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 [^] # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头,紧跟 rep 的行 \(..\) # 标记匹配字符,如'\(love\)',love被标记为1。 \< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。 \> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 x\{m\} # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。 \w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 \W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b # 单词锁定符,如: '\bgrep\b'只匹配grep。
cat /etc/passwd |egrep "^root" # 过滤文件内容以 root 开头的
cat /etc/passwd |egrep "nologin$" # 过滤文件内容以 nologin 结尾的
cat /etc/passwd |egrep "^s"|egrep "login$" # 过滤文件内容以 s 开头,并以 login 结尾的,不如下图方便
cat /etc/passwd |egrep "^s.*login$"
egrep -r "error" # 递归查找包含 error 的文件信息
egrep -r "error" -l # 递归查找包含 error 的文件
egrep "\b[1-9]\b" 1.txt # 过滤文件 1~9 的内容 # \b 表示字符的精准匹配
grep命令常见用法
在文件中搜索一个单词,命令会返回一个包含 “match_pattern” 的文本行:
grep match_pattern file_name grep "match_pattern" file_name
输出除之外的所有行 -v 选项:
grep -v "match_pattern" file_name
使用正则表达式 -E 选项:
grep -E "[1-9]+" # 或 egrep "[1-9]+"
tr
将字符进行替换压缩和删除
-d或——delete:删除所有属于第一字符集的字符;
将输入字符由大写转换为小写:
echo "HELLO WORLD" | tr 'A-Z' 'a-z' hello world
'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都属于集合,集合里可以使用'\n'、'\t',可以可以使用其他ASCII字符。
使用tr删除字符:
echo "hello 123 world 456" | tr -d '0-9' hello world
vimdiff
vimdiff 1.txt 2.txt # 对比文件内容
dos2unix
将DOS格式文本文件转换成Unix格式
最简单的用法就是dos2unix直接跟上文件名:
dos2unix file
4.文件压缩及解压缩命令(1个)
tar
将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件
将 /home/vivek/bin/
目录打包,并使用 gzip 算法压缩。保存为 /tmp/bin-backup.tar.gz
文件。
tar -zcvf /tmp/bin-backup.tar.gz /home/vivek/bin/
5.信息显示命令(3个)
uname
uname -a # 看内核的
hostname
hostname # 看主机名的
hostname -I # 看网卡的ip地址
stat
用于详细显示文件的状态信息
stat 1.txt
6.深入网络操作命令(7个)
nslookup
查询域名DNS信息
nslookup www.baidu.com
[root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 233.5.5.5 nameserver 114.114.114.114
dig
域名查询工具
dig www.baidu.com
traceroute
显示数据包到主机间的路径
traceroute www.baidu.com
mtr
也是跟踪路由的
mtr www.baidu.com # 快速探测,可以看到实时丢包率,和平均延时 # 在 121.14.67.190 这个路由器有丢包
tcpdump
抓包工具,嗅探器
tepdump -i any not arp and not port 22 -nn # 过滤有关arp协议的,并且端口不是22的包
nmap
扫描服务器所开放的端口
nmap www.baidu.com # 扫描到百度开放了 80 和 443 端口
nmap 192.168.1.170 nmap 127.0.0.1 # 扫描自身服务器开放的端口
lsof
用于查看你进程打开的文件
lsof -i:80 # 查看服务器 80 端口的连接
lsof /usr/sbin/sshd # 找出谁在使用某个文件
lsof -i tcp # 列出所有TCP网络连接
7.有关磁盘与文件系统的命令(5个)
mount
umount
用于挂盘
df
df -h # -h 以可读性较高的方式来显示信息
df -i # -i 显示inode的信息
df -h|awk '/boot/{print $5}'|sed -r 's#%##g' # 筛选 /boot 打印第5列,把 % 替换为空,打印出 15 used=$(df -h|awk '/boot/{print $5}'|sed -r 's#%##g') # 设置变量 used [ $used -gt 50 ] && echo "warning"||echo "normol" # 对语句做判断:若该值大于50则返回“warning”,否则返回“normal”
du
du -sh ./* # -s 仅显示总计,只列出最后加总的值。 # -h 以K,M,G为单位,提高信息的可读性。
du -sh ./* |sort -hr # 对根目录从大到小排序 # 一般针对 /usr (自定义软件)和 /var (日志文件)两个目录进行清理优化
fdisk
查看磁盘使用情况和磁盘分区
fdisk -l
resize2fs
用于调整ext2、ext3或ext4文件系统的大小。它可以用来扩容或缩小位于设备上的已卸载的文件系统。
8.关机命令
shutdown
9.系统管理相关命令(6个)
uptime
查看Linux系统负载信息
uptime # 输出 系统时间 运行的时间 当前登录的用户数 系统负载平均值 # 负载是代表整个系统的繁忙程度,负载数和cpu数绑定
top
实时查看系统的运行状态
top交互命令
1:看cpu k:终止一个进程; q:退出程序; m:切换显示内存信息
free
显示内存的使用情况
free -h
vmstat
显示虚拟内存状态
vmstat 1 10 # 1秒执行10次,一般看 r 进程数
字段说明:
Procs(进程)
-
r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
-
b: 等待IO的进程数量。
Memory(内存)
-
swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
-
free: 空闲物理内存大小。
-
buff: 用作缓冲的内存大小。
-
cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
Swap
-
si: 每秒从交换区写到内存的大小,由磁盘调入内存。
-
so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
IO(现在的Linux版本块的大小为1kb)
-
bi: 每秒读取的块数
-
bo: 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system(系统)
-
in: 每秒中断数,包括时钟中断。
-
cs: 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
CPU(以百分比表示)
-
us: 用户进程执行时间百分比(user time)
us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
-
sy: 内核系统进程执行时间百分比(system time)
sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
-
wa: IO等待时间百分比
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
-
id: 空闲时间百分比
mpstat
显示多个可用CPU的状态
mpstat -P ALL
表头含义
-
%user:表示处理用户进程所使用CPU的百分比。
-
%nice:表示在用户级别处理经nice降级的程序所使用CPU的百分比。
-
%system:表示内核进程使用的CPU百分比。
-
%iowait:表示等待进行I/O所占用CPU时间百分比。
-
%irq:表示用于处理系统中断的CPU百分比。
-
%soft:表示用于处理软件中断的CPU百分比。
-
%steal:在管理程序为另一个虚拟处理器服务时,显示虚拟的一个或多个CPU在非自愿等待中花费的时间的百分比。
-
%guest:表示一个或多个CPU在运行虚拟处理器时所花费的时间百分比。
-
%gnice:表示一个或多个CPU在运行经nice降级后的虚拟处理器时所花费的时间百分比。
-
%idle:CPU的空闲时间百分比。
iostat
iostat # 显示系统整体的读写速率
-
tps:事务
-
kB_read/s:读取的速率
-
kB_wrtn/s:写入的速率
10.系统安全相关命令
chmod
chmod +x file # 默认权限为 644 ,若文件为脚本文件,需要多 +x
chown
用来变更文件或目录的拥有者或所属群组
visudo
对/etc/sudoers这个文件,进行编辑的专属命令,该文件定义了具有管理员权限的用户和组
useradd test # 添加 test 用户 visudo # 在文件中添加 test 用户管理权限
su - test su - root # 切换 test 用户,无需密码登录
sudo
以其他身份来执行命令,相当于皇帝
sudo mkdir -p test # 执行命令,且无需输入密码
sudo su - root # 执行命令,且无需输入密码
passwd
passwd # 修改用户密码
11.查看系统用户登陆信息的命令
whoami
打印当前有效的用户ID对应的名称
whoami
who
显示当前所有登陆用户的信息
who
w
显示目前登入系统的用户信息
w
last
一般看系统的登录次数和重启时间
last
last -n IO # 看什么时候系统登录和宕机了,防黑客
12.其他命令
echo
打印
name=yuanbao # 设置变量 echo 'name:$name' # 打印单引号'',所见即所得 echo "name:$name" # 打印双引号"",自动解析值
选项
-e:启用转义字符。 -E: 不启用转义字符(默认) -n: 结尾不换行
使用-e
选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
-
\a
发出警告声; -
\b
删除前一个字符; -
\c
不产生进一步输出 (\c 后面的字符不会输出); -
\f
换行但光标仍旧停留在原来的位置; -
\n
换行且光标移至行首; -
\r
光标移至行首,但不换行; -
\t
插入tab; -
\v
与\f相同; -
\\
插入\字符; -
\nnn
插入nnn
(八进制)所代表的ASCII字符;
echo -e "123\n456" # \n 转义字符换行
rpm
选项
-a:查询所有套件; -e:删除指定的套件; -q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户; -i:显示套件的相关信息;
rpm -qa|grep vim
yum
参数
install:安装rpm软件包; update:更新rpm软件包; check-update:检查是否有可用的更新rpm软件包; remove:删除指定的rpm软件包; list:显示软件包的信息; search:检查软件包的信息; info:显示指定的rpm软件包的描述信息和概要信息; clean:清理yum过期的缓存; shell:进入yum的shell提示符; resolvedep:显示rpm软件包的依赖关系; localinstall:安装本地的rpm软件包; localupdate:显示本地rpm软件包进行更新; deplist:显示rpm软件包的所有依赖关系。
常用命令
yum install -y package yum remove package yum list yum search yum clean yum makecache
date
date -s 14:18 # 修改时间
date +%F date +%F-%T # 自动解析查看所需格式时间,可写入脚本命令
date +%s # 自动解析打印出时间戳
clear
清屏
history
查看历史命令
history -d 2243 # 删除指定行号
vim ~/.bash_history # 储存历史记录的文件
nohup
将程序以忽略挂起信号的方式运行起来
nohup sh dates.sh &
watch
watch -d uptime # 查看状态,发生变化会高亮标出
xargs
给其他命令传递参数的一个过滤器
cat /etc/passwd|awk -F: '{print $1}'|xargs -i mkdir -p {} # awk打印第一列,不加-F就默认空格
cat /etc/passwd|awk -F: '{print $1}'|xargs -n 4|column -t # xargs 排成4列,column 格式化列显示
bc
用于计算
echo "1+1"|bc
expr
表达式计算
expr 1 + 2 # 注意要加空格
time
time nslookup www.baidu.com # 打印执行 nslookup www.baidu.com 命令的时间
13.进程管理命令
kill
杀掉进程
kill 30521 # 终止进程 kill -9 30521 # 强制终止进程
killall
使用进程的名称来杀死一组进程
killall dates
ps
查看进程
ps aux|grep sshd
pstree
以树状图的方式展现进程之间的派生关系
crontab
设置定时
crontab -l # 打印自动同步的时间文件的内容 crontab -e # 编辑该文件 # * * * * * # 分 时 日 月 周 # */5 * * * * 每5分钟执行一次 # 0 0 */1 * * 每天晚上0点执行一次(/1 可以去掉) # 0 0 * * * 每天晚上0点执行一次
14.Linux剑客
sed
替换文本中的字符串
sed 's/book/books/' file # 将 file 文件中的book替换为books
直接编辑文件 选项-i ,会匹配file文件中每一行的所有book替换为books:
sed -i 's/book/books/g' file