大家好,又见面了,我是你们的朋友全栈君。
文章目录
- linux 系统命令总结大全
-
- 关于作者
- 作者介绍
- 0.IP 地址相关命令
- 1.文件目录命令
- 2.文本编辑命令
-
- 2.1 cat 命令 —显示文件内容
- 2.2 vi/vim 命令 —修改配置文件
- 2.3 touch 命令 –创建文件、修改访问时间
- 2.4 echo 命令 —输出命令
- 2.5 rm 命令 —删除命令
- 2.6 tail 命令 —查看文件尾部内容
- 2.7 head命令 —显示文件开头内容
- 2.8 sort 命令 –排序命令
- 2.9 uniq 命名 —去重
- 2.10 wc 命令 —用于统计文本、字符(数字、符号、空格、行)
- 2.11 more 显示文本文件内容
- 2.12 less命令 — 分页显示内容
- 2.13 stat 命令 — 查看数据详细属性信息
- 2.14 ln 命令 —创建连接文件
- 2.15 dd 命令 — 模拟创建出指定大小的文件
- 2.16 chattr 命令 — 改变文件属性
- 3 .修改主机名
- 4.linux 用户及权限管理
- 5.软件包管理
- 6.磁盘管理
- 7.设备管理
- 8. 网路通讯
- 9.tar、zip命令 —压缩/解压缩
- 10. 文件传输
- 11 关机/重启相关命令
- 12 操作系统正则符号
- 13 shell 常用命令
- 14 系统资源/进程先关命令
- 15.其它命令
- 常用快捷方式
- 总结
linux 系统命令总结大全
关于作者
-
作者介绍
? 博客主页:作者主页
? 简介:云计算领域优质创作者?、学长的it故事 公众号创作者?、在校期间参与众多计算机先关的校赛、省赛、国赛,斩获系列奖项。2019年考取华为资深工程师、红帽工程师等系列认证。 ? 关注我:简历模板、学习资料、文档下载、技术支持
前言
今天呢,下了很大的决心,准备将linux命令做一个真正的总结、因为之前看了很多linux 命令先关的文章,都不全,所以,博主将这两年沉淀下来的技术,通过自己的理解,将基础命令、常用的都整理出来,对初学者或者linux 爱好者都有一定的作用,偶尔可以翻翻,查下基础命令。
后续呢,博主将分享
docker
、k8s
、kvm
、负载均衡
、高可用
等高级技术。
0.IP 地址相关命令
0.1 ifconfig 命令 —显示网络设备信息
-
案例演示
# 启动/关闭指定网卡 [root@web_server01~]# ifconfig eth1 down [root@web_server01~]# ifconfig eth1 up # 临时设置ip 地址 [root@web_server01~]# ifconfig eth0 192.168.1.100 [root@web_server01~]# ifconfig eth0 192.168.1.100 netmask 255.255.255.0 [root@web_server01~]# ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.254 # 删除临时IP 地址 [root@web_server01~]# ifconfig eth0 del 192.168.1.100 netmask 255.255.255.0
02.ip 命令 —显示与操作路由
-
案例演示
# 用ip命令显示网络设备的运行状态: [root@web_server01~]# ip link list #显示核心路由 [root@web_server01~]# ip route list [root@web_server01~]# ip route show # 查看eht0 网卡信息(--> ip a) [root@web_server01~]# ip address show eth0
03.dhclient 命令 — 动态获取或释放IP地址
-
案例演示
# 在指定网络接口上发出DHCP请求: [root@web_server01~]# dhclient eth0 # 从指定的服务器获取ip地址 [root@web_server01~]# dhclient -s 10.0.0.7 # 释放IP地址: [root@web_server01~]# dhclient -r # 停止运行dhclient: [root@web_server01~]# dhclient -x
04.nmtui —界面修改网卡地址信息
-
案例演示
[root@web_server01~]# nmtui
05.nmcli 命令 — 设置ip地址
-
案例演示
#显示所有连接的列表: [root@web_server01~]# nmcli con show # 查看接口信息: [root@web_server01~]#nmcli device show # 定义一个名字为default的新连接,它将使用DHCP通过eth0设备的以太网自动连接 : [root@web_server01~]# nmcli con add con-name "default" type ethernet ifname eth0 #关闭自动连接: [root@web_server01~]# nmcli connection modify "static" connection.autoconnect no # 添加DNS: [root@web_server01~]# nmcli connection modify team0 ipv4.dns 8.8.8.8
1.文件目录命令
1.1 ls 命令 –显示目录下的内容
-
案例演示
list=ls 查看文件或目录是否存在 #文件或目录路径信息 [root@web_server01~]# ls # 显示目录信息 [root@web_server01~]# ll -d rivers/ drwxr-xr-x 2 root root 6 Sep 11 22:59 rivers/ #查看数据的属性信息(-->ll 命令) [root@web_server01~]# ls -l apache-tomcat-9.0.52.tar.gz -rw-r--r-- 1 root root 11524133 Jul 31 12:22 apache-tomcat-9.0.52.tar.gz # 查看目录中隐藏文件 [root@web_server01~]# ls -a #将目录中的信息按照时间进行排序显示 [root@web_server01~]# ls -lt #按照时间信息,进行反向排序 [root@web_server01~]# ls -ltr #显示的数据信息大小,以人类可读方式显示 [root@web_server01~]# ls -lh total 11M -rw-------. 1 root root 1.7K Aug 23 15:38 anaconda-ks.cfg -rw-r--r-- 1 root root 11M Jul 31 12:22 apache-tomcat-9.0.52.tar.gz drwxr-xr-x 2 root root 6 Sep 11 22:59 rivers
1.2 cd 命令 —切换目录命令
-
案例演示
# change directory==cd 切换目录命令 cd /xxx 绝对 cd xxx 相对 cd .. 上一级 cd ../../ 上多级 cd - 返回上一次所在路径 cd/cd ~ 返回到用户家目录 [root@web_server01~]# cd /usr/local/ [root@web_server01/usr/local]# cd .. [root@web_server01/usr]# cd ../../ [root@web_server01/]# cd -- [root@web_server01~]# [root@web_server01~]# cd hbs/
1.3 cp 命令—复制文件或目录
-
案例演示
# 常用方式 cp 复制文件或目录数据到其他目录中 cp -r 递归复制目录数据 \cp 强行覆盖数据 #复制目录:将rivers目录移动到/opt目录 [root@web_server01~]# cp -R rivers/ /opt/ #将文件test1改名为test2: -f 没有提示。 或者 \cp [root@linuxcool ~]# cp -f test1 test2 #复制多个文件:(将1.txt、2.txt、3.txt 复制到/opt/rivers) [root@web_server01~]# touch {1..3}.txt # 创建3个文本 [root@web_server01~]# cp 1.txt 2.txt 3.txt /opt/rivers/ #交互式地将目录 /opt/rivers/ 中的所有.txt文件复制到目录 /root 中: [root@web_server01~]# cp /opt/rivers/*.txt /root/ cp: overwrite ‘/root/1.txt’? y cp: overwrite ‘/root/2.txt’? y cp: overwrite ‘/root/3.txt’? y 这里没有加参数 f ,就会有提示
1.4 mkdir —创建目录
-
案例演示
make directory=mkdir 创建目录 mkdir -p 多级目录 #在工作目录下,建立一个名为 rivers02 的子目录: [root@web_server01~]# mkdir rivers02 # 在目录root/rivers02/下建立子目录hbs,并且设置文件属主有读、写和执行权限,其他人无权访问 [root@web_server01~]# mkdir -m 700 /root/rivers02/hbs # 同时创建子目录a1,b1,c1: [root@web_server01~/rivers]# mkdir a1 b1 c1 [root@web_server01~/rivers]# ls a1 b1 c1 [root@web_server01~/rivers]# # 创建多级目录/忽略错误提示(递归创建目录 -p) [root@web_server01~]# mkdir -p /a/b/c
1.5 rmdir 命令 — 删除空目录
-
案例演示
# 删除目录 [root@web_server01~/rivers]# ls a1 b1 c1 [root@web_server01~/rivers]# rmdir a1 b1 c1
1.6 tree 命令 —查看目录结构
-
案例演示
[root@web_server01~/rivers02]# mkdir xixi [root@web_server01~/rivers02]# mkdir heihei # 只显示n层目录(n为数字): [root@web_server01~/rivers02]# tree -L 1 . ├── hbs ├── heihei └── xixi # 用文件和目录的更改时间排序: [root@web_server01~/rivers02]# tree -t . ├── heihei ├── xixi └── hbs 以相反次序排序: [root@web_server01~/rivers02]# tree -r . ├── xixi ├── heihei └── hbs # 在每个文件或目录之前,显示完整的相对路径: [root@web_server01~/rivers02]# tree -f . ├── ./hbs ├── ./heihei └── ./xixi # 只显示目录: [root@web_server01~/rivers02]# tree -d . ├── hbs ├── heihei └── xixi #显示所有文件和目录: [root@web_server01~/rivers02]# tree -a . ├── hbs ├── heihei └── xixi
1.7 mv 命令 — 移动或改名文件
-
案例演示
# 常用参数 -i 若存在同名文件,则向用户询问是否覆盖 -f 覆盖已有文件时,不进行任何提示 -b 当文件存在时,覆盖前为其创建一个备份 -u 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 # 将 1.txt 重命名 100.php [root@web_server01~]# mv 1.txt 100.php # 将 2.txt 移动到 /opt [root@web_server01~]# mv 2.txt /opt/ # 将目录hbs移动目录rivers中(前提是目录hbs已存在,若不存在则改名): [root@web_server01~]# mv hbs/ /root/rivers # 将./rivers/hbs/目录下的文件移动到当前目录下: [root@web_server01~]# mv ./rivers/hbs/* .
1.8 pwd 命令 — 显示当前路径
-
案例演示
# 查看当前工作目录路径: [root@web_server01~/rivers02]# pwd /root/rivers02
2.文本编辑命令
2.1 cat 命令 —显示文件内容
-
案例演示
#查看文件的内容: [root@nginx-server~]# cat lan.txt world hello world hello [root@nginx-server~]# #查看文件的内容,并显示行数编号: [root@nginx-server~]# cat -n lan.txt 1 world 2 hello world 3 hello [root@nginx-server~]# #查看文件的内容,并输出到另外一个文件中: [root@nginx-server~]# cat -n lan.txt > ndy.txt [root@nginx-server~]# cat ndy.txt 1 world 2 hello world 3 hello [root@nginx-server~]# # 清空文件的内容: [root@nginx-server~]# cat /dev/null > /root/ndy.txt [root@nginx-server~]# cat ndy.txt # 持续写入文件内容,碰到EOF符后结束并保存: [root@nginx-server~]# cat > index.html <<EOF > ni daye de > EOF [root@nginx-server~]#
2.2 vi/vim 命令 —修改配置文件
-
案例演示
# 命令行模式 命令模式-->插入模式 i --- 表示从光标所在位置进入编辑状态 I --- 表示将光标移动到一行的行首,再进入编辑状态 o --- 在光标所在行的下面,新起一行进行编辑 O --- 在光变所在行的上面,新起一行进行编辑 a --- 将光标移动到右边的下一个字符,进行编辑 A --- 将光标移动到一行的行尾,进入到编辑状态 C --- 将光标到行尾内容进行删除,并进入编辑状态 cc --- 将整行内容进行删除并进入编辑状态 大写字母G 将光标快速切换尾部 小写字母gg 将光标快速切换首部 ngg n表示移动到第几行 $ 将光标移动到一行的结尾 0/^ 将光标移动到一行的行首 # 末行模式 :wq --- 保存并退出 :w :q :wq!--- 强制保存退出 :q! --- 强制退出 # 快速删除命令 d$:表示删除当前光标所在位置到行尾的内容 d^:表示删除当前光标所在位置到第一个行首非空白字符位置的内容 dd:删除当前光标所在行整行 5dd:删除包括当前光标所在行在内的5行 %d: 表示全部删除 # 使用技巧 将一行内容进行删除(剪切) deletedelete=dd 将多行内容进行删除(剪切) 3dd 将内容进行粘贴 p 粘贴多次内容 3p 复制一行内容 yy 复制多行内容 3yy 操作错误如何还原 小写字母u undo ------------------------------------------------ ctrl +v 选中想选的,然后shift+d 批量删除 ctrl +v 选中想选的,然后shift+i,输入# ,然后按2次esc 批量注释 ctrl +v 选中想选的,然后d ,批量取消注释。
2.3 touch 命令 –创建文件、修改访问时间
-
案例演示
# 创建空文件 [root@web_server01~]# touch lan.txt # 批量创建文件 [root@web_server01~]# touch {1..2}.txt # 修改访问时间 [root@web_server01~]# stat 1.txt # 查看访问时间 File: ‘1.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 134398235 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2021-09-12 09:40:34.112793455 +0800 Modify: 2021-09-12 09:40:34.112793455 +0800 Change: 2021-09-12 09:40:34.112793455 +0800 Birth: - [root@web_server01~]# touch -t 2003141314 1.txt # 修改访问时间,20年3月14日13:14分 [root@web_server01~]# stat 1.txt File: ‘1.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 134398235 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-03-14 13:14:00.000000000 +0800 Modify: 2020-03-14 13:14:00.000000000 +0800 Change: 2021-09-12 09:45:31.331419636 +0800 Birth: - # -a 只更改访问时间; # -m 只更改修改时间
2.4 echo 命令 —输出命令
-
案例演示
-
主要用于打印字符或者回显
-
常常和管道符连用
-
“>” 覆盖
-
“>>” 追加
-
扩展 -e,主要用于写脚本,以多行的方式写入
# 输出一段字符 [root@web_server01~]# echo 'i love you' i love you # 输出变量提取后的值 [root@web_server01~]# echo $PS1 [\[\e[31;1m\]\u\[\e[0m\]\[\e[32;1m\]@\h\[\e[0m\]\[\e[36;1m\]\w\[\e[0m\]]\$ # 将字符 重定向到 文件里 [root@web_server01~]# echo '人生只若如初见' > hh.txt # 使用反引号执行命令,并将结果显示在终端 [root@web_server01~]# echo `date` Sun Sep 12 10:07:59 CST 2021 [root@web_server01~]# # 扩展 -e,主要用于写脚本 \033[30m 黑色字 \033[0m \033[31m 红色字 \033[0m \033[32m 绿色字 \033[0m \033[33m 黄色字 \033[0m \033[34m 蓝色字 \033[0m \033[35m 紫色字 \033[0m \033[36m 天蓝字 \033[0m \033[37m 白色字 \033[0m \033[40;37m 黑底白字 \033[0m \033[41;37m 红底白字 \033[0m \033[42;37m 绿底白字 \033[0m \033[43;37m 黄底白字 \033[0m \033[44;37m 蓝底白字 \033[0m \033[45;37m 紫底白字 \033[0m \033[46;37m 天蓝底白字 \033[0m \033[47;30m 白底黑字 \033[0m
-
多行写入方式 \n
[root@web_server01~]# echo "rivers01\nrivers02\nrivers03" rivers01\nrivers02\nrivers03 [root@web_server01~]# echo -e "rivers01\nrivers02\nrivers03" rivers01 rivers02 rivers03 [root@web_server01~]# echo -e "rivers01\nrivers02\nrivers03" > file1.txt [root@web_server01~]# cat file1.txt rivers01 rivers02 rivers03 [root@web_server01~]
2.5 rm 命令 —删除命令
-
案例演示
# 温馨提示: 我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。很多时候翻车都翻在这里。 # 常用参数 -f 忽略不存在的文件,不会出现警告信息 -i 删除前会询问用户是否操作 -r/R 递归删除 -v 显示指令的详细执行过程 # 删除前逐一询问确认: [root@web_server01~]# rm -i 1.txt 2.txt 3.txt rm: remove regular empty file ‘1.txt’? y rm: remove regular empty file ‘2.txt’? y rm: remove regular file ‘3.txt’? y [root@web_server01~]# #直接删除,不会有任何提示 [root@web_server01~]# rm -f 100.php # 递归删除目录及目录下所有文件: [root@web_server01~]# ls rivers02/ 1.txt hbs heihei xixi [root@web_server01~]# rm -rf rivers02/ [root@web_server01~]# # 删除当前目录下所有文件: [root@web_server01~/rivers]# ls 1 hbs [root@web_server01~/rivers]# rm -rf * [root@web_server01~/rivers]# ls [root@web_server01~/rivers]# #清空系统中所有的文件(谨慎):如果是用了,准备跑路吧 [root@web_server01~]# rm -rf /*
2.6 tail 命令 —查看文件尾部内容
-
案例演示
#显示文件shadow的最后10行: [root@web_server01~]# tail /etc/shadow #显示文件anaconda-ks.cfg 的内容,从第20行至文件末尾: [root@web_server01~]# tail +20 anaconda-ks.cfg #显示文件shadow的最后10个字符: [root@web_server01~]# tail -c 10 /etc/shadow 862:::::: [root@web_server01~]# #一直变化的文件总是显示后10行:(主要用于看日志) [root@web_server01~]# tail -f /var/log/yum.log #显示帮助信息: [root@web_server01~]# tail --help
2.7 head命令 —显示文件开头内容
-
案例演示
# 显示前3行文件内容: [root@web_server01~]# head -n 3 /etc/shadow # 显示文件名信息,并显示文件前两行: [root@web_server01~]# head -v -n 2 lan.txt ==> lan.txt <== i love you 1234151 [root@web_server01~]# #显示文件前5个字符: [root@web_server01~]# head -c 10 lan.txt i love you
2.8 sort 命令 –排序命令
-
案例演示
# sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。 # -r 以相反的顺序来排序 # -f 忽略大小写 #-b 忽略每行前面开始出的空格字符 # -o <输出文件> 将排序后的结果存入制定的文件 # 忽略大小写排序 [root@web_server01~]# sort -f xixi.txt a B c # 将排序结果 输出到 hbs/a.txt里面 [root@web_server01~]# sort xixi.txt -o hbs/a.txt [root@web_server01~]# cat hbs/a.txt a B c # 忽略每行前面开始出现的空格字符 [root@web_server01~]# cat lan.txt i love you 1234151 asdfdbsd aa [root@web_server01~]# sort -b lan.txt 1234151 aa asdfdbsd i love you [root@web_server01~]# # 以相反的顺序取反 [root@web_server01~]# sort -r xixi.txt c B a
2.9 uniq 命名 —去重
-
案例演示
# 常用参数 -c 打印每行在文本中重复出现的次数 -d 只显示有重复的纪录,每个重复纪录只出现一次 -u 只显示没有重复的纪录 # 打印每行在文件中出现重复的次数 [root@web_server01~]# cat hh.txt a a b c [root@web_server01~]# uniq -c hh.txt 2 a 1 b 1 c [root@web_server01~]# #只显示有重复的纪录,且每个纪录只出现一次 [root@web_server01~]# uniq -d hh.txt a [root@web_server01~]# # 只显示没有重复的纪录 [root@web_server01~]# uniq -u hh.txt b c [root@web_server01~]# # 删除连续文件中连续的重复行: [root@web_server01~]# uniq hh.txt a b c
2.10 wc 命令 —用于统计文本、字符(数字、符号、空格、行)
-
案例演示
# 常用参数 -w 统计字数,或--words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串 -c 统计字节数,或--bytes或--chars:只显示Bytes数 -l 统计行数,或--lines:只显示列数 [root@web_server01~]# cat lan.txt world hello world hello [root@web_server01~]# # 统计字数 [root@web_server01~]# wc -w lan.txt 4 lan.txt #统计行数 [root@web_server01~]# wc -l lan.txt 3 lan.txt # 打印最长行的长度 [root@web_server01~]# wc -L lan.txt 11 lan.txt
2.11 more 显示文本文件内容
-
案例演示
# more命令用于将内容较长的文本文件内容(不能在一屏显示完)进行分屏显示,并且支持在显示时定位关键字。而对于内容较少的文本文件内容则推荐使用cat命令查看。 #显示文件anaconda-ks.cfg的内容,每5行显示一次,而且在显示之前先清屏: [root@web_server01~]# more -c -5 anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom [root@web_server01~]# #显示文件file的内容,每5行显示一次,而且在显示之后再清屏: [root@web_server01~]# more -p -5 anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom --More--(7%) #从第 20 行开始显示 anaconda-ks.cfg 之文档内容 : [root@web_server01~]# more +20 anaconda-ks.cfg # 使用技巧 Space键:显示文本的下一屏内容 Enter键:向下n行,需要定义,默认为1行 斜线符\:接着输入一个模式,可以在文本中寻找下一个相匹配的模式 H键:显示帮助屏 B键:显示上一屏内容 Q键:退出more命令 Ctrl+F、空格键:向下滚动一屏 Ctrl+B:返回上一屏 =: 输出当前的行号 :f:输出文件名和当前的行号 V:调用vi编辑器 !:调用Shell,并执行命令
2.12 less命令 — 分页显示内容
-
案例演示
#浏览文字档案的内容,用less命令显示文件时,PageUp键向上翻页,PageDown键向下翻页,要退出less程序,应按Q键。 less的作用与more十分相似,不同点为less命令允许用户向前或向后浏览文件,而more命令只能向前浏览 。 #查看文件 : [root@web_server01~]# less anaconda-ks.cfg #ps查看进程信息并通过less分页显示: [root@linuxcool ~]# ps -ef |less
2.13 stat 命令 – 查看数据详细属性信息
-
案例演示
# 常用参数 -L 支持符号链接 -f 显示文件系统的信息 -t 以简洁的方式输出 --help 显示命令帮助信息 # 查看文件 anaconda-ks.cfg 的三种时间状态:Access,Modify,Change: [root@web_server01~]# stat anaconda-ks.cfg File: ‘anaconda-ks.cfg’ Size: 1681 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 134318467 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2021-09-12 10:26:28.679267897 +0800 Modify: 2021-08-23 15:38:37.120883350 +0800 Change: 2021-08-23 15:38:37.120883350 +0800 Birth: - # 查看文件系统信息 [root@web_server01~]# stat -f anaconda-ks.cfg File: "anaconda-ks.cfg" ID: 80300000000 Namelen: 255 Type: xfs Block size: 4096 Fundamental block size: 4096 Blocks: Total: 25757146 Free: 25197394 Available: 25197394 Inodes: Total: 51539456 Free: 51473814
2.14 ln 命令 —创建连接文件
-
案例演示
# 常用参数 ln 源文件 链接文件 创建硬链接 ln -s 创建软链接 # 将解压的mysql 链接到 mysql5.7 [root@web_server01~]#ln -s mysql-5.7.22-linux-glibc2.12-x86_64/ mysql5.7
2.15 dd 命令 — 模拟创建出指定大小的文件
-
案例演示
# 模拟创建出指定大小的文件 #从哪取出数据 放到哪 占用1个block多少空间 总共使用多少个block [root@web_server01~]# dd if=/dev/zero of=/opt/liuaoni.txt bs=10 count=100 100+0 records in 100+0 records out 1000 bytes (1.0 kB) copied, 0.000335941 s, 3.0 MB/s [root@web_server01~]# # 查看 liuaoni.txt 文件大小 [root@web_server01~]# du -h /opt/liuaoni.txt 4.0K /opt/liuaoni.txt
2.16 chattr 命令 — 改变文件属性
-
案例演示
# 常用参数 a:让文件或目录仅供附加用途。 b:不更新文件或目录的最后存取时间。 c:将文件或目录压缩后存放。 d:将文件或目录排除在倾倒操作之外,当dump程序执行时,该文件或目录不会被dump备份 i:不得任意更动文件或目录。 s:保密性删除文件或目录。 S:即时更新文件或目录。 u:预防意外删除。 # 用chattr命令防止系统中某个关键文件被修改: [root@web_server01~]# touch mm.sh [root@web_server01~]# chattr +i mm.sh #会显示如下属性 [root@web_server01~]# lsattr mm.sh ----i----------- mm.sh 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件: [root@web_server01~]# chattr +a /var/log/messages # 创建一个连root 都无法删除的文件 [root@web_server01~]# chattr -u mm.sh [root@web_server01~]# rm -f mm.sh rm: cannot remove ‘mm.sh’: Operation not permitted [root@web_server01~]# ll mm.sh -rw-r--r-- 1 root root 0 Sep 13 17:08 mm.sh [root@web_server01~]# chmod 777 mm.sh chmod: changing permissions of ‘mm.sh’: Operation not permitted [root@web_server01~]# rm -rf mm.sh rm: cannot remove ‘mm.sh’: Operation not permitted # 解除 文件属性 [root@web_server01~]# chattr -i mm.sh [root@web_server01~]# [root@web_server01~]# rm -rf mm.sh # 影藏 chattr 命令 [root@web_server01~]# mv /usr/bin/cha^C chacl chage chattr [root@web_server01~]#mkdir /opt/chattr [root@web_server01~]#mv /usr/bin/chattr /opt/chattr/ [root@web_server01~]#cd /opt/chattr/ [root@web_server01/opt/chattr]# ls h [root@web_server01/opt/chattr]# touch nidaye [root@web_server01/opt/chattr]#h +i nidaye -->更改命令,使用别名h隐藏身份 [root@web_server01/opt/chattr]#/opt/chattr/h +i nidaye -->利用h 行驶chattr命令 # 查看加密信息 ls nidaye -->查看加密信息 #恢复隐藏命令 mv h /usr/bin/chattr chattr -i /opt/chattr/nidaye lsattr /opt/chattr/nidaye
3 .修改主机名
3.1 hostname 命令 —查看修改主机名称
-
案例演示
# 查看主机名 [root@web_server01~]# hostname web_server01 # 临时修改主机名,重启就恢复了 [root@web_server01~]# hostname nginx-server [root@web_server01~]# bash [root@nginx-server~]#
3.2 hostnamectl — 直接修改主机名称(centos7)
-
案例演示
#示当前主机名称的配置信息: [root@nginx-server~]# hostnamectl status Static hostname: web_server01 Transient hostname: nginx-server Icon name: computer-vm Chassis: vm Machine ID: 6995341f51984532aa0222cddb7a2bd0 Boot ID: 416ee9b854804fa1aaa1bad439c5bb24 Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-957.el7.x86_64 Architecture: x86-64 # 使用set-hostname命令来设置或修改主机名称: [root@nginx-server~]# hostnamectl set-hostname web01-server
4.linux 用户及权限管理
4.1 useradd 命令 — 创建用户
-
案列演示
# 创建一个系统登录用户 nginx [root@nginx-server~]# useradd -M -s /sbin/nologin nginx # 新建hbs用户,并加入到root,itboy附属组 [root@nginx-server~]# useradd -G root,itboy hbs #新建 hbs01 用户,并制定新的家兖,同时制定其登录的shell [root@nginx-server~]# useradd hbs01 -d /tmp/ -s /bin/bash
4.2userdel 命令 —删除用户
-
案例演示
#保留用户的家目录 [root@nginx-server~]# userdel hbs01 #删除用户及用户家目录,用户login系统无法删除 [root@nginx-server~]# userdel -r hbs01 #强制删除用户及该用户家目录,不论是否login系统 [root@nginx-server~]# userdel -rf hbs01
4.3 usermod命令 —修改用户及组的属性
-
案例演示
#将hbs用户属组修改为root,itboy附属组; [root@nginx-server~]#usermod -G root,itboy hbs #将hbs用户加入到itboy,root附属组,-a为添加新组,原组保留; [root@nginx-server~]# usermod -a -G itboy,root hbs #修改hbs用户,并指定新的家目录,同时指定其登陆的SHELL; [root@nginx-server~]# usermod -d /tmp/ -s /bin/sh hbs #将hbs用户名修改为rivers; [root@nginx-server~]# usermod -l hbs rivers #锁定rivers用户及解锁rivers用户方法; [root@nginx-server~]# usermod -L rivers [root@nginx-server~]# usermod -U rivers
4.4 groupadd 命令 —创建用户组
-
案例演示
# 创建一个itboy 用户组 [root@nginx-server~]# groupadd itboy # 新建一个teacher 组,并指定GID 1000 [root@nginx-server~]# groupadd -g 1000 teacher # 新建一个system 组,组名为adminroot [root@nginx-server~]# groupadd -r system adminroot
4.5 groupmod 命令 —修改组名
-
案例演示
# groupmod修改组GID号,将原eacher组gid改成gid 999; [root@nginx-server~]# groupmod -g 999 teacher # groupmod修改组名称,将teacher组名,改成student [root@nginx-server~]# groupmod -n student teacher
4.6 chown 命令 –修改文件/目录属主、数组
-
案例演示
# 常用参数 -R 对目前目录下的所有文件与子目录进行相同的拥有者变更 -c 若该文件拥有者确实已经更改,才显示其更改动作 -f 若该文件拥有者无法被更改也不要显示错误讯息 -h 只对于连结(link)进行变更,而非该 link 真正指向的文件 -v 显示拥有者变更的详细资料 # 将rivers/ 目录属主数组 改成hbs [root@nginx-server~]# chown hbs.hbs rivers # 将laoni/ 属主改成 hbs [root@nginx-server~]# chown -R hbs laoni/ # 将laoni/* 所有文件 属主改成 hbs [root@nginx-server~]# chown -R hbs laoni/*
4.7 chmod 命令 —改变文件或目录权限
-
案例演示
# 常用参数 -c 若该文件权限确实已经更改,才显示其更改动作 -f 若该文件权限无法被更改也不显示错误讯息 -v 显示权限变更的详细资料 -R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) #将档案 file1.txt 设为所有人皆可读取: [root@nginx-server~]# touch file1.txt [root@nginx-server~]#chmod a+r file.txt #将目前目录下的所有文件与子目录皆设为任何人可读取 : [root@nginx-server~]# chmod -R a+r * # 将 file.txt 设定为只有该文件拥有者可以执行: [root@nginx-server~]# chmod u+x file.txt # 授予 hbs用户 对 rivers 目录有用所有rwx权限 [root@nginx-server~]# chmod -R u+rwx rivers/ # 授予 hbs组对 rivers 目录有用所有rwx权限 [root@nginx-server~]# chmod -R g+rwx rivers/ # 授予 用户、组、其他人对 heihei 有rwx 权限 [root@nginx-server~]# chmod -R u+rwx,g+rwx,o+rwx rivers/ # 撤销用户对rivers 的w 权限 [root@nginx-server~]# chmod u-w rivers/ ------------------- chomod 二进制权限设置 Linux权限可以将rwx用二进制来表示,其中有权限用1表示,没有权限用0表示; Linux权限用二进制显示如下: rwx=111 r-x=101 rw-=110 r--=100 # 授予 hbs用户 对 rivers 目录有用所有rwx权限 [root@nginx-server~]# chmod -R 755 rivers/
4.8 passwd 命令 —修改用户密码
-
案例演示
# 常用参数 d 删除密码 -l 锁定用户密码,无法被用户自行修改 -u 解开已锁定用户密码,允许用户自行修改 -e 密码立即过期,下次登陆强制修改密码 -k 保留即将过期的用户在期满后能仍能使用 -S 查询密码状态 # 交互式修改密码 [root@nginx-server~]# passwd rivers # 免交互式修改密码 [root@nginx-server~]# echo 123456|passwd --stdin hbs Changing password for user hbs. passwd: all authentication tokens updated successfully. # 锁定密码不允许用户修改 [root@nginx-server~]# passwd -l rivers Locking password for user rivers. passwd: Success [root@nginx-server~]# # 解除锁定密码,允许用户修改 [root@nginx-server~]# passwd -u rivers # 下次登录强制修改密码 [root@nginx-server~]# passwd -e rivers Expiring password for user rivers. passwd: Success [root@nginx-server~]#
4.9 id /whoami 命令 —检查用户身份
-
案例演示
# 检查用户是否存在 [root@web_server01~]# id hbs uid=1002(hbs) gid=1003(hbs) groups=1003(hbs) # 确认用户身份 [root@web_server01~]# who root pts/0 2021-09-12 09:39 (10.0.0.1) root pts/1 2021-09-12 19:17 (10.0.0.1) [root@web_server01~]# whoami root
4.10 su 命令 —切换用户命令
-
案例演示
# 切换用户身 [hbs@web_server01/root]$ su hbs Password:
4.11 w 命令 —查看负载信息/查看系统用户登录信息
-
案例演示
[hbs@web_server01/root]$ w 19:35:11 up 9:55, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.0.0.1 09:39 3:38m 1.15s 0.55s bash root pts/1 10.0.0.1 19:17 7.00s 0.19s 0.00s w [hbs@web_server01/root]$
5.软件包管理
5.1 rpm 命令 —RPM 软件包管理器
-
案例演示
# rpm 管理软件程序包的 # rpm -qa 软件名称 查看软件大礼包是否安装成功 # rpm -ql 软件名称 查看软件大礼包中都有什么 # rpm -qf 文件名称(绝对路径) 查看文件属于哪个软件大礼包 #直接安装软件包: [root@nginx-server~]# rpm -ivh packge.rpm # 卸载rpm包: [root@nginx-server~]# rpm -e package.rpm #忽略报错,强制安装: [root@nginx-server~]# rpm --force -ivh package.rpm #列出所有安装过的包: [root@nginx-server~]# rpm -qa #查询rpm包中的文件安装的位置: [root@nginx-server~]# rpm -ql httpd #升级软件包: [root@nginx-server~]# rpm -U file.rpm
5.2 yum 命令 — 软件安装、卸载
-
案例演示
yum install -y 名称 直接安装软件 yum groupinstall -y 包组名称 直接安装软件包组 yum repolist 查看yum源信息 yum list 查看哪些软件可以安装/查看所有系统已安装的软件 yum grouplist 查看哪些软件包组可以安装/查看所有系统已安装的软件包组 yum --help help参数可以只显示命令的参数帮助信息 yum provides locate 获取命令属于哪个软件大礼包
5.3 wget 命令 —文件下载
-
案例演示
# 常用参数 -V –-version 显示wget的版本后退出 -h –-help 打印语法帮助 -b, –-background 启动后转入后台执行 -e –-execute=COMMAND wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。 wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。 语法格式: wget [参数] 常用参数: -V –-version 显示wget的版本后退出 -h –-help 打印语法帮助 -b, –-background 启动后转入后台执行 -e –-execute=COMMAND #使用wget下载单个文件: [root@nginx-server~]# wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-5.7.3-m13-1.linux_glibc2.5.x86_64.rpm-bundle.tar #下载并以不同的文件名保存: [root@nginx-server~]# wget -O mysql.tar.gz https://downloads.mysql.com/archives/get/p/23/file/MySQL-5.7.3-m13-1.linux_glibc2.5.x86_64.rpm-bundle.tar #wget限速下载: [root@nginx-server~]# wget --limit-rate=300k https://downloads.mysql.com/archives/get/p/23/file/MySQL-5.7.3-m13-1.linux_glibc2.5.x86_64.rpm-bundle.tar #使用wget后台下载: [root@nginx-server~]# wget -b https://downloads.mysql.com/archives/get/p/23/file/MySQL-5.7.3-m13-1.linux_glibc2.5.x86_64.rpm-bundle.tar
5.4 which命令 — 显示命令文件所在路径位置
-
案例演示
# 查看命令安装路径 [root@web_server01~]# which vim /usr/bin/vim [root@web_server01~]#
5.5 whereis 命令 —查看命令所在路径以及命令相关手册文件所在路径
-
案例演示
# 查看命令所在路径以及命令相关手册文件所在路径 [root@web_server01~]# whereis vim vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz [root@web_server01~]#
5.6 alias/unalias 命令 —设置命令别名
-
案例演示
# 设置别名 alias 别名='命令信息' [root@web_server01~]# alias eth11='cat /etc/sysconfig/network-scripts/ifcfg-eth1' [root@web_server01~]# eth11 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none IPADDR=172.16.1.7 PREFIX=24 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth1 DEVICE=eth1 ONBOOT=yes AUTOCONNECT_PRIORITY=-999 [root@web_server01~]# # 取消别名 #unalias 取消系统别名命令 #unalias 别名 # [root@web_server01~]# unalias eth11
6.磁盘管理
6.1 df 命令 — 显示磁盘空间使用情况
-
案例演示
# 常用参数 -a 显示所有系统文件 -h 以容易阅读的方式显示 # 以容易阅读的方式显示磁盘分区使用情况: [root@nginx-server~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 99G 2.0G 97G 2% / devtmpfs 442M 0 442M 0% /dev tmpfs 453M 0 453M 0% /dev/shm tmpfs 453M 7.2M 446M 2% /run tmpfs 453M 0 453M 0% /sys/fs/cgroup /dev/sda1 197M 105M 93M 54% /boot tmpfs 91M 0 91M 0% /run/user/0 # 显示指定文件所在分区的磁盘使用情况 [root@nginx-server~]# df -h /opt/ Filesystem Size Used Avail Use% Mounted on /dev/sda3 99G 2.0G 97G 2% / [root@nginx-server~]#
6.2 fdisk 命令 —磁盘分区
-
案例演示
[root@nginx-server~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb # 查看所有分区情况 [root@nginx-server~]# fdisk -l # 选择分区磁盘 [root@nginx-server~]# fdisk /dev/sda2
6.3 lsblk 命令 —查看系统的磁盘
-
案例演示
#列出所有块设备 [root@nginx-server~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 1.5G 0 part [SWAP] └─sda3 8:3 0 98.3G 0 part / sdb 8:16 0 10G 0 disk sr0 11:0 1 4.3G 0 rom [root@nginx-server~]# # 默认选项不会列出所有空设备 [root@nginx-server~]# lsblk -a
6.4 free 命令 — 显示系统内存情况
-
案例演示
# 显示内存使用情况: [root@nginx-server~]# free total used free shared buff/cache available Mem: 926264 96024 685304 7288 144936 671300 Swap: 1572860 0 1572860 # 用MB显示内存使用情况 [root@nginx-server~]# free -m total used free shared buff/cache available Mem: 904 93 669 7 141 655 Swap: 1535 0 1535 [root@nginx-server~]# # 用KB显示内存使用情况: [root@nginx-server~]# free -k # 以总和的形式显示内存的使用信息: [root@nginx-server~]# free -t # 周期性查询内存使用情况: [root@nginx-server~]# free -s 10
6.5 du 命令 —查看空间
-
案例演示
# 常用参数 -a 显示目录中所有文件大小 -k 以KB为单位显示文件大小 -m 以MB为单位显示文件大小 -g 以GB为单位显示文件大小 -h 以易读方式显示文件大小 -s 仅显示总计 # 常用命令 [root@nginx-server~]# du -sh /tmp/ 查看当前目录所有文件及文件及的大小 #以易读方式显示文件夹内及子文件夹大小 : [root@nginx-server~]# du -h scf/ #以易读方式显示文件夹内所有文件大小 : [root@nginx-server~]# du -ah scf/ #输出当前目录下各个子目录所使用的空间 : [root@nginx-server~]# du -hc --max-depth=1 scf/ #显示指定文件所占空间 : [root@nginx-server~]# du log2021.log
7.设备管理
7.1 mount 命令 —文件系统挂载
-
案例演示
#常用参数 -t 指定挂载类型 -l 显示已加载的文件系统列表 -h 显示帮助信息并退出 -V 显示程序版本 -n 加载没有写入文件“/etc/mtab”中的文件系统 -r 将文件系统加载为只读模式 -a 加载文件“/etc/fstab”中描述的所有文件系统 #查看版本: [root@nginx-server~]# mount -V #启动所有挂载: [root@nginx-server~]# mount -a #挂载 /dev/cdrom 到 /mnt: [root@nginx-server~]# mount /dev/cdrom /mnt # 挂载nfs格式文件系统: [root@nginx-server~]#mount -t nfs /123 /mnt #挂载第一块盘的第一个分区到/etc目录 : [root@nginx-server~]#mount -t ext4 -o loop,default /dev/sda1 /etc
7.2 umout 命令 —卸载挂载
-
案例演示
#mount 存储设备文件 挂载点 umount 对存储设备进行卸载 umount 挂载点 # 卸载 /mnt 挂载点 [root@web_server01~]# umount /mnt/
7.3 lsusb 命令 — 显示usb 设备列表
-
案例演示
# 显示有关CPU架构的信息: [root@nginx-server~]# lscpu
8. 网路通讯
8.1 ssh命令 — 安全连接客户端
-
案例演示
#登录远程服务器: [root@linuxcool ~]# ssh 10.0.0.7 #用hbs用户连接远程服务器: [root@nginx-server~]# ssh -l hbs 10.0.0.7 #查看分区列表: [root@nginx-server~]# ssh root@10.0.0.7 /sbin/fdisk -l root@10.0.0.7's password:
8.2 netstat 命令 — 显示网络状态
-
案例演示
# 常用参数 -a 显示所有连线中的Socket -p 显示正在使用Socket的程序识别码和程序名称 -u 显示UDP传输协议的连线状况 -i 显示网络界面信息表单 -n 直接使用IP地址,不通过域名服务器 [root@nginx-server~]# netstat -lnutp|grep 22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6837/sshd tcp6 0 0 :::22 :::* LISTEN 6837/sshd # 同时还可以使用 ss -lant [root@nginx-server~]# ss -lant State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* ESTAB 0 148 10.0.0.7:22 10.0.0.1:58713 LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::*
8.3 ping 命令 —测试主机间网络连通性
-
案例演示
# 常用参数 #检测与www.baidu.com网站的连通性: [root@nginx-server~]# ping www.baidu.com #连续ping4次: [root@nginx-server~]# ping -c 4 www.baidu.com #设置次数为4,时间间隔为3秒: [root@nginx-server~]# ping -c 4 -i 3 www.baidu.com #利用ping命令获取指定网站的IP地址: [root@nginx-server~]# ping -c 1 baidu.com | grep from | cut -d " " -f 4 220.181.38.251 [root@nginx-server~]#
8.5 nslookup 命令 —解析IP地址
-
案例演示
# 常用参数 exit 退出命令 server 指定解析域名的服务器地址 set type=soa 设置查询域名授权起始信息 set type=a 设置查询域名A记录 set type=mx 设置查询域名邮件交换记录 # 安装nslookup工具 [root@nginx-server~]# yum -y install bind-utils # 在非交互模式下查询域名基本信息 [root@nginx-server~]# nslookup www.baiud.com Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: www.baiud.com Address: 103.51.144.90
8.6 route 命令 — 显示并设置路由
-
案例演示
# 常用参数 - C 打印linux核心的路由缓存 -n 不执行DNS反向查找,直接显示数字形式的ip地址 -net 到一个网络的路由表 -host 到一个主机的路由表 Add 增加指定的路由记录 Del 删除指定的路由记录 gw 设置默认网关 dev 路由记录所表示的网络接口 # 显示当前路由 [root@nginx-server~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 100 0 0 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1 root@nginx-server~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.2 0.0.0.0 UG 100 0 0 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1 [root@nginx-server~]# # 临时添加一条路由记录: [root@nginx-server~]# ip route add 192.168.10.100 via 172.16.1.254 dev eth1 # 删除路由记录 [root@nginx-server~]# ip route del 192.168.10.100 via 172.16.1.254 dev eth1 # 永久配置 在/etc/sysconfig/network-scripts/目录下创建route-eth*配置文件,其中eth*为对应的网卡编号,即静态路由的出口网卡,该配置文件中的路由出口信息,必须与此文件名编号一致,否者将造成网卡启动失败,导致断网。 # cat /etc/sysconfig/network-scripts/route-eth1 192.168.10.0/24 via 172.16.1.254 dev eht1
9.tar、zip命令 —压缩/解压缩
-
案例演示
# 常用几种格式 .tar.gz (tar) .tar.bz2 (tar),需要安装bzip2安装包 .tar.xz (tar) .zip (zip) 跨平台的 压缩比:gz<bz<xz (xz压缩效果最好,推荐使用tar.xz) 常用压缩文件选项 -zcf 创建一个gz的文件压缩包 -jcf 创建一个bz2的文件压缩包 -Jcf 创建一个xz格式的文件压缩包 -常用解压文件选项 -xf 解压指定文件(gz、xz用) -xvf 解压指定文件并显示解压过程(gz、xz用) -xjf 解压bz2文件的 查看压缩的文件 -tvf 不解压查看一个文件 -c 创建归档 -z 压缩成gz格式 -j 压缩成bz2格式 -v 显示详细信息 -t 不解压查看压缩包内容 -f 指定要压缩或解压缩的文件 -x 解压缩 -C 将压缩文件解压到指定目录 #查看bzip2安装包 [root@localhost ~]# ls /mnt/Packages/bzip2-1.0.6-13.el7.x86_64.rpm [root@localhost ~]# rpm -ivh /mnt/Packages/bzip2-1.0.6-13.el7.x86_64.rpm 安装bzip2安装包 warning: /mnt/Packages/bzip2-1.0.6-13.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Preparing... ################################# [100%] package bzip2-1.0.6-13.el7.x86_64 is already installed #将数字、大小写字母 压缩为hehe.tar.bz2包 [root@localhost ~]# tar -jcf hehe.tar.bz2 [[:alnum:]] #将所有文件压缩成 tar.xz格式 [root@localhost ~]# tar -Jcf big.tar.xz * #不解压查看big.tar.xz 压缩包 [root@localhost ~]# tar -tvf big.tar.xz # 解压digit(单个数字)压缩包 [root@localhost opt]# tar xf digit.tar.gz [root@localhost opt]# ls 1 2 3 4 8 alnum.tar.bz2 big.tar.xz digit.tar.gz hehe.tar.bz2 # 删除数字 [root@localhost opt]# rm -f [[:digit:]] [root@localhost opt]# ls alnum.tar.bz2 big.tar.xz digit.tar.gz hehe.tar.bz2 [root@localhost opt]# tar -xvf digit.tar.gz # 解压到家目录 [root@localhost opt]# tar -xvf digit.tar.gz -C ~ # zip 命令 和gz2一样,也需要单独安装zip和unzip(看情况) zip xx.zip 压缩 unzip xx.zip 解压缩 #查看有没有zip 命令 [root@localhost opt]# which zip /usr/bin/which: no zip in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) [root@localhost opt]# ls /mnt/Packages/zip-3.0-11.el7.x86_64.rpm /mnt/Packages/zip-3.0-11.el7.x86_64.rpm [root@localhost opt]# rpm -ivh /mnt/Packages/zip-3.0-11.el7.x86_64.rpm 安装zip命令 warning: /mnt/Packages/zip-3.0-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:zip-3.0-11.el7 ################################# [100%] [root@localhost opt]# # 将数字压缩zip格式 [root@localhost ~]# zip liuaoni.zip [[:digit:]] adding: 1 (stored 0%) adding: 2 (stored 0%) adding: 3 (stored 0%) adding: 4 (stored 0%) adding: 8 (stored 0%) # 解压zip文件 [root@localhost ~]# unzip liuaoni.zip
10. 文件传输
10.1 curl 命令 —文件传输工具
-
案例演示
# 常用参数 -u 通过服务端配置的用户名和密码授权访问 -o 指定下载到目录 -i 显示 http response 的头信息 -v 显示通讯请求过程 # 将阿里云镜像源下载到 本地 /etc/yum.repo.d/,名字为CentOS-Base.repo [root@localhost ~]#curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo # 可以查看页面代码 [root@nginx-server~]# curl www.dy.com # 显示 http response 的头信息,连同网页代码一起 [root@nginx-server~]# curl -i www.sina.com # 显示一次 http 通信的整个过程,包括端口连接和 http request 头信息 [root@nginx-server~]# curl -v www.sina.com
10.2 scp — 远程拷贝文件
-
案例演示
-
# 常用参数 - cp是 secure copy的缩写. - scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。 - linux的scp命令可以在linux服务器之间复制文件和目录。 - scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。 当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。 - 虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。 #从远程复制文件到本地目录: [root@web_server01~]# scp root@192.168.10.10:/opt/soft/rhel-server-7.3-x86_64.tar.gz /opt/soft/ #从远程复制目录到本地: [root@web_server01~]# scp -r root@10.10.10.10:/opt/soft/mysql /opt/soft/ #上传本地文件到远程机器指定目录: [root@web_server01~]# scp /opt/soft/rhel-server-7.3-x86_64.tar.gz root@192.168.10.10:/opt/soft/scptest #上传本地目录到远程机器指定目录: [root@web_server01~]# scp -r /opt/soft/mysql root@192.168.10.10:/opt/soft/scptest #保留文件的最后修改时间,最后访问时间和权限模式: [root@web_server01~]# scp -p /root/install.log root@192.168.10.10:/tmp
11 关机/重启相关命令
11.1 shutdown 命令
-
案例演示
[root@nginx-server~]# shutdown -h 5 指定关机时间 (推荐) [root@nginx-server~]# shutdown -r 5 重启主机时间 (推荐) [root@nginx-server~]# shutdown -c 取消关机或重启计划 [root@nginx-server~]# shutdown -h now/0 立即关机 [root@nginx-server~]# shutdown -r now/0 立即重启
11.2 init 命令
-
案例演示
[root@nginx-server~]# init 0 #关机 [root@nginx-server~]# init 3 #进入3级别字符界面 [root@nginx-server~]# init 5 #进入5级别图形界面 [root@nginx-server~]# systemctl get-default 查兰当前默认启动级别 multi-user.target [root@nginx-server~]#
11.3 reboot 命令
-
案例演示
# 重启 [root@nginx-server~]#reboot
11.4 poeroff 命令
-
案例演示
# 关机 [root@nginx-server~]# poweroff
11.5 halt 命令 —直接关机
-
案例演示
# 参数解释 w 并不是真正的重启或关机,只是写wtmp(/var/log/wtmp)纪录 -d 不写wtmp纪录(已包含在选项[-n]中) -f 没有调用shutdown而强制关机或重启 -i 关机(或重启)前关掉所有的网络接口 -p 该选项为缺省选项,就是关机时调用poweroff # 使用-p参数关闭操作系统,等同于poweroff 命令,并关闭了操作系统的电源 [root@web_server01~]# halt -p #使用-f参数强制关机,操作系统电源未关闭: [root@web_server01~]# halt -f
11.6 exit 命令— 注销
-
案例演示
# 注销,退出登录 [root@nginx-server~]# exit
12 操作系统正则符号
12.1 系统特殊符号(路径、重定向、逻辑、引号)
-
案例演示
# 常见的系统符号 1.系统常用符号 # $ ! | 2.路径系统符号 ~ - .. . 3.重定向符号 > >> 2> 2>> < << 4.逻辑符号 && || 5.引号符号 “” , '' , `` # 井号符号:# 表示文件内容注释符号 表示用户命令提示符号 超级用户为 # 普通用户为 $ #引号符号系列: 美元括号: $() 表示命令执行结果留下,用于其他命令调用 单号符号:‘’ 表示输入内容,就是输出内容(所见即所得) 双引号:“” 表示输入内容,就是输出内容,但是部分信息会被解析 反引号:`` 表示命令执行结果留下,用于其他命令调用 # 重定向符号系列 小于符号:单个小于符号< 标准输入重定向符号 两个小于符号: << 标准输入追加重定向符号 大于符号: 单个大于符号 > 标准输出重定向符号 /2> 错误输出重定向符号 两个大于符号: >> 标准输出追加重定向符号 /2>> 错误输出追加重定向符号 # 路径信息系列 单点符号: . 表示当前目录 双点符号: .. 表示上级目录 波浪符号 :~ 表示用户家目录信息 超级用户:/root /home/用户名称 # 逻辑符号系列 并且符号:&& 表示前面的名称执行成功,再执行后面的命令 或者符号:|| 表示前面的名称执行失败,再执行后面的命令
12.2 通配符号(* 、{})
-
案例演示
# 通配符号 * {} 根据文件名称进行匹配信息 * 表示匹配所有内容信息 { } 表示生成序列信息
12.3 系统正则符号()
-
案例演示
# 基础正则符号 基础正则符号: 1.尖角符号:^ 表示以什么字符开头的一行信息 2. 美元符号: $ 表示以什么字符结尾的一行信息 3.空行符号 :^$ 表示过滤空行信息 4.点号符号:. 表示匹配任意一个且只有一个字符 5. *号符号:* 表示前一个字符连续出现了1次或0次以上 6. 点* 符号: .* 表示匹配文件中所有信息(包含空行) ^.* xx 表示从开头到什么字符为止的内容(贪婪匹配) ^.* xx$ 表示以什么开头,并且以什么结尾的信息进行匹配出来 7.转义符号: \ \.$ 表示查询以点 结尾的行信息 \ r 或者\ n 表示陪陪一个换行符号 \ t 表示匹配一个制表符号 8.括号符号:[] 表示包含括号中的信息 [abc] 表示匹配包含a或b或c信息的字符 ^[abc] 表示匹配包含a或b或c信息的字符开头的信息 [a-zA-Z0-9] 找出所有以小写字母大写字母和数字信息的字符 [a-Z]找出所有以小写字母或大写字母组成字符(只能grep/egrep使用) ^[a-z].*[.!]$ 表示以小写字母开头并且以点或叹号结尾的信息过滤出来 9.排除符号:[^] 表示排除括号中信息的 [^abc] 表示排除包含a或b或c信息的字符 ^[^abc] 表示排除包含a或b或c信息的字符开头的行(不包含空行) [a-z0-9_]+\@[a-z0-9_]+\.[a-z]{ 2,4} 匹配一个邮箱地址 [0-9]{ 1,3}\.[0-9]{ 1,3}\.[0-9]{ 1,3}\.[0-9]{ 1,3} 匹配IP地址 # 扩展正则表达式 1.加号符号:+ 表示前一个字符连续出现了1次或多次以上 2.竖线符号:| 表示匹配多个满足条件的信息(或者) 3.括号符号:() 表示匹配一个整体信息 4.括号符号:{ } 表示定义前面字符出现次数 5.问号符号:? 表示定义前面字符出现0次或1次
13 shell 常用命令
13.1 find 命令 —查找和搜索文件
-
案例演示
# find命令可以根据给定的路径和表达式查找的文件或目录。find参数选项很多,并且支持正则,功能强大。和管道结合使用可以实现复杂的功能,是系统管理者和普通用户必须掌握的命令。 # 常用参数 -name 按名称查找 -size 按大小查找 -user 按属性查找 -type 按类型查找 -iname 忽略大小写 处理动作:默认为显示到屏幕上 -print 显示 -ls 类似ls -l的形式显示每一个文件的详细信息 -delete 删除查找到的文件 -fls /path/to/somefile 查找到的所有文件的长格式信息保存至指定文件中 -ok COMMAND {} \; 对查找到的每个文件执行COMMAND,每次操作都需要用户确认 -exec COMMAND {} \; 对查找到的每个文件执行COMMAND,操作不需要确认 #找名字是 abc的 [root@localhost ~]# find / -name abc /root/abc /opt/abc #忽略大小写的 [root@localhost ~]# find / -iname abc /root/abc /opt/abc /opt/ABC #找没有user的 [root@localhost ~]# find / -nouser tom #找目录 [root@localhost ~]# find -type d . ./a ./a/b ./a/b/e #小于1m的文件 [root@localhost ~]# find -size -1M 小于1m的文件 ./00:00:00 ./2021 # 大于1k的文件 [root@localhost ~]# find -size +1k . ./.bash_history ./anaconda-ks.cfg #一分钟前改变的 [root@localhost ~]# find -mmin +1 一分钟前改变的 ./.bash_logout ./.bash_profile ./.bashrc # 必须是目录,名字是 5的目录 [root@localhost ~]# find -type d -name 5 ./5 # 必须是文件,名字是5 的文件 [root@localhost ~]# find -type f -name 5 [root@localhost ~]# #组合命令 [root@localhost ~]# find -type d -name 5 -ls 组合命令 33576693 0 drwxr-xr-x 2 root root 6 Apr 8 10:25 ./5 [root@localhost ~]# #查找 名字为he.txt的文件,并且打印出来 [root@localhost ~]# find -type f -name he.txt -print ./he.txt [root@localhost ~]# #查找名字是 5的文件,并删除 [root@localhost ~]# find -type f -name 5 -delete # 将当前文件 名为 .sh 的文件移动到 /OPT下 [root@localhost opt]# find ./ -type f -name *.sh -exec mv {} /opt/ \; #查找最近30分钟修改的当前目录下的.php文件 [root@web_server01~]# find . -name '*.php' -mmin -30 -ls 134398238 4 -rw-r--r-- 1 root root 27 Sep 13 09:12 ./index.php [root@web_server01~] #查找最近24小时修改的当前目录下的.php文件 [root@web_server01~]# find . -name '*.php' -mmin -0 #查找当前目录下,最近24-48小时修改过的常规文件。 [root@web_server01~]# find . -type f -mtime 1 #查找当前目录下,最近1天前修改过的常规文件。 [root@web_server01~]# find . -type f -mtime +1
13.2 grep 命令 —文本过滤
-
实战演示
# 常用选项: -e的作用是匹配多个表达式; -R递归,-n表示匹配的行号,-o只输出匹配内容,-E支持扩展正则表达式; -c统计匹配次数,-v取反; -l显示匹配的文件名,-L显示不匹配的文件名; -A显示匹配行后的行数、-B显示匹配行前的行数。 grep -B n 显示指定信息前几行内容 grep -A n 显示指定信息后几行内容 grep -C n 显示指定信息前后几行内容 grep -c 显示指定信息在文件中有多少行出现 grep -v 进行取反或者排除 grep -E/egrep 识别扩展正则符号 grep -o 显示过滤过程信息 grep -n 过滤信息并显示信息行号 grep -i 过滤信息忽略大小写 #查看系统内存、缓存、交换分区-e的作用是匹配多个表达式 [root@web_server01~]# cat /proc/meminfo |grep Men -e Cache -e Swap grep: Men: No such file or directory [root@web_server01~]# cat /proc/meminfo |grep -e Mem -e Cache -e Swap MemTotal: 926264 kB MemFree: 205068 kB MemAvailable: 645276 kB Cached: 554564 kB SwapCached: 0 kB SwapTotal: 1572860 kB SwapFree: 1572860 kB #查找/etc目录下的所有文件中的邮件地址;-R递归,-n表示匹配的行号,-o只输出匹配内容,-E支持扩展正则表达式, [root@web_server01~]# grep -R -o -n -E '[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}' /etc/ /etc/grub.d/00_tuned:6:jskarvad@redhat.com /etc/libreport/events.d/abrt_event.conf:102:password@server.name /etc/libreport/plugins/ureport.conf:8:foo@example.com Binary file /etc/alternatives/libnssckbi.so.x86_64 matches Binary file /etc/alternatives/nmap matches /etc/alternatives/jre/THIRD_PARTY_README:429:policy@w3.org /etc/alternatives/jre/THIRD_PARTY_README:1112:team@lists.sour /etc/alternatives/jre/THIRD_PARTY_README:1146:team@lists.sour #查找/etc/目录下文件中包含“HOSTNAME”的次数,-c统计匹配次数,-v取反 [root@ns ~]# grep -R -c 'HOSTNAME' /etc/ |grep -v "0$" #查找包含“HOSTNAME”的文件名,-l显示匹配的文件名,-L显示不匹配的文件名 [root@web_server01~]# grep -R -l 'HOSTNAME' /etc/ [root@web_server01~]# dmesg | grep -n --color=auto 'eth' #查找内核日志中eth的行,显示颜色及行号 [root@web_server01~]# dmesg | grep -n -A3 -B2 --color=auto 'eth' #用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,在关键字所在行的前两行与后三行也一起找出出来显示 #统计系统中能登录的用户的个数 [root@web_server01~]# cat /etc/passwd |grep -c bash$ [root@web_server01~]# cd /tmp [root@web_server01~]# touch /tmp/{123,123123,456,1234567}.txt [root@web_server01~]# ls |grep -E '(123)+' [root@web_server01~]# ls |grep '\(123\)\+' [root@web_server01~]# ls |egrep '(123)+' #统计httpd进程数量 [root@web_server01~]# ps -ef |grep -c httpd #显示games匹配的“-C”前后4行 [root@web_server01~]# grep -C 4 'games' --color /etc/passwd #查看adm组的信息 [root@web_server01~]#grep ^adm /etc/group #获取网卡名称 [root@web_server01~]# ip a |grep -E '^[0-9]' |awk -F : '{print $2}' \ #截取ip地址,[^ ]*表示以非空字符作为结束符,[0-9.]*表示数字和点的组合 [root@ns ~]# ifconfig eth0 |grep -E -o 'inet addr:[^ ]*' |grep -o '[0-9.]*' #截取MAC地址 [root@web_server01~]# ifconfig eth0 |grep -i hwaddr |awk '{print $5}'
13.3 sed 命令 —流编辑器,实现对文本的增删改查
-
案例演示
# sed流编辑器:实现对文本的增删改查 1.改(替换):语法sed -i '/s/#/#/g' 文件名 # 将网卡配置文件的 dhcp 替换成 static 的 [root@web_server01~]# sed -i 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eth1 # 准备测试内容 [root@web_server01~]# vim ip ##编写测试文件 IP1=dhcp IP2=dhcp IP=dhcp :wq #将所有的dhcp替换为static [root@web_server01~]# sed -i 's/dhcp/static/g' ip #将IP1开头的行替换 [root@web_server01~]# sed -i '/^IP1/s/static/dhcp/g' ip #指定特定行号2行替换 [root@web_server01~]# sed -i '2s/static/dhcp/g' ip #查看并显示行号 [root@web_server01~]# cat -n /etc/selinux/config #开启selinux [root@web_server01~]# sed -i '7s/disabled/enforcing/g' /etc/selinux/config # 关闭selinux [root@web_server01~]# sed -i 's/enforcing/disabled/g' /etc/selinux/config 2.删:sed '/表达式/d' 文件 #添加空行 [root@web_server01~]# vim ip #删除空行并显示在屏幕上 [root@web_server01~]# sed '/^$/d' ip #删除包含IP1的行 [root@web_server01~]# sed -i '/IP1/d' ip #删除以IP2开头的行 [root@web_server01~]# sed -i '/^IP2/d' ip #删除第二行 [root@web_server01~]# sed -i '2d' ip 3.增:sed ' /表达式/a "需要添加的文字"' 文件 #每一行后都加上IP3=static [root@ns ~]# sed 'a IP3=static' ip #只在第3行后加上IP3=static,并显示不修改 [root@ns ~]# sed '3a IP3=static' ip #只在第3行前加上IP3=static,显示不修改 [root@ns ~]# sed '3i IP3=static' ip #修改,不显示 [root@ns ~]# sed -i '3a IP3=static' ip #在以IP3开头的行后添加 [root@ns ~]# sed -i '/^IP3/a "test add"' ip 4.查:sed -n '/表达式/p' 文件 #查看第二行 [root@web_server01~]# sed -n '2p' /etc/hosts #查看包含www的解析记录 [root@web_server01~]# sed -n '/www/p' /var/named/chroot/var/named/linuxfan.cn.zone #查看以.100结尾的行 [root@web_server01~]# sed -n '/.100$/p' /var/named/chroot/var/named/linuxfan.cn.zone #从第二行,每隔两行显示 [root@web_server01~]#sed -n '2~2p' ip # sed 取出IP地址 [root@web_server01~]# ip add show eth0|sed -n '3p' inet 10.0.0.7/24 brd 10.0.0.255 scope global noprefixroute eth0 [root@web_server01~]# ip a s eth0|sed -n '3p'|sed -nr 's#^.*et (.*)/24.*eth0$#\1#gp' 10.0.0.7
13.4 awk 命令 — 指定分隔符,提取行
-
演示案例
# AWK 介绍 awk的作用是将文件格式化(根据你的要求排版,注意区别于分区的格式化)后显示信息。 #语法: awk [选项] '模式{ 动作(action) }' 文件1 文件2 ... 最常见的动作:print,printf,BEGIN(开始处理第一行文本之前的操作),END(处理完最后一行文本之后的操作) #AWK 变量 FS:列分隔符,默认位空白 RS:行分隔符,默认位换行符 OFS:输出列分隔符 ORS :输出行分隔符 awk内置变量 NR:处理中行数 FNR:单个文件的行数 NF:列的个数 #awk的基本原理特征: 1)每一次取一行 2)根据指定的分隔符(不指定为空白字符)将该行切割为列,使用$0(整行),$1,$2,$3...(第一列,第二列,...) 3)可以指定行号,列号,切割符,操作后分隔符 # 常用参数 -F 指定输入时用到的字段分隔符 -v 自定义变量 -f 从脚本中读取awk命令 -m 对val值设置内在限制 #打印每一行的第二和第三个字段: [root@web_server01~]# awk '{print $2,$3}' hh.txt hello world 10.0.0.1 #以截取eth1 的IP 地址: [root@web_server01~]# ifconfig eth1|grep netmask|awk '{print $2}' 172.16.1.7 # 截取eht0 的IP 地址 [root@web_server01~]# ip address show eth0 |awk 'NR==3' inet 10.0.0.7/24 brd 10.0.0.255 scope global noprefixroute eth0 [root@web_server01~]# ip address show eth0 |awk 'NR==3' |awk '{print $2}' 10.0.0.7/24 [root@web_server01~]# 正则表达式(regexp),格式为:/regular expression/ [root@web_server01~]# awk -F : '/^h/{print $1}' /etc/passwd halt hbs [root@web_server01~]# 表达式(expression),值为非0或为非空是满足条件,如$1 ~ /foo/或 $1 == "root" #打印普通用户 [root@web_server01~]# awk -F : '$3>=500{print $1,$3,$7}' /etc/passwd polkitd 999 /sbin/nologin nginx 1001 /sbin/nologin hbs 1002 /bin/bash rivers 1003 /bin/bash #UID在10-100之间的用户 [root@web_server01~]# awk -F : '$3+1<=100&&$3+1>=10{print $1,$3,$7}' /etc/passwd operator 11 /sbin/nologin games 12 /sbin/nologin ftp 14 /sbin/nologin nobody 99 /sbin/nologin dbus 81 /sbin/nologin tss 59 /sbin/nologin sshd 74 /sbin/nologin postfix 89 /sbin/nologin ntp 38 /sbin/nologin named 25 /sbin/nologin [root@web_server01~]# #检查未初始化密码的用户 [root@web_server01~]# awk -F : '$2=="!!"{print $1,$2}' /etc/shadow systemd-network !! dbus !! polkitd !! tss !! abrt !! sshd !! postfix !! ntp !! nginx !! rivers !! named !! #打印密码为空的用户 [root@web_server01~]#awk -F : '$2==""{print $1}' /etc/shadow
14 系统资源/进程先关命令
14.1 ps 命令 — 查看系统进程信息
-
案例演示
# 常用参数 ps 查看系统进程信息 ps -ef 查看所有详细的进程信息 # 查看httpd 进程 [root@web_server01~]# ps -ef |grep httpd root 11176 1 0 15:03 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND apache 11177 11176 0 15:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 11178 11176 0 15:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 11179 11176 0 15:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 11180 11176 0 15:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 11181 11176 0 15:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND root 12336 11691 0 21:26 pts/0 00:00:00 grep --color=auto httpd
14.2 kill命令 — 删除指定进程
-
案例演示
kill pid 删除指定pid号码的进程 kill -9 pid 强制删除指定pid号码的进程 [root@web_server01~]# kill -9 11177
14.3 systemctl命令 —管理服务程序的运行状态
-
案例演示
# 常用参数 systemctl start 服务名称 --- 启动服务 systemctl stop 服务名称 --- 停止服务 systemctl restart 服务名称 --- 重启服务 systemctl status 服务名称 --- 查看服务详细的运行状态 systemctl disable 服务名称 --- 让服务开机不要运行 systemctl enable 服务名称 --- 让服务开机运行 systemctl is-active 服务名称 --- 检查确认服务是否运行 systemctl is-enabled 服务名称 --- 检查确认服务是否开机运行 # 一个命令关闭 开机自启动/关闭防火墙 [root@web_server01~]# systemctl disable firewalld --now [root@web_server01~]#
14.4 uptime 命令 — 查看系统负载
-
案例演示
[root@web_server01~]# uptime 04:15:24 up 2 days, 13:05, 1 user, load average: 0.01, 0.02, 0.05 [root@web_server01~]# 现在时间、系统已经运行了多长时间、目前有多少登录用户、load average:系统在过去的1分钟、5分钟和15分钟内的平均负载。 load average:这三个值的大小一般不能大于系统CPU的个数,例如,本输出中系统有8个CPU,如果load average的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,倒不用担心,一般不会影响系统性能。 [root@web_server01~]# uptime -p #以漂亮的格式显示机器正常运行的时间 up 2 days, 13 hours, 9 minutes [root@web_server01~]#uptime -s #系统自开始运行时间 年-月-日 小时-分钟-秒 2021-06-08 15:09:34 [root@web_server01~]# uptime -h #显示帮助信息 服务器1: load average: 0.15, 0.08, 0.01 1核 服务器2: load average: 4**.15,** 6**.08,** 6**.01** 1核 服务器3: load average: 10**.15,** 10**.08,** 10**.01** 4核 答案:服务器2
14.5 vmstat 命令 —监控CPU
-
案例演示
[root@web_server01~]#vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 3059368 2104 230268 0 0 0 0 28 26 0 0 100 0 0 r列表示运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。 b列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。 us列显示了用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。 sy列显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。 根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。
14.6 top命令 —实时监控系统CPU
-
案例演示
[root@web_server01~]# top top - 04:50:43 up 2 days, 13:41, 1 user, load average: 0.10, 0.06, 0.06 Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 3865308 total, 2912528 free, 573852 used, 378928 buff/cache KiB Swap: 524284 total, 524284 free, 0 used. 3028580 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 38151 root 20 0 0 0 0 S 0.3 0.0 0:01.93 kworker/0:0 1 root 20 0 125332 3828 2496 S 0.0 0.1 0:04.48 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.33 kthreadd top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。 第一行数据相当于uptime命令输出。11:00:54是当前时间,up 54 days,23:55 是系统已经运行的时间,6 users表示当前有6个用户在登录,load average:16.32,18.75,21.04分别表示系统一分钟平均负载,5分钟平均负载,15分钟平均负载。 平均负载 平均负载表示的平均活跃进程数,包括正在running的进程数,准备running(就绪态)的进程数,和处于不可中断睡眠状态的进程数。如果平均负载数刚好等于CPU核数,那证明每个核都能得到很好的利用,如果平均负载数大于核数证明系统处于过载的状态,通常认为是超过核数的70%认为是严重过载,需要关注。还需结合1分钟平均负载,5分钟平均负载,15分钟平均负载看负载的趋势,如果1分钟负载比较高,5分钟和15分钟的平均负载都比较低,则说明是瞬间升高,需要观察。如果三个值都很高则需要关注下是否某个进程在疯狂消耗CPU或者有频繁的IO操作,也有可能是系统运行的进程太多,频繁的进程切换导致。比如说上面的演示环境是一台8核的centos机器,证明系统是长期处于过载状态在运行。 第二行的Tasks信息展示的系统运行的整体进程数量和状态信息。102 total 表示系统现在一共有102个用户进程,1 running 1个进程正在处于running状态,101 sleeping 表示101 个进程正处于sleeping状态,0 stopped 表示 0 个进程正处于stopped状态,0 zombie表示 有0个僵尸进程。 第3行的%Cpu(s)表示的是总体CPU使用情况。 us user 表示用户态的CPU时间比例 sy system 表示内核态的CPU时间比例 ni nice 表示运行低优先级进程的CPU时间比例 id idle 表示空闲CPU时间比例 wa iowait 表示处于IO等待的CPU时间比例 hi hard interrupt 表示处理硬中断的CPU时间比例 si soft interrupt 表示处理软中断的CPU时间比例 st steal 表示当前系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间比例。 第4,5行显示的是系统内存使用情况。单位是KiB。totol 表示总内存,free 表示没使用过的内容,used是已经使用的内存。buff表示用于读写磁盘缓存的内存,cache表示用于读写文件缓存的内存。avail表示可用的应用内存。 第6行开始往后表示的是具体的每个进程状态: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND PID 进程ID USER 进程所有者的用户名,例如root PR 进程调度优先级 NI 进程nice值(优先级),越小的值代表越高的优先级 VIRT 进程使用的虚拟内存 RES 进程使用的物理内存(不包括共享内存) SHR 进程使用的共享内存 CPU 进程使用的CPU占比 MEM 进程使用的内存占比 TIME 进程启动后到现在所用的全部CPU时间 COMMAND 进程的启动命令(默认只显示二进制,top -c能够显示命令行和启动参数)
14.7 iostat命令 —磁盘I/O性能评估
-
案例演示
iostat被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。 [root@web_server01~]# iostat -bash: iostat: command not found [root@web_server01~]# yum -y install sysstat [root@web_server01~]#iostat -d 1 10 #没隔1秒,持续10次 Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 06/11/2021 _x86_64_ (2 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.08 1.36 0.66 304530 146757 scd0 0.00 0.00 0.00 1028 0 dm-0 0.00 0.01 0.00 2228 0 对上面每项的输出解释如下: kB_read/s表示每秒读取的数据块数。 kB_wrtn/s表示每秒写入的数据块数。 kB_read表示读取的所有块数。 kB_wrtn表示写入的所有块数。 可以通过kB_read/s和kB_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果kB_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果kB_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
14.8 netstat/ss — 显示网络端口状态
-
案例演示
# 常用参数 -a 显示所有连线中的Socket -p 显示正在使用Socket的程序识别码和程序名称 -u 显示UDP传输协议的连线状况 -i 显示网络界面信息表单 -n 直接使用IP地址,不通过域名服务器 # 查看httpd 服务端口状态 [root@web_server01/etc/yum.repos.d]# netstat -lntup|grep httpd tcp6 0 0 :::80 :::* LISTEN 11176/httpd # 显示端口 [root@web_server01/etc/yum.repos.d]# ss -lant State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* ESTAB 0 0 10.0.0.7:22 10.0.0.1:53220 ESTAB 0 52 10.0.0.7:22 10.0.0.1:55483 LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@web_server01/etc/yum.repos.d]#
14.9 firewall-cmd 命令 — 防火墙相关命令
-
案例演示
# 开启/关闭防火墙 systemctl start|stop firewalld.service # 查看防火墙转态 [root@web_server01~]# firewall-cmd --state running [root@web_server01~]# 、 # 查看防火墙配置端口 [root@web_server01~]# firewall-cmd --list-all # 放行防火8080 端口 [root@web_server01~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent success [root@web_server01~]# firewall-cmd --reload success # 查看现有规则 [root@web_server01~]# firewall-cmd --zone=public --list-ports 8080/tcp #添加多个端口 [root@web_server01~]# firewall-cmd --permanent --zone=public --add-port=8080-8083/tcp #删除某个端口 [root@web_server01~]#-cmd --permanent --zone=public --remove-port=81/tcp # 针对某个 IP开放端口 [root@web_server01~]#firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.7" port protocol="tcp" port="6379" accept" # 删除某个IP [root@web_server01~]#firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="10.0.0.7" accept" # 针对一个ip段访问 [root@web_server01~]#firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" accept" [root@web_server01~]#firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="9200" accept"
15.其它命令
-
案例演示
#设置日期 date 查看时间信息和修改时间信息 date "+%F_%T" date -s 设置系统时间 date -d 显示未来或过去的时间信息 # apt 常用命令 #列出所有可更新的软件清单命令:sudo apt update #升级软件包:sudo apt upgrade #列出可更新的软件包及版本信息: apt list --upgradeable #升级软件包,升级前先删除需要更新软件包: sudo apt full-upgrade #安装指定的软件命令: sudo apt install <package_name> #安装多个软件包: sudo apt install <package_1> <package_2> <package_3> #删除软件包命令: sudo apt remove <package_name> #清理不再使用的依赖和库文件: sudo apt autoremove #查找软件包命令: sudo apt search <keyword> #列出所有已安装的包: apt list --installed #列出所有已安装的包的版本信息: apt list --all-versions
常用快捷方式
-
案例演示
# 快捷方式: 01. ctrl+c 中断命令执行操作过程 02. ctrl+l 清屏操作 03. ctrl+d 注销功能 04. tab 补全快捷键 补全目录路径或文件名称信息/命令 05. 方向键上下 调取之前输入过的历史命令 06. ctrl+a 快速将光标移动到行首 a b c d 07. ctrl+e 快速将光标移动到行尾 08. ctrl+左右方向键 按照一个英文单词进行移动光标 09. esc+. 将上一个命令最后一个信息进行调取 10. ctrl+u 将光标所在位置到行首内容进行删除(剪切) 11. ctrl+k 将光标所在位置到行尾内容进行删除(剪切) 12. ctrl+y 粘贴剪切的内容 13. ctrl+s xshell进入到了锁定状态 suo锁 14. ctrl+q 解除锁定状态 quit推出锁定状态 15. ctrl+r 快速搜索历史命令
总结
坚持很难,但最后一定会有所收获。linux 学习的过程是一个很枯燥的事情,对于很多刚入门的人来说,命令太多,参数太多,根本记不住的 困惑,其实作为 过来人,学习方式就是四个字熟能生巧。
我们可以找一个好的教材,然后找一份质量好的视频,看一遍,然后对着教材在学习一遍。形成自己的笔记,建议第一遍纸质的笔记,第二遍可以是电子档的。每一遍都要重复的去实验,做到理论+实践。相信进过1年,你会有质的飞跃。以上的命令总结是平时用的较多,整理的,想起来了的命令,就会慢慢积累,如果你觉得有用,就收藏起来吧!
以梦为马,不负韶华,流年笑掷,未来可期
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133608.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...