Linux指令(基础)
虚拟机关机
shutdown now //立即关机
poweroff //关机断电源
init //断开进程
目录管理命令
ls //列出目录内容
-l //长格式,详细信息
--rw----- - 普通文件
b 块设备文件
d 目录文件
c 字符设备文件
l 软连接文件
pwd //查看当前所在目录路径
bin:存放二进制文件,一些常用的命令符
dev:设备文件
home:家目录
lib:库文件
etc:存放主配置文件
boot:存放系统启动时的引导文件
media:媒体设备文件
mnt:临时的挂载目录
cd //返回当前用户家目录
cd ~ //返回当前用户家目录
cd - //返回上一次所在目录
cd .. //返回当前目录的上一级
文件管理命令
mkdir //创建目录
-p //创建目录时若父目录不存在则自动创建
-v //显示目录创建过程
rmdir //删除目录,只能删除空目录
touch //创建一个空文件,touch还有一个作用是修改文件的时间戮
stat //显示文件或文件系统的状态
rm //删除文件,删除命令默认会提示是否需要删除
//如果要使用命令本身可以在命令前加一个\
//例如:\rm,这样删除就不会有提示了
-r //递归删除,删除目录时必须使用此选项
-f //强制删除,不询问
cp //复制文件,一个文件到一个文件,多个文件到一个目录
-r //递归拷贝,拷贝目录时必须使用此选项
-p //拷贝时保留原权限
-a //相当于-rp
mv //移动文件 //修改名字
install //复制文件并且设置属性
-m MODE //复制时修改权限
-o OWNER //复制时修改文件属主
-g GROUP //复制时修改属组
ln //生成链接文件,源文件和链接文件的内容是一致的
//硬链接格式:硬链接 ln 源文件名 链接文件名
//软链接格式:软链接 ln -s 源文件名 链接文件名
//区别:当硬链接源文件被删除时,可以继续操作链接文件;当软链接源文件被删除时,不能继续操作链接文件
文本内容查看命令
cat //将文件内容输出至标准输出(小文件使用)
--n --number //显示行号
//注意:使用cat查看文件内容时会将文件的所有内容加载至内存,所以应避免使用cat打开巨大文件
tac //倒序打印文件内容至标准输出
more //全屏查看文本文件内容,只能从前往后,不能从后往前
//文件内容显示完后自动退出
less //全屏查看文本文件内容,可从前往后亦可从后往前。推荐使用
head //从头部开始打印文件内容,默认打印10行
-n //指定要打印的行数,-n 可以是15也可以是-15
tail //查看文本文件尾部内容
-n //指定要打印的行数,可以是-n 15也可以是-15
-f //实时监测文件末尾内容
主机管理命令
hostname //查看或临时修改主机名,重开终端有效,重启失效
hostnamectl set-hostname //查看或永久修改主机名,重开终端生效,重启依然有效
bash //立即生效
time //显示命令的执行时间,例如time ls /etc
clear //清屏
whoami //显示当前登录用户
who //查看当前在线用户
w //显示当前在线用户并显示其在运行的命令
which //显示指定命令的绝对路径
date //显示或设置日期与时间
//不带参数的date用于显示当前系统日期与时间
//格式化输出时间:+
%Y //年
%m //月
%d //日
%F //年-月-日
%H //时
%M //分
%S //秒
-s //以字符串方式设置时间"20250414 10:00:00"
cal //打印日历
ldd //查看指定程序有哪些依赖库文件
//程序组成:二进制程序,库文件,配置文件,帮助文件
bash特性
bash支持以下特性:
- 支持命令历史、命令补全
- 支持管道、重定向
- 支持命令别名
- 支持命令行编辑
- 支持命令行展开
- 支持文件名通配
- 支持变量
- 支持编程
bash常用操作
//光标跳转
Ctrl+a //跳到命令行首
Ctrl+e //跳到命令行尾
Ctrl+u //剪切光标至命令行首的内容
Ctrl+k //剪切光标至命令行尾的内容
Ctrl+<- //光标定位到离自己最近的一个单词前面
Ctrl+p //重复上一次命令
Ctrl+w //剪切前面的字符至上一个空格处
Ctrl+y //粘贴或者恢复上次的删除。
Ctrl+l //清屏
Ctrl+s //暂时冻结当前shell的输入
Ctrl+q //解冻
//tab键命令和路径补全
//在命令行输入命令时,如果只记得命令的开头几个字母,可使用tab键补全命令;如果有多个命令都是以某字母开头,按两次tab,可以列出所有以该字母开头的命令,供用户选择。
//在命令行输入文件路径时,如果忘记文件路径全称,则只需要输入文件路径开头几个字母,也可以使用tab键进行补全。
//命令行常见特殊符号
~ //展开为用户的家目录
~USERNAME //展开为指定用户的家目录
{} //列表,可用于存放数据
\ //转义,使得后面一个特殊字符没有任何特殊含义
&& //前面的命令执行成功后才执行后面的命令
|| //前面的命令执行失败后才执行后面的命令
; //不管前面的命令执行成功还是失败都执行后面的命令
//文件名通配符
* //匹配任意长度的任意字符
? //匹配任意单个字符
[] //匹配指定范围内的任意单个字符
例如:[abc],[a-m],[0-9]
[[:space:]] //表示空白字符
[[:punct:]] //表示标点符号
[[:lower:]] //表示小写字母
[[:upper:]] //表示大写字母
[[:alpha:]] //表示大小写字母
[[:digit:]] //表示数字
[[:alnum:]] //表示数字和大小写字母
[^] //匹配指定范围之外的任意单个字符
//环境变量
PATH //命令搜索路径
HISTSIZE //命令历史缓冲区大小
SHELL //当前shell
//bash内置变量
RANDOM //保存着0-32768之间的随机数
//命令历史
history //查看命令历史
-c //清空命令历史
-d OFFSET [n] //删除指定位置的命令历史
-w //保存命令历史至历史文件~/.bash_history中
//命令历史的使用技巧
!n //执行命令历史中的第n条命令
!-n //执行命令历史中倒数第n条命令
!! //执行上一条命令
!string //执行命令历史中最近一个以指定字符串开头的命令
!$ //引用前一个命令的最后一个参数
!cat //执行上一次cat开头的命令
esc . //按下esc松开后按 ”.“ ,引用前一个命令的最后一个参数
重定向和管道符
重定向 //将输出的内容重定向到某个文件
//I/O重定向:
> //覆盖输出重定向 //默认1>
>> //追加输出重定向 //默认1>>
2> //重定向错误输出
2>> //追加重定向错误输出
&> //覆盖重定向标准输出或错误输出至同一个文件
&>> //追加重定向标准输出或错误输出至同一个文件
< //输入重定向
<< //Here Document,退出条件;退出条件加单引号使输入的特殊字符没有特殊含义
tee //从标准输入读取数据,输出一份到屏幕上,一份保存到文件
示例:
[root@localhost ~]// tee /tmp/hello.out
hello world
hello world
[root@localhost ~]// cat /tmp/hello.out
hello world
| 管道符 //前一个命令的输出,作为后一个命令的输入。最后一个命令会在当前shell进程的子shell进程中执行
使用格式: 命令1 | 命令2 | 命令3 | ...
示例:
[root@hzz ~]// echo "hello hzz" | cut ‐d ' ' ‐f 2
hzz
xargs //和管道符连用,将前面的命令执行的结果作为参数交给后面的命令执行
使用格式: 命令1 | xargs 命令2
选项:
-n //设置一次性传递的参数的数量,默认是所有
-i //将数据拆分为一个一个的存储在{}中
-d //自定义分隔符
示例:
[root@hzz ~]// find / -name "ifcfg-ens33" | xargs -i cp {} /root/
[root@hzz ~]// ls
ifcfg-ens33
压缩、解压缩命令
//压缩格式: gz,bz2,xz,zip,z
//压缩能力:gzip<bzip2<xz<zip
//所有压缩命令中只有zip能够压缩目录
compress //用此命令压缩的文件其文件名为FILENAME.Z,解压用uncompress
gzip //压缩后的文件以.gz结尾;只能压缩文件不能压缩目录
gzip /path/to/somefile //压缩完成后会不保留原文件
-d //解压缩,解压完成后不保留原文件
-c //将结果输出至标准输出,保留原文件
-// //-后面加数字1-9,-1压缩等级最低;-9 压缩比最高。默认压缩比是-6
-l //查看压缩文件内的内容;从左至右依次显示为:
//压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名称
gunzip //解压
gunzip /path/to/some_compress_file.gz //解压完成后不保留原文件
zcat /path/to/somefile.gz //不解压的情况下查看文本文件的内容
bzip2 //压缩后的文件以.bz2结尾
bzip2 /path/to/somefile //压缩完成后不保留原文件
-d //解压缩,解压完成后不保留原文件
-6 //-后面加数字1-9,指定压缩比,默认为6
-k //keep,压缩时保留原文件
bunzip2 //解压
bunzip2 /path/to/some_compress_file.bz2 //解压完成后不保留原文件
bzcat /path/to/somefile.bz2 //不解压的情况下查看文本文件的内容
xz //压缩后的文件以.xz结尾;
xz /path/to/somefile //压缩完成后不保留原文件
-d //解压缩,解压完成后不保留原文件
-// //-后面加数字1-9,指定压缩比,默认为6
-k //keep,压缩时保留原文件
unxz //解压
unxz /path/to/some_compress_file.xz //解压完成后不保留原文件
xzcat /path/to/somefile.xz //不解压的情况下查看文本文件的内容
zip //既归档又压缩的工具,zip压缩后保留原文件,zip可以压缩目录
//gz、bz2、xz都只能压缩文件。
-r //递归压缩目录 格式(zip -r 压缩后的名字.zip 压缩前的名字)操作后会保留原文件
-d //删除压缩包里面的指定文件
zip filename.zip file1 file2 ...
zip filename.zip DIR/*
unzip //解压
unzip filename.zip
-d //指定解压路径
tar //归档工具,只归档不压缩
-c //创建归档文件(创建tar包文件)
-f file.tar //操作的归档文件
-x //还原归档
-v //显示归档过程
-C //将展开的归档文件保存至指定目录下
-tf /path/to/file.tar //不展开归档,直接查看归档了哪些文件
--delete //从归档文件中删除文件
-p //归档时保留权限信息。只有管理员才有权限用此选项
--xattrs //在归档时保留文件的扩展属性信息
-zcf //归档并调用gzip压缩
-zxf //调用gzip解压缩并展开归档
-jcf //归档并调用bzip2压缩
-jxf //调用bzip2解压缩并展开归档
-Jcf //归档并调用xz压缩
-Jxf //调用xz解压缩并展开归档
文本内容排序
sort #默认升序排序,不是按数值大小排序的
-n #根据数值大小进行排序
-r #逆序排序
-t #字段分隔符
-k #以哪个字段为关键字进行排序
-u #去重,排序后相同的行只显示一次
-f #排序时忽略字符大小写
uniq #将重复的行只显示一遍(连续且完全相同方为重复)
-c #显示文件中行重复的次数
-d #只显示重复的行
-u #只显示未重复的行
文本内容统计
#文本内容统计
wc #文本内容统计
-l #显示行数
-w #显示单词数
-c #显示字节数
#文件大小统计
du #查看文件或目录占用的磁盘空间大小
-h #以人类友好的方式显示大小
-s #显示总的占用空间大小
#磁盘空间统计
df #报告文件系统磁盘空间使用情况
-h #以人类友好的方式显示大小
-i #显示inode信息
-T #查看文件系统类型
文本内容过滤
cut截取文本内容
cut #截取文本内容
-d '' #指定字段分隔符,默认是空格
-f #指定要显示的字段
-f 1,3 #显示第1个字段和第3个字段
-f 1-3 #显示第1个字段到第3个字段
-c #指定要显示的字段
awk基于列的文本报告工具
awk #基于列的文本报告工具
语法:awk [选项] '匹配模式 {执行动作}'
-F '' #指定分隔符,可以使用正则表达式[]指定多个分隔符
-v OFS='' #指定打印时的分隔符
执行动作:
'{print $#}' #选择打印第#列,$0代表所有列,$NF代表最后1列
匹配模式:
'/关键字/' #匹配关键字的行,支持正则表达式
'/关键字1/,/关键字2/' #匹配从关键字1到关键字2中间所有的行
'/关键字1/;/关键字2/' #匹配从关键字1和关键字2的行
'NR==1' #匹配第1行
'NR>=10' #匹配行数大于10的所有行并显示行号
'$1==1' #匹配第1列的值等于1的行
'$1>=10 && $1<=20' #匹配第1列的值大于等于10并小于等于20的行
'$1>=10 || $3!=20' #匹配第1列的值大于等于10或者第3列的值不等于20的行
'$NF~"/sbin/nologin"' #匹配最后1列字符为/sbin/nologin的行
'$NF!~"/sbin/nologin"' #匹配最后1列字符不为/sbin/nologin的行
语法示例:
#使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
awk -F ':' '{print "第一列:"$1,"第二列:"$2,"第三列:"$3}' /etc/passwd
#使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
awk -F ':' -v OFS='-' '{print $1,$2,$3}' /etc/passwd
#使用:或/或:/或多个:或多个/或多个:/为分隔符分割/etc/passwd文件中的内容,打印出第1列和第6列
awk -F '[:/]+' '{print $1,$6}' /etc/passwd
grep文本过滤
grep #搜索文本内容,并将匹配的内容所在一整行都显示出来
#支持使用正则表达式来过滤文本
--color #匹配到的内容高亮显示
^ //以某开头 格式:^afds
¥ //以某结尾 格式:fasdf¥
^$ //空行
-i #忽略大小写
-w #强制模式,完全匹配字词
-n #显示匹配到的内容的行号
-c #显示匹配到的内容一共有多少行
-v #显示没有被模式匹配到的行
-o #只显示被模式匹配到的字符串
-E #使用扩展正则表达式。grep -E相当于使用egrep
-q #静默模式,不向屏幕输出任何信息
-A 1 #被模式匹配到的内容以及其后面1行的内容都显示出来
-B 1 #被模式匹配到的内容以及其前面1行的内容都显示出来
-C 1 #被模式匹配到的内容以及其前后的行各显示1行
-r #递归搜索每个目录下的所有文件的文本内容,忽略链接文件
-R #递归搜索每个目录下的所有文件的文本内容,不忽略链接文件
egrep #基于正则表达式查找文件内容
fgrep #不支持正则表达式,执行速度快
-v //筛选除...以外的
sed文本过滤和流编辑器
sed #基于行的过滤和转换文本的流编辑器
语法:sed [选项] '[过滤条件和sed指令]' [输入文件]
-n #取消默认sed输出,用于过滤文本内容
-r #使用扩展正则表达式
-e #一条语句执行多条sed指令
-i #修改文件内容
-nu //显示每一行行数
过滤条件:
# # '#' 实际为数字,表示第几行
$ #最后一行
/regexp/ #按照匹配规则匹配指定内容,regexp表示正则匹配
, #间隔符号,表示从条件一到条件二
! #取反,在指令的前面使用表示条件取反
| #或,注意使用时需要转义
& #引用匹配到的整个字符串
\# # '#' 实际为数字,表示引用前面()中正则匹配的字符串,第几个()就是数字几
sed指令:
a #追加,向匹配行后面插入内容
i #插入,向匹配行前插入内容
c #更改,更改匹配行的内容
d #删除,删除匹配行的内容
s #替换,替换掉匹配的内容
g #全局替换,一般和s一起使用
p #打印,打印出匹配的内容,通常与-n选项一起使用
= #用来打印被匹配的行的行号
n #读取下一行,遇到n时会自动跳入下一行
r\w #读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
{} #{}中可以存放指令,基于前面过滤结果再次做处理,用于条件过滤后
; #分割多个指令,基于前面指令再次做处理,用于指令操作后
语法示例:
#在第3行下一行添加hello字符串,3表示行号
sed '3a hello' file
#在匹配到关键字所在行的下一行添加hello字符串,如果匹配到多个test123则都会添加
sed '/关键字/a hello' file
#在最后一行后新增一行添加hello字符串
sed '$a hello' file
#在第3行前一行添加hello字符串
sed '3i hello' file
#在匹配到关键字所在行的前一行添加hello字符串,如果匹配到多个关键字则都会添加
sed '/关键字/i hello' file
#在最后一行的前一行插入hello字符串
sed '$i hello' file
#将文件的第一行内容替换为hello字符串
sed '1c hello' file
#将匹配到关键字的整行替换为hello字符串
sed '/关键字/c hello' file
#将最后一行内容替换为hello字符串
sed '$c hello' file
#删除第四行
sed '4d' file
#从第一行开始删除,每隔2行就删掉一行
sed '1~2d' file
#删除1到2行
sed '1,2d' file
#删除1到2之外的所有行
sed '1,2!d' file
#删除从匹配关键字的行到最后一行
sed '/关键字/,$d' file
#删除匹配到关键字的行及其后面一行
sed '/关键字/,+1d' file
#删除空行,注意//中使用的是正则表达式
sed '/^$/d' file
#删除不匹配关键字1或关键字2的行,/test|abc/表示匹配test或abc,!表示取反
sed '/关键字1\|关键字2/!d' file
#删除1到3行中,匹配关键字的行
sed '1,3{/关键字/d}' file
#将原字符串替换为新字符串,默认只替换每行匹配到的第一个
sed 's/原字符串/新字符串/' file
#将原字符串替换为新字符串,替换每行匹配到的所有
sed 's/原字符串/新字符串/g' file
#将原字符串替换为新字符串,替换每行匹配到的第二个
sed 's/原字符串/新字符串/2' file
#匹配有#号的行,替换匹配的行中逗号后的所有内容为空
sed '/#/ s/,.*//g' file
#替换所有注释的行为空行,然后删除空行,替换和删除操作中间用分号隔开
sed 's/^#.*//;/^$/d' file
#将以数字开头的行的数字用括号括起来,&符号代表匹配到的内容
sed -r 's/^[0-9]+/(&)/' file
#匹配每行逗号分割的字符串重新将字符串进行排序,原本的第三列变成第一列
sed -r 's#(.*),(.*),(.*)#\3,\2,\1#g' file
#匹配第1行和第3行逗号分割的字符串重新将字符串进行排序
sed -r '1s#(.*),(.*),(.*)#\3,\2,\1#g;3s#(.*),(.*),(.*)#\3,\2,\1#g' file
#打印第2行
sed -n '2p' file
#打印第2行到第4行
sed -n '2,4p' file
#搜索包含关键字的行
sed -n '/关键字/p' file
#打印从第一个关键字到第二个关键字中间所有的行
sed -n '/第一个关键字/,/第二个关键字/p' file
#打印从匹配关键字的行到最后一行的内容
sed -n '/关键字/,$p' file
#打印最后一行的行号(即文件有多少行,和wc -l功能类似)
sed -n "$=" file
#打印匹配关键字的行的行号
sed -n '/关键字/=' file
#将file2的内容,追加在文件file中每个匹配关键字的行下面
sed '/关键字/r file2' file
#将file中每个匹配到关键字的行,写入到新文件newfile中
sed '/关键字/w newfile' file
文件查找命令
find #实时查找,精确性强,遍历指定目录中所有文件完成查找,
#查找速度慢,支持众多查找标准。
语法:
find 查找路径 [OPTION...] [查找标准] [查找到以后的处理动作]
查找路径,默认为当前目录
查找标准,默认为指定路径下的所有文件
-name 'filename' #对文件名作精确匹配.支持glob通配符机制
-iname 'filename' #文件名匹配时不区分大小写
-regex pattern #基于正则表达式进行文件名匹配,以pattern匹配整个文件路径字符串,而不仅仅是文件名称
-user username #根据属主来查找
-group groupname #根据属组来查找
-uid #根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
-gid #根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
-nouser #查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
-nogroup #查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
-type #根据文件类型来查找(f,d,c,b,l,p,s)
-size #根据文件大小进行查找。如1k、1M,+10k、+10M,-1k、-1M,+表示大于,-表示小于
-mtime #修改时间
-ctime #改变时间
-atime #访问时间
+5 #5天前
-5 #5天以内
-mmin #多少分钟修改过
-cmin #多少分钟改变过
-amin #多少分钟访问过
+5 #5分钟前
-5 #5分钟以内
-perm mode #根据权限精确查找
-perm -mode #查找至少包含指定权限的文件
#组合条件:
-a #和
-o #或
-not #否
! # ! 和-not含义一样
#处理动作:默认为显示到屏幕上
-print #显示
-ls #类似ls -l的形式显示每一个文件的详细信息
-fls /path/to/somefile #查找到的所有文件的长格式信息保存至指定文件中
-delete #删除查找到的文件
-ok COMMAND {} \; #对查找到的每个文件执行COMMAND,每次操作都需要用户确认
-exec COMMAND {} \; #对查找到的每个文件执行COMMAND,操作不需要确认
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多参数,此时命令执行可能会失败。而xargs可规避此问题。
| xargs #通过管道将查找到的内容给xargs处理,xargs会把内容进行拆分,拆分完毕后将内容作为参数交给后面的命令执行。