常见 linux 命令集合

本文全面介绍了Linux系统中的常用命令,包括用户权限管理、文件操作、进程管理、网络信息查询、资源监控等,是Linux系统管理员和开发人员的必备指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通用户切到root
  • 不需要知道root密码 sudo su root 输入自己的密码即可
  • 或者 sudo -i
touch
  • 创建多个touch a_{1..9}.txt
vim
  • 插入操作 aio AIO

    • i 当前字符之前插入 (光标前)
    • I 行首插入 (行首)
    • a 当前字符之后插入 (光标后)
    • A 行尾插入(行尾)
    • o下一行插入 (另起一行)
    • O上一行插入(上一行插入)
    • x 向后删除一个字符 等同于delete
    • X 向前删除一个字符
    • u 撤销一步 每按一次就撤销一次
    • r 替换
  • 光标定位

    • 0 和 home键表示切换到行首, $和end键表示切换到行尾
    • gg 快速定位到文档的首行 , G定位到未行
    • 3gg 或者 3G 快速定位到第3行
  • 查找

    • /string 回车之后 N向上查找 n向下查找
    • /^d ----^查找以字母d开头的内容
    • /t$ 查找以字母t结尾的内容
    • vim + a.txt 光标会自动位于文件的最后一行
  • ctrl + v 进入列模式

    • ctrl + v 进入列模式
    • 向下或向上移动光标,把需要注释、编辑的行的开头选中起来
    • 然后按大写的I ,输入需要插入的字符 例如 #
    • 按esc 完成插入 #
    • 取消多行注释 选中后 按 d 即删除
  • 文本替换

    • 格式 : 范围(其中%所有内容) s分隔符 旧的内容 分隔符 新的内容 (分隔符可以自定义)
      默认是每一行的第一个符合要求的词 (/g全部)
    • :1,3 s/bin/xuegod 替换第1到3行中出现的第一个bin进行替换为xuegod
    • :1,3 s/bin/xuegod/g 替换第1到3行中查找到所有的bin进行替换为xuegod
    • :3 s/xue/aaaaa #只把第3行中内容替换了
    • :% s/do/xuegod/g 将文本中所有的do替换成xuegod
    • :% s/do/xuegod/gi 将文本中所有的do替换成xuegod, 并且忽略do的大小写
    • :% s@a@b@g 将文本中所有的a替换成b
  • 自定义vim使用环境

    • 临时设置
      • :set nu 设置行号
      • :set nonu 取消设置行号
      • :noh 取消高亮显示
    • 永久设置环境 写入 set nu
      • vim /etc/vimrc 设置后会影响到系统所有的用户
      • ~/.vimrc 当前用户有效
文件的attr扩展属性
查看
  • lsattr hack.sh
参数
  • +a: 只能追加内容 如: echo aaa >> hack.sh
  • +i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
  • chattr +i hack.sh
移除
  • -i :移除i参数。 -a :移除a参数
tar
解压和压缩tar包
  • 压缩 tar -cvf aaa.tar ./aaa
  • 解压 tar -xvf aaa.tar
  • 指定解压位置 -C tar -xvf aaa.tar -C /opt
tar 归档+压缩
  • -z .tar.gz
  • -j tar.bz2
  • -J tar.xz
zip管理压缩文件
  • 压缩 zip a.zip /etc/passwd
  • 解压 unzip a.zip
  • 解压指定目录 unzip a.zip -d /opt/
查看整个目录的大小
  • du -sh /opt
  • du -h --max-depth=1 // 深度为1
sort 排序
  • sort -t “:” -k3 -r /etc/passwd | more #按: 做分隔符,以第3列,也就是用户UID,来从大到小排序
  • du -h /etc | sort -r | more #把etc目录下所有文件,按从大到小排序
ps 进程状态
ps -aux
  • USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • 最后一列[xxxx] 使用方括号括起来的进程是内核态的进程,没有括起来的是用户态进程
  • 参数解释
    • USER: 启动这些进程的用户
    • PID: 进程的ID
    • %CPU 进程占用的CPU百分比;
    • %MEM 占用内存的百分比;
    • VSZ:进程占用的虚拟内存大小(单位:KB)
    • RSS:进程占用的物理内存大小(单位:KB)
    • STAT:该程序目前的状态,Linux进程有5种基本状态:
      • R :该程序目前正在运作,或者是可被运作;
      • S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
      • T :该程序目前正在侦测或者是停止了;
      • Z :父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
      • D 不可中断状态.
      • ps: 5个基本状态后,还可以加一些字母
        • <: 表示进程运行在高优先级上
        • N: 表示进程运行在低优先级上
        • L: 表示进程有页面锁定在内存中
        • s: 表示进程是控制进程
        • l: 表示进程是多线程的
        • +: 表示当前进程运行在前台
    • START:该 process 被触发启动的时间;
    • TIME :该 process 实际使用 CPU 运作的时间。
    • COMMAND:该程序的实际指令
