Linux基础命令大全(持续更新)

一、Linux 命令行组成结构 

提示符: 
[root@csdn ~]#    #<==这是超级管理员 root 用户对应的命令行 
[root@csdn ~]$    #<==这是普通用户 csdn 对应的命令行 
其中    root        ==>代表当前登录的用户(可用 whoami 查询) 
        @           ==>分隔符 
        csdn        ==>代表主机名(可用好 hostname 查询) 
        ~           ==>表示当前用户所在的路径(此时是家目录) 
		#           ==>表示 root 管理员提示符 
        $           ==>表示普通用户提示符 
[root      @       csdn        ~]        #  
当前用户 分隔符    主机名     当前路径    提示符 
Linux系统用户UID最大值为2的32次方减1=4294967294

二、开关机指令

1.重启或关机命令:shutdown 
  重启---shutdown  -r   10          #10 分钟之后重启 
         shutdown  -r   0           #立刻重启  
         shutdown  -r   now         #立刻重启 
  关机---shutdown  -h   10          #10 分钟之后关机  
         shutdown  -h   0           #立刻关机 
         shutdown  -h   now         #立刻关机 
  取消---shutdown  -c               #取消正在进行的 关机或重启  (shutdown )
2.关机与重启命令:halt/poweroff/reboot 
重启---reboot/init6
关机---poweroff/halt/init0

三、系统指令

1.ping                              测试主机间网络连通性
    -t		                        持续ping,不中断,不加该选项只ping4个包。
	-c		                        ping的包数,默认是4个。
	-W		                        多长时间ping一次。
	-f		                        极速ping。
2.service                           控制系统服务
    -status-all                     显示所服务的状态
    -h                              显示帮助信息
3.ip add                            查看IP地址  
4.man                               获取内置命令帮助信息 
    man +命令                       manual (手动、手册)     如:man shutdown
5.help                              获取外置命令帮助信息 
    命令 --help                     如:shutdown --help 
6.which                             查找命令所在路径
7.date                              查看当前系统时间
    date -s '要更改的时间'          更改系统时间时间
	date +%F.%H:%M:%S            (年月日时分秒)
8.route                             查看路由信息
    -n                              查看网关
9.top                               查看系统内存 CPU负载
     htop                           高级查看动态信息
	 iotop                          显示系统中每个进程使用的磁盘
	 iftop                          显示系统网络流量
10.whoami                           查看当前登录信息
11.ps  axuf                         查看进程信息
       ef                           查看进程信息
12.exit                             退出 退出脚本
13.logout                           退出系统登录
14.ifdown                           关闭网卡
15.ifup                             开启网卡
16.lscpu                            查看cpu信息
17.uptime                           查看负载信息
18.w                                查看负载及登录信息
19.iftop                            动态显示网络流量
    -i		                        设定监测的网卡
    -B 		                        以bytes为单位显示流量(默认是bits)
    -n		                        使host信息默认直接都显示IP
    -P		                        使host信息及端口信息默认就都显示
    -m		                        设置界面最上边的刻度的最大值,刻度分五个大段显示
20.cat /etc/redhat-release          查看版本信息
21.hostnamectl                      查看系统信息(版本信息+内核信息)      
22.uname -a                         显示系统所有相关信息
23.uname -r                         显示内核发行版本号
24.clock                            调整 RTC(硬件)时间
      -adjust                       自动调整硬件时钟时间
      -set- -date                   设置硬件时间
        -w                          使系统时钟同步硬件时间
        -s                          使硬件时间同步系统时间
25.ntpdate ntp1.aliyun.com          更新同步硬件时间
26.du                               统计文件或目录大小
    -h                              人类可读
27.df -h                            显示磁盘分区情况
28.kill -9  pid                     杀死指定进程号的进程
29.hostname                         显示和设置系统的主机名
     -a                             显示主机别名
     -d                             显示DNS域名
     -f                             显示FQDN名称
     -i                             显示主机的ip地址
     -s                             显示短主机名称,在第一个点处截断
     -y                             显示NIS域名
30.type                             查看命令类型
31.tcpdump                          监听网络流量   抓包
    -i                              监听哪一个网卡 
    -n  	                        不把ip解析成主机名
    -nn 	                        不把端口解析成应用层协议
    -c  	                        指定抓包的数量
    -S  	                        不把随机序列和确认序列解析成绝对值
    -w                              将流量保存到文件中,文件中的信息是无法直接查看的
    -r                              读取文件中的内容
    -v 		                        输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。 
    -vv 	                        输出详细的报文信息。
32.alias                            设置命令别名
33.unalias                          取消命令别名
    -a                              取消所有命令别名
34.unset                            取消变量
35.source                           在当前Shell环境中从指定文件读取和执行命令
36.netstat -tnulp (和ss差不多)      查看端口号
    -l		                        只显示监听套接字。
	-n		                        不做名字解析
	-t		                        显示tcp端口
	-u		                        显示udp端口
	-p		                        显示pid和程序名字
	-r		                        显示路由表
	-a		                        显示所有的套接字
37.last                             排查系统安全问题的时候使用
		                            显示用户什么时间登陆的系统什么时间 离开的 总共连接的时间
38.lastlog                          显示所有用户最后登陆的时间
39.nc/netcat                        设置路由
	 -l		                        用于指定nc将处于侦听模式。
	 -u		                        指定nc使用UDP协议,默认为TCP
	 -v		                        输出交互或出错信息,新手调试时尤为有用
	 -w		                        超时秒数,后面跟数字 
	 -z		                        表示zero,表示扫描时不发送任何数据												   
