一、前言¶
本文主要从以下几个方面介绍Linux命令:
- Linux命令行格式
- Linux命令格式
- Linux基础命令
二、Linux命令行格式¶
Linux命令行格式可以分为四部分,具体如下:
[root@k8s-node02 ~]#
第一部分:当前用户,比如root
第二部分:连接符,比如@
第三部分:主机名,比如k8s-node02。如果不修改默认是localhost
第四部分:当前目录,比如~表示在家目录
第五部分:用户身份,#表示root用户 $表示普通用户
三、Linux命令格式¶
Linux命令格式基本如下:
命令 [命令选项] [参数]
| 命令格式说明 | 说明 |
|---|---|
| 命令 | 这是要执行的实际命令的名称。它可以是系统命令、自定义脚本或可执行文件的名称。 |
| 命令选项 | 这是命令的选项或标志,用于自定义命令的行为。选项通常以短横线(-)或双短横线(--)开头,后跟一个字母或单词。选项可以是可选的,通常用于启用或禁用特定功能。例如,-l 或 --list。 |
| 参数 | 这是命令的参数,用于提供操作的对象或数据。参数可以是文件名、目录、文本字符串等,具体取决于命令的功能。有些命令不需要参数,而有些命令需要一个或多个参数。 |
举个示例:
$ ls -l /var/www
四、Linux命令分类¶
在Linux中,命令可以分为两大类:内部命令(Built-in Commands)和外部命令(External Commands)。这些命令的主要区别在于它们是如何执行和处理的。
内部命令(Built-in Commands):
- 内部命令是由shell本身实现和处理的,而不是通过外部可执行文件。
- 它们通常涉及到shell的内部操作,如变量设置、环境控制、进程控制等。
- 由于是shell内部的一部分,内部命令的执行速度通常较快。
- 一些常见的内部命令包括
cd、echo、exit、alias、history等。
外部命令(External Commands):
- 外部命令是由独立的可执行文件或脚本来实现和处理的。
- 它们通常是系统中的独立程序,可以在命令行中运行。
- 由于是外部可执行文件,外部命令的执行速度可能会受到文件系统的I/O操作和可执行文件大小的影响。
- 举例来说,
ls、grep、tar、cat等常见的命令都是外部命令。
要确定一个命令是内部命令还是外部命令,可以使用type命令或which命令。例如:
$ type cd
cd is a shell builtin
而对于外部命令:
$ type ls
ls is aliased to `ls --color=auto'
五、Linux命令分类¶
在介绍Linux基础命令之前先介绍一个在线查询Linux命令网站:Linux命令大全,非常Nice
5.1 Linux关机重启命令¶
Linux关机命令
| 关机命令 | 命令说明 |
|---|---|
| shutdown | 关机 |
| shutdown -c | 取消关机 |
| shutdown -h | shutdown -h now立刻关机 或shutdown -h 10 10分钟后关机 |
| halt | 关机,关闭系统,需要手动切断电源 |
| poweroff | 关机 |
| init 0 | 关机 |
Linux重启命令
| 重启命令 | 命令说明 |
|---|---|
| shutdown -r | 重启,reboot, shutdown -r now(立即重启) 或shutdown -r 20(20分钟后开机) |
| reboot | 重启 |
| init 6 | 重启 |
5.2 Linux查询帮助命令¶
| 帮助命令 | 命令说明 |
|---|---|
| man | man 命令(查询帮助) |
| --help | 命令 --help(查询简单帮助) |
| info帮助 | 详细帮助 |
5.3 Linux网络命令¶
| 网络命令 | 命令说明 |
|---|---|
| ping ip或域名 | 检查网络连通性 |
| telnet ip 端口 | 检查端口是否开启 |
5.4 Linux目录/文件命令¶
| 目录/文件相关命令 | 命令说明 |
|---|---|
| cd | 切换目录 |
| pwd | 以绝对路径显示当前所在位置 |
| mkdir | 创建目录 |
| ls | 查看目录内容 |
| touch | 创建文件 |
| mv | 移动或改名 |
| cp | 复制文件/目录 |
| rm | 移除,删除文件或目录 |
| echo | 输出信息到屏幕 |
| cat | 显示文件内容 |
| du | 查看目录大小 |
| file | 查看文件的详细类型 |
| 文本处理三剑客 | 命令说明 |
| grep | 在文件中或管道中进行查找,找出想要的内容 |
| sed | |
| awk | |
| 文件查找四剑客 | 命令说明 |
| find | 查找文件 |
5.4.1 cd¶
一、 cd命令常用用法
| cd命令选项 | 命令说明 |
|---|---|
| cd | 回到家目录 |
| cd - | 返回上次所在目录 |
| cd . | 进入当前目录 |
| cd .. | 返回到上层目录 |
二、 cd命令示例
示例: 回到家目录
$ cd /etc/
$ cd
示例: 返回上次所在目录
$ cd /etc/
$ cd
$ cd -
示例: 进入当前目录
$ cd /etc/
$ cd ./yum
示例: 返回到上层目录
$ cd /etc/
$ cd ..
5.4.2 pwd¶
示例: 以绝对路径显示当前所在位置
$ pwd
5.4.3 mkdir¶
一、 mkdir命令常用用法
| mkdir相关命令 | 命令说明 |
|---|---|
| mkdir -p xx/xx/xx | 创建多层目录 |
| mkdir -p | 批量创建有规律的多层目录 |
二、 mkdir命令示例
示例: 创建多层目录
$ mkdir -p /a/b/c/
示例: 批量创建有规律的多层目录
$ mkdir -p {a..c}
5.4.4 ls¶
一、 ls命令常用用法
| ls命令选项 | 命令说明 |
|---|---|
| ls -l | 以长格式显示,显示详细信息,缩写为ll |
| ls -t | 按照修改时间排序 |
| ls -r | 逆序排序,一般和-t选项搭配使用 |
| ls -h | 以人类可读形式显示大小,比如K,M,G |
二、 ls命令示例
示例: 查看 /etc目录下面的内容并且显示详细信息
$ ls -l /etc
$ ll /etc
示例: 查看/etc目录按照时间排序逆序排序
$ ls -lrt /etc/
$ ll -rt /etc/
示例: 以人类可读形式显示/etc目录大小
$ ls -lh /etc/
$ ll -h /etc/
5.4.5 touch¶
一、 touch命令常用用法
| touch命令选项 | 命令说明 |
|---|---|
| touch | 批量创建有规律的文件 |
示例: 创建文件aaa
$ touch aaa
示例: 创建文件名为1-10的文件
$ touch {1..10}
5.4.6 mv¶
一、 mv命令常用用法
| mv命令选项 | 命令说明 |
|---|---|
| mv 文件/目录 目录 | 移动文件/目录到指定目录下 |
| mv 旧文件 新文件 | 改名 |
二、 mv命令示例
示例: 移动aaa.txt 到/tmp下面
$ mv aaa.txt /tmp
示例: 将aaa.txt改名为bbb.txt
$ mv aaa.txt bbb.txt
5.4.7 cp¶
一、 cp命令常用用法
| cp命令选项 | 命令说明 |
|---|---|
| cp -a 源目录 目标目录 | 复制所有 |
| cp -r | 递归复制,复制目录及目录的内容 |
| cp -p | 复制的时候保持属性不变 |
| cp -d | 可以复制软连接 |
| cp -t /目标目录 源文件1 源文件2 源文件3 | 复制单个或多个文件到同一目录 |
二、 cp命令示例
示例: 复制/etc/hostname到/tmp下面
$ cp /etc/hostname /tmp
示例: 复制/etc/目录到/tmp下面
$ cp -a /etc/ /tmp/
示例: 复制/etc/目录下以.conf结尾的文件到/tmp目录下面
$ cp -t /tmp/ /etc/*.conf
5.4.8 rm¶
一、 rm命令常用用法
| rm命令选项 | 命令说明 |
|---|---|
| rm -f | 强制删除,不提示 |
| rm -r | 递归删除,删除目录及目录的内容 |
二、 rm命令示例
示例: 删除aaa.txt文件,一般都有提示语,按y即可
$ rm aaa.txt
示例: 强制删除aaa.txt文件
$ rm -f aaa.txt
示例: 强制删除aaa目录,默认不能直接删除目录
$ rm -rf aaa
5.4.9 echo¶
一、 echo命令常用用法
| echo命令选项 | 命令说明 |
|---|---|
| echo -n | 不输出结尾的换行符 |
| echo xxx > 文件 | 先清空文件内容,然后再写入xxx |
| echo xxx >> 文件 | 不清空文件内容,直接写入xxx到文件末尾 |
| echo | 输出有规律的内容 |
二、 echo命令示例
示例: 打印aaa
$ echo aaa
示例: 不输出结尾的换行符打印aaa
$ echo -n aaa
示例: 把xxx写入文件aaa中,其中文件可以清空
$ echo xxx > aaa
示例: 把xxx写入文件aaa中,其中文件不可以清空
$ echo xxx >> aaa
示例: 输出1-10连续数字
$ echo {0..10}
5.4.10 cat¶
一、 cat命令常用用法
| cat命令选项 | 命令说明 |
|---|---|
| cat -n | 显示文件内容及行号 |
二、 cat命令示例
示例: 显示aaa文件中内容并显示行号
$ cat -n aaa
5.4.11 du¶
一、 du命令常用用法
| du命令选项 | 命令说明 |
|---|---|
| du -h | 以人类可读的方式显示大小 |
| du -s | 不显示目录中所有的子目录,只显示查看目录的汇总信息 |
二、 du命令示例
示例: 查看/etc/目录大小
$ du -sh /etc
5.4.12 file¶
一、 file命令常用用法
| file命令选项 | 命令说明 |
|---|---|
| file 文件 | 查看文件的具体类型 |
二、 file命令示例
示例: 查看/etc/hostname文件具体类型
$ file /etc/hostname
5.4.13 文本处理三剑客(grep、sed、awk)¶
5.4.13.1 grep¶
一、 grep命令常用用法
| grep命令选项 | 命令说明 |
|---|---|
| grep -n | 查看内容时显示行号 |
| grep -v | 排除,取反 |
| grep -i | 不区分大小写 |
二、 grep命令示例
示例: 在/etc/passwd中过滤出包含root的行
$ grep 'root' /etc/passwd
示例: 在/etc/passwd中过滤出包含root的行且显示行号
$ grep -n 'root' /etc/passwd
示例: 在/etc/passwd中过滤出包含network的行不区分大小写
$ grep -i 'network' /etc/passwd
示例: 在/etc/passwd中过滤出排除network的行
$ grep -v 'network' /etc/passwd
5.4.13.2 sed¶
一、 sed命令常用用法
| sed命令选项 | 命令说明 |
|---|---|
| sed -n | 取消默认输出(默认输出会输出文件全部内容) |
| sed -v | sed支持扩展正则 |
| sed -i | 修改文件内容(直接修改),这个选项放在最后 |
| sed -i.bak | 先进行备份,然后修改文件内容,这个选项放在最后 |
| sed -a | 在指定行后面追加内容 |
| sed -i | 在指定行上面插入一行 |
| sed -c | 替换指定行内容 |
二、 sed命令示例
查找
示例: 取出文件的第3行
$ sed -n '3p' /etc/passwd
示例: 取出/etc/passwd的第2行到第5行
$ sed -n '2,5p' /etc/passwd
示例: 过滤出/etc/passwd中包含root的行
$ sed -n '/root/p' /etc/passwd
示例: 获取范围内(包含102所在行到包含105所在行)的日志(以行为单位)
$ sed -n '/102/ , /105/p' a.txt
示例: 只显示第3行和第5行
$ sed -n '1p;5p' /etc/passwd
示例: 打印序列中的奇数行
$ seq 10 |sed -n '1~2p'
也可以打印序列中的偶数行
$ seq 10 |sed -n '2~2p'
修改基础
示例: 把a.txt文件中I替换为i(不备份直接改)
[root@k8s-node01 ~]# cat a.txt
I
00001111
love
linux.
1231323242423231
[root@k8s-node01 ~]# sed -i s/I/i/g a.txt
[root@k8s-node01 ~]# cat a.txt
i
00001111
love
linux.
1231323242423231
示例: 把a.txt文件中I替换为i(先备份再改)
[root@k8s-node01 ~]# cat a.txt
I
00001111
love
linux.
1231323242423231
[root@k8s-node01 ~]# sed -i.bak s/I/i/g a.txt
[root@k8s-node01 ~]# cat a.txt
i
00001111
love
linux.
1231323242423231
[root@k8s-node01 ~]# ls *.bak
a.txt.bak
示例: 输出12345678,通过sed加工变成1<234567>8
[root@k8s-node01 ~]# echo 12345678 |sed -r 's#(1)(.*)(8)#\1<\2>\3#g'
1<234567>8
示例: 调换/etc/passwd第1列和最后一列内容
[root@k8s-node01 ~]# cp /etc/passwd .
[root@k8s-node01 ~]# sed -r 's#^(.*)(:x.*:)(.*$)#\3\2\1#g' passwd
示例: 取出网卡ip地址
# 方法一
[root@k8s-node01 ~]# ip a s ens33 | sed -n '3p' | sed -r 's#^.*et ([0-9.]+)/.*$#\1#g'
192.168.1.42
# 方法二
[root@k8s-node01 ~]# ip a s ens33 | sed -rn '3 s#^.*et ([0-9.]+)/.*$#\1#g p'
192.168.1.42
# 方法三
[root@k8s-node01 ~]# ip a s ens33 | sed -n '3p' | awk '{print $2}' | sed 's#/24##g'
192.168.1.42
# 方法四
[root@k8s-node01 ~]# ip a s ens33 | sed -n '3p' | awk -F "[ /]+" '{print $3}'
192.168.1.42
# 方法五
[root@k8s-node01 ~]# ip a s ens33 | sed -n '3p' | awk -F "[ /]+" 'NR=3{print $3}'
192.168.1.42
# 方法六
[root@k8s-node01 ~]# hostname -I | awk {print$1}
192.168.1.42
示例: 取出stat /etc/hosts中的0644或644
[root@k8s-node01 ~]# stat /etc/hosts | sed -n '4p' | sed -r 's#^.*\(([0-9]+)/.*$#\1#g'
0644
删除
示例: 删除文件第三行
$ sed '3d' sed.txt
示例: 删除文件中的空行和带注释的行
# 方法一
$ egrep -v '^$|#' /etc/ssh/sshd_config
# 方法二
$ sed -r '/^$|#/d' /etc/ssh/sshd_config
示例: 排除文件中的空行和带注释的行
# 方法一
$ awk '! /^$|#/' /etc/ssh/sshd_config
# 方法二
$ sed -nr '/^$|#/!p' /etc/ssh/sshd_config
增加
示例: 在文件a.txt的第三行后面添加123456(不会实际修改,只是预览)
[root@k8s-node01 ~]# sed '3a 123456' a.txt
i
00001111
love
123456
linux.
1231323242423231
示例: 在文件a.txt的第三行上面插入一行123456(不会实际修改,只是预览)
[root@k8s-node01 ~]# sed '3i 123456' a.txt
i
00001111
123456
love
linux.
1231323242423231
示例: 替换文件a.txt的第三行内容为123456
[root@k8s-node01 ~]# sed '3c 123456' a.txt
i
00001111
123456
linux.
1231323242423231
5.4.13.3 awk¶
一、 awk命令常用用法
| awk命令选项 | 命令说明 |
|---|---|
| awk -F | 设置输入时的字段分隔符 |
二、 awk常用运算符
| awk常用运算符 | 说明 |
|---|---|
| == | 等于 |
| != | 不等于 |
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| && | 并且 |
| || | 或者 |
三、 awk命令示例
取行操作
示例: 取出/etc/passwd的第 1行
[root@k8s-node01 ~]# awk 'NR==1{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@k8s-node01 ~]# awk 'NR==1' /etc/passwd
root:x:0:0:root:/root:/bin/bash
示例: 取出第2行到第5行的内容
[root@k8s-node01 ~]# awk 'NR>=2 && NR <=5' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
示例: 过滤出/etc/passwd文件 中包含root或nobody的行
[root@k8s-node01 ~]# awk '/root|nobody/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
示例: 从包含root的行到包含nobody的行
[root@k8s-node01 ~]# awk '/root/,/nobody/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
取列操作
示例: 使用awk取出ls -lh的 大小列和最后一列
# 方法一
[root@k8s-node01 ~]# ls -lh /etc/hosts | awk '{print $5,$9}'
208 /etc/hosts
# 方法二
[root@k8s-node01 ~]# ls -lh /etc/hosts | awk '{print $5,$NF}'
208 /etc/hosts
如果想awk输出对齐,可以采用column命令或者\t命令
# 方法一
[root@k8s-node01 ~]# ls -lh /etc/hosts | awk '{print $5,$NF}' | column -t
208 /etc/hosts
# 方法二
[root@k8s-node01 ~]# ls -lh /etc/hosts | awk '{print $5"\t"$NF}'
208 /etc/hosts
示例: 取出/etc/passwd中的第 1列,第3列和最后一列
[root@k8s-node01 ~]# awk -F ':' '{print $1,$3,$NF}' /etc/passwd|column -t
root 0 /bin/bash
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
sync 5 /bin/sync
shutdown 6 /sbin/shutdown
halt 7 /sbin/halt
mail 8 /sbin/nologin
operator 11 /sbin/nologin
games 12 /sbin/nologin
ftp 14 /sbin/nologin
nobody 99 /sbin/nologin
systemd-network 192 /sbin/nologin
dbus 81 /sbin/nologin
polkitd 999 /sbin/nologin
tss 59 /sbin/nologin
abrt 173 /sbin/nologin
sshd 74 /sbin/nologin
postfix 89 /sbin/nologin
zq 1000 /bin/bash
mysql 1001 /bin/bash
示例: 指定复杂分隔符取出ip
# 方法一
[root@k8s-node01 ~]# ip a s ens33 |awk 'NR==3' | awk '{print $2}' | awk -F '/' '{print $1}'
192.168.1.42
# 方法二
[root@k8s-node01 ~]# ip a s ens33 |awk 'NR==3' | awk -F 'inet |/24' '{print $2}'
192.168.1.42
取行与取列操作
示例: 取ip地址(取行+取列)
[root@k8s-node01 ~]# ip a s ens33 |awk -F '[ /]+' 'NR==3{print $3}'
192.168.1.42
示例: 取出权限部分 stat /etc/hosts的0644部分
# 方法一
[root@k8s-node01 ~]# stat /etc/hosts | awk -F '[^0-9]+' 'NR==4{print $2}'
0644
# 方法二
[root@k8s-node01 ~]# stat /etc/hosts | awk -F '[/(]' 'NR==4{print $2}'
0644
示例: 取出/etc/passwd文件中 第3列大于等于100的行,取出这行的第1列,第3列和最后 一列
[root@k8s-node01 ~]# awk -F':' '$3>=100{print $1,$3,$NF}' /etc/passwd | column -t
systemd-network 192 /sbin/nologin
polkitd 999 /sbin/nologin
abrt 173 /sbin/nologin
zq 1000 /bin/bash
mysql 1001 /bin/bash
示例: 如果系统swap使用超过0则输出"异常 系统开始占用swap"
# 方法一
[root@k8s-node01 ~]# free | awk '/Swap/ && $3 >0 {print "异常系统开始占用swap"}'
# 方法二
[root@k8s-node01 ~]# free | awk 'NR==3 && $3 >0 {print "异常系统开始占用swap"}'
示例: 过滤出/etc/passwd第4 列的数字是以0或1开头的行,输出第1列,第3列,第4列
[root@k8s-node01 ~]# awk -F ':' '$4 ~ /^[01]/ {print $1,$3,$4}' /etc/passwd | column -t
root 0 0
bin 1 1
sync 5 0
shutdown 6 0
halt 7 0
mail 8 12
operator 11 0
games 12 100
systemd-network 192 192
abrt 173 173
zq 1000 1000
mysql 1001 1001
统计与计算操作
示例: 统计/etc/passwd文件行数
[root@k8s-node01 ~]# awk '{i++} END{print i}' /etc/passwd
22
示例: 计算总和
[root@k8s-node01 ~]# seq 10 > num.txt
[root@k8s-node01 ~]# awk '{i=i+$1}END{print i}' num.txt
55
5.4.14 文件查找四剑客(find、、、)¶
5.4.14.1 find¶
一、 find命令常用用法
| find命令选项 | 命令说明 |
|---|---|
| find -type | 什么类型的文件 f表示文件 d表示目录 |
| find -name | 文件名 |
| find -size | 根据大小查找文件 +表示大于 -表示小于,比如+10k(小写K) +10M(大写) |
| find -mtime | 根据修改时间查找文件 |
二、 find命令示例
示例: 在/etc/目录中找出文件名叫hostname文件
$ find /etc/ -type f -name 'hostname'
示例: 找出/etc/下面以.conf结尾的文件
$ find /etc/ -type f -name '*.conf'
示例: 在/etc/目录下面找出大于10kb的文件
$ find /etc/ -type f -size +10k
示例: 找出/etc/目录下以.conf结尾的,7天之前的文件
$ find /etc/ -type f -name "*.conf" -mtime +7
示例: 找出/etc/目录下以.conf结尾的,最近7天的文件
$ find /etc/ -type f -name "*.conf" -mtime -7
示例: 找出/etc/中以.conf结尾大于10kb修改时间是7天之前的文件
$ find /etc/ -type f -name "*.conf" -size +10k -mtime +7
示例: 找出/中以.conf结尾的文件,指定最多找2层目录,默认是所有层
$ find / -maxdepth 2 -type f -name "*.conf"
示例: 找出/etc/下面以.conf结尾的文件,不区分大小
$ find /etc -type f -iname "*.conf"
示例: 找出/etc/下面以.conf结尾的文件后显示详细信息
# 方法一:``
$ ls -lh `find /etc -type f -name '*.conf'`
# 方法二:xargs
$ find /etc -type f -name '*.conf' | xargs ls -lh
# 方法三:-exec
$ find /etc -type f -name '*.conf' - exec ls -lh {} \;
参数说明:
- -exec:find选项,表示find找出文件后要执行的命令
- {}:表示前面find命令找出的文件
- \;表示命令结束,固定格式
示例: 找出/etc/下面以.conf结尾的文件打包压缩成find.tar.gz
# 方法一:``
$ tar zcf find.tar.gz `find /etc -type f -name '*.conf'`
# 方法二:xargs
$ find /etc -type f -name '*.conf' | xargs tar zcf find.tar.gz
# 方法三:-exec
$ find /etc -type f -name '*.conf' - exec tar zcf find.tar.gz {} +
注意:这里方法三中-exec \;执行方式 1个文件1个文件的压缩,所以需要替换成+
示例: 找出/etc/下面以.conf结尾的文件复制到/tmp下面
# 方法一:``
$ cp `find /etc -type f -name '*.conf'` /tmp/
# 方法二:xargs
$ find /etc -type f -name '*.conf' | xargs cp -t /tmp/
# 方法三:-exec
$ find /etc -type f -name '*.conf' - exec cp {} /tmp/ \;
注意:这里方法二中xargs会将查到的文件放到/tmp/目录后面,而正常来说cp 文件 /tmp/。所以需要使用-t参数修改格式,变成cp -t /tmp/ 源文件
5.4.14.2 2¶
5.4.14.3 3¶
5.4.14.4 4¶
5.5 Linux日志查询命令(日志四剑客)¶
| 日志查询命令 | 命令说明 |
|---|---|
| head | 显示文件的头几行,默认是头10行 |
| tail | 显示文件的后几行,默认是后10行 |
| less | 按页显示文件内容 |
| more | 按页显示文件内容,到达最后一行就退出 |
注意:查看日志不要使用,cat或vim,vi命令。如果使用vi/vim查看,从磁盘中加载到内存,占用系统内存,很容易导致系统内存不足。推荐使用不会占用系统太多资源的命令,查看日志:head/tail , less/more。
5.5.1 head¶
一、 head命令常用用法
| head命令选项 | 命令说明 |
|---|---|
| head -n num | 显示头num行,默认显示头10行 |
二、 haed命令示例
示例: 显示/etc/passwd的前5行
$ head -n5 /etc/passwd
$ head -5 /etc/passwd
5.5.2 tail¶
一、 tail命令常用用法
| tail命令选项 | 命令说明 |
|---|---|
| tail -n num | 显示最后num行,默认显示最后10行 |
| tail -f 日志文件 tailf 日志文件 |
实时查看日志文件 |
二、 tail命令示例
示例: 显示/etc/passwd的前5行
$ tail -n5 /etc/passwd
$ tail -5 /etc/passwd
示例: 实时查看/var/log/secure末尾的更新
$ tail -f /var/log/secure
5.5.3 less¶
一、 less快捷方式
| less快捷方式 | 说明 |
|---|---|
| q | 退出 |
| 空格或f | 下一页 |
| b | 上一页 |
| G | 最后1行 |
| g | 第1行 |
| 99g | 到第99行 |
| /想要查询的内容 | 搜索,按n继续向下搜索,N继续向上搜索 |
二、 less命令用法
| less选项 | 命令说明 |
|---|---|
| less -N | 显示行号 |
5.5.4 more¶
一、 more快捷方式
| less快捷方式 | 说明 |
|---|---|
| q | 退出 |
| 空格或f | 下一页 |
| b | 上一页 |
| G | 最后1行 |
| g | 第1行 |
| 99g | 到第99行 |
| /想要查询的内容 | 搜索,按n继续向下搜索,N继续向上搜索 |
5.6 Linux统计命令¶
| 统计命令 | 命令说明 |
|---|---|
| wc | 一般用来统计文件中搜索结果的个数 |
| sort | 排序 |
| uniq | 去重(去掉重复的留下唯一的) |
5.6.1 wc¶
一、 wc命令常用用法
| wc命令选项 | 命令说明 |
|---|---|
| wc -l | 统计行数 |
二、 wc命令示例
示例: 统计/etc/passwd文件有多少行
$ wc -l /etc/passwd
5.6.2 sort¶
一、 sort命令常用用法
| sort命令选项 | 命令说明 |
|---|---|
| sort -n | 把要排序的内容当做是数字,按照数字大小进行排 序,默认是升序排序(从小到大) |
| sort -k | 指定某一列,根据某一列进行排序 |
| sort -r | 逆序排序 |
| sort -t | 指定分割符,只能指定1个字符,默认是空格 |
二、 sort命令示例
示例: 对文件中的数字进行排序
$ cat a.txt
11
23
3
433
$ sort -n a.txt
3
11
23
433
示例: 对文件中第三列进行排序
$ cat a.txt
192.168.1.1
192.168.1.22
192.168.1.3
192.168.3.1
192.168.3.22
192.168.3.3
192.168.2.1
192.168.2.22
192.168.2.3
192.168.5.1
192.168.5.22
192.168.5.3
$ sort -t '.' -n -k3 a.txt
192.168.1.1
192.168.1.22
192.168.1.3
192.168.2.1
192.168.2.22
192.168.2.3
192.168.3.1
192.168.3.22
192.168.3.3
192.168.5.1
192.168.5.22
192.168.5.3
示例: 取出/etc/目录下文件最大的前5个
$ ll /etc | sort -rnk5 | head -5
示例: 以.为分隔符对第3列和第4列排序
$ cat a.txt
192.168.1.1
192.168.1.22
192.168.1.3
192.168.3.1
192.168.3.22
192.168.3.3
192.168.2.1
192.168.2.22
192.168.2.3
192.168.5.1
192.168.5.22
192.168.5.3
$ sort -t '.' -n -k3,3 -k4,4 a.txt
192.168.1.1
192.168.1.3
192.168.1.22
192.168.2.1
192.168.2.3
192.168.2.22
192.168.3.1
192.168.3.3
192.168.3.22
192.168.5.1
192.168.5.3
192.168.5.22
5.6.3 uniq¶
一、 uniq命令常用用法
| uniq命令选项 | 命令说明 |
|---|---|
| uniq -c | 去重并显示次数(重复次数),一般和sort结合使用 |
二、 uniq命令示例
示例: 对a.txt文件的第三列和第四列进行排序并显示重复地址次数
$ cat a.txt
192.168.1.1
192.168.1.22
192.168.1.3
192.168.3.1
192.168.3.22
192.168.3.3
192.168.2.1
192.168.2.22
192.168.2.3
192.168.5.1
192.168.5.22
192.168.5.3
192.168.5.1
192.168.5.22
192.168.1.1
192.168.1.22
192.168.1.3
$ sort -t '.' -n -k3,3 -k4,4 a.txt | uniq -c
2 192.168.1.1
2 192.168.1.3
2 192.168.1.22
1 192.168.2.1
1 192.168.2.3
1 192.168.2.22
1 192.168.3.1
1 192.168.3.3
1 192.168.3.22
2 192.168.5.1
1 192.168.5.3
2 192.168.5.22
5.7 Linux查询位置命令¶
| 查询位置相关命令 | 命令说明 |
|---|---|
| which | 查询命令的位置 |
| whereis | 查询命令及相关文件的位置 |
5.7.1 which¶
一、 which命令常用用法
| which命令选项 | 命令说明 |
|---|---|
| which 命令 | 查询命令的位置(绝对路径) |
二、 which命令示例
示例: 显示wc命令的位置
$ which wc
5.7.2 whereis¶
一、 whereis命令常用用法
| whereis命令选项 | 命令说明 |
|---|---|
| whereis 命令 | 查询命令及相关文件的位置 |
二、 whereis命令示例
示例: 显示wc命令的位置及相关文件的位置
$ whereis wc
5.8 Linux文件比较命令¶
| 文件比较相关命令 | 命令说明 |
|---|---|
| diff | 对比文件 |
| vimdiff | 对比文件 |
5.8.1 diff¶
一、 diff命令常用用法
| diff命令选项 | 命令说明 |
|---|---|
| diff 第一个文件 第二个文件 | 对比两个文件差别 |
二、 diff命令示例
示例: 编写两个文件用于比较的文件
$ vim a.txt
1
2
3
4
$ vim b.txt
1
23
22
示例: 使用diff命令进行比较
$ diff a.txt b.txt
2,4c2,3
< 2
< 3
< 4
---
> 23
> 22
输出内容说明:
- 在
a.txt文件中,行号 2 到 4 包含了数字 2、3 和 4 - 在
b.txt文件中,行号 2 和 3 包含了数字 23 和 22 a.txt中的行号 2 和 3 中的数字 2 和 3 被替换为b.txt中的行号 2 和 3 中的数字 23 和 22
5.8.2 vimdiff¶
一、 vimdiff命令常用用法
| vimdiff命令选项 | 命令说明 |
|---|---|
| vimdiff 第一个文件 第二个文件 | 对比两个文件差别 |
二、 vimdiff命令示例
示例: 编写两个文件用于比较的文件
$ vim a.txt
1
2
3
4
$ vim b.txt
1
23
22
使用vimdiff命令进行比较
$ vimdiff a.txt b.txt

输出内容说明:
- 两个文件不同已通过不同的颜色进行标注
5.9 Linux时间命令¶
| 系统时间相关命令 | 命令说明 |
|---|---|
| date | 主要用于查看日期或获取日期 |
| ntpdate | 同步时间 |
| timedatectl | 设置系统时间与日期 |
| 文件时间相关命令 | 命令说明 |
| stat | 用于显示文件的状态信息,包括文件时间及文件属性 |
5.9.1 date¶
一、 date命令常用用法
| date命令选项 | 命令说明 |
|---|---|
| date +%F date %Y-%m-%d |
显示年-月-日 |
| date -d '时间修改要求' | 根据说明修改时间 |
| date -s '指定要修改成的时间' | 手动修改时间 |
二、 date命令示例
示例: 按照指定格式显示时间或日期,格式为年-月-日
$ date +%F
$ date +%Y-%m-%d
示例: 按照时:分:秒显示当前时间
$ date +%T
$ date +%H:%M:%S
示例: 显示一天前的时间
$ date -d '-1day'
示例: 显示一天前的时间,格式为年-月-日
$ date -d '-1day' +%F
示例: 手动修改时间
$ date -s '20550101'
示例: 创建一个以时间为名的备份文件
$ touch `date +%F`.txt
5.9.2 ntpdate¶
一、 ntpdate命令常用用法
| ntpdate命令选项 | 命令说明 |
|---|---|
| ntpdate ntp1.aliyun.com | 和阿里云服务器1进行时间同步 |
| ntpdate ntp2.aliyun.com | 和阿里云服务器2进行时间同步 |
| ntpdate ntp3.aliyun.com | 和阿里云服务器3进行时间同步 |
| ntpdate ntp4.aliyun.com | 和阿里云服务器4进行时间同步 |
| ntpdate ntp5.aliyun.com | 和阿里云服务器5进行时间同步 |
| ntpdate ntp6.aliyun.com | 和阿里云服务器6进行时间同步 |
| ntpdate ntp7.aliyun.com | 和阿里云服务器7进行时间同步 |
二、 ntpdate命令示例
示例: 提前使用date -s 21000101手动修改成错误时间
$ date -s 21000101
示例: 安装时间同步命令
$ yum install -y ntpdate
示例: 时间同步
$ ntpdate ntp1.aliyun.com
示例: 再次查看真实时间
$ date
5.9.3 timedatectl¶
一、 timedatectl命令常用用法
| timedatectl命令选项 | 命令说明 |
|---|---|
| ntpdate ntp1.aliyun.com | 和阿里云服务器1进行时间同步 |
| ntpdate ntp2.aliyun.com | 和阿里云服务器2进行时间同步 |
| ntpdate ntp3.aliyun.com | 和阿里云服务器3进行时间同步 |
| ntpdate ntp4.aliyun.com | 和阿里云服务器4进行时间同步 |
| ntpdate ntp5.aliyun.com | 和阿里云服务器5进行时间同步 |
| ntpdate ntp6.aliyun.com | 和阿里云服务器6进行时间同步 |
| ntpdate ntp7.aliyun.com | 和阿里云服务器7进行时间同步 |
二、 timedatectl命令示例
示例: 查看目前时区
$ timedatectl status
示例: 修改为上海时区
$ timedatectl set-timezone Asia/Shanghai
5.9.4 stat¶
一、 stat命令常用用法
| stat命令选项 | 命令说明 |
|---|---|
| stat 文件 | 查看文件属性 |
二、 stat命令示例
示例: 查看/etc/hosts文件属性
$ stat /etc/hosts
5.10 Linux打包压缩命令(打包压缩三剑客)¶
| 打包压缩相关命令 | 命令说明 |
|---|---|
| tar | 压缩解压,压缩包以.tar.gz结尾的 |
| gzip | 压缩解压,压缩包以.gz结尾的 |
| zip/unzip | 压缩解压,压缩包以.zip结尾的 |
5.10.1 tar¶
一、 tar命令常用用法
| tar命令选项 | 命令说明 |
|---|---|
| tar zcf 压缩包 被压缩的文件/目录 | 创建压缩包 |
| tar tf 压缩包 | 查看压缩包 |
| tar xf 压缩包 | 解压压缩包到当前目录 |
| tar xf 压缩包 解压后的存放目录 | 解压压缩包到指定目录 |
注意:使用tar命令打包的目标目录或文件尽量换成相对路径,并且压缩后源文件依旧存在.
二、 tar命令示例
示例: 把/etc/目录压缩,压缩包放在/tmp/etc.tar.gz
$ tar zcvf /tmp/etc.tar.gz /etc/
参数说明:
- z:通过gzip压缩工具进行压缩
- c:创建包(打包),如果只放cf选项就是打包,不压缩
- v:显示过程,一般不加
- f:指定压缩包
示例: 查看/tmp/etc.tar.gz压缩包
$ tar tf /tmp/etc.tar.gz
参数说明:
- t:列表
- f:指定压缩包
示例: 解压压缩包/tmp/etc.tar.gz到当前目录
$ tar xf /tmp/etc.tar.gz
参数说明:
- x:解压
- f:指定压缩包
示例: 解压压缩包/tmp/etc.tar.gz到/tmp目录下面
$ tar xf /tmp/etc.tar.gz -C /tmp/
参数说明:
- x:解压
- f:指定压缩包
- C:指定解压目录
5.10.2 gzip¶
一、 gzip命令常用用法
| gzip命令选项 | 命令说明 |
|---|---|
| gzip 被压缩的文件/目录 | 创建压缩包 |
| gzip -d 压缩包 | 解压压缩包到当前目录 |
注意:使用gzip命令压缩后,原文件不存在
二、 gzip命令示例
示例: 把a.txt文件压缩
$ gzip a.txt
示例: 把gzip -d文件解压
$ gzip -d a.txt.gz
5.10.3 zip/unzip¶
一、 zip/unzip命令常用用法
| zip/unzip命令选项 | 命令说明 |
|---|---|
| zip 压缩包 被压缩的文件 | 压缩文件 |
| zip -r 压缩包 被压缩的目录 | 压缩目录 |
| unzip -t 压缩包(以.zip命令结尾的) | 查看解压包内容 |
| unzip 压缩包 | 解压 |
注意:使用zip/unzip命令只能处理.zip格式的压缩包,.tar无法处理.zip格式的压缩包
二、 zip/unzip命令示例
示例: 压缩a.txt文件为a.txt.zip
$ zip a.txt.zip a.txt
示例: 压缩/etc目录
$ zip -r etc.zip /etc
示例: 查看a.zip压缩包内容
$ unzip -t a.zip
示例: 解压a.zip
$ unzip a.zip
5.11 Linux别名与用户管理命令¶
| 别名相关命令 | 命令说明 |
|---|---|
| alias | 设置别名 |
| 用户管理相关命令 | 命令说明 |
| useradd | 创建用户 |
| passwd | 修改密码 |
| su | 切换用户 |
| userdel | 删除用户 |
| usermod | 用于修改用户信息 |
| id | 查询用户的uid,gid,用户组信息,检查用户是否存在 |
| whoami | 查询当前用户的名字 |
| w(替代uptime) | 查看当前登录的用户的信息 |
| last | 显示用户的登录情况 |
| lastlog | 显示所有用户最近1次登录情况 |
| sudo | 授权普通用户执行管理员命令 |
| visudo( vim /etc/sudoers) | 打开/etc/sudoers文件进行编辑设置sudo |
| 用户组管理相关命令 | 命令说明 |
| groupadd | 创建用户组 |
5.11.1 alias¶
一、 alias命令常用用法
| alias命令选项 | 命令说明 |
|---|---|
| alias | 查看所有别名 |
| alias 命令 | 查看指定命令对应的别名 |
二、 gzip命令示例
示例: 输出所有别名
$ alias
示例: 临时设置rm命令别名(新开窗口会失效)
$ alias rm='echo rm is dangerous,please use mv.'
示例: 永久设置rm命令别名(新开窗口不会失效)
#修改/etc/profile文件,在最后一行添加rm='echo rm is dangerous,please use mv.'
$ vim /etc/profile
...
...
rm='echo rm is dangerous,please use mv.'
#注释掉~/.bashrc里面已经配置的别名
$ vim /etc/profile
#alias rm='rm -i'
#让配置文件生效
$ source /etc/profile
5.11.2 useradd¶
一、 useradd命令常用用法
| useradd命令选项 | 命令说明 |
|---|---|
| useradd -u 用户uid 用户 | 指定用户uid |
| useradd -s 命令解释器 用户 | 指定命令解释器,默认是/bin/bash |
| useradd -M 用户 | 单纯创建用户,但是不创建家目录 |
| useradd -g 用户组名 用户名 | 设置用户的初始用户组 |
| useradd -G 用户组名1, 用户组名2 用户名 | 设置用户的附加用户组,允许用户属于多个用户组 |
二、 useradd命令示例
示例: 添加用户mysql
$ useradd mysql
示例: 创建用户mysql指定uid 1314指定命令解释器/sbin/nologin不创建家目录,创建虚拟用户
$ useradd -u 1314 -s /sbin/nologin -M mysql
示例: 创建新用户mysql888并将其添加到用户组mysqlgroup
#如果没有用户组mysqlgroup,则需要提前创建
$ groupadd mysqlgroup
$ useradd -g mysqlgroup mysql888
示例: 创建新用户mysql666并将其添加到用户组mysqlgroup1、mysqlgroup2、mysqlgroup3
#如果没有用户组mysqlgroup1、mysqlgroup2、mysqlgroup3,则需要提前创建
$ echo 'mysqlgroup1 mysqlgroup2 mysqlgroup3' |xargs -n1 groupadd
$ useradd -G mysqlgroup1,mysqlgroup2,mysqlgroup3 mysql666
5.11.3 passwd¶
一、 passwd命令常用用法
| passwd命令选项 | 命令说明 |
|---|---|
| passwd 用户 | 交互式修改用户密码 |
| echo "密码" | passwd --stdin 用户 | 非交互式修改密码,用于批量修改密码(只能root用) |
二、 passwd命令示例
示例: 交互式修改用户mysql密码
$ passwd mysql
示例: 非交互式修改用户mysql密码为12345
$ echo 12345 |passwd mysql
5.11.4 su¶
一、 su命令常用用法
| su命令选项 | 命令说明 |
|---|---|
| su - 用户 | 完全切换用户(更新用户的配置与环境变量) |
二、 su命令示例
示例: 完全切换用户mysql
$ su - mysql
可按ctrl + d快捷键退出当前用户
说明:root切换普通用户不需要输入普通用户密码;反之需要输入root密码
5.11.5 userdel¶
一、 userdel命令常用用法
| userdel命令选项 | 命令说明 |
|---|---|
| userdel 用户 | 仅仅删除用户,不删除家目录 |
| userdel -r 用户 | 删除用户及家目录 |
二、 userdel命令示例
示例: 仅删除用户mysql
$ userdel mysql
示例: 删除用户mysql及其家目录
$ userdel -r mysql
5.11.6 usermod¶
一、 usermod命令常用用法
| usermod命令选项 | 命令说明 |
|---|---|
| usermod -s 命令解释器 用户 | 修改用户登录后使用的Shell终端(用户必须存在) |
| usermod -G 组名 用户 | 修改用户所属的扩展群 |
| usermod -G ' ' 用户 | 把用户从root组踢出 |
二、 usermod命令示例
示例: 修改mysql用户命令解释器为/bin/bash
$ usermod -s /bin/bash mysql
示例: 修改mysql用户属于root组
$ usermod -G root mysql
示例: 把用户mysql从root组踢出
$ usermod -G ' ' mysql
5.11.7 id¶
一、 id命令常用用法
| id命令选项 | 命令说明 |
|---|---|
| id 用户 | 查询用户的uid,gid,用户组信息,检查用户是否存在 |
二、 id命令示例
示例: 查看用户mysql的uid,gid,用户组信息
$ id mysql
5.11.8 whoami¶
一、 whoami命令常用用法
| whoami命令选项 | 命令说明 |
|---|---|
| whoami | 查看当前登录用户名字 |
二、 whoami命令示例
示例: 查看当前登录用户名字
$ whoami
5.11.9 w¶
一、 w命令常用用法
| w命令选项 | 命令说明 |
|---|---|
| w | 显示已登录用户的信息 |
二、 w命令示例
示例: 显示已登录用户的信息
$ w
14:21:13 up 1 day, 22:27, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 14:19 1:45 0.01s 0.01s -bash
root pts/1 192.168.1.108 Fri16 ? 0.20s 0.00s w
上面回显信息说明如下:
14:21:13:当前系统时间。up 1 day, 22:27:系统已经运行了1天22小时27分钟。2 users:当前有2个用户登录。-
load average: 0.00, 0.01, 0.05:系统的负载平均值。这个值表示系统的繁忙程度,分别对应1分钟、5分钟和15分钟的平均负载。在这个示例中,系统的负载很低。 -
USER:用户的登录名。 TTY:终端类型或伪终端号。FROM:用户的登录来源,可以是IP地址或终端类型。如果为空或-代表本地登录;如果是IP地址代表远程登录LOGIN@:用户登录的时间。IDLE:用户的登录会话空闲时间。JCPU:用户的累计CPU时间(以分钟为单位)。PCPU:用户的当前CPU占用百分比。WHAT:用户正在运行的命令或程序。
5.11.10 last¶
一、 last命令常用用法
| last命令选项 | 命令说明 |
|---|---|
| last | 显示所有用户的登录信息 |
二、 last命令示例
示例: 显示所有用户的登录信息
$ last
5.11.11 lastlog¶
一、 lastlog命令常用用法
| lastlog命令选项 | 命令说明 |
|---|---|
| lastlog | 显示所有用户最近1次的登录信息 |
二、 lastlog命令示例
示例: 查看所有用户最近1次的登录信息
$ lastlog
5.11.12 sudo¶
一、 sudo命令常用用法
| sudo命令选项 | 命令说明 |
|---|---|
| sudo 命令 | 普通用户执行授权命令 |
| sudo -l | 查看当前用户有什么sudo权限(一般在最后2行体现) |
二、 sudo命令示例
示例: 普通用户执行授权命令vim
$ sudo vim a.txt
示例: 查看当前用户有什么sudo权限
$ sudo -l
5.11.13 visudo¶
一、 visudo命令常用用法
| visudo命令选项 | 命令说明 |
|---|---|
| visudo | 使用root用户给普通用户授权 |
二、 visudo命令示例
示例: 给普通用户mysql授权cat命令
$ visudo
#第100行后面添加
mysql ALL=(ALL) /bin/cat
示例: 给运维人员创建普通用户
$ visudo
#第100行后面添加
mysql ALL=(ALL) NOPASSWD: ALL
5.11.14 groupadd¶
一、 groupadd命令常用用法
| groupadd命令选项 | 命令说明 |
|---|---|
| groupadd -g 888 mysql | 创建组并指定gid |
二、 groupadd命令示例
示例: 创建uid,gid都为888 的mysql虚拟用户
$ groupadd -g 888 mysql
$ useradd -u 888 -g mysql -s /sbin/nologin -M mysql
5.12 Linux权限管理命令¶
| 文件权限命令 | 命令说明 |
|---|---|
| chmod | 使用数字或字母形式修改权限 |
| chown | 修改文件所有者,用户组 |
| 文件/目录特殊属性命令 | 命令说明 |
| lsattr | 用于查看文件和目录的特殊属性 |
| chattr | 用于修改文件和目录的特殊属性 |
5.12.1 文件权限命令·¶
5.12.1.1 chmod¶
一、 chmod命令常用用法
| chmod命令选项 | 命令说明 |
|---|---|
| chmod 数字权限 文件 | 使用数字形式修改权限 |
| chmod 字符权限 文件 | 使用字符形式修改权限 |
| chmod u+s 文件/目录 | 通过字符设置用户ID |
| chmod 4755 目录 | 通过权限数字设置用户ID |
| chmod g+s 目录 | 通过字符设置用户组ID |
| chmod 2755 目录 | 通过权限数字设置用户组ID |
| chmod o+t 目录 | 通过字符设置粘滞位 |
| chmod 1777 目录 | 通过权限数字设置 |
二、 chmod命令示例
示例: 修改a.txt的权限为755
$ chmod 755 a.txt
示例: 给a.sh添加执行权限
$ chmod +x a.sh
示例: 给/etc/rc.d/rc.local(所有位置)增加执行权限
$ chmod a+x /etc/rc.d/rc.local
示例: 给/etc/rc.d/rc.local文件所有者增加执行权限
$ chmod u+x /etc/rc.d/rc.local
$ chmod u=x /etc/rc.d/rc.loca
示例: 通过字符给a.txt文件设置用户ID
$ chmod u+s a.txt
示例: 通过权限数字给a.txt文件设置用户ID
$ chmod 4755 a.txt
示例: 通过字符给a.txt文件设置用户组ID
$ chmod g+s a.txt
示例: 通过权限数字给a.txt文件设置用户组ID
$ chmod 2755 a.txt
示例: 通过字符给/tmp/目录设置粘滞位
$ chmod o+t /tmp/
示例: 通过权限数字给/tmp/目录设置粘滞位
$ chmod 1777 /tmp/
5.12.1.2 chown¶
一、 chown命令常用用法
| chown命令选项 | 命令说明 |
|---|---|
| chown 文件所有者.用户组 文件(其中前面的.可以替换成:) | 修改文件所有者,用户组 |
| chown 字符权限 文件 | 使用字符形式修改权限 |
二、 chown命令示例
示例: 修改a.txt所有者和用户组为mysql(用户mysql需要存在)
$ chown mysql:mysql a.txt
5.12.2 文件/目录特殊属性命令¶
5.12.2.1 lsattr¶
一、 lsattr命令常用用法
| lsattr命令选项 | 命令说明 |
|---|---|
| lsattr 文件/目录 | 用于查看文件和目录的特殊属性 |
二、 lsattr命令示例
示例: 查看a.txt文件的特殊属性
$ lsattr a.txt
5.12.2.2 chattr¶
一、 chattr命令常用用法
| chattr命令选项 | 命令说明 |
|---|---|
| chattr +a 文件/目录 | 设置追加位。当追加位设置在文件上时,只有文件的内容可以被追加,但不能被修改或删除。 |
| chattr -a 文件/目录 | 取消设置追加位。 |
| chattr +i 文件/目录 | 设置不可修改位。当不可修改位设置在文件上时,文件的内容不能被修改、删除,甚至超级用户也无法更改它。 |
| chattr -i 文件/目录 | 取消设置不可修改位。 |
二、 lsattr命令示例
示例: 修改a.txt文件的特殊属性为只能追加
$ chattr +a a.txt
示例: 取消a.txt文件的特殊属性为只能追加
$ chattr -a a.txt
示例: 修改a.txt文件的特殊属性为不可修改位
$ chattr +i a.txt
示例: 修改a.txt文件的特殊属性为不可修改位
$ chattr -i a.txt
5.13 Linux系统管理命令¶
| 软件包管理命令 | 命令说明 |
|---|---|
| rpm | 用于在Linux系统下对软件包进行安装、卸载、查询、验证、升级等工作 |
| yum | 用于在Linux系统中基于RPM技术进行软件包的管理工作 |
| dpkg | 用于管理软件安装包 |
| 进程管理命令 | 命令说明 |
| ps | 静态:ps查看当前瞬间进程状态,一般用于临时检查或取值 |
| top | 动态:top动态,交互,整体查看系统状态,负载,僵尸进程,cpu,内存. 类似于windows任务管理器 |
| htop | top命令升级版,支持鼠标操作(htop是epel源中的命令,需要提前配置epel源) |
| & | 常用的后台运行方法 |
| nohup 命令 & | 与&类似,会记录输出到文件中默 认叫nohup.out |
| screen命令 | 通过软件创建空间,让命令在这个空间运行 |
| kill | kill + 进程pid进行结束进程,常用 |
5.13.1 Linux软件包管理命令¶
5.13.1.1 rpm¶
一、 rpm命令常用用法
| rpm命令选项 | 命令说明 |
|---|---|
| rpm -ivh 包名 | 安装rpm包,其中命令选项说明: -i:安装软件包 -v:显示过程 -h:人类可读显示过程 |
| rpm -qa 包名 | 查看软件包是否安装,其中命令选项说明: -q:显示指定软件包是否已安装 -a:显示所有软件包 |
| rpm -ql 包名 | 查看软件包内容,其中命令选项说明: -q:显示指定软件包是否已安装 -l:显示软件包的文件列表 |
| rpm -qf 包名 | 查看文件或命令所归属的软件包,其中命令选项说明: -q:显示指定软件包是否已安装 -f:显示文件或命令属于哪个软件包 |
| rpm -Uvh 包名 | 升级软件包(如果软件包不存在,相当是ivh安装),其中命令选项说明: -U:更新 -v:显示过程 -h:人类可读显示过程 |
| rpm -e 包名 | 删除软件包 |
二、 rpm命令示例
示例: 安装软件包zabbix-agent2
$ rpm -ivh zabbix-agent2-6.0.0-1.el7.x86_64.rpm
示例: 检查软件包是否安装成功
$ rpm -qa |grep zabbix
$ rpm -qa zabbix-agent2
示例: 查看已经安装成功的软件包的内容
$ rpm -ql zabbix-agent2
示例: 查询某个命令或文件属于哪个软件包,这里以wget命令进行演示
$ which wget
/bin/wget
$ rpm -qf /bin/wget
wget-1.14-18.el7_6.1.x86_64
示例: 升级新版本6.0.7的rpm包
$ rpm -Uvh /opt/tools/zabbix-agent2-6.0.7-1.el7.x86_64.rpm
示例: 卸载6.0.7的rpm包
$ rpm -e zabbix-agent2-6.0.7-1.el7.x86_64
$ rpm -e zabbix-agent2
5.13.1.2 yum¶
一、 yum命令常用用法
| yum命令选项 | 命令说明 |
|---|---|
| yum install -y bash-completion bash-completion-extras | 安装命令补全工具 |
| yum install -y 软件包 | 安装软件包(包含依赖) |
| yum reinstall -y 软件包 | 重新安装软件包(包含依赖) |
| yum provides 命令或文件 | 检查软件/搜索软件 |
| yum search all 命令或文件 | 检查软件/搜索软件 |
| yum repolist | 查看yum源信息 |
| yum list | 显示所有yum仓库中所有软件,未来用于根据软件包名字查找 |
| yum remove 软件包 | 删除软件包(同时删除依赖),建议使用rpm -e删除 |
| yum clean all | 清空缓存,一般自建yum仓库需要使用 |
| yum update/upgrade | 更新 |
二、 yum命令示例
示例: 安装tree软件包
$ yum install -y tree
示例: 重新安装tree软件包
$ yum reinstall -y tree
示例: 查看tree命令所属软件包
$ yum provides tree
示例: 查看tree命令所属软件包,不推荐使用,回显内容太多,需要一个个测试
$ yum search all tree
示例: 查看yum源信息
$ yum repolist
示例: 显示所有yum仓库中所有软件
$ yum list
示例: 升级或更新
$ yum update
$ yum upgrade
示例: 删除tree软件包(同时删除依赖)
$ yum remove tree
示例: 删除tree软件包(不删除依赖)
$ rpm -e tree-1.6.0-10.el7.x86_64
5.13.1.3 dpkg¶
一、 dpkg命令常用用法
| dpkg命令选项 | 命令说明 |
|---|---|
| dpkg -l | 检查是否安装软件包,其中命令选项说明: -l:显示已安装的软件包列表 |
| dpkg -i 包名 | 安装软件包,其中命令选项说明: -i:安装软件包 |
| dpkg -L 包名 | 检查软件包内容,其中命令选项说明: -L:显示与软件包关联的文件 |
| dpkg -r 包名 | 删除软件包,其中命令选项说明: -r:删除软件包 |
二、 dpkg命令示例
示例: 安装指定的软件包
$ dpkg -i File.deb
示例: 卸载指定的软件包
$ dpkg -r File.deb
示例: 列出当前已安装的软件列表
$ dpkg -l
示例: 检查软件包内容
$ dpkg -L File.deb
5.13.2 Linux进程管理命令¶
5.13.2.1 ps¶
一、 ps命令常用用法
| ps命令选项 | 命令说明 |
|---|---|
| ps -ef | 显示当前系统运行状态中进程信息,其中命令选项说明: -e:显示环境变量信息 -f:用ASCII字符显示树状结构 |
| ps aux | 查看系统中全部的进程信息,含详细信息,其中命令选项说明: -a:显示所有进程信息 -u:使用用户为主的格式来显示程序状态 -x:不区分终端机 |
二、 ps命令示例
示例: 显示当前系统运行状态中进程信息
$ ps ef
示例: 查看系统中全部的进程信息,含详细信息
$ ps aux
示例: 过滤出crond进程信息
$ ps -ef |grep crond
$ ps aux |grep crond
示例: 按照树形结构查看进程信息并输出pid
$ pstree -p
上面参数说明:
pstree: 这是用于显示进程树的命令。-p: 该选项指示pstree显示每个进程的PID。
也可以展示部分所属关系,没有pstree直观
$ ps auxf
上面参数说明:
ps: 显示当前进程状态的命令。aux: 选项用于显示所有用户的所有进程,包括其他细节信息,例如进程的用户、CPU使用率、内存占用等。f: 这个选项显示进程的树状结构,包括父进程和子进程的关系。
示例: 求取出ps命令结果中第一列和第三列
$ ps aux | awk '{print $1,$3}'
上面参数说明:
ps aux:列出系统上所有进程的详细信息。|:管道符,将ps aux的输出传递给下一个命令。awk '{print $1,$3}':使用 Awk 命令处理ps aux的输出,仅打印每行的第一个(用户名)和第三个字段(CPU使用率)。
示例: 指定输出内容user,%cpu,stat
$ ps axo user,%cpu,stat
上面参数说明:
- a: 显示所有用户的进程,而不仅仅是当前用户的进程。
- x: 显示无控制终端的进程,通常是后台进程。
- o user,%cpu,stat: 自定义输出格式,指定要显示的列,包括用户(USER)、CPU使用率(%CPU)、以及进程状态(STAT)。
示例: 求取出ps命令结果中第一列和第三列,并且不显示标题
$ ps aux |awk 'NR>1{print $1,$3}'
上面参数说明:
ps aux:列出所有进程的详细信息。awk 'NR>1{print $1,$3}':awk命令用于处理ps命令的输出。NR>1表示从第2行开始处理,以跳过标题行。然后,print $1,$3打印每行的第1列(用户)和第3列(CPU占用率)。
示例: 取出某一个服务(crond)的进程信息(pid,%cpu,%mem,command)
$ ps aux |grep 'crond' |awk '{print $2,$3,$4,$11}'
同样可以使用
$ ps --no-heading -o pid,%cpu,%mem,command -C crond
上面参数说明:
--no-heading:表示不显示列标题。-o pid,%cpu,%mem,command:指定显示的列,包括进程ID(pid)、CPU占用率(%cpu)、内存占用率(%mem)、以及命令行(command)。-C crond:限制输出为仅包括指定名称的进程,这里是crond。
示例: 取出某一个服务(crond)的进程信息中最后一列
$ ps aux |grep 'crond' |awk '{print $NF}'
示例: 取出某一个服务(crond)的进程信息中倒数第二列
$ ps aux |grep 'crond' |awk '{print $(NF-1)}'
示例: 取出所有进程中内存使用率最高的前5
$ ps --no-heading aux |sort -rnk4 |head -5
上面参数说明:
ps: 用于显示当前系统中运行的进程信息。--no-heading: 禁用了列标题,使输出更加紧凑。aux: 显示所有用户的所有进程,包括不与终端相关的进程。|: 将ps的输出通过管道传递给下一个命令。-r: 表示逆序排列,即从高到低排列。-n: 表示按数值进行排序,而不是字典顺序。-k4: 表示按第4列进行排序,即%MEM列,以确定内存使用量。head -5: 仅显示前5行,也就是前5个占用内存最多的进程。
5.13.2.2 top¶
一、 top命令常用用法
| top命令选项 | 命令说明 |
|---|---|
| top -bn1 | 显示当前系统运行状态中进程信息,其中命令选项说明: -b:非交互模式 -n:只输出1次结果 |
二、 top命令示例
示例: 只输出1次top回显内容的第二行
$ top -bn1 | awk 'NR==2'
上面参数说明:
top: 启动系统监控工具top。|: 通过管道将top的输出传递给下一个命令。awk 'NR == 2': 使用awk命令,NR表示记录号,这里是指行号。NR == 2表示只选择第二行的内容。
示例: top运行在非交互模式,显示第2行内容中倒数第一列和倒数第二列内容
$ top -bn1 |awk 'NR ==2{print $(NF-1),$NF}'
上面参数说明:
top -bn1:运行top命令,其中-b选项表示以批处理模式运行,n1表示运行一次后退出。|:通过管道将top命令的输出传递给下一个命令。awk 'NR == 2{print $(NF-1),$NF}':使用awk命令,NR == 2表示只选择第二行的内容。$(NF-1)表示倒数第二个字段,通常是系统的平均负载值之一,$NF表示最后一个字段,通常也是平均负载值之一。这个命令的目的是提取这两个值并打印它们。
5.13.2.3 &¶
一、 &命令常用用法
| &命令选项 | 命令说明 |
|---|---|
| 命令 & | 命令后台运行 |
二、 &命令示例
示例: 让sleep 999命令后台运行
$ sleep 999 &
5.13.2.4 nohup¶
一、 &命令常用用法
| nohup命令选项 | 命令说明 |
|---|---|
| nohup 命令 & | 可以保留输出到指定文件中,默认是nohup.out文件。其他方面与&符号一致。 |
二、 &命令示例
示例: 让ping baidu.com命令后台运行并记录输出
$ nohup ping -c 2 baidu.com &
5.13.2.5 screen¶
一、 &命令常用用法
| screen命令选项 | 命令说明 |
|---|---|
| screen | 进入screen虚拟窗口 |
先Ctrl+A,然后按 d |
在进入screen虚拟窗口输入命令后,将会话切换到后台 |
| screen -ls | 用于列出当前系统中所有正在运行的 GNU Screen 会话 |
| screen -r GNU Screen会话的标识符 | 重新附加Detached会话 |
二、 &命令示例
示例: 进入screen虚拟窗口执行命令
$ yum install -y screen
$ screen
$ ping baidu.com
示例: 列出当前系统中所有正在运行的 GNU Screen 会话
$ screen -ls
示例: 恢复,使用 screen -r 命令来重新附加到一个 "Detached" 会话,以便重新获得对该会话的控制权。
$ screen -r 21649.pts-0.k8s-master01
5.13.2.6 kill¶
一、 &命令常用用法
| kill命令选项 | 命令说明 |
|---|---|
| kill + 进程pid | 默认发送结束信号 |
| kill -9 + 进程pid | 发送强制结束信号(别用kill -9结束数据库) |
二、 &命令示例
示例: 杀死远程服务进程
$ ps aux | grep /usr/sbin/sshd | grep -v grep
root 1535 0.0 0.0 112900 4340 ? Ss Oct13 0:00 /usr/sbin/sshd -D
$ kill 1535
示例: 强制杀死远程服务进程
$ kill -9 1535