查看进程状态
  • 例如
终端一: vim a.txt
终端二: ps -aux | grep a.txt   #查看状态 S表示睡眠状态, + 表示前台
终端一: 在vim a.txt 这个终端上  按下: ctrl+z  
终端二: ps -aux | grep a.txt    #查看状态 T表示停止状态
  • ctrl-c 是发送 SIGINT 信号,终止一个进程
  • ctrl-z 是发送 SIGSTOP信号,挂起一个进程。将作业放置到后台(暂停)
  • ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销
D 不可中断状态
  • 示例
终端一: tar -zcvf usr-tar.gz /usr/ 
终端二:不断查看状态,由S+,R+变为D+
uptime
  • 查看 查看系统负载
top
  • 快捷键
    • 默认3s刷新一次,按s修改刷新时间
    • 按空格 :立即刷新。
    • q退出
    • P:按CPU排序
    • M:按内存排序
    • T按时间排序
    • p: 进程IP,查看某个进程状态
    • 数字键1:显示每个内核的CPU使用率
    • u/U:指定显示的用户
  • top -p 9667
lsof
  • 用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)
  • 参数
    • -i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
    • -p<进程号>:列出指定进程号所打开的文件;
    • lsof -p pid #一般用于查看木马进程,在读哪些文件
    • lsof -i :22 #用于查看端口,或查看黑客开启的后门端口是哪个进程在使用
fg jobs 前后台进程切换
  • 示例
vim a.txt   按下: ctrl+z  
ps -axu | grep vim  存在后台
jobs      #查看当前有多少在后台运行的进程
fg 1   #将后台挂起的进程恢复到前台运行
文件描述符 0、1、2
输入输出标准说明
  • STDIN 标准输入 默认的设备是键盘 文件编号为:0
  • STDOUT 标准输出 默认的设备是显示器 文件编号为:1 ,也可以重定向到文件
  • STDERR 标准错误 默认的设备是显示器 文件编号为:2 ,也可以重定向到文件
查看一个进程打开了哪些文件
  • ll /proc/进程ID/fd
  • ulimit -n #查看一个进程最多可以同时打开的文件数
  • ulimit -n 2048 #修改一个进程最多可以同时打开的文件数为2048
输入输出重定向
  • 正确的内容写入一个文件,错误的写入一个文件
    • ls /tmp xxxx >ok.txt 2> err.txt
  • &>和>&符号
    • 把正确和错误的消息输入到相同的位置
    • ls /tmp xxxx >1.txt 2>&1
/dev/null
  • 生成一个50m的空文件
    • dd if=/dev/zero of=b.txt bs=1M count=50
文件查找
  • 查找文件一般有以下几个命令
which    查看可执行文件的位置
whereis  查看可执行文件的位置及相关文件
locate    配合数据库缓存,快速查看文件位置
grep     过滤匹配,它是一个文件搜索工具
find      查找相关文件
locate
  • locate它搜索的是一个数据库/var/lib/mlocate/mlocate.db,这个数据库中存有本地所有的文件信息;这个数据库是Linux自动创建并每天自动更新维护。相关的配置信息在/etc/updatedb.conf,查看定时任务信息在/etc/cron.daily/mlocate
  • 示例
touch /opt/aaa.txt
locate aaa.txt // 发现找不到
updatedb    #如果对当天文件查找,需要手动更新数据库updatedb
find 命令
  • 格式
格式:find    pathname    -options    [-print]
    命令字   路径名称        选项        输出
参数
-name 	按照文件名查找文件。  “名称”
-perm 	按照文件权限来查找文件。666 777 等
-user 	按照文件属主来查找文件
-group 	按照文件所属的组来查找文件
-mtime  -n  / +n 	按照文件的更改时间来查找文件,
			 - n	表示文件更改时间距现在n天以内
			 + n	表示文件更改时间距现在n天以前
-type 	查找某一类型的文件
			b - 块设备文件
			d - 目录
			c - 字符设备文件
			p - 管道文件
			l- 符号链接文件
			f - 普通文件
