linux基础命令

文章目录


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 命令—复制文件或目录

  • 案例演示
# 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
1
2
3
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
chacl   chage   chattr  
[root@web_server01~]# mv /usr/bin/chattr /opt/chattr/
[root@web_server01~]# mv chattr h    -->更改命令,使用别名h隐藏身份
[root@web_server01~]# /opt/ftl/h +i /home/omd/h.txt   -->利用h 行驶chattr命令

# 查看加密信息
lsattr /home/omd/h.txt    -->查看加密信息


#恢复隐藏命令
mv h /usr/bin/chattr
chattr -i /home/omd/h.txt
lsattr /home/omd/h.txt

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

linux磁盘分区

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

linux 磁盘分区实战

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
1
2
12 操作系统正则符号
12.1 系统特殊符号(路径、重定向、逻辑、引号)
案例演示

# 常见的系统符号
1.系统常用符号 # $ ! |  
2.路径系统符号 ~ - .. .
3.重定向符号 >  >>  2> 2>>  < <<
4.逻辑符号  &&  || 
5.引号符号  “” , '' , ``

# 井号符号:#
	表示文件内容注释符号
	表示用户命令提示符号
	超级用户为 #
	普通用户为 $

#引号符号系列:
	美元括号: $()  表示命令执行结果留下,用于其他命令调用
	单号符号:‘’    表示输入内容,就是输出内容(所见即所得)
	双引号:“”      表示输入内容,就是输出内容,但是部分信息会被解析
	反引号:``      表示命令执行结果留下,用于其他命令调用

# 重定向符号系列 
	小于符号:单个小于符号<  标准输入重定向符号
					
	两个小于符号:  <<  标准输入追加重定向符号
				
	大于符号: 单个大于符号  > 标准输出重定向符号 
    					/2> 错误输出重定向符号
							
	两个大于符号: >> 标准输出追加重定向符号  
	            /2>> 错误输出追加重定向符号

# 路径信息系列
		单点符号: .   表示当前目录
			
				
		双点符号: ..   表示上级目录
			
				
		波浪符号 :~  表示用户家目录信息	
			超级用户:/root
			/home/用户名称
# 逻辑符号系列
		并且符号:&&   表示前面的名称执行成功,再执行后面的命令
        
		或者符号:||  表示前面的名称执行失败,再执行后面的命令
						

12.2 通配符号(* 、{})

  • 案例演示
# 通配符号 * {}   根据文件名称进行匹配信息

* 表示匹配所有内容信息

{} 表示生成序列信息
1
2
3
4
5
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命令 —管理服务程序的运行状态
- **案例演示**
```shell
# 常用参数
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 学习的过程是一个很枯燥的事情,对于很多刚入门的人来说,命令太多,参数太多,根本记不住的 困惑,其实作为 过来人,学习方式就是四个字熟能生巧.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值