40.nmap                             网络探测工具和安全和端口扫描器
	-O                               激活操作探测;
	-P0                             值进行扫描,不ping主机;
	-PT                             是同TCP的ping;
	-sV                             探测服务版本信息;
	-sP                             ping扫描,仅发现目标主机是否存活;
	-ps                             发送同步(SYN)报文;
	-PU                             发送udp ping;
	-PE                             强制执行直接的ICMPping;
	-PB                             默认模式,可以使用ICMPping和TCPping;
	-6                              使用IPv6地址;
	-v                              得到更多选项信息;
	-d                              增加调试信息地输出;
	-oN                             以人们可阅读的格式输出;
	-oX                             以xml格式向指定文件输出信息;
	-oM                             以机器可阅读的格式输出;
	-A                              使用所有高级扫描选项;
	--resume                        继续上次执行完的扫描;
	-P                              指定要扫描的端口,可以是一个单独的端口,用逗号隔开多个端口,使用“-”表示端口范围;
	-e                              在多网络接口Linux系统中,指定扫描使用的网络接口;
	-g                              将指定的端口作为源端口进行扫描;
	--ttl                           指定发送的扫描报文的生存期;
	--packet-trace                  显示扫描过程中收发报文统计;
	--scanflags                     设置在扫描报文中的TCP标志。
41.telnet                           一种远程登录的工具,同样可以检查某个主机是否开启某个端口
                                    #用法:[C:\~]$ telnet 10.0.0.99 22
                                    Connecting to 10.0.0.99:22...
                                    Connection established.
                                    To escape to local shell, press 'Ctrl+Alt+]'.
                                    SSH-2.0-OpenSSH_7.4
echo quit | timeout --signal=9 2 telnet [SERVER] [PORT]

for i in `seq 0 10`;do echo "======>$i" && echo "quit"|kubectl exec -it -n${ns} ${name}-$i -- timeout --signal=9 2 telnet www.baidu.com 443 2>/dev/null;done

42.glances                          glances工具可以在用户的终端上实时显示重要的系统信息,并动态地对其进行更新。
                                    这个高效的工具可以工作于任何终端屏幕。另外它并不会消耗大量的CPU资源,通常低于百分之二。
                                    glances在屏幕上对数据进行显示,并且每隔两秒钟对其进行更新。
43.tracert                          (windows) 路由跟踪(检查你与目标之间每个路口是否畅通)
    -d                              禁止把IP解析为对应的域名(主机名)
44.traceroute                       路由跟踪(检查你与目标之间每个路口是否畅通)
    -n                              禁止把IP解析为对应的域名(主机名)
45.dig + www.baidu.com(域名)+trace  查询域名DNS解析   
  和nslookup www.baidu.com类似
46.inotify
    -m                              持续监控
    -r                              递归
    -q                              静默,仅打印时间信息
    --timefmt                       指定输出时间格式
    --format                        指定事件输出格式
    %Xe                             事件
    %w                              目录
    %f                              文件
    -e                              指定监控的事件
    access                          访问
    modify                          内容修改
    attrib                          属性修改
    close_write                     修改真实文件内容
    open                            打开
    create                          创建
    delete                          删除
    umount                          卸载
47.curl                             连接网站
   -I                               显示头部消息
   -s                               不输出统计消息
   -O                               把输出写到该文件中,保留远程文件的文件名
   -u                               通过服务端配置的用户名和密码授权访问
   
48.ps axu                           查看进程
    ps a                            显示现行终端机下的所有程序,包括其他用户的程序。
    ps -A                           显示所有程序。 
    ps c                            列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 
    ps -e                           此参数的效果和指定"A"参数相同。 
    ps e                            列出程序时,显示每个程序所使用的环境变量。 
    ps f                            用ASCII字符显示树状结构,表达程序间的相互关系。 
    ps -H                           显示树状结构,表示程序间的相互关系。 
    ps -N                           显示所有的程序,除了执行ps指令终端机下的程序之外。 
    ps s                            采用程序信号的格式显示程序状况。 
    ps S                            列出程序时,包括已中断的子程序资料。 
    ps -t                          指定终端机编号,并列出属于该终端机的程序的状况。 
    ps u                           以用户为主的格式来显示程序状况。 
    ps x                           显示所有程序,不以终端机来区分。   

49.chage -l dockeruser              显示用户密码到期时间
50.lsof                             文件句柄
    (1)统计各进程打开句柄数:lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr
    (2)统计各用户打开句柄数:lsof -n|awk '{print $3}'|sort|uniq -c|sort -nr
    (3)统计各命令打开句柄数:lsof -n|awk '{print $1}'|sort|uniq -c|sort -nr	

四、搜索查看指令

1.awk                               擅长取行取列 擅长统计 计算	
      NR                            行号
	  NF                            每一行的最后一列
	  ,                            表示空格
	  $0                            输出所有
	  $n                            打印第n列
	  !~                           取反