-size n  查找符合指定的文件大小的文件
-exec	   对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为' 命令 {} \;,注意{ }和 \;之间的空格,{}代表查到的内容
  • 示例
    • 查看当前目录下所有的TXT格式的文件 find . -name "*.txt"
    • 按照更改时间或访问时间等查找文件
      • mtime: 文件最后一次修改的时间
      • atime: 最后一次访问时间
      • ctime: 文件的最后一次变化时间,也就是修改时间
      • root目录下查找更改时间在1天以内,被黑客修改的文件
        • find /root/ -mtime -1
-exec
  • 这个选项参数后面可以跟自定义的SHELL命令
    • find . -name "*.back" -exec ls -l {} \;
    • find . -name "*.back" -exec mv {} /opt \;
查找多个类型文件
  • 加上比较运算符
-a  and 并且
-o  or  或者
+  超过
-   低于
// 示例
touch a.pdf back.sh
find . -name "*.sh" -o -name "*.pdf"
find /etc -size +20k -a -size -50k | wc -l
find /etc -size +20k  | wc -l
按权限查找:-perm
查看系统中权限至少为777的文件或目录 find /root/ -perm 777
系统中权限不低于777的危险文件查找出来 find / -type f -perm  -777
查找的目录深度 -maxdepth
查找/bin目录下权限等于755的可执行的文件
 find /bin/ -maxdepth 1 -perm 755  #/bin后面要有/
查找系统中所有属于用户mk的文件,并把这个文件,放到/root/res 目录下
  • find / -user mk -exec cp -a {} /root/res/ \; 有问题会有重名的
命令判断
  • ;不考虑指令的相关性,连续执行
  • && 只有在前面的命令执行成功后,后面的命令才会去执行
  • || 如果前面的命令执行成功,后面的命令就不去执行了‘
文件系统结构
  • Linux文件系统由三部分组成 : 文件名,inode,block
  • Linux文件系统: ext3,ext4,xfs
inode包含文件的元信息
ctime指inode上一次文件属性变动的时间,change time 。 比如: chmod +x  a.sh 
mtime指文件内容上一次变动的时间,modify time  。如:echo aa >> a.sh 或vim  a.sh 修改内容
atime指文件上一次查看文件的时间,access time 。 如:  cat  a.sh
创建软连接 windows的快捷方式
  • 语法 ln -s 源文件 软链接的名字 源文件被删除,链接文件失效
awk 使用
语法结构
  • awk [options] 'BEGIN{ print "start" } ‘pattern{ commands }’ END{ print "end" }' file
  • 特殊模块:
    • BEGIN语句设置计数和打印头部信息,在任何动作之前进行
    • END语句输出统计结果,在完成动作之后执行
  • awk内置变量(预定义变量)
    $n 当前记录的第n个字段,比如: $1表示第一个字段,$2表示第二个字段 
    $0 这个变量包含执行过程中当前行的文本内容
    FILENAME 当前输入文件的名
    FS 字段分隔符(默认是空格) 
    NF 表示字段数,在执行过程中对应于当前的字段数, $NF最后一列
    FNR  各文件分别计数的行号
    NR 表示记录数,在执行过程中对应于当前的行号
    OFS 输出字段分隔符(默认值是一个空格)
    ORS 输出记录分隔符(默认值是一个换行符)
    RS 记录分隔符(默认是一个换行符)
    
  • 常用的命令选项:
    • -F fs指定分隔符
    • -v 赋值一个用户自定义变量
    • -f 指定脚本文件,从脚本中读取awk命令
分隔符的使用
  • 用法:-F[fs]其中fs是指定输入分隔符,fs可以是字符串或正则表达式;分隔符默认是空格
  • 常见写法:-F: -F, -F[Aa]
  • 示例
echo "AA BB CC DD"|awk '{print $2}'   // BB
echo "AA|BB|CC|DD"|awk -F"|" '{print $2}' // BB
echo "AA,BB,CC,DD"|awk -F"," '{print $2}'
echo "AA,BB,CC,DD"|awk -F, '{print $2}'
awk -F: '{print $1}' /etc/passwd  #以:分隔,打印第1列用户名

## 指定多个分隔符
echo "12AxAbADXaAD52" | awk -F"[aA]" '{print $6}' 

使用FS指定分隔符
echo "12AxAbADXaAD52" | awk 'BEGIN {FS="aA"} {print $2}'

过滤出本系统的IP地址
ifconfig  | grep netmask | awk '{print $2}'

关系运算符的使用 (条件查询) || $NF 最后一行
  • 示例
