Bash命令
shutdown/halt/poweroff/reboot
作用:关闭/重启服务器
参数:shutdown -h 将系统关机
-c 取消关机任务
-r 将系统重启
#halt -f 强制关机或重启
#reboot -w 模拟重启过程,将过程写入到日志中
案列:
立即关机:shutdown -h now 等价于halt 等价于halt -f 等价于poweroff
立即重启:shutdown -r now 等价于reboot等价于reboot -w
晚上11点关机 shutdown -h 21:00
5分钟后关机,并通知所有人 shutdown+5 “system will shutdown after 5 minutes”
取消所有关机任务 shutdown -c
whoami命令
作用:打印当前登陆用户
语法:whoami
案列:查询当前登陆的用户名 whoami
who命令
作用:查看当前登陆用户信息
语法:who [参数]
参数:-a 全面信息
-b 系统最近启动时间
-l 系统登录进程
-H 带有列标题打印用户名,终端和时间
-t 系统上次锁定时间
-u 已登录用户列表
-q 列出所有已登录的用户的名称和数量
案列:查看当前登录用户信息 who
查看当前登录用户信息,并加上标题栏 who -H
查看当前全部的登录全部用户信息 who -H -a
查看系统的最近启动时间 who -b
显示终端属性 who -T -H
精简模式显示 who -q
W命令
作用:显示已登录用户
语法:w [参数]
参数:-h 不打印头信息
-u 当显示当前进程和cpu时间时忽略用户名
-s 使用短输出格式
-f 显示用户从哪登录
-o 老式输出
-i 显示IP地址而不是主机名(如果可能)
案列;
显示目前登入系统的用户信息 w
不打印头信息 w -h
显示用户从哪登录 w -f
使用短输出格式 w -s
last命令
作用:显示用户或终端的登录情况
语法:last [选项]
参数:
-R 省略hostname的栏位
-a 把从何处登入系统的主机名称或IP地址,显示在最后一行
-n <显示行数>或-<显示行数> 显示名单的行数
-i 显示IP地址而不是主机名
案列:
显示近期用户或终端的登录情况 last
简略显示,并指定显示的个数 last -n 5 -R 等价于 last -5 -R
最后一列显示主机IP地址 last -n 5 -a -i
users命令
作用:显示当前登录的用户
案列:显示当前登录的用户 users
uname命令
作用:显示系统信息
语法:uname [OPTION]…
参数:-a 显示系统所有相关信息
-m显示计算机硬件架构
-n 显示主机名称
-r 显示内核发行版本号
-s 显示内核名称
-v 显示内核版本
-p 显示主机处理器类型
-o 显示操作系统名称
-i 显示硬件平台
案列:显示系统主机名,内核版本,硬件架构等信息
#uname -a
仅显示主机名 uname -n
仅显示内核发行版本 uname -r
仅显示内核名称 uname -s
仅显示当前系统的硬件平台 uname -i
打印操作系统类型 uname -o
sudo命令
作用:以系统管理员的身份执行指令
语法: sudo [参数]
参数: -l 显示当前用户的权限
-u <用户> 以指定的用户作为新的身份,若不加上此参数,则预设以root作为新的身份
配置文件:/etc/sudoers 授权用户/组 主机=[[切换到哪些用户或组]]命令
查看配置文件 sudo visudo
#sudo vim /etc/sudoers
案列: 列出当期用户的权限 sudo -l
指定用户身份执行命令 sudo -u alvin whoami
以root权限执行上一条命令 sudo !!
id命令
作用 :显示用户ID和组ID
语法:id [参数] [用户名]
参数:-g 显示用户所属群组的ID
-G 显示用户所属附加群组的ID
-n 显示用户,所属群组或附加群组的名称
-r 显示实际ID
-u 显示用户ID
案列: 显示当前用户的所有信息 id
显示指定用户信息 id alvin
显示用户所属群组的ID id -g alvin
显示用户所属附加群组的ID id -G alvin
hostname命令
作用:显示和设置系统的主机名
语法: hostname [参数]
注意:
环境变量HOSTNAME 也保存了当前的主机名 echo $HOSTNAME
使用hostname可临时设置主机名
永久修改主机名 方法1:修改配置文件 /etc/hostname /etc/hosts
方法2:hostnamectl命令 sudo hostnamectl set-hostname<newhostname>
一定要修改/etc/hosts
参数:
-a 显示主机别名
-d 显示DNS域名
-f 显示FQDN名称
-i 显示主机的ip地址
-s 显示短主机名称,在第一个点出截断
-y 显示NIS域名
案列:
显示主机名 hostname
临时改变主机名 hostname newname
显示主机的所有IP地址 hostname -I
dmesg命令
作用:显示开机信息
语法:dmesg [参数]
参数:-c 显示信息后,清除ring buffer中的内容
-s<缓冲区大小>预设值为8196,刚好等于ring buffer的大小
-n 设置记录信息的层级
案列:显示开机信息 dmesg
#dmesg | less
显示和内存,硬盘,USB,TTY相关给的信息dmesg | grep -i memory
dmesg | grep -i dma
dmesg | grep -i usb
dmesg | grep -i tty
显示信息级别 dmesg -x emerg ,alert,…
只输出特定级别的信息 dmesg –lever=err,warn
显示时间戳 dmesg -T
显示原始数据 dmesg -r
清空dmesg 环形缓冲区中的日志 sudo dmesg -c
uptime命令
作用:查看系统启动时间及负载信息
语法:uptime [options]
参数:-p 显示机器正常运行的时间
-s 系统启动时间,格式为yyyy-mm-dd hh mm.ss
案列 显示当前系统运行负载信息 uptime
显示系统正常运行时间 uptime -p
显示系统启动时间 uptime -s
free命令
作用:显示系统内存使用量情况。
语法:free [参数]
参数:-b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s 持续显示内存
-t 显示内存使用总和
-h 以易读的单位显示内存使用情况
输出内容介绍:
Mem 行(第二行)是内存的使用情况
Swap 行 (第三行)是交换空间的使用情况。
Total 列显示系统总的可用物理内存和交换空间大小
Used 列显示已经被使用的物理内存和交换空间
Free 列显示还有多少物理内存和交换空间可使用
Shared 列显示被共享使用的物理内存大小。
Buff/cache 列显示被buffer 和cache使用的物理内存大小
Available 列显示还可以被应用程序使用的物理内存大小。
案例 以默认的容量单位显示内存使用量信息 free
以MB为单位显示内存使用量信息 free -m
以易读的单位显示内存使用量信息 free -h
以易读的单位显示内存使用量信息,每个3秒刷新一次 free -hs 3
ulimit命令
作用; ulimit命令是shell的内建命令,同来控制shell程序的资源;通过对资源的控制可以达到系统调优的作用。
语法:ulimit [参数]
参数:-a 显示目前资源限制的设定
-c <core文件上限> 设定core文件的最大值,单位为区块。
-d <数据节区大小> 程序数据节区的最大值,单位为KB
-f <文件大小> shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制
-m <内存大小> 指定可使用内存的上限,单位为KB
-n <文件数目> 指定同一时间最多可开启的文件数
-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。
-s <堆叠大小> 指定堆叠的上限,单位为KB.
-S 设定资源的弹性限制
-t <CPU时间> 指定CPU使用时间的上限,单位为秒/
-u<程序数目> 用户最多可开启的程序数目。
-v<虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB
案列: 显示系统资源的设置 ulimit -a
设置单一用户程序数目上限 ulimit -u 500
将每个进程可以打开的文件数目加大到4096 ulimit – n 4096
指定可使用的虚拟内存上限为12800KB ulinit -v 12800
指定CPU使用时间的上限为2s ulinit -t 2
Init命令
作用:切换系统运行级别
案列:
Init 0 关机
Init 1 单用户模式;也就是说只能有一个用户在这边操作
Init 2多用户,没有NFS不联网
Init 3 切换到多用户-命令行模式
Init 4 没有用到
Init 5 图形化界面模式
Init 6 重新启动
pwd命令
作用显示当前路径
rename命令
作用:用字符串替换的方式批量改变文件名
语法:rename ‘s/old-name/new-name/’ files
原字符串:将文件名需要替换的字符串;
目标字符串:将文件名中含有的原字符替换成目标字符串;
文件:指定要改变文件名的文件列表
通配符: ?可替代单个字符
*可替代多个字符
参数:-n 模拟运行,实际命令没进行重命名
-v输出每步执行信息
-f 强制改写
案列:将myfile.txt改成myfile.doc rename ‘s/.txt/.doc/’ myfile.txt
模拟将file1.txt,file2.txt,file3.txt改为file01.txt,file02.txt,file03.txt,
#rename -n ‘s/file/file0’ file*
basename命令
作用:提取一个文件完整的路径名的文件名;还可以根据需求删除指定的后缀。
语法:basename NAME [SUFFIX]
Basename OPTION…NAME…
参数:-a 支持处理多个文件
-s 删除指定后缀
案例: 提取文件名 basename /ect/passwd
提取目录名(删除最后的/)basename /usr/local/
提取多个输入 base -a /etc/passwd /uer/local/
删除指定后缀 basename /etc/sysctl.conf .conf
basename -s .conf /etc/sysctl.conf
dirname命令
作用:去除文件名中的非目录部分 等价于 他会把一个路径名中的目录部分提取出来
语法:dirname [OPTION] NAME…
案列:提取文件的路径:dirname /usr/bin/cat
提取目录的路径:dirname /home/liangxu/commands
Chattr命令
作用:更改文件属性 (除了读写执行普通权限之外,还有很多隐藏的权限属性,下面列出来)
语法: chattr [-pRVf] [-+=aAcCdDeijPsStTuFx] [-v version] files...
属性:A:即Atime,告诉系统不要修改对这个文件的最后访问时间
S: 即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
b: 不更新文件或目录的最后存取时间。
c: 将文件或目录压缩后存放。
d:当dump程序执行时,该文件或目录不会被dump备份
D: 检查压缩文件中的错误
i:即immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
s: 彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
u: 当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
t:文件系统支持尾部合并(tail - merging)
X:可以直接访问压缩文件的内容。
参数:-R递归处理目录下的所有文件
-v 设置文件或目录版本
-V 显示指令执行过程
+开启文件或目录的该项属性
-关闭文件或目录的该项属性
=指定文件或目录的该项属性
案列:防止某个关键文件被修改 chattr +i file.txt
解锁 chattr -i file.txt
只允许文件追加内容(对日志文件特别有用) chattr +a file.txt
对一个目录中的所有文件添加限制 chattr -R +i dir
查看文件属性 lsattr file.txt
file命令
作用:识别文件类型
语法:file [参数] 文件
参数:-b 列出文件类型,不显示文件名称
-c 详细显示指令执行过程
-f 指定名称文件,显示多个文件类型信息、
-L 直接显示符号连接所指向的文件类别
-m 指定魔法数字文件
-z 尝试去解读压缩文件的内容
-i 显示MIME类别
案列; 查看文件的类型 file file.txt file dir file /dev/sda
查看文件类型,但不显示文件名 file -b file.txt
显示MIME类别 file -i file.txt
查看某个符号链接文件(快捷方式)的类型 file /dev/cdrom
直接查看某个符号链接文件(快捷方式)所对应的目标文件的文件类型
file -L /dev/cdrom
md5sum命令
作用:生成和校验文件的MD5值
语法: md5sum [OPTION]…[FILE]…
参数: -b 以二进制模式读取文件
-t 以文本模式读入文件内容
-c 根据已生成的msd5值,对现存文件进行校验
--status 校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断
案列: 生产file.txt文件的md5值 md5sum file.txt
不同模式计算同一个文件的md5值 md5sum-b file.txt ; md5sum-t file.txt
将生成md5值重定向到指定的文件 md5sum file.txt > file md5
Md5校验 md5sum -c file.md5
Md5校验,不显示任何输出,用返回码表示成功与否
md5sum-c –status file.md5
echo $?
stat命令
作用:显示文件或文件系统的详细信息
语法:stat [OPTION]…FILE…
参数:-L支持符号链接
-f 显示文件系统的信息
-t 以简洁的方式输出
三种时间:atime : access time访问时间
读取文件(more/less/cat/tail),修改文件(vim/nano)时改变
mtime : modify time 修改时间
(vim/nano)时改变
ctime : change time 状态改变时间
修改文件(vim/nano),文件属性变化(chmod / chown)时改变。
案列:查看文件file.txt的信息 stat file.txt
查看file.txt文件所在文件系统信息 stat -f file.txt
以简洁方式输出信息 stat -t file.txt
tree命令
作用:以树状图列出目录内容
语法:tree [参数]
参数:-a 显示所有文件和目录
-L 层级显示
-t 用文件和目录的更改时间排序
-r 用文件和目录的更改时间倒序排序
-f 在每个文件或目录之前,显示完整的相对路径名称
-d 显示目录名称而非内容
案列:显示当前目录下的文件和目录 tree
显示所有文件和目录 tree -a
只显示目录 tree -d
只显示n层目录 (n为数字)tree -L 2
显示权限信息 tree -p
用文件和目录的更改时间排序 tree -t
以相反次序排序 tree -r
显示完整的相对路径 tree -f
locate命令
作用:快速查找文件或目录
语法:locat [参数] [文件
参数: -i 忽略大小写
案列:查找系统中所有file.txt 文件
#locate file.txt
搜索路径中包含/etc/sh的文件
#locate /etc/sh
查找和whereis相关的所有文件
#locate whereis
查找/home/liangxu/commands/locate 目录下所有以f开头的文件,不区分大小写
#locate -i locate/f
cat命令
作用:在终端上显示文件内容
语法:cat [OPTION]…[FILE]…
参数:-n 显示行数(空行也编号)
-s 去除重复的空行
-b 显示行数 (空行不编号)
-E 每行结束处显示$符号
-T 将TAB字符显示为 ^l符号
案列:查看file.txt文件内容
#cat file.txt
查看多个文件内容
#cat file1.txt file2.txt
查看file.txt文件内容,并显示行数编号
#cat -n file.txt
去除重复的空行
#cat -s file.txt
重定向文件内容
#cat file.txt > file1.txt 如果file1.txt不存在,则创建,并且内容会被覆盖
#cat file.txt >> file1.txt 如果file1.txt不存在,则创建,并且内容会被追加到末尾
将file1.txt 和 file2.txt 合并为一个文件
#cat file1.txt file2.txt > combinedfile.txt
使用cat创建文件(按键Enter入文本,完成后按CRTL+D保存文件)
#cat > file.txt
join命令
作用:连接两个文件
语法:join [OPTION]…FILE1 FILE2
参数:
-a1或-a2 除了显示共同域的记录之外,-a1显示第一个文件没有共同域的记录,-a2显示第二个文件中没有共同域的记录
-o 设置结果显示的格式
-t 改变域的分割符
-v1或-v2不显示共同域的记录之外,-v1显示第一个文件没有共同域的记录,-v2显示第二个文件中没有共同域的记录
-j 指定一个域作为匹配字段
案列:
连接两个文件: 默认以第一列作为连接字段 join file1.txt file2.txt
显示左边文件中的所有记录(右边文件中没有匹配的不显示) join -a1 file1.txt file2.txt
显示右边文件中的所有记录(左边文件中没有匹配的不显示) join -a2 file1.txt file2.txt
全连接(显示左边和右边所有记录)join -a1 -a2 file1.txt file2.txt
指定输出字段:join -o 1 2 1 3 2 3 file1.txt file2.txt
指定分隔符: join -t ‘’ file1.txt file2.txt
tr命令
作用: 转换或删除文件中的字符
语法:tr [OPTION]…SET1 [SET2]
参数:-c 反选设定字符。也就是符合SET1的部分不做处理,不符合的剩余部分才进行转换。
-d 删除子集合中出现的所有字符
-s 缩减连续重复的字符成指定的单个字符
可以使用的字符类:
字母和数字 [:alnum:]
字母 [:alpha:]
案列:
大小写转换
tr “[a-z]” “[A-Z]” < file.txt 等价于 cat file.txt | tr a-z A-Z 等价于 echo “Hello World” | tr [:lower:] [:upper:]
(大小写互换) echo “Hello World” | tr ‘[A-Za-z]’ ‘[a-zA-Z]’
删除字符
删除小写字母 echo “abcABdefCD” | tr -d “[a-z]”
删除数字 echo “abcABdefCD123” | tr -d 0-9
删除空格和tab符 echo “ Hello World “ | tr -d ‘[ \t]’
删除不在指定集合中的字符 echo -e “abc123*&\n def888” | tr -d -c ‘0-9 \n’
删除重复字符,只保留一个
压缩重复的空白行 echo -e “1\n\n2\n\n\n3” | tr -s ‘\n’
删除字符集中的重复字符 echo “Hellooo Linuxxxxx” | tr -s “[ xo]”
将多个连续空格合并为一个空格,并将空格替换为破折号‘-’ echo “2022 05 16” | tr -s ‘ ‘ ‘-‘
将制表符转换为空格
echo -e “hello\tworld” | tr ‘\t’ ‘ ‘
service命令
service 命令仅支持基本的 LSB 操作(start、stop、restart、try-restart、reload、reload-or-restart、try-reload-or-restart、force-reload、status、condrestart)。对于其他操作,请尝试使用 systemctl。
作用:控制系统服务
语法:service [参数]
参数:--status-all 显示所有服务的状态
启动服务 start
停止服务 stop
重新启动服务 restart
查看服务运行状态 status
重新载入服务配置 reload
案列 查看系统中所有服务现在的运行状态 service --status-all
查看sshd 运行状态 service sshd status
启动sshd服务 service sshd start
停止sshd服务 service sshd stop
重启sshd服务 service sshd restart
vmstat命令
作用:显示虚拟内存状态
语法:vmstat [选项] [时间间隔] [次数]
参数:-m :显示slab信息
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量
#delay:刷新时间间隔,如果不指定,只显示一条结果。
#count:刷新次数。如果不指定刷新ci
-d :显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有k, K, m, M, 分别代表1000,1024,1000000,1048576字节(byte).默认单位为K(1024bytes)
案列:
#vmstat 显示虚拟内存的使用情况
#vmstat 1 指定状态信息刷新的时间间隔为1秒
#vmstat -a 显示活跃和非活跃内存统计信息
#vmstat -f 显示从系统启动以来的fork数量
#vmstat -s 显示内存使用的详细信息
#vmstat -d 显示磁盘相关统计信息(磁盘的读/写情况)
#vmstat-p /dev/sda1 查看/dev/sda1磁盘分区的读/写情况
#sudo vmstat -m 显示系统的slabinfo
iostat命令
作用:监视系统输入输出设备和CPU的使用情况
语法:iostat [参数] [设备]
参数:-c 仅显示CPU使用情况
-d 仅显示设备利用率
-k 显示状态以千字节每秒为单位,而不使用块每秒
-m 显示状态以兆字节每秒为单位
-p 仅显示块设备和所有被使用的其他分区的状态
-t 显示每个报告产生是的时间
-x 显示扩展状态
案列:显示所有设备负载情况 iostat
每隔2秒显示一次,总共显示3次 iostat 2 3
显示指定磁盘信息iostat -d sda1
显示tty和Cpu信息 iostat -t
以M为单位显示所有信息 iostat -m
查看TPS和吞吐量信息 iostat -d -k 11
查看磁盘I/O的详细情况 iostat -x /dev/sda1
查看设备使用率(%util),响应时间(await)
查看cpu状态 iostat -c 1 3
ipcs命令
作用:显示进程间通讯设备的信息
语法:ipcs [参数]
参数
默认的输出信息 -a
打印出使用共享内存进行进程间通信的信息 -m
打印出使用消息队列进行进程间通信的信息 -q
打印出使用信号进行进程间通信的信息 -s
案列:
显示所有的IPC ipcs ipcs -a
输出信息的详细变化时间 ipcs -t
输出ipc方式的进程ID ipcs -p
输出ipc方式的创建者/拥有者ipcs -c
输出当前系统下ipc各种方式的状态信息ipcs -u
查看各个资源的系统限制信息ipcs -l
ipcrm命令
作用:删除一个或更多的消息队列,信号量集或者共享内存标识。
语法:ipcrm [options]
案列:通过id删除共享内存 ipcrm -m 262144
通过key删除共享内存ipcrm -M 0X55
通过id删除消息队列 ipcrm -q 252432
通过key删除消息队列 ipcrm -Q 0X88
通过id删除信号量 ipcrm -s 242438
通过key删除信号量 ipcrm -S 0X65
删除所有共享内存,信号量和消息队列 ipcrm -a
删除所有共享内存,信号量和消息队列,并且显示过程 ipcrm -v -a
route命令
作用:显示并设置路由
语法:
参数:-n :不要使用通讯协定或主机名称,直接使用IP或port number
-net:表示后面接的路由为一个网域:
-host:表示后面接的为连接到单部主机的路由
-netmask:与网域有关,可以设定netmask决定网域的大小
-gw:gateway的简写,后续接的IP的数值噢,与dev不同
-dev:如果只是要指定由哪一块网卡连线出去,则使用这个设定,后面接eth0等
Flag:
U up 表示此路由当前为启动状态
H host,表示此网关为一主机
G gateway,表示此网关为一路由器
R reinstate route,使用动态路由重新初始化
D dynamically,此路由是动态性地写入
M Modified,此路由是由路由守护程序或导向器动态修改
!表示此路由当前为关闭状态
案例:
显示当前路由 route route -n
添加网关/设置网关 route add -net 224.0.0.0 netmask 240.0.0.0 dev ens33
屏蔽一条路由 route add -net 224.0.0.0 netmask 240.0.0.0 reject
删除路由记录 route del -net 224.0.0.0 netmask 240.0.0.0
route del -net 224.0.0.0 netmask 240.0.0.0 reject
ping命令
作用:测试主机间网络连通性
语法:ping [参数] 目标主机
参数:-c 指定发送报文的次数
-i 指定收发信息的时间时间
-s 设置数据包的大小
-t 设置存活数值TTL的大小 linux系统的TTL值为64或255
案列:测试与百度网站的连通性 ping www.baidu.com
连续 ping 4次 ping -c 4 www.baidu.com
连续 ping 4次,间隔3秒 ping -c 4 -i 3 www.baidu.com
测试局域网连通性 ping 192.168.107.128
设置数据包为1024字节,TTL为255 ping -s 1024 -t 255 www.baidu.com
traceroute命令
作用:追踪数据包在网络上的传输时的全部路径
语法:tranceroute [参数] [域名或者IP]
参数:-m <存活数值>设置检测数据包的最大存活数值TTL的大小
-n 直接使用IP地址而非主机名称
-p <通信端口>设置UDP传输协议的通信端口
-r 忽略普通的Routing Table ,直接将数据包送到远端主机上
-w 设置等待远端主句回报的时间
案列:追踪本地数据包到百度的传输路径 traceroute www.baidu.com
跳数设置 traceroute -m 7 www.baidu.com
显示ip地址,不查主机名 traceroute -n www.baidu.com
把探测包的个数设置为值4 traceroute -q 4 www.baidu.com
把对外发探测包的等待响应时间设置为3秒 traceroute -w 3 www.baidu.com
探测包使用的基本UDP端口设置6888 traceroute -p 6888 www.baidu.com
绕过正常的路由表,直接发送到网络相连的主机 traceroute -r www.baidu.com
Ifconfig命令
重启后配置参数会实现。
参数 :
#add<地址>设置网络设备IPv6的IP地址
#del<地址>删除网络设备IPv6的IP地址
#down关闭指定的网络设备
#up启动指定的网络设备
IP地址 指定网络设备的IP地址
案列:
显示网络设备信息 ifconfig
关闭打开指定网卡ifcong eth0 down/up
配置IPV4地址:sudo
ifcong eth0 192.168.1.156 #为网卡eth0配置IP地址
ifcong eth0 192.168.1.156 netmask 255.255.255.0 #加上子网掩码
ifcong eth0 192.168.1.156 netmask 255.255.255.0 broadcast 192.168.1.255 #再加上广播包
为网卡配置和删除IPV6地址
ifcong eth0 add 33ffe:3240:800:1005:2/63 #为网卡eth0设置IPv6地址
ifcong eth0 del 33ffe:3240:800:1005:2/63 #为网卡eth0删除IPv6地址
修改MAC地址
ifcong eth0 down/up
ifcong eth0 hw ether 00:AA:BB:CC:DD:EE
启用和关闭ARP协议
ifcong eth0 arp #开启
ifcong eth0 -arp #关闭
设置最大传输单元 ifcong eth0 mtu 1500 #设置能通过的最大数据包大小为1500bytes
ifup/ifdown命令
作用:激活/禁用网路接口
语法:ifup(网络接口)
Ifdown(网络接口)
案列:sudo ifup ens33
Sudo ifdown ens33
ftp命令
作用:文件传输协议客户端
语法:ftp [参数] [主机名或IP]
增加ftp写权限:
第一步:sudo gedit /etc/vsftpd.conf
第二步:去除#write_enable=YES前的#
第三步:sudo service vsftpd restart
案列:
安装ftp sudo apt install vsftpd
建立FTP连接 ftp 192.168.107.133
下载一个文件 get file.txt
下载多个文件 mget file1.txt file2.txt
上传一个文件 put newfile.txt
上传多个文件mput newfile1.txt newfile2.txt
sftp命令
作用:交互式文件传输程序
语法:sftp [参数] [IP或主机名]
案列:
使用SFTP进行连接服务器 sftp liangxu@192.168.107.133
指定端口连接 sftp -P 30 liangxu@192.168.107.133
查看sftp支持的命令 help 等价于 ?
从远程服务器下载文件到本地 get file.txt
从远程服务器下载目录到本地 get -r dir
从本地上传文件到远程服务器 put newfile.txt
从本地上传目录到远程服务器 put -r newdir
执行本地Shell命令 !command !echo hello world
退出 bye 等价于 exit
lftp命令
作用:一款优秀的文件客户端程序
语法:lftp(选项)(参数)
案列:
登陆远程服务器 lftp liangxu@192.168.107.133
查看lftp支持的命令 help 等价于 ?
从远程服务器下载文件到本地 get file.txt
# mget file*.txt
#mget -c *.txt
从远程服务器下载目录到本地 mirror dir
从本地上传文件到远程服务器 put newfile.txt
# mput newfile*.txt
从本地上传目录到远程服务器 mirror -R newdir
退出 bye 等价于 exit
wget命令
作用:文件下载
语法:wget [option]…[URL]…
参数:
-i 下载指定文件里列出的地址
-O 下载后重命名文件
-c 打开断点续传
-b 启动后转入后台执行
-P指定保存路径
案列:
使用wget下载单个文件 wget https://cn.wordpress.org/latest-zh_CN.zip
使用wget下载多个文件 vim urllist.txt wget -i urllist.txt
下载后以不同的文件名保存 wget -O wp.zip https://cn.wordpress.org/latest-zh_CN.zip
下载后保存到指定目录 wget -P dir https://cn.wordpress.org/latest-zh_CN.zip
Wget限速下载 wget –limit-rate=300k https://cn.wordpress.org/latest-zh_CN.zip
打开断点续传功能 wget -c https://cn.wordpress.org/latest-zh_CN.zip
使用wget后台下载 wget -b https://cn.wordpress.org/latest-zh_CN.zip
#tail -f wget-log 查看下载进度
scp命令
作用:远程拷贝文件
参数: -r 递归复制整个目录
-p 保留原文件的修改时间,访问时间和模式
-P 制定数据传输用到的端口号
案列:从远程复制文件到本地
#scp liangxu @192.168.107.128:/home/liangxu/commands/scp/file.txt .
从远程复制目录到本地
#scp -r liangxu @192.168.107.128:/home/liangxu/commands/scp/dir/ .
上传本地文件到远程机器指定目录
#scp newfile.txt liangxu@192.168.107.128: /home/liangxu/commands/scp/
上传本地目录到远程机器指定目录
#scp -r newdir/ liangxu@192.168.107.128: /home/liangxu/commands/scp/
使用指定的端口号传输数据
#scp -P 2222 liangxu @192.168.107.128:/home/liangxu/commands/scp/file.txt .
保留文件的最后修改时间及访问时间
#scp -p liangxu @192.168.107.128:/home/liangxu/commands/scp/file.txt .
host命令
作用:域名查询
语法:host [参数] [域名]
参数:
-a 显示详细的DNS信息
-v 显示指令执行的详细信息
案列:查询域名对应的IP地址 host www.baidu.com
显示执行域名查询的详细信息 host -v www.baidu.com
显示详细的DNS信息 host -a www.baidu.com
tcpdump命令
作用:监听网络流量
案列:
监视第一个网络接口上所有流过的数据包 tcpdump
监视指定网络接口的数据包 tcpdump -i ens33
显示指定数量包 tcpdump -c 20
精简模式显示10个包 tcpdump -c 10 -q
监听指定主机的数据包(主机名)tcpdump host www.baidu.com
监听指定主机的数据包(IP地址)tcpdump host 192.168.107.133
监听指定端口号的数据包,并以文本形式展示 tcpdump -i any port 22 -A
nc命令
作用:设置路由器
参数:-v 显示指令执行过程
-w<超时秒数>设置等待连线的时间
-z 使用0输入/输出模式,只在扫描通信端口时使用
-n 直接使用IP地址,而不通过域名服务器。
-u 使用UDP传输协议
-I 使用监听模式,,管控传入的资料
案列:扫描指定ip的TCP端口,范围1-100 nc -v -z -w2 192.168.107.133 1-100
扫描指定ip的UDP端口,范围1-100 nc -u -z -w2 192.168.107.133 1-100
扫描指定端口 nc -nvv 192.168.107.133 22
监听某个端口 nc -l 1234
连接某个端口 nc 192.168.107.133 1234
set/unset命令
作用:设置/删除shell变量
语法:set[参数][变量]
#unset[参数][变量]
参数set -a 标示已修改的变量,以供输出至环境变量
#unset -f 仅除删函数
-v 仅删除变量
案列 显示所有的shell’变量 set
设置环境变量 第一步 定义新的环境变量 declare myenv=’666’
第二步 将定义的变量输出为环境变量set -a myenv
第三步 查看是否设置成功 env | grep myenv
删除环境变量 unset -v myenv
Unset myenv #优先删除变量
history命令
作用:显示与管理历史命令记录
语法:history [参数]
参数:-c 清空命令记录
-d 删除指定序号的命令记录
-n 读取命令记录
案列:显示执行过的全部命令记录 history
显示执行过的最近5条命令 history 5
重新执行2039命令 !2039
重新执行上一条命令 !!
将搜索与你输入相匹配的最近一个命令,并重新执行它 !ls
调用命令历史记录的递归搜索 ctrl+r
如果想要删除特定命令 history -d 1234
清空全部历史记录 history -c
login/logout命令
作用:登入/登出系统
exit命令
作用:退出终端/ssh连接
案例:退出终端/SSH连接 exit 等价于 ctrl+d
xargs命令
作用:过滤器
参数:-n:多行输出
-d:自定义一个定界符
-l:指定一个替换字符串{}
-t:打印出xargs执行的命令
-p:执行每一个命令时弹出确认
案列:多行输入单行输出 cat file.txt | xargs
多列输出 cat file.txt | xargs -n3
自定义一个分隔符 echo “helloX helloX helloX hello” | xargs -dX
执行每一个命令时弹出确认echo “helloX helloX helloX hello” | xargs -dX -p
指定一个替换字符串{} cat arg.txt | xargs -I {} echo {}
打印出xargs 执行的命令 ls | xargs -t -l {} echo {}
将当前目录下所有.txt文件移动到dir 目录下 find. -name “*.txt” | xargs -I {} mv {} dir
使用wget下载url-list.txt下所有的URL cat url-list.txt | xargs wget -c
exec命令
作用:调用并执行指定的命令
语法:exec[参数][命令]
参数:-c 执行指定的命令
案列:调用并执行指定的命令 exec -c echo hello world
结合find命令使用 find . -name”*.txt” -exec ls {} \;
alias/unalias命令
作用:设置/取消命令别名
案列:查看系统已经设置的别名 alias
给命令设置别名alias “rm=rm -i”
取消别名:unalias
type命令
作用:显示指定命令的类型
语法:type [参数][命令]
参数:-a 可以显示所有可能的类型,比如有些命令如pwd是shell内建命令,也可以是外部命令。
-p 只返回外部命令信息,相当于which命令
-f 只返回shell函数的信息
-t 返回指定类型的信息
类型:alias 别名
#keyword关键字,Shell保留字
#function函数,Shell函数
#builtin 内建命令,Shell内建命令
#file 文件,磁盘文件,外部命令
#unfound 没有找到
案列:查看命令类型
别名:type -t ls
文件:type -t cut
关键字:type -t for
内建命令:type -t pwd
显示包含该命令的所有位置 type -a pwd
时间相关
date命令
作用:显示或设定系统日期和时间
参数:-d <字符串>显示字符串所指的日期与时间,字符串前后必须加上双引号;
-s <字符串>根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u 显示目前的格林威治时间
日期格式字符串列表:
案列:
以默认格式显示当前时间和日期 date
以指定格式输出当前时间和日期date +“%Y%m%d %H:%M:%S”
显示时间的同时加入更多信息
显示昨天的日期 date -d yesterday +”%Y%m%d”
同理,也可以查看类型日期 date -d next-month +%Y%m%d
#date -d last-year + %Y%m%d
#date -d “7 days” + %Y%m%d
日期的加减操作 #date -d “+1 year” + %Y%m%d
#date -d “+1 day” + %Y%m%d
#date -d “-1 month” + %Y%m%d
设置日期与时间 #date --date ”12:34:56”
#date -s ”12:34:56”
cal命令
作用:显示日历
语法:cal [参数][月份][年份]
参数:-1 显示一个月的月历
-3 显示系统前一个月,当前月,下一月的月历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
案列:
显示当前月份日历 cal 等价于 cal -1
显示近期三个月的日历 cal -3
显示指定年月的日历 cal 5 2021
显示指定年份的全部日历 cal -y 2021
#cal 2021
显示自1月1日的天数 cal -j
crontab命令
作用:定时执行任务
语法:crontab [参数]
参数:
-e 编辑该用户的计时器设置
-l 列出该用户的计时器设置
-r 删除该用户的计时器设置
-u 指定要设定计时器的用户名称
使用crontab设置任务:
未设置的字段以星号*占位
- 例:15,代表第1分钟到第5分钟执行(其余类推)
/ 例: */10,代表每10分钟执行(其余类推)
,例:1,3,5,代表第1,3,5分钟执行(其余类推)
字段说明:
#minute 表示分钟,0-59
#hour 表示小时,0-23
#day 表示日期,1-31
#month 表示月份,1-12
#week 表示星期,0-7
#command 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件
案列:
创建,编辑计划任务 crontab -e
查看当前计划任务 crontab -l
删除该用户的计划任务 crontab -r
计划任务实例:
每一分钟执行一次/bin/ls ***** /bin/ls
每小时的第3和第15分钟执行/usr/bin/pwd 3,15 **** /usr/bin/pwd
每月每天的午夜0点30分,3点30分,6点30分…执行echo“haha”:
30
每两个小时重启一次smb
at/atq/atrm命令
作用:时间执行一个任务
语法:at [参数][脚本][时间]
参数:-d 删除系统中的等待作业(等效于atrm命令)
-c 打印任务的内容
-q 使用指定的队列
-f 将指定文件提交等待作业
-t 以时间的形式提交运行作业
案列:
查看系统中的等待作业 atq
删除系统中的等待作业 at -d 1 等价于 atrm 1
交换式创建任务 at 5 pm echo “hello world”
保存ctrl+d
取消ctrl+c
立即执行脚本 at -f script.sh now
5分钟后执行脚本 at -f script.sh now+5 min
在17:00执行脚本 at -f script.sh 17:00
在2022年7月1日执行脚本at -f script.sh 07/01/2022
time命令
作用:显示命令执行时所消耗的时间
语法:time [参数] [命令]
时间:
real:是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
user: 是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
sys:是指花费在内核模式中的CPU时间,代表在内核中系统调用所花费的时间,这也是真正由进程使用的CPU时间。
案列:显示命令date的时间统计结果 time date
watch命令
作用:周期性执行命令
语法:watch [参数][命令]
参数:-n 指定间隔的时间
-d 高亮显示变化的区域
案列:重复执行uptime命令 watch uptime
每隔1秒执行一次uptime,并高亮显示变化的数字 watch -n 1 -d uptime
监测当前目录中file文件的变化 watch -d “ls -l | grep file”
监测磁盘inode和block数目变化情况 watch -n 1 -d “df -i; df”
bc命令
作用:数字计算器
语法:bc [选项]
案列:进入计算器 bc
计算:加减乘除 + - * /
平方 ^ 10^10
平方根 sqrt sqrt(100)
设置小数位 scale echo “scale=2;(2.3444-1.234)/1” | bc
进制转换 echo ”obase=10;ibase=2;110110” | bc
退出:quit
ls命令
| |
linux操作系统中,所有的隐藏文件都是 .开头的 | |
ls -a | |
a是all的意思,表示所有。 | |
列出包含隐藏文件在内的所有文件。 | |
ls -l | |
表示长格式输出 long format | |
ls -al 等同于 ls -a + ls -l 的功能 可以简写为ll -a | |
ll -a /home/powernode 可以指定查看某个目录下的所有文件详情 |
ls命令扩展
作用:显示目录信息
语法:ls [OPTION]…[FILE]…
参数:-a 显示所有文件及目录(包括以 . 开头的隐藏文件)
-l 使用长格式列出文件及目录信息
-r 将文件以相反次序显示(默认依英文字母次序)
-t 根据最后的修改时间排序
-h 以人类可读的格式显示数字大小
-A同-a,但不列出 .(当前目录)及 ..(父目录)
-S 根据文件大小排序
-R递归列出所有子目录
-F 在列出的文件名称后加-符号;例如可执行档则加*,目录则加 /
案列:列出当前目录所有文件(包括隐藏文件)ls -a
列出当前目录文件的详细信息 ls -l
列出根目录下所有文件 ls /
列出当前目录下所有文件和目录的详细信息(包括子目录内容)ls -Lr
列出当前目录下所有以f开头的文件的详细信息 ls -l f*
列出当前目录下所有文件,并根据修改时间倒序排列 ls -ltr
列出目前工作目录下所有文件及目录;目录于名称后加 /,可执行档于名称后加*
列出当前目录详细信息并以可读大小显示文件大小 ls -lh
DevOps实战派
1. 不带参数运行ls
不带参数运行ls会只列出文件或者目录。看不到其他信息输出。
2. 使用长清单模式
使用-l字符(小写L字符),会显示当前目录内容的长列表。在接下来的例子中,我们会结合-l参数(这个参数经常使用)来得到更好的结果。
3. 显示文件大小ls -lh
以字节为单位看大小可能会不方便。6.5M读起来比6727680字节更简单。要这么做,我们可以使用-h与-l结合的参数。
另外一个可以这么做的参数是–si。这个参数和-h参数类似,但是-si以1000为单位,而-h以1024为单位。
4. 排序文件大小ls -lhS
在我们可以显示文件大小之后,我们希望以文件大小排序。我们可以使用-S参数来这么做。这列表会从大到校排序
5. 测量大小
ls可以通过使用[root@R9MB ~]# ls -l --block-size=M改单位大小。这里的SIZE是:
K = Kilobyte
M = Megabyte
G = Gigabyte
T = Terabyte
P = Petabyte
E = Exabyte
Z = Zettabyte
Y = Yottabyte
比如,我们希望使用MB作为单位大小。所以语法就会像这样:
[root@R9MB ~]# ls -l --block-size=M
6. 显示隐藏文件ls -a
在Linux中,以”.”(点号)开头的文件是隐藏文件。为了在ls命令中显示它,我们可以使用-a选项。
7. 只列出目录条目ls -d */
如果我们希望只列出目录,我们可以使用-d选项。
8. 不打印所有者信息ls -lg
要这么做,我们使用-g选项。
9. 不打印组信息ls -lG
-g隐藏了拥有者信息,—G会隐藏组信息。
10. 打印UID和GID ls -n
如果你想以数字方式列出项的所有者和所有组(即UID和GID),我们可以带-n选项使用ls命令。
11. 不带颜色打印
一些Linux发行版已经对ls命令启用彩色。这会使ls以各种颜色打印列表。如果你不想要这样,你可以使用 --color=never 参数。
[root@R9MB tmp]# ls --color=never
12. 打印每个文件的索引号 ls -li
为了打印索引或者大家俗称的inode号,我们可以使用-i选项。索引号会显示在第一列。
13. 增加 / (斜线) 标记目录 ls -p
要这么做,使用-p选项。
14. 排序时反转顺序 ls -r
你或许需要在列出条目时反转顺序。要这么做,你可以使用-r选项。
15. 递归列出子目录 ls -R
带-R参数后,你可以列出包含它子目录的目录。
16. 扩展名排序 ls -lX 或 ls -l --sort=extension
你可以使用-X参数或者–sort=extension来通过扩展名来排序(这样对于筛选不同类型的文件很有用)。
17. 通过修改时间列出 ls -lt
使用-t选项会按修改时间排序,新的文件在前。
18. 列出你的主目录 ls ~
要列出你的主目录,你可以用”~”(波浪号)来代表它。这样你就不必输入完整的目录名。让我们假设家文件名为/home/pungki,那么波浪号就对/home/pungki有意义了。
19. 列出父目录
无论你在那个目录,你可以列出父目录而不必输入完整路径。这是个例子。ls ../
这回列出1层之上的目录内容。 ls ../../
这回列出2层之上的目录内容(译注:可不支持“…”来代表2层之上)。
20. 打印ls命令版本
使用–version参数打印它。 [root@R9MB /]# ls --version
文件权限
cd命令
cd命令:change directory |
引入绝对路径/相对路径 |
引入快捷键 cd .. 回到上级目录 cd .. /..回到上级目录的上级目录 |
cd ~ 回到主目录 cd /回到根目录 |
cd /home/powernode 切换到/home/powernode目录下 |
cd命令扩展
作用:切换目录
语法:cd [参数] 目录
几个特殊目录 :
~ 用户家目录
. 当前目录
.. 当前目录的上一级目录
/ 根目录
- 上一次所在的目录
相对路径与绝对路径:
起始路径为/的称为绝对路径;起始路径不是为/的称为相对路径
案列:
切换到dir目录 cd dir
切换到上两级目录 cd../..
切换到家目录 cd ~
cd
切换到上一次所在的目录 cd -
mkdir新建目录
mkdir abc (mkdir是新建目录的命令,abc是一个目录名)在当前目录下新建目录abc |
mkdir -p a/b/c (-p参数表示,一次创建多重目录) |
mkdir -p a/kk/ff (虽然a已经存在了,但是不会报错,直接在目录下新建kk目录,kk目录下新建ff目录) |
Mkdir附赠
作用:创建目录 注意:默认状态下,如果要创建的目录已经存在,则提示已存在,而不会继续创建目录。新建的目录与它所在目录下的文件有重名也不行
语法:mkdir [OPTION]… DIRECTORY
参数:-p 递归创建多级目录
-m 建立目录的同时设置目录的权限
-v显示目录的创建过程
案列:mkdir abc (mkdir是新建目录的命令,abc是一个目录名)在当前目录下新建目录abc
创建多个目录 mkdir dir2 dir3 dir4
mkdir dir{5..7}
递归创建目录 mkdir -p dir7/dir8/dir9
在dir1目录下建立子目录dir10,并且设置文件权限700 mkdir -m 700 dir1/dir10
显示目录的创建过程 mkdir -v dir{11..13}
删除目录
删除目录的时候,必须添加-r参数,这个-r表示删除一个目录,或者递归删除目录下的所有子目录以及子文件。 |
rm -r x (删除当前目录下的x目录,以及x目录下所有的子目录),但是这种方式需要用户自己输入y进行确认删除。 |
rm -rf x(强行删除x目录以及x目录下所有的子目录,并且不询问。包括子文件也全部删除。) |
cp命令
作用:复制文件或目录
语法:cp [OPTION]…[-T] SOURCE DEST
cp [OPTION]…SOURCE…DIRECTORY
cp [OPTION]…-t DIRECTORY SOURCE…
参数:-f 若目标文件已经存在,则会直接覆盖
-i 若目标文件已经存在,则会询问是否覆盖
-a 通常在复制目录的时候,它保留链接,文件属性,并复制目录下的所有内容
-r递归复制文件和目录
-b覆盖已存在的文件目录前将目标文件备份
-v 详细显示cp 命令执行的操作过程
案列:复制文件 cp file1.txt file2.txt
复制目录 cp -r dir1 dir2
复制文件,若目标文件已存在,则询问是否覆盖 cp -i file1.txt file2.txt
复制文件,若目标文件已存在,则直接覆盖,不提示 cp -f file1.txt file2.txt
复制文件,若目标文件已存在,则先进行备份 cp -b file1.txt file2.txt
复制目录,并且保留源目录所有属性都一致 cp -a dir1 dir2
目录拷贝
cp 目录名1 目录名2 |
目录名1 是拷贝源 目录名2 是拷贝到哪里 |
-rf (-r递归拷贝,-f强行拷贝) |
cp -rf a abc (将当前目录下的a目录拷贝到当前目录下的abc目录当中) |
cp -rf /home/powernode/a /home/powernode/x (将/home/powernode/a目录拷贝到/home/powernode/x目录下) |
文件拷贝
cp a.txt aa.txt (复制当前目录下的a.txt文件,粘贴到当前目录下并且生成新文件aa.txt) |
cp file1 file2 file1 就是被拷贝的文件 file2 就是粘贴之后的文件 file1和 file2可以添加路径 cp被拷贝文件的路径 粘贴到哪里的路径 |
Touch命令
明确:一个文件包含有4个时间属性,可用stat命令查看(Access time访问时间,Modify time)
作用:1.改变已有文件的时间戳属性(注意:在修改文件的时间属性的时候,用户必须是文件的属性,或拥有写文件的访问权限)
2.创建新的空文件
语法:touch [OPTION]…FILE…
参数:-a 改变文件的读取时间记录
-m改变文件的修改时间记录
-r使用参考文件的时间记录,与—file的效果一样
-c不创建新文件
-d使用指定字符串表示时间格式
-t设定文件的时间记录,格式与date命令相同
--no-create 不创建新文件
案列:创建一个空文件 touch file.txt (前提:file.txt文件不存在)
创建多个空文件 touch file1.txt file2.txt file3.txt
Touch file{1..3}.txt
修改文件的access时间 touch -a file.txt
修改文件的modify时间 touch -m file.txt
强制避免创建新文件 touch -c nofile.txt 等价于 touch --no-create nofile.txt
将访问和修改时间从一个文件复制到另一个文件 touch file.txt -r ref_file.txt(参照的文件)
修改文件时间(支持字符串修改)大白话等价于 想要任意的指定一个时间不是改成当前的系统时间有两种方式可以更改,一种是使用-d选项它可以使用字符串的方式来改变时间戳:
1,改成明天的当下时间 touch -d “tomorrow” file.txt
2.tomorrow字符串也可改成yesterday next month 等等都是可以的
另一种是使用-t选项,把它改成任意一个时间节点:
时间改成2022年的1月1号的10:30的55秒:touch -t 2201011030.55 file.txt
新建文件
touch 文件名 例如:touch hello.java 表示在当前目录下新建一个文件hello.java |
touch a.txt b.txt c.txt 一次性在当前目录下,新建多个文件,文件名之间采用空格分隔。 |
删除文件
rm 文件名 |
rm a.txt(删除当前目录下的a.txt文件)。这种方式会询问,是否删除,输入y表示删除,输入n表示不删除。 |
不想让系统询问你是否删除,怎么进行强行删除呢? -f 参数可以做到。 |
rm -f a.txt (强行删除a.txt文件,不询问) |
删除多个文件 |
rm -f b.txt c.txt(强行删除b.txt和c.txt文件,不询问) |
rm -f *.java(删除所有.java结尾的文件,模糊匹配的方式。) - 通配符 |
rm命令附赠
作用:删除文件或目录
语法:rm [OPTION]…[FILE]…
参数:-f忽略不存的文件,不会出现警告信息
-i删除前会询问用户是否操作
-r/-R 递归删除
-v显示指令的详细执行过程
案列:删除一个文件 rm file.txt
删除一个目录 rm -r dir
强制删除文件/目录(不带提示)rm -f file.txt
删除当前目录下所有文件 rm-rf *
删除前逐一询问确认 rm -I file1.txt file2.txt file3.txt
rmdir命令
作用:删除空目录
语法:rmdir[OPTION]…DIRECTORY…
参数:-p用递归的方式删除指定的目录路径中的所有父级目录,非空则报错
-v 显示命令的详细执行过程
案列: 删除空目录 rmdir dir
递归删除多重目录 rmdir -p dir1/dir/2/dir3
显示指令详细执行过程 rmdir -v dir
移动mv
mv Hello.java x (将当前目录下的Hello.java文件移动到x 目录下 |
mv /home/bjpowernode/Hello2.java /home/bjpowernode/x (将/home/bjpowernode/Hello2.java移动到/home/bjpowernode/x 目录下 |
mv x f (将x目录移动到f目录下) |
mv扩充
作用:1.移动文件
2.重命名文件
语法:mv [OPTION]…[-T] SOURCE DEST
mv [OPTION]…SOURCE…DIRECTORY
mv [OPTION]…-t DIRECTORY SOURCE…
参数:-i 若存在同名文件,则向用户询问是否覆盖
-f 覆盖已有文件时,不进行任何提示
-b 当文件存在时,覆盖前为其创建一个备份
-u当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作
案列:1.将文件file.txt 移动到目录dir中 mv file.txt /dir
2.将file.txt重命名为newfile.txt mv file.txt newfile.txt
3.将目录dir1移动到目录dir2中(前提是目录dir2已经存在,若不存在则改名)
#mv dir1 dir2
4.将文件file1.txt 改名为file2.txt,如果file2.txt已经存在,则询问是否覆盖
#mv -i file1.txt file2.txt
5.将文件file1.txt改名为file2.txt,如果file2.txt已经存在,则直接覆盖
# mv -f file1.txt file2.txt
6.文件被覆盖前做备份 mv -b file1.txt file2.txt
7.源文件比目标文件新时才执行更新 mv -u file1.txt file2.txt
8.移动当前文件夹下的所有文件到上一级目录 mv* ../
9.将当前目录的一个子目录里的文件移动到另一个子目录 mv dir3/* dir2
mount命令
作用: 把文件系统挂载到目录
语法: mount [参数] [设备] [挂载点]
参数:-o 挂载方式 loop:用来把一个文件当成磁盘分区挂接上系统。
#ro:采用只读方式挂载设备
#rw:采用读写方式挂载设备
#iocharset:指定访问文件系统所用字符集
-t 指定挂载类型
案列:查看当前系统中挂载的所有文件系统信息 mount
查看指定类型挂载的文件系统 mount -t tmpfs
将U盘挂载到指定目录 sudo fdisk -l ; sudo mount /dev/sdb /mnt/udisk
只读模式挂载 sudo mount -o ro /dev/sdb /mnt/udisk
将iso 镜像挂载到/mnt/iso目录 sudo mount -o loop /home/liangxu
#command/mount/mydisk.iso /mnt/iso
umount命令
作用:卸载文件系统
语法:umount [参数]
参数:-v 执行时显示详细的信息
案列:通过设备名卸载 umount -v /dev/sdb
通过挂载点卸载 umount -v /media/liangxu/ALVIN/
dd命令
作用:拷贝及切换文件
语法:dd 参数 对象
基本格式
参数:
#if=文件名 输入文件名,默认为标准输入。即指定源文件。
#of=文件名 输出文件名,默认为标准输出。即指定目的文件。
#ibs=bytes 一次读入 bytes个字节,即指定一个块大小为bytes个字节。
#obs=bytes 一次输出 bytes个字节,即指定一个块大小为bytes个字节。
#bs=bytes 同时设置读入/输出的块大小为bytes个字节
#cbs=bytes 一次转换bytes个字节,即指定转换缓冲区大小。
#skip=blocks从输入文件开头跳过blocks个块后再开始复制
#seek=blocks 从输出文件开头跳过blocks个块后再开始复制
#count=blocks 仅拷贝blocks个块,块大小等于ibs/obs指定的字节数
#conv=<关键字> 指定关键字
#conversion 用指定的参数转换文件
案列:
生成一个指定大小(500M)的新文件
#dd if=/dev/zero of=file1.txt bs=500M count=1
拷贝指定文件的前50个字节
#dd if=file2.txt of=dfile2.txt bs=50 count=1
拷贝指定文件的内容,并将所有字符转换成大写后输出到新文件中
#dd if=file3.txt of=dfile3.txt conv=ucase
由标准输入设备读入字符串,并将字符串转换成大写后,再输出到标准输出设备
#dd conv=ucase (按ctrl+d 结束)
Linux中查找文件的哪几种方式
Linux中查找文件是最基础的能力了,如何高效的查找出自己想要的文件呢?这个就很重要啦!首先,先不要着急使用find命令,除了速度慢,也影响硬盘性能。因此,首先使用whereis和locate命令来查,找不到的时候再使用find命令来查找
【目录】
一 whereis(只查找特定目录)
二 locate(记得更新数据库)
三 find(虽然不快,但用起来是真香)
一 whereis命令使用方式和参数介绍
[root@achao ~]# whereis --help
用法:
whereis [选项] [-BMS <dir>... -f] <名称>
定位某个命令的二进制文件、源码和帮助页文件。
选项:
-b 只搜索二进制文件
-B <目录> 定义二进制文件查找路径
-m 只搜索手册和信息
-M <目录> 定义 man 和 info 查找路径
-s 只搜索源代码
-S <目录> 定义源代码查找路径
-f 终止 <目录> 参数列表
-u 搜索不常见记录
-l 输出有效查找路径
-h, --help 显示此帮助
-V, --version 显示版本
更多信息请参阅 whereis(1)。
whereis命令为什么查找比较快,只是因为它只负责查找特定目录下的而已。
[root@achao ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1ossl.gz /usr/share/man/man1/passwd.1.gz
将全部的文件名都列了出来。
[root@achao ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@achao ~]# whereis -l | wc -l
63
参数-l输出有效的查找路径总计是63个。
二 locate命令使用方式和参数介绍
[root@achao ~]# locate --help
Usage: locate [OPTION]... [PATTERN]...
Search for entries in a mlocate database.
-A, --all only print entries that match all patterns
-b, --basename match only the base name of path names
-c, --count 仅统计找到文件的数量
-d, --database DBPATH use DBPATH instead of default database (which is
/var/lib/mlocate/mlocate.db)
-e, --existing only print entries for currently existing files
-L, --follow follow trailing symbolic links when checking file
existence (default)
-h, --help print this help
-i, --ignore-case 忽略大小写
-l, --limit, -n LIMIT limit output (or counting) to LIMIT entries
-m, --mmap ignored, for backward compatibility
-P, --nofollow, -H don't follow trailing symbolic links when checking file
existence
-0, --null separate entries with NUL on output
-S, --statistics don't search for entries, print statistics about each
used database
-q, --quiet report no error messages about reading databases
-r, --regexp REGEXP search for basic regexp REGEXP instead of patterns
--regex patterns are extended regexps
【注意事项】
locate命令是在数据库中查找的,而CentOS建立的数据库是每天更新一次,当你使用此命令找不到想要的文件时候,记得更新一下数据库哦!使用updatedb命令。
[root@achao ~]# updatedb #需要等一会的
2.1 使用-c统计找到文件名的数量
[root@achao ~]# locate -c passwd
132
2.2 使用参数-S查找数据库文件的相关信息
[root@achao ~]# locate -S
数据库 /var/lib/mlocate/mlocate.db:
10,374 文件夹
135,260 文件
6,893,506 文件名中的字节数
3,304,908 字节用于存储数据库
locate命令特别适合你记不清楚文件的全名的时候使用,输入一个大概便可以查找来,帮助你找到文件。
三 find命令
3.1 参数-mtime使用
[root@achao ~]# find / -mtime 0
/dev/pts/0
/dev/ptmx
......
[root@achao ~]# find /var/ -mtime +4 | head -2
/var/
/var/lib
[root@achao ~]# find /var/ -mtime -4 | head -2
/var/lib/dnf/history.sqlite
/var/lib/dnf/history.sqlite-shm
[root@achao ~]# find /var/ -mtime 4 | head
/var/spool/anacron/cron.weekly
解释:0代表从现在开始到24小时之前。
+4:代表大于等于5天前的文件
-4:代表小于4天内的文件。
4:代表4-5天哪一天的内容。
3.2 参数-user查找用户创建的文件
#查找出/home下属于普通用户admin创建的文件有哪些
[root@achao ~]# find /home/ -user admin
3.3 参数-type查找文件类型
#找出/boot目录下的文件有哪些
[root@achao ~]# find /boot/ -type f
/boot/grub2/device.map
/boot/grub2/i386-pc/adler32.mod
/boot/grub2/i386-pc/affs.mod
/boot/grub2/i386-pc/afs.mod
......
查找目录使用d,链接文件使用l,FIFO使用p等
3.4 参数-size查找文件的大小
#找出/boot目录下文件大小大于20M的文件
[root@achao ~]# find /boot/ -type f -size +20M
/boot/initramfs-5.14.0-452.el9.x86_64.img
/boot/initramfs-0-repue-a8c01f26de674924981097b9b6076345.img
/boot/initramfs-5.14.0-452.el9.x86_64kdump.img
3.5 参数-name查找文件名
[root@achao ~]# find / -name passwd | wc -l
8
[root@achao ~]# find / -name "*passwd*" | wc -l
132
[root@achao ~]#
3.6 参数-perm查找特殊权限的文件
例如查找SUID与SGID的文件
[root@achao ~]# find / -perm 6000
3.7 参数-exec command额外进行的操作
[root@achao ~]# find /boot/ -size +20M -type f -name "init*" -exec cp {} /root/dufu/ \;
[root@achao ~]# ls -l /root/dufu/
总用量 227156
-rw-------. 1 root root 138491826 7月 2 01:36 initramfs-0-rescue-a8c01f26de674924981097b9b6076345.img
-rw-------. 1 root root 59111761 7月 2 01:36 initramfs-5.14.0-452.el9.x86_64.img
-rw-------. 1 root root 34999808 7月 2 01:36 initramfs-5.14.0-452.el9.x86_64kdump.img
将/boot目录下文件大于等于20M的以init*开头的文件复制到/root/dufu目录下边。这一个组合命令在工作中非常的重要,一定要多加练习,用的时候真的很香。
Find
使用find命令可以在指定目录下搜索文件。可以使用不同的选项来指定搜索的文件类型,大小,修改时间等条件
Find命令扩展
作用:搜索指定文件
语法:find [路径] [参数] [条件]
案列:全盘搜索系统中所有以conf结尾的文件
# find / -name *.conf
在 /etc目录中搜索所有大于1k大小的文件
# find /etc -size =1k
在/home目录中搜索所有属于指定用户的文件
# find /home -user liangxu
搜索当前目录下所有的文件
# find -type f
搜索当前目录下所有权限为664的文件,并列出来
# find -perm 664 -exec ls -l {} \; 重点exec
列出当前工作目录中的所有文件,目录以及子文件信息
# find .
在当前目录下搜索所有指定后缀的文件,后缀不需要大小写。
#find . -iname “*.txt”
在当前目录下搜索所有后缀不是.txt的文件
# find . ! -name “*.txt”
搜索当前工作目录中的所有7天内被修改过的文件,并删除
#find . -mtime -7 -exec rm -I {} \;
Whereis
使用whereis命令可以在系统中搜索指定的命令的位置。
Whereis命令扩展
作用:查找命令的二进制程序,源代码文件和man手册页等相关文件路径
案列:查找ls命令的程序路径和man手册页位置 whereis ls
查找ls命令的二进程程序路径 whereis -b ls
查找ls命令的man手册页路径 whereis -m ls
Which命令
使用which命令也可以在系统中搜索指定的命令的位置。
which命令扩展
作用 :查找命令文件所在的位置
语法:which [-a] filename…
案列:查找文件所在位置
Which bash
Which ls
Which fdisk
Linux中硬链接和软链接
在Linux中,链接文件的方式有两种,一种是类似于Windows的快捷方式功能的文件,可以快速连接到目标文件或目录,我们通常叫软链接或者符号链接(symbolic link);另一种是通过文件系统的inode链接来产生新文件名,而不是产生新的文件,这种称为硬链接(hard link),本篇我们就分别聊一下这两种链接的区别。
一 硬链接
硬链接就是在某个目录下新增一个文件名链接到某个inode号的关联记录。
#查看/etc/passwd的inode值及链接数量
[root@achao dufu]# ll -i /etc/passwd
17864914 -rw-r--r--. 1 root root 2195 May 16 21:11 /etc/passwd
#创建硬链接
[root@achao dufu]# ln /etc/passwd ./
[root@achao dufu]# ll -i passwd
17864914 -rw-r--r--. 2 root root 2195 May 16 21:11 passwd
[root@achao dufu]# ll -i /etc/passwd
17864914 -rw-r--r--. 2 root root 2195 May 16 21:11 /etc/passwd
通过观察,我们发现,inode值完全相同。同时,第三列的值由1变为2,这个字段的含义是有多少个文件名链接到此inode值。
这种做法的好处就是安全,如果删除任何一个文件,可以通过另一个文件名来读取到正确的文件数据。
[root@achao dufu]# ls
passwd
[root@achao dufu]# echo test data >> passwd
[root@achao dufu]# grep "test data" /etc/passwd
test data
[root@achao dufu]#
同时,不论修改哪一个文件,都会写入到相同inode与区块中。以上就是验证结果。
总结:设置硬链接,磁盘的空间与inode的数目是不会发生改变。因为硬链接只是在某个目录下的区块多写了一个关联数据而已。是不会消耗inode数量。
[root@achao dufu]# mkfs.ext4 /dev/sdb2
[root@achao dufu]# cd
[root@achao ~]# mount /dev/sdb2 dufu/
[root@achao ~]# cd dufu/
#创建硬链接失败
[root@achao dufu]# ln /etc/passwd ./
ln: failed to create hard link ‘./passwd’ => ‘/etc/passwd’: Invalid cross-device link
[root@achao dufu]# blkid | grep /dev/sdb2
/dev/sdb2: UUID="4247c4b8-b697-4244-847e-24a0419dce3e" TYPE="ext4" PARTLABEL="libai" PARTUUID="38dc55b0-3fec-422c-9d16-6d7261f23822"
[root@achao dufu]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 2G 0 disk
├─sdb1 8:17 0 500M 0 part
└─sdb2 8:18 0 477M 0 part /root/dufu
sr0 11:0 1 8.8G 0 rom /run/media/root/CentOS 7 x86_64
[root@achao dufu]# blkid | grep /dev/mapper/centos-root
/dev/mapper/centos-root: UUID="3e18702c-c96f-4867-ac20-66c6dba53b71" TYPE="xfs"
【注意事项1】不能跨文件系统创建硬链接。
[root@achao ~]# ln /boot libai/
ln: ‘/boot’: hard link not allowed for directory
【注意事项2】硬链接不能链接目录。因为链接到的目录需要连同被链接目录下面的所有数据都建立连接。如果修改或者新建文件,两边目录下边的内容又要建立一次,环境会变得复杂。因此目前暂时是不支持的。
图片 二 软连接
相比较硬链接,软链接就很好理解啦,这个就是Windows上创建的快捷方式,也就是建立一个独立的文件,而这个文件会让数据的读取指向它链接的那个文件的文件名。因此,源文件删除或者移动,软链接就会失效。
[root@achao ~]# ln -s /etc/passwd testfile
[root@achao ~]# ll -i /etc/passwd /root/testfile
17861462 -rw-r--r--. 1 root root 2195 Jul 4 01:03 /etc/passwd
33574987 lrwxrwxrwx. 1 root root 11 Jul 4 01:46 /root/testfile -> /etc/passwd
通过观察,发现两个文件指向了不同的inode,当然也就是两个独立的文件。而且链接文件的重要内容就是它会写上目标文件的文件名。发现大小是11B。
软链接能链接整个目录无压力
[root@achao ~]# ln -s /boot/* libai/
[root@achao ~]# ll libai/
total 4
lrwxrwxrwx. 1 root root 9 Jul 4 02:14 aaa -> /boot/aaa
lrwxrwxrwx. 1 root root 34 Jul 4 02:14 config-3.10.0-862.el7.x86_64 -> /boot/config-3.10.0-862.el7.x86_64
lrwxrwxrwx. 1 root root 9 Jul 4 02:14 efi -> /boot/efi
......
[root@achao ~]# ln -sf /boot libai
[root@achao ~]# ll libai/
total 4
lrwxrwxrwx. 1 root root 9 Jul 4 02:14 aaa -> /boot/aaa
lrwxrwxrwx. 1 root root 5 Jul 4 02:17 boot -> /boot
lrwxrwxrwx. 1 root root 34 Jul 4 02:14 config-3.10.0-862.el7.x86_64 -> /boot/config-3.10.0-862.el7.x86_64
lrwxrwxrwx. 1 root root 9 Jul 4 02:14 efi -> /boot/efi
lrwxrwxrwx. 1 root root 10 Jul 4 02:14 grub -> /boot/grub
lrwxrwxrwx. 1 root root 11 Jul 4 02:14 grub2 -> /boot/grub2
参数-f:如果目标文件存在,就主动的将目标文件删除后再建立。
图片 三 测试用例
[root@achao ~]# cd libai/
#制作测试文件testfile
[root@achao libai]# cp /root/dufu/testfile .
#查看inode数量
[root@achao libai]# df -i | head -2
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 8910848 125234 8785614 2% /
#设置硬链接
[root@achao libai]# ln testfile testfile_h
#查看inode,发现没有发生变化
[root@achao libai]# df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 8910848 125234 8785614 2% /
#查看创建硬链接inode值相同
[root@achao libai]# ll -i testfile*
53433525 -rw-r--r--. 2 root root 12 Jul 4 01:58 testfile
53433525 -rw-r--r--. 2 root root 12 Jul 4 01:58 testfile_h
#创建软连接
[root@achao libai]# ln -s testfile testfile_s
#查看inode值,发现软连接的inode值发生变化,说明是一个新的文件
[root@achao libai]# ll -i testfile*
53433525 -rw-r--r--. 2 root root 12 Jul 4 01:58 testfile
53433525 -rw-r--r--. 2 root root 12 Jul 4 01:58 testfile_h
53433527 lrwxrwxrwx. 1 root root 8 Jul 4 02:01 testfile_s -> testfile
#查看inode值,发现从8785614变成了8785613
[root@achao libai]# df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 8910848 125235 8785613 2% /
#删除源文件
[root@achao libai]# rm testfile
rm: remove regular file ‘testfile’? y
#查看硬链接,发现查看成功
[root@achao libai]# cat testfile_h
hello world
#查看软连接,发现参看文件内容失败
[root@achao libai]# cat testfile_s
cat: testfile_s: No such file or directory
[root@achao libai]# ll
total 4
-rw-r--r--. 1 root root 12 Jul 4 01:58 testfile_h
lrwxrwxrwx. 1 root root 8 Jul 4 02:01 testfile_s -> testfile
[root@achao libai]#
【注意】通过颜色也能区别,红色就说明异常。
正常的软链接颜色如下显示
四 总结
通过比较,发现硬链接还是比较安全的,但是硬链接的限制比较多呀!反倒是软连接的应用比较广泛,这一点同学们是要了解以下的。以上就是今天的内容啦,简单容易理解,在实际生产环境中应用很是常见,是需要掌握的。
系统中通过inode来区分两个文件。查看文件的inode号: ls -i HelloWorld.java
软链接=快捷方式
in -s Hello.java Hello.java2 |
Hello.java是目标文件。Hello.java2文件是软连接,属于快捷方式 |
软件接和目标文件实际上是两个文件,在软连接中存储的是目标文件的路径。软连接关联的目标文件如果被删除,软连接这个快捷方式也就失效了。 |
可以通过查看inode号,来证明软连接是两个不同的文件 ls -li Hello.java Hello.java2 |
硬链接
in Hello.java Hello.java2 |
主要是用来做:重要文件备份 |
目标文件删除之后,硬链接只要在,文件其实就没有被删除。或者说硬链接删除之后,目标文件还在。总结一句话:目标文件或者硬链接只要有一个存在,文件就没有被真正的删除。 |
硬链接机制和复制粘贴还不一样,复制粘贴之后的文件,修改其中之一,另一个不会变,但是硬链接就不一样了。 |
ln命令
作用:为文件创建快捷方式
语法:ln [参数] 源文件 目标文件
参数:-s 对源文件建立符号链接,而非硬链接
案列:创建软连接 ln -s file.txt sfile.txt
创建硬链接 ln file.txt hfile.txt
tar是在linux系统当中完成压缩和解压缩的命令。压缩后的文件又被称为归档文件。
tar命令
tar命令语法格式:tar 参数 要压缩的或解压的文件或目录
tar命令的常用参数:z:指定是否使用gzip压缩方式压缩。 (扩展名通常为:tar.gz 特点速度最快)
j:是否需要用bzip2压缩方式压缩。 (扩展名通常为:tar.bz2 特点体积最小)
c:创建压缩(create)
x:解压缩
v:是否在压缩的过程中显示文件
f:指定归档文件名(file)。f参数后面必须紧跟文件名,不能在f参数后面再加其他参数。
t:查看tarfile里面的文件
C:指定解压到的具体目录
注意:c , x , t ,这三个参数不能共存,只能出现一个。
tar命令扩展
作用:打包/解压工具
参数:-c 新建打包文件
-x解压文件,配合-C解压到对应的文件目录
-f (压缩或解压时)指定要处理的文件
-j 通过bzip2方式压缩或解压,最后以tar.br2为后缀。压缩后大小
-z 通过gzip方式压缩或解压,最后以tar.gz为后缀。
-v 显示操作过程
-t 查看打包文件中内容
-C dir指定压缩/解压缩的目录,若无指定,默认是当前目录。
案列:
将当前目录下所有.txt文件打包(未压缩),并显示操作过程。
#tar -cvf files.tar *.txt
打包文件之后,使用gzip方式压缩
#tar -zcvf files.tar.gz *.txt
解压文件到当前目录
#tar -zxvf files.tar.gz
解压文件到家目录下
#tar -zxvf files.tar.gz -C dir
列出压缩包里的内容
#tar -tf files tar.gz
zip/unzip
作用:压缩/解压文件
语法:zip 参数 文件
unzip 参数 文件
参数:zip -r 递归处理,将指定目录下的所有文件和子目录一并处理
-v 显示指令执行过程
-d 更新压缩包内文件
unzip -l 显示压缩文件内所包含的文件
-v 显示指令执行过程
-d <目录> 指定文件解压缩后所要存储的目录
案列:
压缩:
将指定目录及其内容全部文件都打包成zip格式压缩包文件
#zip -r dir.zip dir
将当前目录下所有txt文件全部压缩成files.zip
#zip files.zip *.txt
将newfile.txt添加到files.zip压缩包
#zip -dv files.zip newfile.txt
解压:
查看压缩文件中包含的文件
#unzip -l files.zip
查看显示的文件列表还包含压缩比率
#unzip -v files.zip
检查zip文件是否损坏
#unzip -t files.zip
解压files.zip到当前目录
#unzip files.zip
解压files.zip到指定目录
#unzip files.zip -d udir/
gzip/gunzip命令
作用:压缩/解压文件
语法:gzip [参数] 文件
#gunzip [参数] 压缩包
参数:-d 解开压缩文件
# -k 保留原文件
# -l 列出压缩文件的相关信息
#-r 递归处理,将指定目录下的所有文件及子目录一并处理
#-v 显示指定执行过程
#-t 测试压缩文件是否正确无误
案列:
压缩指定的文件,原文件将被删除
#gzip file.txt
压缩指定的目录
#gzip -r dir
显示指定压缩包的压缩信息
#gzip -l file.txt.gz
解压指定的压缩包文件
#gzip -dv file.txt.gz
#gunzip -v file.txt.gz
递归解压目录
#gzip -dr dir.gz
#gunzip -r dir.gz
压缩指定的文件,原文件不被删除
#gzip -k file.txt
测试指定的压缩包文件内容是否损坏,能够正常解压
#gunzip -t file.txt.gz
压缩
压缩一个文件 tar-zcvf mytxt.tar.gz log1.txt |
压缩多个文件 tar-zcvf mytxt2.tar.gz log1.txt log2.txt log3.txt |
压缩目录 tar-zcvf mytxt4.tar.gz test 【将test目录压缩为mytxt4.tar.gz】 |
解压
查看归档文件 tar -tf mytxt.tar.gz |
tar -zxvf mytxt.tar.gz【解压到当前目录下】tar -zxvf mytxt.tar.gz -C test【将mytxt.tar.gz压缩包解压到test目录】 |
echo命令
输出字符串 /输出变量 /输出多行 /输出特殊字符
echo命令扩展
作用:在终端输出字符串
语法:echo [OPTION]…[STRING]…
参数:-n 不输出结尾的换行符
-e “\a” 发出警告音
-e “\b”删除前面的一个字符
-e “\c” 结尾不加换行符(\后面的字符不会输出)
-e “\f”换行,光标仍停留在原来的坐标位置
-e “\n”换行,光标移至行首
-e “\r” 光标移至行首,但不换行(会覆写行开头的字符)
-E 禁止反斜杠转义,与-e参数功能相反
案列:输出一段普通字符串 echo “hello world”
#echo hello world
输出变量提取后的值 echo $PATH
取消转义 echo\$PATH
将输出结果重定向到文件 echo “hello world” > file.txt
显示命令执行结果 echo ‘date’
输出带有换行符的内容(开启转义) echo -e“a\nb\nc”
printf命令
作用:格式化输出结果
语法:printf FORMAT [ARCUMENT]…
printf OPTION
转义序列:
序列
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 不显示输出结果中任何结尾的换行字符,而且任何留在参数里的字符,任何接下来的参数以及任何留在格式字符串中的字符都被忽略。
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\\ 反斜杠字符
格式替代符:
符号
%c ASCll字符,显示相对应参数的第一个字符
%d,%l 十进制整数
%E 浮点格式
%e 浮点格式
%g
%G
%s 字符串
%u 不带正负号的十进制
%x 不带正负号的十六进制,使用a至f表示10至15
%% 字面意义的%
%X 不带正负号的十六进制,使用A至F表示10至15
案列:常见格式化字符
打印良许基本信息
输出重定向
>:以覆盖的形式写到文件中 >>:以追加的形式写到文件中 |
凡是在控制台上能够打印出来的,统一都可以重定向,可以将其打印到控制台的行为重定向到文件或其他设备。 ls -al > ls.txt |
输入重定向
<:将文件内容输入给某个命令,这是一种默认的行为,通常
命令行文本搜索工具
grep命令
在某段内容中搜索 例如:grep 0 a.txt (在a.txt中搜索0) |
基本用法: grep ‘pattern’ file ‘pattern’ 表示要匹配的字符串或模式。File表示要搜索的文件名, |
搜索多个文件:grep ‘pattern’ file1 file2 grep ‘pattern’ *.txt file1和file2 表示要搜索的多个文件名。也可以使用通配符*.txt |
递归搜索目录:grep -r ‘pattern’ dir -r表示递归搜索目录。 Dir表示要搜索的目录。 |
显示匹配行的前几行或后几行 grep -A 2 ‘pattern’ file #显示匹配行后2行 |
同时输出匹配结果的行号 grep -n ‘pattern’ file -n表示只输出匹配结果所在的行号。 |
忽略大小写 grep -i ‘pattern’ file -i 表示忽略大小写 |
找出不匹配的行 grep -v ‘pattern’ file -v 输出不匹配模式的行 |
使用正则表达式匹配 grep -E ‘pattern’ file |
管道 |
将前面命令的输出作为后面命令的输入,可以叠加
ps命令
作用:显示进程状态
语法:ps [options]
参数:-A 显示所有进程
-a 显示所有终端机下执行的程序
-x 通常与a这个参数一起用,可列出较完整信息
-e 列出程序时,显示每个程序所使用的环境变量
-f 用ASCII 字符显示树状结构,表达程序间的相互关系
-u <用户识别码> 列出属于该用户的程序的状况,也可使用用户名称来指定
信息说明:USER,用户名称 PID,进程号 %CPU,该进程所占用内存百分比
%MEM,该进程所占用内存百分比 VSZ,进程所占用的虚拟内存大小
RSS,进程所占用的实际内存大小 TTY,该进程运行在哪个终端上面,若与终端无关,则显示
STAT,进程状态 R 运行
S 可中断睡眠
D uninterruptible sleep 不可中断睡眠
T 停止
Z 僵死
START,进程启动时间 TIME,进程实际占用CPU的时间
COMMAND, 该进程对应的执行程序
案例:
显示当前系统所有进程状态:ps -aux #列出目前所有的正在内存当中的程序
#ps -A #显示所有进程信息
#ps -ef #显示所有进程信息,连同命令行
树形显示所有进程 ps -axf
查找特定进程信息 ps -aux | grep ssh
显示指定用户信息 ps -u lilianghu
配合less命令使用 ps aux | less
结合管道操作符与sort命令,依据处理器使用量(第三列)情况降序排序
# ps aux | sort -rnk 3
pstree命令
作用:以树状图显示进程
语法: pstree [参数]
参数:-a 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示
-c 不使用精简标示法
-G 使用VT100终端机的列绘图字符
-h 列出树状图时,特别标明现在执行的程序
案列:以树状图显示进程 pstree
显示该进程的完整指令及参数,遇到相同的进程名可以压缩显示 pstree -a
显示当前所有进程的进程号和进程id pstree -p
同时显示用户名称 pstree -u
pgrep命令
作用:检索当前正在运行的进程
语法:pgrep [参数] [模式]
参数:-d 设置一个字符串,用于分割输出的每个进程ID
-f 模式参数仅用于匹配进程名
-l 列出进程名及进程ID
-u 选择仅匹配指定有效用户ID进程
案列:查找ssh进程的pid pgrep sshd
指定分隔符输出 pgrep sshd -d’ ‘
查询用户liangxu启动的sshd进程的PID pgrep -u liangxu sshd
显示进程名称和PID pgrep -l sshd
使用正则表达式 pgrep ‘^sshd$‘-l
匹配所有的参数列表 pgrep -f ssh
lsof命令
作用:查看进程打开的文件
语法:lsof [参数] [文件]
参数:-a 列出打开文件存在的进程
-c <进程名> 列出指定进程所打开的文件
-g 列出GID号进程详情
-d <文件号>列出占用该文件号的进程
+d <目录>列出目录下被打开的文件
+D<目录>递归列出目录下被打开的文件
-n<目录>列出使用NFS的文件
-i <条件>列出符合
-p<进程号>列出指定进程号所打开的文件
-u 列出uid号进程详情
案列;查看当前系统中全部文件与进程对应信息 lsof
显示指定目录中被调用的文件信息 lsof +d /home
递归显示指定目录中全部被调用的文件信息 lsof +D /home
查看谁正在使用某个文件(说查找某个文件相关的进程) lsof /bin/bash
列出某个用户打开的文件信息 lsof -u liangxu
列出某个程序进程所打开的文件信息 lsof -c bash
通过某个进程号显示该进行打开的文件 lsof -p 1930
根据文件描述列出对应的文件信息 lsof -d 1
jobs/bg/fg命令
作用:终端任务调度
案列:列出当前shell的任务 jobs -l
将test2.sh调至前台运行 fg %2
将当前进程切到后台运行 ctrl +z
恢复test2.sh在后台运行 bg 2
杀死test3.sh kill %3 kill pid
kill命令
作用:发送信号到进程
语法;kill [option]<pid>[…]
常用信号:HUP 1 终端断线
INT 2中断 (同ctrl+c)
QUIT 3退出 (同ctrl+\)
TERM 15 终止
KILL 9强制终止
CONT 18 继续(与STOP相反,fg/bg命令)
STOP 19 暂停(同ctrl +Z)
参数: -l 列出系统支持的信号
案列:列出系统支持的所有信号列表 kill -l
不指定信号 kill 1951
得到指定信号的数值 kill -l SIGKILL
杀死指定进程 kill -9 1951
杀死指定用户所有进程 kill -9$(ps -ef | grep liangxu)
killall命令
作用:使用进程名称来杀死进程
语法:killall [参数] [进程名称]
参数:-l 打印所有已知信号列表
-u 杀死指定用户的进程
案列:杀死所有sleep进程 killall sleep
查看kill all支持的所有信号 killall -l
发送指定信号 killall -9 sleep
杀死指定用户所有进程 sudo killall -u harry
nice/renice命令
作用:调整进程的优先级
语法:nice [参数][命令]
renice [参数][命令]
参数 nice -n 后面接一个数值,范围在-20-19
#renice -g 指定进程组id
-p 改变该程序的优先权等级,此参数为预设值
-u 指定开启进程的用户名
案列 查看nice值 ps -l
设置优先级为15
#nice -n 15 vim &
#nice -15 vim &
根据pid重新设置进程的nice值 renice 6 -p 5200
将liangxu的进程nice值全部设置为-5 renice -5 -u liangxu
nohup命令
作用:后台运行程序
案列:让进程在后台运行 nohup ./test &
输出重定向到file.txt 文件 nohup ./test > file.txt 2>&1 &
包管理器
apt 命令
作用:包管理器
语法:apt [选项] 软件包
案列:列出所有可更新的软件清单 sudo apt update
升级软件可更新的软件包 sudo apt upgrade
单独升级某个安装包sudo apt upgrade vim
安装软件包 sudo apt install bat
删除软件包 sudo apt remove bat
打印软件包信息 sudo apt show bat
清理不在使用的依赖和库文件sudo apt autoremove
列出已安装的所有软件包sudo apt list –installed
apt-get命令
作用:包管理器
语法:与apt 类似
apt与apt-get异同点
apt=apt-get, apt-cache和apt-config中最常用命令选项的集合
apt视觉功能更好
apt替换部分apt-get系统命令,但不是全部
建议首先使用apt
export命令
作用:设置或显示环境变量
语法:export [选项]文件
参数:-f 代表[变量名称]中为函数名称
-n 删除指定的变量,变量实际上并未删除,只是不会输出到后续指令的执行环境中
-p 列出所有的shell赋予程序的环境变量
注意:export 的作用效果仅限于本次登录
如果想永久生效,可修改配置文件 /etc/profile #所有用户
~/.bashrc #当前用户
案列:列出当前所有的环境变量 export -p
定义环境变量 export MYENV
定义环境变量赋值 export MYENV=7
修改环境变量PATH export PATH=$PATH:/usr/local/mysql/bin
source命令
作用 在当前shell环境中从指定文件读取和执行命令
该命令通常用命令“ . ”来替代
语法:source [文件]
案列:读取和执行bashrc文件
Source ~/.bashrc
执行刚修改的初始化文件,使之立即生效 source /etc/profile
查看系统进程
ps 【命令参数】
常用参数: -e :显示当前所有进程
-f : 显示UID,PPID, C与STIME 栏位信息
sleep命令
用于暂停程序的执行一段时间 语法 sleep NUMBER [SUFFIX]
其中,NUMBER 为需要暂停的时间,单位是秒;SUFFIX 则可以是以下之一: s :秒(默认) m :分 h:小时 d:日
例如:#暂停3秒 sleep 3 #暂停1分钟 sleep 1m
进程管理
进程是应用程序运行的时候产生的
在Linux中,运行某个命令或者启动服务,都会有一个进程;
每一个进程在系统中会分配一个唯一的ID号(PID)
当程序结束的时候,PID会被回收,下一次其他的程序运行时可能会将ID分配出去
进程的权限来自于用户的权限,继承用户的权限;哪个用户运行,那么进程就继承哪个用户的UID和GID
ps查看静态进程
PID:进程ID号
TTY:得到终端的方式
pts表示伪终端(远程ssh连接、图形化登录)
tty[1-6] 表示终端设备,显示屏直连,tty2表示有桌面的环境
? 表示没有终端,是内核进程
TIME:表示进程的持续时间;0表示刚刚发起或者一直在运行
CMD:运行的命令
ps -ao user,%cpu,%mem,command
ps -ef === ps -aux
-e 查看所有进程
-f 查看用户 PID PPID C(cpu资源占比) STIME(系统启动时间) command
--sort:指定排序的参数;例如 ps -aux --sort=-%cpu 按照cpu占比大小进行降序
ps -aux --sort=%cpu | tail
eg:ps -aux --sort=-%cpu | head 查看cpu占比最高的进程
ps -aux --sort=%cpu | tail 查看cpu占比最高的进程
RHEL9中,有考题会考到,编写一个脚本监控系统状态,监控CPU和内存的资源状态
Top实时查看系统进程
默认每3秒刷新一次
-d 指定刷新间隔时间(top -d 2)
-p 查看指定pid的进程状态
top - 11:38:40 up 9 days, 2:42, 2 users, load average: 0.00, 0.00, 0.00
load average:平均负载时间(每分钟、每5分钟、每15分钟)
和CPU相关
以单核CPU为例:
以每分钟为例
如果负载小于1,表示CPU空闲
如果负载等于1,表示CPU全力运行
如果负载大于1,表示CPU超负荷
进程有父进程和子进程的概念
系统中有两个较为特殊的进程:僵尸进程、孤儿进程
如果是僵尸进程,一定要特别重视,会消耗系统的cpu 内存资源
如果是孤儿进程,不会占用系统的cpu 内存资源,PID为1的进程会接管孤儿进程然后关闭它
产生的原因:
系统中的进程有父进程的概念,父进程会派出子进程干活;
孤儿进程:(父进程退出了,子进程还在干活;父进程先一步比子进程退出)
产生原因:用户手动关闭父进程或者程序BUG导致父进程比子进程先退出
派出来的子进程在干活中,父进程可能因为程序BUG或者特殊原因退出了,子进程就成为了孤儿进程。这个时候系统PID为1的进程会接管孤儿进程(rhel7是init,rhel7以后是systemd,是系统启动运行的第一个进程,也是系统的守护进程),然后关闭孤儿进程。
僵尸进程:(子进程已经干完活了,要告诉父进程我的活儿已经干完了,需要父进程接受我的信息,释放我)
产生原因:程序BUG或者人为故意放出病毒,子进程干完活儿了向父进程发送退出的信息,父进程没接收到,进程就会一直向父进程发送,成为僵尸进程
0.4 us, 0.6 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.2 hi, 0.1 si, 0.0 st
us:用户空间占用cpu百分比
例如shell程序、开启的应用软件、桌面等
sy:内核空间占用cpu百分比
例如系统分配内存、执行的IO操作等
ni:用户自定义优先级的进程占用cpu百分比
id:cpu的空闲百分比
wa:等待磁盘IO操作的时间
时间越长,表示cpu和磁盘的性能差距越大,要检测是不是系统有非常的IO
hi:硬中断
表示硬盘、网卡等硬件设备发送CPU的中断消息,CPU处理消耗的时间
si:软中断
表示软件发送CPU的中断消息,CPU处理消耗的时间
st:虚拟机等待cpu的时间
只有当系统是虚拟机的时候关注此项
top命令过程可以使用一些交互式的命令
1 查看每个逻辑cpu的资源信息
M 按照占用内存的百分比进行排序
m 查看内存进度条模式的百分比
P 按照CPU的百分比进行排序
c 显示命令的名称
T 根据占用的时间进行排序
k 杀死pid
top命令
用于查看正在运行的系统进程信息的命令。它会实时地显示系统资源使用情况
top命令扩展
作用:实时显示进程动态
参数:-d 指定每两次屏幕信息刷新刷新之间的时间间隔(单次为秒)
-c 切换显示命令名称和完整命令行
-p 通过指定监控进程ID来仅仅监控某个进程状态
-n 信息更新最大次数
快捷键: c 显示进程决对路径
#P根据CPU使用率排序
#M 根据物理内存使用率排序
#1 显示每个核的CPU状况
案例:实时显示进程动态 top
显示完整的进程信息 top -c
指定信息刷新时间为5秒 top -d 5
仅监控进程1877的状态 top -p 1877
设置信息更新次数 top -n 2
僵尸进程
僵尸进程:在操作系统中,僵尸进程(Zombie Process)是指一个已经执行结束的进程,但其进程描述符仍然留在进程列表中
,它不再执行任何其他操作,但仍然占用一定内存空间。
uptime命令
显示系统运行时间
free命令
用于查看物理内存和交换分区的使用情况
磁盘使用情况
df命令(disk free缩写)
用于显示当前文件系统的磁盘空间使用状况,剩余多少空间。以及文件系统的挂载点,磁盘大小,已用空间,可用空间,使用占比等信息。Df命令是disk free的缩写
df命令扩展
作用:显示磁盘空间使用情况
语法:df [OPTION]…[FILE]…
参数:-a 显示所有文件系统,包含所有的具有OBlocks 的文件系统
-h 以容易阅读的方式显示
-i 显示inode信息
-t <文件系统类型>只显示指定类 型的文件系统
-T 输出时显示文件系统类型
案列;
显示磁盘空间使用情况 df
以易读方式显示磁盘空间使用情况 df -h
显示指定文件/目录所在分区的磁盘使用情况 df /home
显示指定文件类型的磁盘使用情况 df -t squashfs
以inode 模式来显示磁盘使用情况 df -i
显示所有信息 df -a
列出文件系统的类型 df -T
du命令
用于显示文件或目录占用的磁盘空间大小。Du命令是disk usage的缩写 4表示占用4个字节的空间。
du命令扩展
作用:查看磁盘使用空间
语法:du [OPTION]…[FILE]..
参数 -a 显示目录中所有文件大小
-h 以易读方式显示文件大小
案列:
列出当前目录下所有文件和目录的容量大小 du
以易读方式显示dir文件夹及其子文件夹大小 du -h dir
以易读方式显示dir文件夹内所有文件大小 du -ah dir
显示文件file.txt 所占用的磁盘空间 du file.txt
仅显示目录的总大小
#du -s dir 等价于 du --max-depth=0 dir
显示指定目录下每个文件或目录的容量大小,并且以易读方式显示 du -sh dir
重启reboot命令
Sync命令
作用:强制将更改的内容立刻写入磁盘。
关机
shutdown -h now 和 poweroff 都是用于关机的区别在于 :shutdown -h now 命令会向系统发送信号,通知所有正在运行的进程停止运行,并保存当前的状态,然后关闭系统。通常会在关机前向所有用户发送通知消息。
Poweroff命令相较于shutdown -h now 更为强制,它会立即关闭系统电源。使用poweroff命令时需要特别小心,因为它可能会丢失尚未保存的数据。
curl命令
模拟用户访问,模拟浏览器行为
例如:curl http://www.baidu.com (可查看百度首页的前端代码)
curl 命令是Linux系统中的一个用于发送HTTP请求的工具。它支持各种协议,包括HTTP,HTTPS,FTP,IMAP,SMTP等,可以用于从网络中获取数据,上传文件等。
curl [options] <URL> 其中URL表示要请求的目标地址。
常用选项: -i: 显示响应头信息。
-I: 只显示响应头信息,不显示响应体
-X:设置请求方法,包括GET,POST,PUT,DELETE等
-d:设置请求体数据(POST请求)
-H: 设置请求头信息
-o/-O下载文件,并保存到本地。
-u:设置认证信息
-A:设置User-Agent
-s:静默模式,不输出进度信息
curl命令扩展
作用:文件传输工具
语法:curl [参数] 网址
参数:-o 指定新的本地文件名
-O 保留远程文件的原始名
-u通过服务端配置的同户名和密码授权访问
-l 打印HTTP响应头信息
-A 设置用户代理标头信息
-b 设置用户cookie信息
-C 支持断点续传
-s 静默模式,不输出任何信息
-T 上传文件
案列:
获取指定网站的网页源码 curl www.baidu.com
保存网页 curl -o Baidu.html www.baidu.com
下载指定网站中的文件 curl -O https://cn.wordpress.org/latest-zh_CN.zip
下载文件并重命名 curl -o wp.zip https://cn.wordpress.org/latest-zh_CN.zip
断点续传 curl -C --O https://cn.wordpress.org/latest-zh_CN.zip
打印指定网站的HTTP响应头信息 curl -I https://cn.wordpress.org/latest-zh_CN.zip
通过ftp下载指定文件服务器中的文件 curl -u liangxu:123456 ftp://www.baidu.com/file.txt
上传文件 curl -T newfile.txt -u 用户名:密码 ftp://www.baidu.com/dir/
wget命令
语法:wget 资源地址
netstat查看网络连接状态及端口
查看所有的网络连接状态: netstat -a
netstat -an 添加-n参数的目的是:不将端口和IP地址转换为名称,而是直接显示数字格式的IP地址和端口号
显示系统网络状态中的TDP连接信息 netstat -at
显示系统网络状态中的UDP连接信息 netstat -au
LISTENING 状态:表示该端口已占用,正在监听,等待客户端的连接
CONNECTED状态:表示网络连接已建立,但并没有开始数据传输。
ESTABLISHED状态:表示网络已连接,数据在传输中。
TIME_WAIT状态:表示连接已经被终止,在双方都完成数据传输后,该连接会进入‘TIME_WAIT’状态,并等待一段时间后关闭。
只查看所有处于监听状态的连接: netstat -l
只查看所有TCP连接状态: netstat -lt
只查看所有UDP连接状态: netstat -lu
查看所有处于CONNECTED连接状态: netstat -o
查看指定端口的网络连接状态:netstat -an | grep 端口号
显示所有端口的统计信息 netstat -s
显示TCP或UDP端口的统计信息 netstat -st netstat -su
输出中显示PID和进程名称:netstat -p
显示系统网络状态中的UDP连接端口号使用信息 netstat -apu
显示网卡当前状态信息 netstat -i
显示网络路由表状态信息 netstat -r
找到某个服务所对应的连接信息 netstat -ap | grep ssh
查看文件内容
查看文件内容的常见命令 cat more
和less head和tail nl tailf
cat命令
语法:cat 【选项】...【文件】...
常用选项:
-n 对输出的所有行编号
-b对输出的所有行编号(不含空白行)
-t将制表符(tab)显示为^I
-e在每行结束处显示$
-s当连续空白行数量大于1是,合并为1个空白行
cat命令会一次性将文件的完整内容全部显示出来,不适合大文件
查看文件所有内容/查看文件所有内容,并且添加行号/查看文件所有内容,添加行号,但空白行不加行号
一次查看多个文件 cat a.txt b.txt 使用cat合并文件 cat a.txt b.txt > c.txt 加上行号之后输出到另一个文件 cat -n a > b
清空文件内容 cat /dev/null > c
tac命令
作用:反向显示文件内容
语法:tac [参数] [ 文件]
案列:tac file.txt
more命令
more命令和cat命令相同点和不同点:
相同点:more和cat在开始读取文件的时候,都是一次性的将文件全部内容装载到缓存中。
不同点:cat是一次性的全部输出打印。More可以进行部分打印(一屏一屏的打印)
用法: more [选项] <文件>…
常用选项:
-<number> 每个屏幕的行数
+<number> 从行号开始显示文件
+/<pattern>从匹配的位置前两行开始显示内容
-p 以清楚原有内容的方式进行翻页。
常用操作:
回车键 显示下一行 /空格键 显示下一页 / ctrl + b 显示上一页 / = 显示行号 / :f 显示文件名的同时显示行号 / q 退出more命令
案例4:查看进程,每5条为一屏,翻屏时清空原内容
ps -ef | more -5 -p
more命令扩展
作用:分页显示文本文件内容
语法:more [options] file…
基本操作 回车:下滚一行 ; 空格:下翻一页
参数:
-num 指定每屏显示的行数
+num 从第num行开始显示
-p 先清除屏幕再显示文本文件的剩余内容
-c与-p相似,不滚屏,先显示内容再清除旧内容
-s 多个空行压缩成一行显示
案列:分页显示指定的文本文件内容
#more ~/.bashrc
先进行清屏操作,随后以每次10行内容的格式显示指定的文本文件内容
#more -c -10 ~/.bashrc
分页显示指定的文本文件内容,遇到连续两行以上空白行的情况,则以一行空白行显示
#more -s ~/.bashrc
从第10行开始,分页显示指定的文本文件内容
#more +10 ~/.bashrc
ss命令
作用: 显示活动套接字 ss -at
语法:ss [参数]
案列:
显示TCP套接字 ss -at
显示UDP套接字 ss -au
显示套接字使用概况 ss -s
列出所有打开的网络连接端口 ss -l
查看进程使用的socket ss -pl
找出打开套接字/端口应用程序 ss -lp | grep 6010
查看主机监听的端口 ss -tnl
解析IP和端口号 ss -tlr
telnet命令
作用:明文远程登入服务器,不安全,命令需要安装,不如ssh
语法:telnet [参数] [主机] [端口]
案列:
登录远程主机 telnet 192.168.107.133
指定端口 telnet 192.168.107.133 6379
ssh命令
作用:远程连接工具
语法:ssh [参数] [主机]
参数:-l <登录名>指定连接远程服务器的登录用户名
-p<端口> 指定远程服务器上的端口
配置文件:/etc/ssh/sshd_config
案列:
登陆远程服务器 ssh 192.168.0.0
以liangxu身份远程登陆服务器
ssh -l liangxu 192.168.0.10
指定端口及用户名登陆服务器 ssh -p 2222 liangxu@192.168.0.10
远程执行命令 ssh 192.168.0.10 date
less命令
less也是对文件或其它输出进行分页显示的工具,使用less时,可以使用【pageup】【pagedown】等按键的功能来往前往后翻看文件。。。
用法:less 【选项】文件
常用选项:-g 只标志当前搜索道德
-I 忽略搜索时的大小写
-m显示显示类似more命令的百分比
-N显示每行的行号
+num 从第num行开始显示
常用操作:
/字符串:向下搜索字符串的功能
?字符串:向上搜索字符串的功能
n:重复前一个搜索(与/或?有关)
N反向重复前一个搜索(与/或?有关)
y向前滚动一行
回车键向后滚动一行
u向前滚动半页
d向后滚动半页
b向前翻一页
空格键 向后翻一页
g 移动到第一行
G移动到最后一行
=显示详细信息(第几行,共多少行,内容的字节数量等)
v使用vim编辑器进行编辑
q退出less命令
【pagedown】向下翻动一页
【pageup】向上翻动一页
less命令扩展
作用:分页显示文本内容
语法:less [参数] 文件
快捷操作:
空格键 下翻一页
回车键 下滚一行
#j 下滚一行
#k 上滚一行
#b 回翻一页
#f 下翻一页
#q 退出
/word 搜索word关键词
案列:
查看文件 less ~/.bashrc
查看多个文件 less ~/.bashrc ~/bash_history :n 浏览下一个文件 ; :p浏览前一个文件
查看历史命令并使用less命令分也显示 history | less
less命令标记兴趣点
在感兴趣的位置添加标记:
先按m键(set mark)
输入标记名称,例如标记名子为x
需要回到感兴趣的位置时:
先按 ' 键( goto mark)
输入标记名称x
less命令实时监控文件动态变化
第一步:在窗口1中执行:less+F log.txt
第二步:在窗口2中执行:ps -ef >> log.txt
注意:在监控的过程中,按ctrl+c是终止监控,可以继续使用less命令的相关操作。按大写F,再次进入监控模式。
注意:log.txt是一个文件名,只有机器自动写入或通过输出重定向写入的才可以被监控
less命令查看多个文件
less log.txt log2.txt
输入:n跳转到log2.txt
输入:p跳转到log.txt
less命令结合管道一起使用
ps -ef | less -N
head命令
head命令:显示文件头部内容
用法:heead [选项] …[文件}…
将每个指定文件的前10行输出到标准输出
如果指定了多于一个文件,在每块输出之前附加文件名称作为头部
参数:
-c输出前几个字符
-n指定行数
-q不显示包含给定文件名的文件头
head命令扩展
作用:显示文件开头的内容
参数:-n <数字>定义显示行数
-c <数字>指定显示头部内容的字符数
案列:
显示文件的前10行内容(默认)
#head ~/.bashrc
显示文件的前5行内容
#head -n 5 ~/.bashrc
显示文件除了最后6行的全部内容
#head -n -6 ~/.bashrc
显示文件的前20个字符
#head -c 20 ~/.bashrc
显示文件除了最后30个字符的全部内容
#head -c -30 ~/.bashrc
tail命令
tail命令:显示文件尾部内容
用法:tail [选项] …[文件}…
显示每个指定文件的最后10行输出到标准输出
如果指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头部
参数:
-c输出最后几个字符
-f随文件增长即时输出新增数据
-n指定行数
-q不输出文件名的头
tail命令扩展
作用:查看文件尾部内容
语法:tail [OPTION]…[FILE]…
参数:-c N输出文件尾部的N(N为整数)个字节内容
-f 显示文件最新追加的内容
-n N输出文件的尾部N(N位数字)行内容
案列:
显示 file.txt文件的最后10行内容
#tail file.txt
显示 file.txt文件的最后20行内容
#tail -n 20 file.txt
显示 file.txt文件从第20行至文件末尾
#tail +20 file.txt
显示 file.txt文件的最后10个字符
#tail -c 10 file.txt
动态显示文件的最后10行内容
#tail -f file.txt
nl命令
nl命令是比较专业的显示行号的命令。
nl -b a所有行添加行号,包括空白行;
nl -b t给行添加行号,不包括空白行(默认行为,和直接使用nl一样效果)
nl -n ln行号在自己栏位左侧显示;
nl -n rn行号在自己栏位的右侧显示:
nl -n rz显示行号,行号栏位不满时,自动补0;
nl -w行号栏位的占用的位数。
nl命令扩展
作用:添加行号
语法:nl [OPTION]…[FILE]…
参数:
-b a 也给空行添加行号(类似cat -n)
-b t 空行不显示行号
-n 列出行号表示的方法: -n ln 行号在屏幕的最左方显示
-n rn 行号在自己栏位的最右方显示,且不加0
-n rz 行号在自己栏位的最右方显示,且加0
-w 行号栏位的占用的位数
案列:
用nl列出file.txt的内容
#nl file.txt
用nl列出file.txt的内容,空行也加上行号
#nl -b a file.txt
行号在自己栏位的最右方显示,且加0对齐格式
#nl -b a -n rz file.txt
行号宽度设置为3
#nl -b a -n rz -w 3 file.txt
空行不显示行号
#nl -b t file.txt
wc命令
作用:统计文本信息
语法:wc [OPTION]…[FILE]…
参数:
-w 统计字数,或 --words : 只显示字数。一个字被定义为由空白,跳格或换行字符分隔的字符串
-c 统计字节数,或 --bytes或--chars: 只显示Bytes数
-l 统计行数,或 --lines;只显示列数
-m 统计字符数
-L 打印最长行的长度(不包含不可见字符)
案列:
统计file.txt文件的行数,字数,以及字节数
#wc file.txt
统计file.txt文件的字数
#wc -w file.txt
统计file.txt文件的字符数
#wc -m file.txt
统计file.txt文件的字节数
#wc -c file.txt
统计file.txt文件的行数
#wc -l file.txt
打印file.txt文件最长行的长度
#wc -L file.txt
使用管道统计文本行数
#cat file.txt | wc -l
split命令
作用:文件分割
语法:split [OPTION]…[FILE[PREFIX]]
参数:
指定每多少行切成一个小文件 -<行数>
-l 行数
指定每多少字节切成一个小文件 -b<字节>
使用数字作为后缀 -d
指定后缀长度 (默认为2)-a
[输出文件名]设置切割后文件的前置文件名,split会自动在前置文件名后再加上编号
案列:
将file1.txt每2行切割成一个小文件
#split -2 file1.txt
将file2.txt每10KB切割成一个小文件
#split -b 10k file2.txt
以数字作为后缀,并指定后缀宽度为3
#split -b 10k -d -a 3 file2.txt
为分割后的文件指定文件名的前缀
#split -b 10k -d -a 3 file2.txt split_file
tailf命令
与 tail -f不同的是,如果文件不增长,他不会去访问磁盘文件。tailf特别适合哪些便携机上跟踪日志文件,因为它能省电,因为减少了磁盘访问。Tailf命令不是个脚本,而是一个用C代码编译后的二进制执行文件,
linux用户管理
Linux系统中超级用户是root,通过超级用户root可以创建其他用户,Linux是一个支持多用户的操作系统。在实际使用中,一般会分配给开发人员专属的账户,这个账户只拥有部分权限,如果权限太高,操作的范围过大,一些误操作可能导致系统崩溃,或者数据不安全,所以多用户机制就是一种系统安全策略。
在Linux系统中任何一个用户都对应:一个用户名+一个口令。用户使用系统时需要输入用户名和口令进行登录,登录成功后就可以进入自己的主目录(主目录就是自己的工作目录)。
用户账号管理主要包括以下三个方面:
用户组的管理
用户的管理
为用户主目录之外的目录授权
groups命令
作用:显示一个用户所加入的所有用户组
语法:groups 用户
案列:显示alvin用户所加入的所有组
用户组的管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。
用户组的管理涉及用户组的添加,修改和删除。
用户组的添加,修改和删除实际上就是对/etc/group文件的更新
使用root账户查看当前系统的用户组有哪些 cat /etc/group
每一个用户组四部分组成:组名:密码标识:GID:该用户组中的用户列表
查看当前登录的账号属于哪一组 groups
查看某个用户属于哪一组 groups root
groupadd命令
作用:创建新的用户组
语法:groupadd [参数] 用户组
参数:-g 指定新建工作组的id
-r 创建系统工作组
案列:创建一个新的用户组 groupadd work
创建一个新的用户组,并指定GID号码 groupadd -g 1234 family
创建一个新的用户组,设定为系统工作组 groupadd -r grouptest
用户组的添加
语法:groupadd [选项] 组名
常用选项
-g 可以通过这个选项来指定新用户组的标识号GID
用户组的修改
修改组标识号
groupmod -g 102 dev2
修改组名
groupmod -n dev3 dev2 #将dev2修改为dev3
groupdel命令
作用:删除用户组
语法:groupdel [参数] [群组名称]
案列:删除指定用户组 groupdel family
用户组的删除
删除用户组 groupdel dev3
用户管理工作涉及用户的添加,修改和删除
useradd命令
作用 创建并设置用户信息
语法:useradd [参数] 用户名
参数:-d<登入目录>指定用户登入时的目录。
-g<群组>初始群组
-G<群组>非初始群组
-m自动创建用户的家目录。
-M 不要创建用户的家目录
-N 不要创建以用户名称为名的群组
-s 指定用户登入后所使用的shell
四个重要文件:
/etc/passwd 保存用户信息 /etc/shadow 保存用户密码 /etc/group 保存组信息 /etc/gshadow 保存组密码
案列:
直接创建新用户 useradd user1
常用创建方法 useradd -m -s /bin/bash user2
自动创建家目录 useradd -m username
指定家目录 useradd -m -d /new/dir username
指定用户ID useradd -u 1500 username
指定组ID useradd -g group username
分配多个组 useradd -g group -G group1,group2 username
指定登录shell useradd -s /bin/bash username
自定义注释 useradd -c “Test User Account” username
adduser命令
作用:创建用户账户
语法:adduser [参数] 用户名
案列:创建一个新用户 adduser newuser
添加用户
添加用户就是在系统中创建一个新账号,然后为新账号分配用户组,主目录等资源。
语法:useradd [选项] 用户名
选项:
-d 指定新用户的主目录
-g 指定新用户属于哪个组 (主组)
-G可以给新用户添加附加组
注意:当新建用户时,没有指定组,也没有指定工作目录时:默认的组名:和自己用户名一样 默认的主目录:/home/用户名
userdel命令
作用:删除用户账户
语法:userdel [参数] 用户名
参数:-r 删除用户主目录及其中的任何文件
案列:
删除指定用户账户信息 userdel liangxu
删除指定的用户账户信息及家目录 userdel -r liangxu
删除用户
删除用户并连同主目录一块删除 userdel -r zhangsan -r选项的作用是连同该用户主目录一块删除
passwd命令
作用:修改用户的密码
语法:passwd [参数] 用户名
参数:-d 删除已有密码
-l 锁定用户的密码值,不允许修改
-u 解锁用户的密码值,允许修改
-e 下次登陆强制修改密码
-k 用户在期满后能仍能使用
-S查询密码状态
案列:
修改当前登录用户的密码值 passwd
修改指定用户的密码值 passwd liangxu
锁定指定用户的密码值,不允许其进行修改 passwd -l liangxu
解锁指定用户的密码值,允许其进行修改 passwd -u liangxu
强制指定的用户在下次登陆时必须重置其密码 passwd -e liangxu
删除指定用户的密码值 passwd -d liangxu
查看指定用户的密码状态 passwd -S liangxu
设置密码
给用户lisi设置密码 passwd lisi |
注意:增加用户就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow,/etc/group等 |
通过查看/etc/passwd文件可以看到系统中有哪些用户。 |
su命令
作用 :切换用户身份
语法:su [参数] 用户名
参数:- 完全身份变更
-c 执行完指定的指令后,即恢复原来的身份
-f 适用于csh与tsch ,使shell不用去读取启动文件
-l 改变身份时,也同时变更工作目录
-m 变更身份时,不要变更环境变量
-s 指定要执行的shell
案列:切换超级用户 su su root
变更账号为alvin并保留在当前工作目录 su alvin
变更账号为alvin并改变工作目录至alvin的家目录 su-alvin
变更账号为alvin并在执行whomai指令后退出变回源使用者 su -c whoami alvin
切换用户
从root账户切换到普通账户
从普通用户切换到超级管理员需要密码。密码输入时不回显。
注意切换到普通用户之后,该普通用户默认只对自己的主目录有权限,主目录之外的目录是没有权限的。
usermod命令
作用: 修改用户账号信息
语法:usermod [参数] 用户名
参数; -c<备注>修改用户账号的备注文字
-d<登入目录>修改用户登入时的家目录
-e<有效期限>修改账号的有效期限
-f<缓冲天数> 修改在密码过期后多少天即关闭该账号
-g<群组>修改用户所属的群组
-G<群组>修改用户所属的附加群组
-l<账号名称>修改用户账号名称
-L锁定用户密码,使密码无效
-s <shell> 修改用户登入后所使用的shell
-u<uid> 修改用户ID
-U 解除密码锁定
案列:修改指定用户的家目录路径 usermod -d /home/hometest alvin
修改指定用户的UID号码 usermod -u1234 alvin
修改指定用户的名称 usermod -l harry alvin
锁定指定用户的账户 usermod -L alvin
解锁指定用户的账户 usermod -U alvin
修改用户
修改用户就是对用户名,用户主目录,用户组等进行修改。
语法:usermod [ 选项] 用户名
-d 指定新用户的主目录
-g指定新用户属于哪个组(主组)
-G可以给新用户添加附加组
-l指定新的用户名(小写)
修改用户名 :usermod -l zhangsi zhangsan
修改主目录: -m 选项很重要,当有了这个选项之后,目录不存在时会新建该目录 usermod -d /usr/zhangsan2 -m zhangsan
修改所属组:usermod -g dev1 zhangsan
锁定用户: usermod -L zhangsan
解锁用户:usermod -U zhangsan
chmod命令
作用:改变文件或目录权限(只有文件的属主和超级用户root才能执行此命令)
语法:chmod [OPTION]…MODE[MODE]…FILE…
chmod [OPTION]…OCTAL.MODE FILE…
chmod [OPTION]…--reference=RFILE FILE…
两种模式:符号模式;数字模式
参数: -R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
案列:将文件file.txt 设置为所有人都可读取
# chmod a+r file.txt
将当前目录下所有文件及递归目录文件设置为所有人可读取
#chmod -R a+r *
将 file.txt 设置为只有该文件拥有者才可以执行
#chmod u+x file.txt
将 file.txt 设置为文件拥有者机器同组人员可写入,但其他人不可写入
#chmod ug+w,o-w file.txt
将 file.txt 设置为所有人都可读可写可执行
#chmod a+r,a+w,a+x file.txt ; chmod 777 file.txt
将 file.txt 设置为文件拥有者可读可写可执行,此外的其他人可读可执行。
#chmod 755 file.txt
将 file.txt 设置为文件拥有者可读可写,此外的其他人都没任何权限。
#chmod u=rw,go= file.txt
为用户主目录之外的目录授权
1.创建目录 mkdir /java
2.给目录授权 # -R表示递归设置权限,该目录下所有的子目录以及子文件
chmod -R 775 /java
3.创建组 groupadd dev
4.把目录赋予组 chgrp -R dev /java
5.创建用户 useradd xiaoming
6.设置密码 passwd xiaoming
7.给用户添加附加组 usermod -G dev xiaoming
文件权限
为了保证系统中每个文件的安全,可以做到不同的用户对同一个文件具有不同的操作权利。而通常这个权利包括3个
读的权利(Read,简称r)
写的权利(Write,简称w)
执行的权利(eXecute,简称x)
具体的权限值:rwx(读,写,执行)。这个我们已知,“不同用户”指的是哪些用户呢?包括3类
文件拥有者(User,简称U):该文件的创建人
同组用户(Group,简称G):和创建人在同一组的用户
其他组用户(Other,简称O)和创建人不在同一组的用户
这就是非常著名的UGO模型。也就是说一个文件的权限包括三组:
第一组U:我们可以给文件的创建者设置rwx权限
第二组G:我们可以给文件的创建者的同组人员设置rwx权限
第三组O:我们可以给和文件的创建者不在同一组的人员设置rwx权限
查看文件权限
采用 ls-l 命令可以查看文件的具体权限
基于UGO设置文件权限
修改权限的命令是chmod , 如果采用UGO方式修改权限的话,大致语法是这样的:
给同组人员添加写权限: chmod g+w hello.java
给同组人员和其他组人员添加写权限: chmod g+w,o+w hello.java
删除同组人员和其他组人员写权限: chmod g-w,o-w hello.java
基于421设置文件权限
421采用数字来表示不同的权限
4代表读 2代表写 1代表执行
例如:如果让一个用户读写,执行权限都有的话,就是4+2+1=7,那么2这个数字代表rwx的权限都具备,如果是5就表示4+1的组合,表示有r和x的权限。如果是6就表示4+2的组合,表示有r和w的权限。如果是0就表示无任何权限。
通过421这几个数字的不同组合来表示不同的权限,那么它有几种不同的组合呢?
0 无权限
1 x
4 r
5 r+x
6 r+w
7r+w+x
也就是说一共6个数字
语法:chmod 三个数字 文件名
chgrp命令
作用:更改文件用户组
语法:chgrp [参数] [目录]
参数:-v显示指令执行过程
-R 递归处理,将指定目录下的所有文件及子目录一并处理
--reference 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
案列:改变文件的用户组
# sudo chgrp alvin file.txt
改变文件的用户组,并显示命令执行过程
# sudo chgrp -v alvin file.txt
根据参照文件改变文件的用户组
# sudo chgrp --reference=reffile.txt file.txt
将dir及其子目录下的所有文件的用户组改为alvin
#sudo chgrp -R alvin dir
chown命令
作用:改变文件或目录的用户和用户组
语法:chown [参数] 所属主 所属组 文件
参数:-R 对目前目录下的所有文件与目录进行相同的变更
-c 显示所属信息变更信息
案列:改变file.txt文件的所属主与所属组
#sudo chown alvin:alvin file.txt
只改变file.txt文件的所属主
#sudo chown alvin file.txt
只改变file.txt文件的所属组
#sudo chown :alvin file.txt
改变指定文件的所属主与所属组,并显示过程
#sudo chown -c liangxu:liangxu file.txt
改变指定目录及其内所有子文件的所属主与所属组
#sudo chown -R alvin:alvin dir
chown修改文件拥有者
使用chown命令修改指定文件或目录的拥有者和所属组。
chown [选项]…[所有者][:[所属组]] 文件…
其中,所有者和所属组可以是用户名或用户ID,组名或组ID,如果省略:和所属组,则默认为修改文件的所有者
下面是一些常用选项
-R :递归修改,包括子目录和文件
软件的安装与卸载
RPM包
yum安装
yum软件仓库是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。 |
yum的关键之处是要有可靠的respository(保证能够连接互联网,还需要保证它是一个互联网上正常可用的仓库) |
Dnf
1.更新系统软件包 dnf update
dnf 和yum都是包管理器,它们的作用是安装,升级,删除软件包以及解决软件包依赖关系。它们的区别如下:
语法不同:dnf命令的语法更加简洁,而yum命令的语法相对较长。更高效的算法。
性能不同:dnf命令在处理软件包时的性能比yum命令更好,因为dnf使用了
依赖关系处理不同:dnf命令再处理软件包依赖关系时更加智能,能够自动选择最佳的依赖关系解决方案。
使用的库不同:dnf命令使用了更加现代化的libdnf库,而yum命令使用了较老的yum库
可用插件不同:dnf命令支持更多的插件,可以实现更多的功能。
总的来说,dnf命令时yum命令的升级版本,它在性能,依赖关系处理和可用插件等方面都更加优秀
开启远程连接
需要修改相关配置,来开启 /etc/ssh/sshd_config
使用vim编辑sshd_config文件中的passwordAuthcation ,将no修改为yes 。
重启sshd服务:service sshd restart
防火墙的设置
如果访问不到Nginx服务,则需要在防火墙中进行端口得开放操作
查看防火墙的启动状态 systemctl status firewalld
关闭防火墙 systemctl stop firewalld
开启防火墙 systemctl start firewalld
查看开放的端口号firewall-cmd --list-all
在防火墙中设置开放的端口号firewall-cmd --zone=public --add-port=80/tcp --permanent
开启端口后,需要重启防火墙才生效 firewall-cmd --reload
Shell
Linux操作系统内置的一种编辑语言
Linux操作系统是一种开放源代码的类UNIX操作系统,它的结构分为内核,Shell和应用程序三个层次。
1.内核层
内核是Linux系统的核心部分,它负责管理系统各种硬件设备,文件系统,内存管理和进程管理等核心任务。Linux内核设计了良好的模块化结构,可以动态地加载和卸载内核模块,这使得内核可以兼容各种不同地硬件设备和外围设备。
2.Shell层
Shell是Linux系统地命令行解释器,它负责将用户输入地命令解释并执行。最常用地是Bash Shell,它提供了各种丰富地功能和处理和处理能力,如通配符,重定向,管道,变量等等。
3.应用层
应用层是Linux系统上地各种应用程序和服务,包括文本编辑器,图形界面,web服务器,邮件服务器,数据库服务器等。在Linux系统中,应用程序通常以开放源代码方式呈现,用户可以自由学习和使用,也可以根据需求自己编写,修改或扩展。
shell编程本质上就是编写具有一定业务逻辑的shell命令。这一大堆的shell命令编写到xxx.sh文件中。我们把xxx.sh文件叫做:shell脚本。(shell脚本就是可执行文件。)
shell脚本比较著名的功能是自动化处理。
文本处理工具
熟悉grep,cut,sort,uniq,tee,diff,paste,tr等小工具和shell中的通配符的使用
grep行过滤工具
作用:文本搜索工具
语法:grep [参数] 文件
Grep是行过滤工具;用于根据关键字进行行过滤
语法:
Grep [选项] ‘关键字’ 文件名
常见选项:-i: 不区分大小写
-v:查找不包含指定内容的行,反向选择
-w:按单词搜索
-o:打印匹配关键字
-c:统计匹配的次数
-n:显示行号
-r:逐层遍历目录查找
-A:显示匹配行及后面多少行
-B: 显示匹配行及前面多少行
-C: 显示匹配行前后多少行
-I:只列出匹配的文件名
-L:列出不匹配的文件名
-e:使用正则匹配
-E: 使用扩展正则匹配
^key:以关键字开头
Key$:以关键字结尾
^$:匹配空行
--color=auto :可以将找到的关键词部分加上颜色的显示
--color=auto 颜色显示
1.正常过滤关键字:[root@R9MB tmp]# grep 'root' passwd 但是没有颜色区分
2.加选项临时搞个颜色区分:[root@R9MB tmp]# grep --color=auto 'root' passwd
3.给命令设置别名alias临时搞个颜色区分:
[root@R9MB tmp]# alias grep='grep --color=auto'
[root@R9MB tmp]# grep 'root' passwd
4.想要永久生效并且针对所有用户;改全局文件[root@R9MB tmp]# vim /etc/bashrc
增加alias grep='grep --color=auto'
已登录用户重新读取文件[root@R9MB tmp]# source /etc/bashrc
-n过滤关键字在文件中是第几行
[root@R9MB tmp]# grep -n 'root' passwd
-i忽略大小写匹配
[root@R9MB tmp]# grep -n -i 'root' passwd
或这些表达:
[root@R9MB tmp]# grep -ni 'root' passwd
^过滤文件中以某某开头的行
[root@R9MB tmp]# grep '^root' passwd
$过滤文件中以某某结尾的行
[root@R9MB tmp]# grep 'bash$' passwd
-v过滤文件中不以某某开头的行
[root@R9MB tmp]# grep -v '^root' passwd
[root@R9MB tmp]# grep -niv '^root' passwd
过滤关键字在文件中前X行;后X行;前后X行(场景:查日志)
-A after 后 ; -B before 前 ; -C前后
过滤关键字在文件中前3行
[root@R9MB tmp]# grep -nB 3 '^ftp' passwd
过滤关键字在文件中后3行
[root@R9MB tmp]# grep -nA 3 '^ftp' passwd
过滤关键字在文件中前后3行
[root@R9MB tmp]# grep -nC 3 '^ftp' passwd
-w过滤包含某单词的行
[root@R9MB tmp]# grep -w 'hello' passwd
案列:
搜索某个文件中,包含某个关键词的内容
#grep liangxu /etc/passwd
搜索多个文件中,包含某个关键词的内容
#grep liangxu /etc/passwd /etc/shadow
搜索多个文件中,包含某个关键词的内容 ,不显示文件名称
#grep -h liangxu /etc/passwd /etc/shadow
递归搜索,不仅搜索指定目录,还搜索其内子目录内是否有关键词文件
#grep -r| hello *
输出在某个文件中,包含某个关键词行的数量
#grep -c root /etc/passwd /etc/shadow
忽略大小写
#grep -i LIANGXU /etc/passwd
在文件中查找要搜索的内容,并显示行号
#grep -n liangxu /etc/passwd
反向查找
#grep -v liangxu /etc/passwd
只列出符合匹配的文件名,不列出具体的匹配行
#grep -l hello *
搜索某个文件中,精准匹配到某个关键词的内容
#grep -x hello file1.txt ; grep -x hello file3.txt
判断某个文件中,是否包含某个关键词,通过返回状态值输出结果(0为包含,1为不包含),方便在Shell脚本中判断和调用
#grep -q hello file1.txt ; grep -q hello file2.txt
egrep命令
作用: 查找指定的字符串
语法: egrep [参数] [文件]
参数:同grep
案列:查找包含一个或一个以上‘a’的内容
# egrep ‘a+’ file.txt
查找包含linux或666的内容
#egrep ‘linux|666’ file.txt
查找包含linux整体的内容
#egrep ‘(linux)’ file.txt
查找包含一个或多个linux整体的内容
#egrep ‘(linux)+’ file.txt
查找包含两个linux整体的内容
#egrep ‘(linux){2}’ file.txt
查找以#开头的内容
#egrep ‘^#’ file.txt
查找以linux 结尾的内容
#egrep ’linux$’ file.txt
查找包括abc或abd的内容
#egrep ‘ab[cd]’ file.txt
sed工具
作用:批量编辑文本文件
语法:sed [选项] [动作] 文件名
参数:-n 仅显示script 处理后的结果
-e 以选项中指定的script来处理输入的文本文件
-i 此选项会直接修改源文件,要慎用
动作:a :新增 ; c : 取代 ; d :删除 ; i : 插入;p :打印 ; s :取代
案列:
输出文件内容
仅输出第2行 sed -n ‘2p’ file.txt
输出3,5行 sed -n ‘3,5p’ file.txt
搜索含有an 关键字的行 sed -n ‘/an/p’ file.txt
删除文件内容
删除第2-4行的数据 sed ‘2,4d’ file.txt
删除含有an关键字的行 sed ‘/an/d’ file.txt
在第2行后追加nice sed ‘2a nice’ file.txt
在第2行前插入一行数据 sed ’2i 123456789’ file.txt
整行数据替换 sed ’2c asdfgh’ file.txt
替换2-5行内容 sed ’2,5c data changed’ file.txt
字符串替换 全局替换,把liangxu改为alvin sed ‘s/liangxu/alvin/g’ file.txt
只替换第3行 sed ‘3s/liangxu/alvin/g’ file.txt
多个条件 sed -e ‘s/liangxu//g;s/alvin//g’ file.txt
将操作写入文件sed -i ‘3s/liangxu/alvin/g’ file.txt
awk命令
作用:文本和数据进行处理的编辑语言
语法:awk’条件1{动作1} 条件2{动作2}..’ file.txt
参数:-F 指定输入时用到的字段分隔符
-v 自定义变量
-f 从脚本中读取awk命令
-m对val值设置内在限制
案列:
显示第1和第3列的内容 df -h | awk ‘{print $1 “\t” $3}’
指定冒号为分隔符,显示第1和第3列的内容
awk -F : ‘{print $1 “\t” $3}’ /etc/passwd
指定冒号为分隔符,显示系统中所有UID号码大于500的用户信息(第3列)
awk -F : ‘$3>=500’ /etc/passwd
搜索/etc/passwd有liangxu关键字的所有行
awk -F : ‘/liangxu/’ /etc/passwd
搜索/etc/passwd有liangxu关键字的所有行,并显示对应的shell
awk -F : ‘/liangxu/{print $7}’ /etc/passwd
BEGIN与END的使用
#head /etc/passwd | awk -F : ‘BEGIN {print “name\tuid”} {print $1 “\t” $3} END {print “from file /etc/passwd”}’
cut列过滤工具
cut是列截取工具,用于列的截取
语法:
cut 选项 文件名
常见选项:
-c:以字符为单位进行分割,截取
-d:自定义分隔符,默认为制表符\t
-f:与-d一起使用,制定截取哪个区域
cut命令扩展
作用:从文件中提取文本的一部分
语法:cut OPTION…[FILE]…
参数:
-b 以字节为单位进行分割,仅显示行中指定直接范围的内容
-c 以字符为单位进行分割,仅显示行中指定范围的字符
-d 自定义分隔符,默认为制表符”TAB”
-f 显示指定字段的内容,与-d一起使用
-n 取消分割多字节字符
--complement补足被选择的字节,字符或字段
--out-delimiter指定输出内容是字段分割符
案列:
提取file1.txt第2列的内容
#cut -f 2 file1.txt
#cut -f2 file1.txt
提取file1.txt除第2列外的其他内容
#cut -f2 --complement file1.txt
使用-d选项指定字段分割符
#cut -f2 -d”:”file2.txt
提取第2,3,4,6个字节
#cut -b 2-4,6 file3.txt
提取指定数量字符
提取第1个到第3个字符 cut -c1-3 file3.txt
提取前2个字符 cut -c-2 file3.txt
提取第4个之后的字符 cut -c4- file3.txt
截取passwd文件冒号符号首列
[root@R9MB tmp]# cut -d ':' -f1 passwd
截取passwd文件冒号符号首列和尾列
[root@R9MB tmp]# cut -d ':' -f1,7 passwd
[root@R9MB tmp]# cut -d ':' -f1,7 passwd | head
截取passwd文件第1个到第5个字符列
[root@R9MB tmp]# cut -c1-5 passwd
截取passwd文件从第10个开始往后全部截取字符列
[root@R9MB tmp]# cut -c10- passwd
截取passwd文件第5个到第10个字符列
[root@R9MB tmp]# cut -c5-10 passwd
sort工具
Sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCll码进行比较,最后将它们按升序输出。
Sort 选项 文件
选项有:
-u:去除重复行
-r:降序排列,默认是升序
-o:将排序结果输出到文件中,类似重定向符号>
-n:以数字排列,默认是按字符排序
-t:分隔符
-k:第N列
-b:忽略前导空格。
-R:随机排序,每次运行的结果均不同
sort命令扩展
作用:对文件内容进行排序
语法:sort [参数] 文件
参数:-n 依照数值的大小排序
-t <分割字符>指定排序时所用的栏位分隔字符
-k 指定需要排序的栏位
-r 以相反的顺序来排序
案列:按字母顺序排序 sort file1.txt
反向排序 sort -r file1.txt
按数字大小排序 sort -n file1.txt
以冒号:为间隔符,对指定的文件内容按照数字大小对第3列进行排序 sort -t : -k 3 -n file3.txt
按数字排序1.txt文件以冒号分隔符第3列字符列=按照用户的uid进行升序排列
[root@R9MB tmp]# sort -n -t ':' -k3 1.txt
按照用户的uid进行降序排列
[root@R9MB tmp]# sort -n -r -t ':' -k3 1.txt
或
[root@R9MB tmp]# sort -nr -t':' -k3 1.txt
按照用户的uid进行降序排列并输出到另一个文本
[root@R9MB tmp]# sort -nr -t':' -k3 1.txt -o 2.txt
对文本里内容去重且排序
[root@R9MB tmp]# sort -u 3.txt
uniq工具
uniq用于去除连续的重复行
常见选项:
-i:忽略大小写
-c:统计重复行次数
-d:只显示重复行
uniq命令扩展
作用:去除文件中的重复行
语法:uniq [OPTION]…[INPUT[OUTPUT]]
参数:-c 打印每行在文本中重复出现的次数
-d 只显示有重复的记录,每个重复记录只出现一次
-u 只显示没有重复的记录
案列:删除连续文件中连续的重复行 uniq file.txt
打印每行在文件中出现重复的次数 uniq -c file.txt
只显示有重复的记录,且每个记录只出现一次 uniq -d file.txt
只显示没有重复的记录 uniq -u file.txt
去除连续重复行
[root@R9MB tmp]# uniq 3.txt
tee工具
tee工具是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)
选项:-a双向追加重定向
[root@R9MB tmp]# echo 999|tee 11.txt
[root@R9MB tmp]# echo 888|tee -a 11.txt
888
[root@R9MB tmp]# cat 11.txt
999
888
[root@R9MB tmp]#
diff工具(没懂)
diff工具用于逐行比较文件的不同
注意:diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配
语法:
Diff [选项] 文件1 文件2
常用选项
-b 不检查空格
-B不检查空白行
-i不检查大小写
-W忽略所有的空格
--normal正常格式显示(默认)
-c上下文格式显示
-u合并格式显示
diff命令扩展
作用:比较文件的差异
语法:diff [OPTION]…FILES
参数:y 以并列的方式显示文件的异同之处
#c 显示全部内文 ,并标出不同之处
#u 以合并的方式来显示文件内容的不同
-W 设置宽度
显示提示:
-add a
-change c
-delete d
| 前后2个文件内容有不同
< 后面文件比前面文件少了1行内容
>后面文件比前面文件多了1行内容
+ 比较的文件的后者比前者多一行
- 比较的文件的后者比前者少一行
!比较的文件两者有差别的行
案列:
比较两个文件 diff file1.txtx file2.txt
并排格式输出 diff -y -W 50 file1.txt file2.txt
上下文格式输出 diff -c file1.txt file2.txt
统一格式输出 diff -u file1.txt file2.txt
生成补丁 diff file1.txt file2.txt > file.patch
打补丁 patch file1.txt file.patcch
Diff目的:file1如何改变才能和file2匹配
paste工具
paste工具用于合并文件行
常用选项;
-d:自定义间隔符,默认是tab
-s:串行处理,非并行
[root@R9MB tmp]# paste file1 file2
[root@R9MB tmp]# paste -d ';' file1 file2
paste命令扩展
作用:合并两个或多个文件
语法:paste [OPTION]…[FILE]…
参数:
-d 默认域的分割符是空格或tab键,设置新的域分隔符
-s 将每个文件粘贴成一行
- 从标准输入中读取数据
案列:
将file1.txt和file2.txt 粘贴成一个新的文件
#paste file1.txt file2.txt
顺序不一样,结果不一样
#paste file2.txt file1.txt
多文件拼接
#paste file1.txt file2.txt file3.txt
设置域分隔符为:粘贴成新的文件
#paste -d”:” file1.txt file2.txt
将每个文件粘贴成一行
#paste -d”:” -s file1.txt file2.txt
从标准输入中读取数据,每行显示4个文件名
#ls | paste -d” ”- - - -
tr工具
tr用于字符转换,替换和删除;主要用于删除文件中控制字符或进行字符转换
语法:
用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理
# commands | tr ‘string1’ ‘string2’
用法2:tr处理的内容来自文件,记住要使用 ‘<’ 标准输入
# tr ‘string1’ ‘string2’ < filename
用法3:匹配string1进行相应操作,如删除操作
#tr options ‘string1’ < filename
常用选项:
-d删除字符串1中所有输入字符
-s删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串
将文件里小写字母替换成大写字母
[root@R9MB tmp]# tr 'a-z' 'A-Z' < 1.txt
将文件里所有数字替换成@符号
[root@R9MB tmp]# tr '0-9' '@' < 1.txt
将文件里冒号斜杠(:/)替换成#符号
[root@R9MB tmp]# tr ':/' '#' < 1.txt
将文件里小写字母删除
[root@R9MB tmp]# tr -d 'a-z' < 1.txt
将文件里除了字母以外所有符号删除
[root@R9MB tmp]# tr -d ':/, 0-9' < 1.txt
或
[root@R9MB tmp]# tr -d '[:/, 0-9]' < 1.txt
截取IP地址
[root@R9MB ~]# ifconfig ens160 | grep 'netmask'| tr -d 'a-z '|cut -c1-14
192.168.23.132