awk 'NR==3' file                    打印文件第三行
awk 'NR==3;NR==5' file              打印文件的第3行和第5行
awk 'NR>=2&&NR<=5' file             打印文件第2行到第5行
awk '{print $1}' file               输出文件第一列
awk '{print $1,$NF}' file           输出文件的第一列和最后一列
awk '{print $1"oldboy"$3}' file     在第一列和第三列中间加入oldboy
awk -F: '{print $1}'file            以:为分隔符取出第一列
awk -F "[:/-?]+" '{print $1}'file   以多个字符为分隔符取出第一列
awk -F:'NR==2{print $6}' file      取出文件的第二行的第六列
awk '/oldboy/' file                 模糊匹配包含oldboy的行
awk '/root/,/bin/' file             区间匹配
awk '$2>100{print $1}' file         判断
awk '{print NR $0}' file            打印行号
awk 'BEGIN{print "开始了"}{print "ok"}' BEGIN在执行动作之前做什么
awk '{print 10*10}END{print "end...."}' END在执行完操作之后做什么动作
awk -F: '$7~/nologin$/{print $3}'file  匹配
-------------------------------
1、求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'

2、求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'

3、求最大值
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'

4、求最小值(min的初始值设置一个超大数即可)
awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'


2.sed                               替换 过滤查找内容	
	  -n                            默认输出
	  -r                            支持扩展正则
	  -i                            直接写入文件
sed -n 'np' file                    打印文件第n行
sed -n '/字符串/p' file             模糊匹配字符串
sed -n '//,//p' file                匹配区间
sed '3a oldboy' file                在第3行追加内容
sed '3i oldboy' file                在第3行插入内容
sed '3c oldboy' file                替换第3整行为oldboy 
sed '3d' file                       删除第3行
sed '/oldboy/d' file                删除包含oldboy的行
sed -rn 's///gp' file               替换 
sed 's/^/#/g' file                  每行行首添加注释

3.grep                              过滤文件内容												   
      -o                            显示匹配过程
	  -v                            取反
	  -n                            显示行号
	  -E                            支持扩展正则
	  -R                            递归查询
	  -i                            不区分大小写
	  -w                            匹配整词
    grep 格式
	grep '内容'  文件
	ls|grep '内容'
	  