##  或与非
awk'$3>$4{print $1}'
awk'$1~/^....user/ && $3==985'
awk '{if($1~/^....user/ || $3 == 1001)print}'
awk'!($1~/^....user/)'

## 运算符
echo "3 2 3 4 5" > a.txt
awk '{print $1+10}'  a.txt  // 13

## $NF 最后一行
echo "one two three four" | awk '{print $NF}'
echo "one two three four" | awk '{print $(NF-2)}'  #打印倒数第3列
echo "one two three four" | awk '{print $(NF/2-1)}'

打印出passwd文件中用户UID小于10的用户名和它登录使用的shell
awk -F: '$3<10{print $1 $NF}' /etc/passwd  #直接输出格式太乱
awk -F: '$3<10{print $1 "<======>" $NF}' /etc/passwd #awk格式化输出
awk -F: '$3<10{print $1 "\t" $NF}' /etc/passwd 

打印出系统中UID大于1000且登录shell是/bin/bash的用户
awk -F: '$3>=1000 && $NF=="/bin/bash"{print $1 "\t" $NF}' /etc/passwd

当前系统内存使用百分比为:  grep -i 忽略大小写
free -m | grep -i mem | awk '{print $3/$2*100 "%"}'


打印 从某一列开始 一直到最后一列
top -b -n 1 | awk  'NR==1 {for (i=12;i<=NF;i++)printf("%s ", $i);print ""}'
awk高级应用
  • 命令格式:
awk  [-F | -f | -v ] ‘BEGIN {} / / {command1;command2} END {}’file

	-F		指定分隔符
	-f		调用脚本
	-v		定义变量
	‘{}’	引用代码块
     {…}		命令代码块,包含一条或多条命令
	BEGIN	初始化代码块
	/ str /		匹配代码块,可以是字符串或正则表达式
	{print A;print B}		多条命令使用分号分隔
	END		结尾代码块
  • 在awk中,pattern有以下几种:
1. empty空模式,这个也是我们常用的
2. /regular expression/  仅处理能够被这个模式匹配到的行

打印出 root开头的行
awk -F: '/^root/{print $0}' /etc/passwd

行范围匹配 startline,endline
	输出行号大于等于3且行号小于等于6的行
	awk -F: '(NR>=3&&NR<=6){print NR,$0}' /etc/passwd
  • NR 和 FNR 的区别 (显示行号)
NR 在读取另一个文件时候 行号不会重新从1开始,NR是一直加的
awk '{print NR"---" $0}' /etc/hosts /etc/hosts.bak

FNR 在读取另一个文件时候 行号会重新从1开始
awk '{print FNR"---" $0}' /etc/hosts /etc/hosts.bak

  • 去除首行的结果
ls -lah | awk 'NR!=1 {print $0}'
  • 匹配
使用awk查出以包括root字符的行
awk -F: "/root/{print}" /etc/passwd
awk -F: "/root/" /etc/passwd
awk -F: '/root/{print $0}' /etc/passwd

做一个不匹配root行:
awk -F: '!/root/{print $0}' /etc/passwd

以root开头的行:
awk -F: '/^root/{print $0}' /etc/passwd

以bash结尾的行:
awk -F: '/bash$/{print $0}' /etc/passwd


lsof 列出打开文件(lists openfiles)
获取网络信息
  • lsof -i 显示所有连接,类似netstat
  • lsof -i 6 仅获取IPv6流量
  • lsof -iTCP 仅显示TCP连接(同理可获得UDP连接)
  • lsof -i :22 显示与指定端口相关的网络信息
  • lsof -i@192.168.1.1 @host来显示指定到指定主机的连接
  • lsof -i@192.168.1.1:22 显示基于主机与端口的连接
  • lsof -i -sTCP:LISTEN 找出监听端口
    • lsof -i | grep -i LISTEN
  • lsof -i -sTCP:ESTABLISHED 找出已建立的连接
获取用户信息
  • lsof -u deploy 显示指定用户打开了什么
  • lsof -u ^deploy 显示除指定用户以外的其它所有用户所做的事情
  • kill -9 `lsof -t -u daniel`干掉指定用户所做的一切事情
命令和进程
  • lsof -c nmap 查看指定的命令正在使用的文件和网络连接
  • lsof -p 10075 查看指定进程ID已打开的内容
文件和目录
  • lsof /home/deploy 显示与指定目录交互的所有一切
  • lsof /home/deploy/a.txt 显示与指定文件交互的所有一切