4.find                              查找和搜索文件
     -name                          按名称查找 --find ./* -type f  -name "hehe.txt"
     -size                          按大小查找
	 find /apsara -mount -type f -size +100M 2>/dev/null |xargs -n1 -i du -sh {} |sort -rn
	 
	 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
     find / -type f -size 0 -exec ls -l {} \;
     查找当前目录大于1M的文件
	 find . -maxdepth 1 -type f -size +1M	 
	 -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
     -amin n                        在过去 n 分钟内被读取过
     -anewer file                   比文件 file 更晚被读取过的文件
     -atime n                       在过去n天内被读取过的文件
     -cmin n                        在过去 n 分钟内被修改过
     -cnewer file                   比文件 file 更新的文件
     -ctime n                       在过去n天内被修改过的文件
     -empty :                       空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
     -ipath p, -path p              路径名称符合 p 的文件,ipath 会忽略大小写
     -user                          按属性查找
     -type                          按类型查找
     -iname                         忽略大小写
	 -user USERNAME:               查找属主为指定用户的文件
     -group GRPNAME:               查找属组为指定组的文件
     -uid UserID:                  查找属主为指定的UID号的文件
     -gid GroupID:                 查找属组为指定的GID号的文件
     -nouser:                      查找没有属主的文件
     -nogroup:                     查找没有属组的文件
	 -perm 0777                     查找属主为0777的文件
	 
5.echo                              输出字符串或提取Shell变量的值 

6.head                              显示文件开头内容(默认前十行)
     -n                             显示文件的前n行
     -c                             指定显示文件的前n个字符 
     -v                             总是显示文件名的头信息 
     -q                             不显示文件名的头信息 
	 
7.tail                              查看文件尾部内容(默认后十行)
     -n                             显示文件的后n行
	 -f                             实时监控日志的输出,文件存在的时候 tail-f
	 -F                             监控文件,查看实时日志的输出,文件存在则监控,不存在等待 
	 tail -f     等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
     tail -F     等同于--follow=name--retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪
     tailf       等同于tail -f -n 10(貌似tail -f或-F默认也是打印最后10行,然后追踪文件),与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电
8.cat                               显示文件内容
     -n                             显示行数(空行也编号)
     -s                             显示行数(多个空行算一个编号) 
     -b                             显示行数(空行不编号) 
	 
9.sort                              排序文件并输出
    -n                              按照数字进行排序
	-r                              逆序排序
	-k                              选择某一列进行排序
	-nrk3                           按照第三列数字的逆序排序
	
10.uniq                             统计 去除文件中的重复行
     -c                             统计
cat 1.txt |sort |uniq -c            统计IP地址 日志
cat 1.txt |sort |uniq -c|sort -rn   先排序 再统计 再排序

11.seq                              打印数字序列
     n                              纵向打印数字	
[root@alexlnb ~]# seq -s + 100|bc   写一个脚本 算出1加到100的和 

12.less                             分页显示工具
    -N                              显示行号
	 G                              文件尾号
	 g                              文件首行
	100g                            快速到100行
     f/空格	                        往下翻页
     b                              往上翻页    	 
     q                              退出
	 /                              搜索n往下搜索内容N往上搜索内容
	 
13.more                             一页一页的查看文件内容,不支持快捷键

14.bc                               浮点运算
     -i                             强制进入交互式模式
     -l                             定义使用的标准数学库 
     -w                             定义使用的标准数学库 
     -q                             打印正常的GNU bc环境信息
	 
15.tr                               字符转换 替换文件的内容  一对一的替换  对字符操作 不是对单词
    -c                              取反
    -d                              删除
    -s                              删除所有重复出现的字符序列,只保留一个
	<                               输入重定向
	tr ":" " " < passwd
	cat passwd |tr ":" " "|tr "/" " "
	cat passwd |tr ":" " "|tr "/" " "|xargs -n1|sort |uniq -c|sort -rn|head
	
16.xargs                            过滤器
     -n                             多行输出
     -d                             自定义一个定界符
     -i                             指定一个替换字符串{}
     -t                             打印出 xargs 执行的命令
     -p                             执行每一个命令时弹出确认

17. wc-l                            统计行数
      -L                            统计长度

18.file                             查看文件类型
19.whereis                          查看命令的全路径和命令帮助文件的位置
20.cut                              显示行中的指定部分,删除文件中指定字段
    -c                              以字符为单位进行分割 , 仅显示行中指定范围的字符 
    -b                              仅显示行中指定直接范围的内容
    -d                              指定字段的分隔符,默认的字段分隔符为“TAB”	
	-f                              显示指定字段的内容
格式:cut -f2 -d";" test2.txt
30.tac                              反向列示文件内容
31.column -t                        对齐终端
32.统计文件行的命令
   1.wc -l /etc/passwd
   2.cat -n /etc/passwd
   3.grep -n ./etc/passwd
   4.less -N /etc/passwd
   5.awk '{print NR,$0}' /etc/passwd
   6.sed -n '$=' /etc/passwd
   7.grep -c '' /etc/passwd

33.mkpasswd -d 2 -s 0|sed 's#[a-Z]##g' 获取两位的随机数字
    -c	                               定义在密码中小写字母字符的最小数目,默认值是2
    -C	                               定义在密码中大写字母字符的最小数目,默认值是2
    -s	                               定义在密码中特殊字符的最小数目,默认值是1
    -p	                               指定程序来设置密码。默认情况下,如果存在使用/etc/yppasswd,否则使用/bin/passwd
    -d	                               定义密码的最小数目,默认值是2
    -l	                               定义口令的长度,默认值为9
    -v	                               导致密码设置互动可见

五、目录文件指令

1.mkdir                             创建目录
     -p                             递归创建多级目录 
2.touch                             创建文件													   
3.cp                                复制文件或目录
     -r                             递归复制文件和目录
     -f                             若目标文件已存在,则会直接覆盖原文件
     -i                             若目标文件已存在,则会询问是否覆盖													   
4.mv                                移动或改名文件
    -i                              若存在同名文件,则向用户询问是否覆盖
    -f                              覆盖已有文件时,不进行任何提示
5.rm                                移除文件或目录
    -f                              忽略不存在的文件,不会出现警告信息
    -i                              删除前会询问用户是否操作
    -r/R                            递归删除
    -v                              显示指令的详细执行过程													   
6.ls(list)                        显示指定工作目录下的内容及属性信息
     -a                             显示所有隐藏文件(以.开头)
     -l                             使用长格式列出文件及目录信息
     -r                             将文件以相反次序显示(默认依英文字母次序) 
     -t                             根据最后的修改时间排序 
     -A                             同 -a ,但不列出 “.” (当前目录) 及 “..” (父目录) 
     -S                             根据文件大小排序
     -R                             递归列出所有子目录
	 -d                             查看文件本身详细信息													   
7.tree                              以树状图列出目录内容
     -a                             显示所有文件和目录
     -D                             列出文件或目录的更改时间
     -f                             在每个文件或目录之前,显示完整的相对路径名称
     -N                             直接列出文件和目录名称,包括控制字符 
     -p                             列出权限标示 
     -s                             列出文件或目录大小 
     -L                             层级显示													   
8.ln                                为文件创建链接
    -d                              此选项允许“root”用户建立目录的硬链接
    -f                              强制创建链接,即使目标文件已经存在
	-s                              创建软连接													   
9.chmod                             改变文件或目录权限
    +x   file.txt                   默认给所有的加执行权限
    a+r  file.txt                   设为所有人皆可读取
	u+x  file.txt                   给属主加执行权限
	u-x  file.txt                   给属主取消执行权限
	u=x  file.txt                   把原权限清空,重新赋值新的权限
	ug+w file.txt                   给属主属组可读权限
    a+x  file.txt                   a=u+g+o
      
10.lsattr                           查看文件的隐藏属性
11.chattr                           设置隐藏权限
      +a 1.txt                      设置隐藏权限(只能追加,不能编辑,不能删除)
      +I 1.txt                      Invincible无敌,什么都不能做,只能看	  

六、用户相关指令

1.useradd                           创建用户
    -u                              指定UID
	-s                              指定登陆的解释器  
	-M                              不创建家目录  如果不加-M 默认就会创建家目录
	-g                              指定属组												   
2.su -                              切换用户
3.passwd                            设置密码
4.id+用户名                         查看用户名是否存在
5.usermod                           修改用户
     -g                             组编号  
	 -u                             用户编号  
	 -d                             家目录  
	 -l                             新名字  username
6.userdel  username                 删除用户
     -r  username                   删除用户同时删除其家目录
7.group add                         创建组
8.groupmodify                       修改组
9.groupdelete		                删除组 					

七、快捷键指令

1.命令行常用快捷键 
ctrl + c                           强制结束当前操作  
ctrl + l                           清屏
ctrl + d                           退出当前xshell连接  
ctrl + r                           查找(历史命令)。 history|grep 
ctrl + a                           把光标移动到行首→Home  
ctrl + e                           把光标移动到行尾→End 
ctrl + u                           把光标到行首的内容删除/剪切  
ctrl + y                           粘贴ctrl+u的内容   
ctrl + k                           把光标到行尾的内容删除/剪切  
ctrl + →                           向右移动一个单词  
ctrl + ←                           向左移动一个单词
ctrl + p                           显示上一条命令
ctrl + s                           锁屏  
ctrl + q                           解锁 
ctrl + w                           剪切内容到单词的行首
esc  + .                           把最后的字符串快速复制下来												   
delete                             光标所在处从前往后删除内容													   
2.cd ~ 或 cd                       进入到用户根目录
3.pwd                              查看当前所在目录
4.cd ~cl:                         进入到cl用户根目录
5.cd -                             返回上一次所在的目录
6.cd ..                            返回到上一级目录
7.ls –la                           查看la用户根目录下的所有文件
8.

													   
*******************************************************七、编辑指令***************************************************************
1.vi                               文本编辑器
    -s                             静默模式
	-cmd                           加载任何vimrc文件之前执行指定命令
	-R                             只读模式
    -Z                             受限模式
	-m                             不允许修改(写入)
    -b                             二进制模式													   
2.vim                              进阶编辑模式
编辑模式:
    a:         光标向后移动一位
    i:         光标和 所在字符 不发生任何变化
    o:         给新起一行
    s:         删除光标所在字符
底行模式:
    :q          //quit 退出编辑器
    :w          //write 对修改后的内容进行保存
    :wq         //write quit 保存修改并退出编辑器
    :q!         //(不保存)强制退出编辑器
    :w!         //强制保存
    :wq!        //强制保存并退出编辑
    :set number  或 nu          //设置行号
    :set nonumber  或 nonu      //设置行号
    :/内容/  或 /内容           //查找指定内容
                                小写n(next)下一个
                                大写N(next)上一个
命令行模式:
u  光标移动
       字符级
           上(k)  下(j)  左(h)  右(l) 键
       单词级
           w:  word移动到下个单词的首字母
           e:  end移动到下个(本)单词的尾字母
           b:  before移动到上个(本)单词的首字母
       行级
           $:  行尾
           0:  行首
       段落级(翻屏)
           {:  上个(本)段落首部
           }:  下个(本)段落尾部
       屏幕级(不翻屏)
           H:  屏幕首部
           L:  屏幕尾部
       文档级
           G:  文档尾部
           1G: 文档第1行
           nG: 文档第n行
u  内容删除
       dd:     删除光标当前行
       2dd:    包括当前行在内,向后删除2行内容
       ndd:    包括当前行在内,删除后边n行内容
       x:      删除光标所在字符
       c+w:    从光标所在位置删除至单词结尾,并进入编辑模式
       
u  内容复制
       yy:     复制光标当前行
       2yy:    包括当前行在内,向后复制2行内容
       nyy:    包括当前行在内,复制后边n行内容
       p:      对(删除)复制好的内容进行粘贴操作
 
u  相关快捷操作
       u:      undo撤销
       J:      合并上下两行
       r:      单个字符替换

53,167 mv 172  代表的意思是将53~167行的内容移动到172行。
53,167 co 172  代表的意思是将53~167行的内容复制到172行。

八、解压命令

1.tar                              打包和备份的归档工具
tar -cvf bak.tar .                 将当前目录的文件打包
tar -rvf bak.tar /etc/password     将/etc/password追加文件到bak.tar中(r)
tar -xvf bak.tar                   解压
tar -zcvf a.tar.gz                 打包并压缩gzip
tar -zxvf a.tar.gz                 解压缩
tar -zxvf a.tar.gz -C /usr         解压到/usr/下
tar -ztvf a.tar.gz或zip/unzip      查看压缩包内容
tar -jcvf a.tar.bz2                打包并压缩成bz2
tar -jxvf a.tar.bz2                解压bz2	
tar -cvzf  a.tar.gz a --remove-files   压缩并移除源文件

2.gzip a.txt                       gzip压缩
gzip -d a.txt.gz或gunzip a.txt.gz  解压
bzip2 a                            bzip2压缩
bunzip2 a.bz2 或bzip2 -d a.bz2     解压

3.zip                              zip压缩
zip -q -r 1.zip 1.txt              压缩1.txt
unzip                              解压
zipinfo                            查看压缩包的信息


******分卷压缩******
#将大压缩包分卷成100m的小压缩包
zip -s 100m -r file.zip foo/
-s: 创建分卷的大小
-r: 循环压缩文件夹下面的内容
切分已有的文件:
zip -s (1G|500m) old.zip --out new.zip 
-----------------
#将文件或者文件夹打包为zip压缩包,book.zip大小为38.8M
zip -r book.zip ./input.pdf
#将book.zip分割,每个压缩包不超过20M,生成两个压缩包subbook.zip(17.8M)和subbook.z0

******合并解压******
#将多个压缩包合并成一个压缩文件
cat centos_ios_a.* >centos_ios_a.zip

#将多个压缩包合并为一个压缩文件single.zip
zip subbook.z01 subbook.z02 subbook.z03 -s=0 --out single.zip

#解压single.zip
unzip -d ./ single.zip

九、磁盘指令

1.df                               查看磁盘的详细信息,挂载信息
        -h                         人类可读												   
2.mount                            挂载设备
    mkdir /data
	mount /dev/cdrom /data
3.umount                           卸载设备
    -f                             强制卸载
	-l                             卸载时跳出挂载点目录

十、服务指令

1.systemctl restart network                    重启网卡配置(centos7)
2.service network restart                     (centos6)			 
  ifdown eth0 && ifup eth0                     指定网卡重启
3.hostnamectl set-hostname+主机名              临时及永久修改主机名
4.nslookup+域名                                查看当前使用哪个DNS服务器解析的(需安装:yum -y install bind-utils)
5.chmod +x                                     给文件增加执行权限
6.runlevel                                     查看系统的运行级别
7.init+运行级别                                临时修改运行级别
8.source+文件                                  立即加载配置文件(不是所有文件都可以)
9.systemctl restart sshd                       重启远程服务													   
10.getenforce                                  查看SELinux的状态
11.setenforce	 
[ Enforcing | Permissive | 1 | 0 ]			   临时开启/关闭selinux								   
12.systemctl status firewalld                  查看防火墙的状态
   systemctl stop/start/disable firewalld      关闭防火墙,开启防火墙,开机禁止防火墙启动
13.iptables-save                               查看centos6和centos7的防火墙状态
14.journalctl -xe 查看全部日志
   journalctl -f                               # 以flow形式查看日志
   journalctl -k                               # 查看内核日志
   journalctl -u docker.serivce                # 查看指定服务日志
   # 查看指定日期日志
     journalctl --since="2018-09-21 10:21:00" -u docker
     journalctl --since="2018-09-21 10:21:00" --until="2018-09-21 10:22:00" -u docker
   # 查看指定级别日志
     journalctl -p 3 -u docker.service
   操作系统提供了从0 (emerg) 到 7 (debug) 一共7个级别的日志,7个级别的含义为:
     0: emerg
     1: alert
     2: crit
     3: err
     4: warning
     5: notice
     6: info
     7: debug
   # 查看日志占用的磁盘空间
     journalctl --disk-usage
   # 设置日志占用的空间
     journalctl --vacuum-size=500M
   # 设置日志保存的时间
     journalctl --vacuum-time=1month
   # 检查日志文件一致性
     journalctl –-verify

十一、权限指令

1.Linux中定义了3种访问权限,分别是r、w、x。
        r:表示对象是可读的,八进制表示为4
        w:表示对象是可写的,八进制表示为2
        x:表示对象是可执行的,八进制表示为1
-rwx           rwx       rwx    
文件所属者权限   用户组权限	 其他用户权限
功能:修改目录或文件的权限
        u:user(所有者)  g:group(所属组)  
        o:other(其他人)  a:all(所有人)  
        r:read(读)  w:write(写)  x:execute(执行)
chmod 460 test.txt                 test文件所有者:r,所属组:rw,其他用户无权限
chmod u+w dest_file                给目标文件的所属者增加w权限。
chmod u+wx,g+x,o+w dest_file       给目标文件的所属者增加w权限,所属组增加x权限,系统其他用户增加w权限。
chmod o-w dest_file                给目标文件的其他用户移除w权限。
chmod u=rwx dest_file              给所属者赋予rwx权限。
chmod -R 777 /tmp/a                目录a包括目录下的所有文件或目录的所有用户权限都变为rwx。

2.chown    指定文件的拥有者改为指定的用户或组
    user : 新的文件拥有者的使用者 ID
    group : 新的文件拥有者的使用者组(group)
    -c : 显示更改的部分的信息
    -f : 忽略错误信息
    -h :修复符号链接
    -v : 显示详细的处理信息
    -R : 处理指定目录以及其子目录下的所有文件
    --help : 显示辅助说明
    --version : 显示版本
    示例:
	    把 /var/run/httpd.pid 的所有者设置 root:
        chown root /var/run/httpd.pid
		
        将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :
        chown runoob:runoobgroup file1.txt
		
        将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:       
        chown -R runoob:runoobgroup *
		
        把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:       
        chown :512 /home/runoob

十二、安装指令

1.yum                         
格式:yum -y install package-name
查找包名:yum provides wget
卸载软件:yum remove package-name
重新下载软件:yum reinstall package-name
清理仓库:yum clean all
2.rpm
格式:rpm -ivh package-name
参数:
    -p	 查询指定的rpm软件包
	-i	 显示软件包的相关信息
	-R	 显示软件包的依赖关系
	-U或--upgrade	升级软件包
	-v	 显示命令执行过程
	-f	 查询文件或命令属于哪个软件包
    -a   查看所有的安装过的软件
	-l	 显示软件包的文件列表
	-q	 查询软件包
    -ql  显示软件所有的安装文件
卸载软件:rpm -e package-name
3.编译安装
第一步:下载源码包
第二步:Cd 进入源码包
第三步:./configure  # 自己选择我想使用什么功能 
			make
			make install

十三、时间戳转换

dmesg时间戳转换
dmesg -T
date -d "1970-01-01 UTC `echo "$(date +%s)-$(cat /proc/uptime|cut -f 1 -d' ')+42.803157"|bc ` seconds"

十四、JVM相关指令

1.jps命令:打开命令端口,进入(cd)jdk的bin目录下
    jps -l:输出主类的全名,如果进程执行的是Jar包,输出Jar路径
    jps -q:只输出本地虚拟机唯一线程id(LVMID),省略主类的名称
    jps -m:输出虚拟机进程启东市传递给主类main()函数的参数
    jps -v:输出虚拟机进程启动时JVM参数
	
2.jstat命令:用于见识虚拟机各种运行状态信息的命令行工具,它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了存文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具;
    jstat -class pid:输出加载类的数量及所占空间信息。
    jstat -gc pid:输出gc信息,包括gc次数和时间,内存使用状况(可带时间和显示条目参数)

3.jinfo命令:查看指定pid的所有JVM信息
  jinfo -flags pid 查询虚拟机运行参数信息。
  jinfo -flag name pid,查询具体参数信息,

4.jmap命令:
    jmap -heap pid:输出堆内存设置和使用情况(JDK11使用jhsdb jmap --heap --pid pid)
    jmap -histo pid:输出heap的直方图,包括类名,对象数量,对象占用大小
    jmap -histo:live pid:同上,只输出存活对象信息
    jmap -clstats pid:输出加载类信息
    jmap -help:jmap命令帮助信息

5.jhat:虚拟机堆转储快照分析工具
    执行命令:jhat eclipse1.bin(jmap -dump生成的dump文件),完成后在浏览器中访问 http://localhost:7000 查看分析结果

十五、swap空间排查指令

Linux如何查看哪个进程占用的SWAP分区比较多?

在日常管理中,我们经常会遇到swap分区使用比较多,那么导致是那些进程使用的呢,其实我们可以通过/proc/pid/下的smaps来获得。使用下面的命令可以列出所有进程占用的swap分区的大小,分别我们分析问题。

for i in $(cd /proc;ls | grep "^[0-9]" | awk '$0>100'); do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps;done| sort -k2nr | head

获取到占用swap分区比较多的PID,然后就可以通过PID获取到进程的相关信息了。

ps aux | grep ${pid}

十六、通过pid分析异常pod

1. 找到异常 Pod 所在节点;
2. docker ps |grep POD |grep xxx,获得 容器 ID
3. nsenter -n -t $(docker inspect -f {
   
   {.State.Pid}} pod容器id)
------------------------------------------------------------------------------------------------------------------------------
1.通过Pid查询哪个容器
pwdx 28117
输出如下:28117: /

2.通过docker ps -q命令,获取所有的容器id,再通过xargs管道,将这些容器id转交给docker inspect命令进行处理,通过-f '{
   
   {.State.Pid}} {
   
   {.Config.Hostname}}'参数,只打印出来容器当前的pid和容器id

docker ps -q | xargs docker inspect -f '{
   
   {.State.Pid}} {
   
   {.Config.Hostname}}' | grep 28117

docker ps | grep 0bbeabfd3815
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如果我们结合这两个命令以及 ssh 甚至 pv 的话,利用 Linux 强大的管道,我们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功能:
docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'

十七、查出进程运行时间

查询某个进程运行时间(精确到年月日分时秒)
for pid in $(pgrep httpd); do echo -n ${pid} ; ps -p ${pid} -o lstart | grep -v START ; done

十八、ctr常用命令

查看镜像
ctr -n k8s.io images ls
查看运行的容器
ctr -n k8s.io tasks ls
删除容器
ctr -n k8s.io tasks rm xxx
强制删除容器
ctr -n k8s.io tasks rm xxx -f
pull镜像
ctr -n k8s.io pull image xxx
push镜像
ctr -n k8s.io push image xxx
查看容器
ctr containers ls 
创建容器
ctr containers create 
删除容器
ctr containers rm 
在后台运行容器
ctr tasks start -d 
附加容器
ctr tasks attach 
(随机字符串) 执行容器进程
ctr tasks exec --exec-id 12312312 
发送终止信号给task
ctr tasks kill -s SIGKILL 

ctr -n k8s.io i import containerd-build-aarch64-1.1.0.tar
ctr -n k8s.io i ls |grep build-aarch64
ctr -n k8s.io i tag docker.io/containerd/build-aarch64:1.1.0 harbor.xxx.com/
ctr -n k8s.io i push --tlscacert /etc/containerd/certs.dxxxx/tls.crt harbor.xxx.com/ -u admin:Harbor12345
 
ctr -n k8s.io i push --tlscacert /etc/....../tls.crt  #上传镜像,基于tls验证
ctr -n k8s.io i push -k  #上传镜像,忽略认证
 
ctr -n k8s.io c ls     #查看容器对象元数据,不包含状态
ctr -n k8s.io task ls  #查看容器,包含容器状态
ctr -n k8s.io task kill -a -s 9  {id}     #根据容器id停止容器,停止时会杀死容器中的所有服务
ctr -n k8s.io c rm  {id}    #删除容器对象元数据,注意:如果容器状态为Running,则无法进行删除

十九、xshell终端快捷指令

1. 光标移动
-----------------------------------
* ctrl + <      移动到前一个单词开头
* ctrl + >      移动到后一个单词结尾
* ctrl + A      移动到开头
* ctrl + E      移动到结尾
* alt  + B      向左移动一个单词
* alt  + F      向右移动一个单词
  ctrl + B      向左移动一个字符
  ctrl + F      向右移动一个字符
  esc  + B      向左移动一个单词
  esc  + F      向右移动一个单词
  ctrl + XX     在上次光和当前光标所在字符间跳转
  esc  + T      交换光标位置前的两个单词
-----------------------------------
2. 删除
-----------------------------------
* ctrl + K      删除光标后所有字符(剪切)
* ctrl + U      删除光标前所有字符(剪切)
* ctrl + W      删除光标前一个单词
  ctrl + D      删除光标所在字符(光标右侧)
  ctrl + H      删除光标前字符(光标左侧)
-----------------------------------
3. 撤销
-----------------------------------
* ctrl + _      撤销操作
* ctrl + Y      粘贴ctrl+U/K剪切的内容
  ctrl + ?      撤消前一次输入
  alt  + R      撤消前一次动作
-----------------------------------
4. 替换
-----------------------------------
* ctrl + T      将光标当前字符与前面一个字符替换
-----------------------------------
5. 历史命令编辑
-----------------------------------
* ctrl + P      上条输入的命令(相当于上键)
* ctrl + N      上条历史命(相当于下键)
* alt  + >      上一次执行命令
* ctrl + R      输入单词搜索历史命令
-----------------------------------
6. 控制命令
-----------------------------------
* ctrl + L      清除屏幕
  ctrl + S      锁住终端,阻止屏幕输出
  ctrl + Q      解锁终端,允许屏幕输出
  ctrl + C      终止命令&另起一行
  ctrl + I      补全功能(类似TAB)
  ctrl + O      重复执行命令
  alt  + <数字>  操作的次数
  ctrl + Z      挂起
-----------------------------------
7. !命令
-----------------------------------
* !!            执行上条命令
* !-n           执行前n条命令
-----------------------------------

二十、并发查询日志

使用 xargs 命令:
xargs 命令可以从标准输入中读取数据,并将其作为参数传递给其他命令。您可以使用 -P 参数来指定并发执行的进程数。例如:
seq 1 10 | xargs -I{} -P4 some_long_running_command {}
#k8s中批处理:
seq 0 100|xargs -I{} -P4 kubectl exec -it -n${ns} ${pod-name}-{} -- grep 'xxx' /home/admin/logs/*.log

#这会从1到10生成数字序列,并使用 xargs 命令将每个数字作为参数传递给 some_long_running_command,并最多同时执行4个进程。

使用 parallel 命令:
如果系统上安装了 parallel 命令,它可以更方便地实现并发执行。例如:
seq 1 10 | parallel -j4 some_long_running_command {}

二十一、查询硬盘是SSD还是HHD

方法1:
如果是直通盘,即JBOD模式,方法则正确
如果返回1则表示磁盘可旋转,那么就是HDD了;
反之,如果返回0,则表示磁盘不可以旋转,那么就有可能是SSD了
[cheshi@cheshi-laptop2 ~]$ cat /sys/block/nvme0n1/queue/rotational
0

方法2:lsblk命令进行判断,参数-d表示显示设备名称,参数-o表示仅显示特定的列,前提也是直通盘则没问题
[cheshi@cheshi-laptop2 ~]$ lsblk -d -o name,rota
NAME    ROTA
nvme0n1    0

方法3:smartctl,万能方法,但是smartctl若没有则GG
smartctl -a /dev/sda | grep 'Rotation Rate'
If the disk is HDD, the output will be as:
Rotation Rate: 5400 rpmIf the disk is SSD, output will look like:
Rotation Rate:        Solid State Device

二十二、批量查询多个pod日志大小

for p in `seq 0 23`;do echo "======>$p" && kubectl exec -n axbank-mpaas-mas-mdap-$p -- find /home/admin/logs/mdap -name "*.7dt.log.2021-08-17*" -exec ls -l {} \; |awk '{sum+=$5}END{ print sum/1024/1024/1024}';done

二十三、k8s中检查网络是否通

命令行:

for i in `seq 0 100`;do echo $i && echo "quit"|kubectl exec -it -n ${ns} ${pod-name}-$i -- timeout --signal=9 2 telnet 192.168.1.1 8080 2>/dev/null;done

 脚本:

#!/bin/bash

# 请将要检查的IP地址和端口添加到数组中
# 格式: IP地址:端口
targets=(
    "192.168.1.1:80"
    "8.8.8.8:53"
    "example.com:443"
)

# 循环遍历所有目标
for target in "${targets[@]}"; do
    # 使用 ':' 分割IP地址和端口
    IFS=':' read -ra parts <<< "$target"

    # 提取IP地址和端口
    ip="${parts[0]}"
    port="${parts[1]}"

    # 使用nc命令检查连接
    nc -zv -w 3 "$ip" "$port"

    # 检查命令的退出状态码
    if [ $? -eq 0 ]; then
        echo "连接成功: $ip:$port"
    else
        echo "连接失败: $ip:$port"
    fi
done

多个ip+port到多个ip+port之间网络是否通:

#!/bin/bash

# 源IP和端口数组
source_targets=(
    "192.168.1.10:5000"
    "192.168.1.11:6000"
)

# 目标IP和端口数组
destination_targets=(
    "8.8.8.8:80"
    "example.com:443"
)

# 循环遍历所有源和目标
for source_target in "${source_targets[@]}"; do
    for destination_target in "${destination_targets[@]}"; do
        # 使用 ':' 分割源IP和端口
        IFS=':' read -ra source_parts <<< "$source_target"
        source_ip="${source_parts[0]}"
        source_port="${source_parts[1]}"

        # 使用 ':' 分割目标IP和端口
        IFS=':' read -ra dest_parts <<< "$destination_target"
        dest_ip="${dest_parts[0]}"
        dest_port="${dest_parts[1]}"

        # 使用nc命令测试连接
        nc -zv -w 3 -s "$source_ip" -p "$source_port" "$dest_ip" "$dest_port"

        # 检查命令的退出状态码
        if [ $? -eq 0 ]; then
            echo "连接成功: $source_ip:$source_port -> $dest_ip:$dest_port"
        else
            echo "连接失败: $source_ip:$source_port -> $dest_ip:$dest_port"
        fi
    done
done

猜你喜欢

转载自blog.csdn.net/zfw_666666/article/details/134964841