查看cpu核数
1.lscpu
2. cat /proc/cpuinfo  | grep  name
sed strem editor 流编辑器
执行过程
sed的执行过程:
	1. 一次读取一行数据
	2. 根据我们提供的规则来匹配相关的数据,比如查找root。
	3. 按照命令修改数据流中的数据,比如替换
	4. 将结果进行输出
	5. 重复上面四步

使用
语法格式:sed  [options][commands]’ filename
示例:
	echo "this is aplle" | sed 's/aplle/dog/'   -- // this is dog

sed选项|参数
options:
	-a	在当前行下面插入文件
	-n	读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
	-i	编辑文件内容 ***
	
	-e	执行多个sed指令
	-f	运行脚本
	-i.bak	编辑的同时创造.bak的备份
	-r	使用扩展的正则表达式 

命令:
	i	在当前行上面插入文件
	c	把选定的行改为新的指定的文本
	p	打印 ***
	d	删除 ***
	w	另存
	s	查找

	r/R	读取文件/一行
	y	替换
	h 拷贝模板块的内容到内存中的缓冲区。
	H 追加模板块的内容到内存中的缓冲区。
	g 获得内存缓冲区的内容,并替代当前模板块中的文本。
	G 获得内存缓冲区的内容,并追加到当前模板块文本的后面	
	D	删除\n之前的内容
	P	打印\n之前的内容

替换标记:
数字:表明新文本将替换第几处模式匹配的地方
g:表示新文本将会替换所有匹配的文本
\1:子串匹配标记,前面搜索可以用元字符集\(..\),
&:保留搜索到的字符用来替换其它字符

sed匹配字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
参考使用示例
1. s 只替换第一个匹配到的字符,
	echo "this is cat1 cat2 cat3" | sed 's/cat/dog/'
2. g 全局替换
 	echo "this is cat1 cat2 cat3" | sed 's/cat/dog/g'
3. 将sed中默认的/ 定界符改成#号

4. 换默认分隔符
	echo "this is cat1 cat2 cat3" | sed 's#cat#dog#g'  

5. 按行查找替换   用数字表示行范围;$表示行尾
	5.1  单行替换,将第2行中bin替换成xuegod
		cat /etc/passwd | sed '2s/bin/xuegod/' 
	5.2 多行替换,如果涉及到多行处理,用逗号表示行间隔。 将第3行到最行尾中bin替换成xuegod
		cat /etc/passwd | sed '2,$s/bin/xuegod/' 

6. 删除
	6.1   d  删除第3行到最后一行的内容
		cat /etc/hosts|sed '3,$d'
	6.2   将包括 127.0.0 的行删除
		cat /etc/hosts|sed '/127.0.0/d'

7. 添加行   i\ 当前行前插入   a\ 当前行后面追加
	cat /etc/hosts |sed  'a\append'  // 在每一行后面都追加
	cat /etc/hosts |sed  'i\insert'  // 在每一行前面都插入
	
	cat /etc/hosts |sed  '$a\append'  // 在每一行后面都追加
	cat /etc/hosts |sed  '$i\insert' // 在每一行前面都插入

	在某一行之前或者之后,只操作一次
	cat /etc/hosts |sed  '2a\append'  // 只会在第二行后面追加append

	在 n - m 行 追加或者插入
	cat /etc/hosts |sed  '2,4a\ append'

8. 修改行命令c (change) c\
	8.1 将第4行内容改成 hello world
		cat /etc/hosts |sed '4c\hello world'
	8.2 将第4行 - 最后一行 内容改成 hello world
		cat /etc/hosts |sed '4,$c\hello world'
	8.3  将包括127.0.0.1 行的内容修改成192.168.1.1
		cat /etc/hosts | sed '/127.0.0.1/c\192.168.1.1'

9. 打印,直接输入文件中的内容
	cat /etc/hosts |  sed -n '2,4p'


10 . -i 对原文件修改,保存   使用场景: 替换或修改服务器配置文件
	sed -i 's/IPADDR=192.168.1.63/IPADDR=192.168.1.65/'




网卡相关配置
  • centos
vi /etc/sysconfig/network-scripts/ifcfg-xxx 
systemctl restart network
  • ubuntu
网卡配置放在 /etc/network/xxx
我配置的版本是 /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eno1 up # line maintained by pppoeconf
provider dsl-provider

# ps eno1插了网线 设置静态ip
auto eno1
iface eno1 inet static
address 192.168.1.104
netmask 255.255.255.0
gateway 192.168.1.1

auto eno2  # 没有插网线 不管了
# iface eno1 inet manual
iface eno2 inet dhcp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值