# 三.linux 常用命令

# 1.常见目录

  • /根目录
  • /boot 启动目录,启动相关文件
  • /dev 设备文件
  • /etc 配置文件
  • /home 普通用户的家目录,可以操作
  • /lib 系统库保存目录
  • /mnt 移动设备挂载目录
  • /media 光盘挂载目录
  • /misc 磁带机挂载目录
  • /root 超级用户的家目录,可以操作
  • /tmp 临时目录,可以操作
  • /proc 正在运行的内核信息映射,主要输出进程信息、内存资源信息和磁盘分区信息等
  • /sys 硬件设备的驱动程序信息
  • /var 变量
  • /bin 普通的基本命令,如 ls、chmod 等,一般的用户也可以使用
  • /sbin 基本的系统命令,如 shutdown,reboot,用于启动系统,修复系统,只有管理员才可以运行
  • /usr/bin 是你在后期安装的一些软件的运行脚本
  • /usr/sbin 内置一些用户安装的系统管理的必备程序

# 2.命令基本格式

# 2.1 命令提示符

[root@VM-20-11-centos ~]# ssh root@localhost
1
  • root 当前登陆用户
  • localhost 主机名
  • ~当前工作目录,默认是当前用户的家目录,root 就是/root,普通用户是/home/用户名
  • 提示符:超级用户是#,普通用户是$

# 2.2 命令格式

  • 命令 [选项] [参数]
  • 当有多个选项时,可以写在一起
  • 一般参数有简化和完整写法两种 -a 与 --all 等效

ls:查询目录中的内容

[root@VM-20-11-centos ~]# ls
7.0.4.tar.gz    JBnrCBNAHV.tar                              QtpbxpYXNY.tar
awKTbbhOKV.tar  kEQLvPHEgr.tar                              RriEohQSOb.tar
dUGTbmqMZA.tar  LfeaJTrXPF.tar                              snap
EattuPSvsi.tar  mongo                                       sUBHhapYHH.tar
fLKHAyFoMh.tar  mysql-community-release-el7-5.noarch.rpm    uQFsAKGJkd.tar
GBOuIVnoNm.tar  mysql-community-release-el7-5.noarch.rpm.1  wpQsZLUxGq.tar
gIjwaydQCE.tar  OfhGQLYqlz.tar                              XGlndHMIIV.tar
GoSGgnrtKQ.tar  ONSIRsfsxq.tar                              xjoQjmcZct.tar
HDtLTwWarP.tar  package-lock.json
1
2
3
4
5
6
7
8
9
10
  • ls [选项] [文件或者目录]
  • 选项
    • -a 显示所有文件,包括隐藏文件
    • -l 显示详细信息
    • -d 查看目录本身的属性而非子文件 ls /etc/
    • -h 人性化的方式显示文件大小
    • -i 显示 inode,也就是 i 节点,每个节点都有 ID 号
  • 默认当前目录下的文件列表

ls -l: 显示详细信息

drwxr-xr-x .  1 root  root   800 Sep 16 00:19 logs
1
drwxr-xr-x . 1 root root 800 Sep 16 00:19 logs
文件类型和权限 ACL 权限 硬链接引用计数 所有者 所属组 文件大小 最后修改时间 文件名

# 12.3 文件处理命令

# 12.3.1 mkdir

  • 建立目录
  • mkdir -p [目录名]
    • -p 递归创建

# 12.3.2 cd

  • 切换所在目录
  • cd [目录]
    • ~ 家目录
    • 家目录
    • 上次目录
    • . 当前目录
    • .. 上级目录
  • 相对路径是参照当前所在目录
  • 绝对路径是从根目录开始
  • 按 TAB 键可以补全命令和目录

# 12.3.3 pwd

  • 显示当前目录 pwd
[root@VM-20-11-centos ~]# pwd
/root
1
2

# 12.3.4 rmdir

  • 删除目录 remove empty directory
  • rmdir [目录名]

# 12.3.5 rm

  • 删除文件或者目录 remove
  • rm [文件或者目录]
    • -r 删除目录
    • -f 强制删除
  • rm -rf 文件或者目录] 递归强制删除所有目录

# 12.3.6 cp

  • copy 复制命令
  • copy [源文件或者目录] [目标文件]
    • -r 复制目录,默认是复制文件
    • -p 连带文件属性复制
    • -d 若源文件是链接文件,则复制连接属性
    • -a 相当于 -rpd

# 12.3.7 mv

  • 移动文件或者改名 move
  • mv [源文件或者目录] [目标文件]

# 12.3.8 ln

  • 链接命令,生成链接文件 link
# 12.3.8.1 硬链接特征
  • 拥有相同的 i 节点和存储 block 块,可以看作是同一个文件
  • 可以通过 i 节点访问
  • 不能跨分区
  • 不能针对目录使用
  • 一般不使用
# 12.3.8.2 软链接特征
  • ln -s [源文件] [目标文件]
    • -s 创建软链接
  • 类似 Windows 快捷方式
  • 软链接拥有自己的 i 节点和 Block 块,但是数据块中只保存源文件的文件名和 i 节点号,并没有实际的文件数据
  • lrwxrwxrwx l 软链接 软链接的文件权限都是 777
  • 修改任意一个文件,另一个都会改变
  • 删除源文件,软链接不能使用
  • 软链接源文件必须写绝对路径

# 12.4 文件搜索命令

# 12.4.1 locate

  • 在后台数据库中按文件名搜索,速度比较快
  • 数据保存在/var/lib/mlocate 后台数据库,每天更新一次
  • 可以 updatedb 命令立刻更新数据库
  • 只能搜索文件名
  • /etc/updatedb.conf 建立索引的配置文件
    • PRUNE_BIND_MOUNTS = "yes" 全部生效,开启搜索限制
    • PRUNEFS 不搜索的文件系统
    • PRUNENAMES 忽略的文件类型
    • PRUNEPATHS 忽略的路径 /tmp

# 12.4.2 whereis

  • 搜索命令所在路径以及帮助文档所在位置
  • whereis 命令名 whereis ls
    • -b 只查找可执行文件
    • -m 只查找帮助文件

# 12.4.3 which

  • 可以看到别名 which ls
  • 能看到的都是外部安装的命令
  • 无法查看 Shell 自带的命令,如 which cd

# 12.4.4 环境变量

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
1
  • 定义的是系统搜索命令的路径
  • echo $PATH

# 12.4.5 find

  • 文件搜索命令
  • find [搜索范围] [搜索条件]
# 12.4.5.1 按名称搜索
  • 避免大范围的搜索,会非常消耗系统资源
find / -name aaa.log
1
# 12.4.5.2 通配符
  • find 是在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配
  • 通配符
    • * 匹配任意内容
    • ? 匹配任意一个字符
    • [] 匹配任意一个中括号内的字符
find . -name "ab[cdef]"
1
# 12.4.5.3 -i

不区分大小写

find / -iname A.log
1
# 12.4.5.4 -user

按所有者进行搜索

find /root -user root
find /root -nouser
1
2
# 12.4.5.5 按时间搜索
find /nginx/access.log -mtime +5
1
参数 含义
atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容
参数 含义
-5 5 天内修改的文件
5 5 天前当前修改的文件
+5 5 天前修改的文件
# 12.4.5.6 按大小搜索

k 小写,M 大写

find . -size 100k
1
参数 含义
-8k 小于 8K
8k 等于 8K
+8k 大于 8K
+8M 小于 8M
# 12.4.5.7 按 i 节点搜索
find . -inum 123456
1
# 12.4.5.8 综合应用
find /tmp -size +10k -a -size -20k
1
  • 查找/etc 目录下,大于 10KB 并且小于 20KB 的文件
  • -a and 逻辑与,两个条件都满足
  • -o or 逻辑或,两个条件满足一个就可以
find /tmp -size +10k -a -size -20k -exec ls -lh {} \;
1
  • exec 对上个命令的结果进行操作
# 12.4.5.9 grep
  • 在文件当中匹配符合条件的字符串
  • grep "10" access.log
    • -i 忽略大小写
    • -v 排除指定字符串
  • find 命令,在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配
  • grep 命令 在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配

# 12.5 帮助命令

# 12.5.1 基本用法

  • man 命令 获取指定命令的帮助
  • man ls 查看 ls 的帮助

# 12.5.2 man 的级别

  • 1 查看命令的帮助
  • 2 查看可被内核调用的函数的帮助
  • 3 查看函数和函数库的帮助
  • 4 查看特殊文件的帮助
  • 5 查看配置文件的帮助
  • 6 查看游戏的帮助
  • 7 查看其它的帮助
  • 8 查看系统管理员可用命令的帮助
  • 9 查看和内核相关文件的帮助

# 12.5.3 查看命令级别

  • 查看命令级别
  • 1p: POSIX utilities
  • POSIX 表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX 标准定义了操作系统应该为应用程序提供的接口标准.
man -f ls
whatis ls
man 1 ls
man 1p ls
1
2
3
4

# 12.5.4 关键字搜索

- man -k passwd
1

# 12.5.5 shell 内部帮助

  • whereis 找到就是外部,找不到就是内部
help cd
1

# 12.6 压缩与解压缩命令

.zip .gz .bz2 .tar.gz .tar.bz2

# 12.6.1 zip 格式

压缩文件或目录,是一种压缩格式

  • 压缩文件 zip 压缩文件名.zip 源文件
  • 压缩目录 zip -r 压缩目录名.zip 源目录
  • 解压 unzip 压缩目录名.zip
mkdir book
touch book/1.txt
touch book/2.txt
zip -r book.zip book
unzip book.zip
1
2
3
4
5

# 12.6.2 gzip

gzip 为高压,可以把文件压缩得更小

命令 示例 含义
gzip 源文件 gzip a.txt 压缩为.gz 格式的压缩文件,源文件会消失
gzip -c 源文件 > 压缩文件 gzip -c yum.txt > yum.txt.gz 压缩为.gz 格式的压缩文件,源文件不会消失
gzip -r 目录 gzip -r xx 把目录下的每个子文件都变成压缩包,并删除原文件,当前目录无变化
gzip -d 压缩文件名 gzip -d yum.txt.gz 解压缩文件,不保留压缩包
gunzip 压缩文件 gunzip yum.txt.gz 解压缩文件,也不保留压缩包
  • 压缩是压缩目录下的文件

# 12.6.3 .bz2 格式压缩

bzip2 是一个压缩能力更强的压缩程序

命令 示例 含义
bzip2 源文件 bzip2 1.txt 压缩为.bz2 格式的文件,不保留源文件
bzip2 -k 源文件 bzip2 -k 1.txt 压缩为.bz2 格式的文件,保留源文件
bzip2 -d 压缩文件名 bzip2 -d 1.txt.bz2 解压压缩包,不保留压缩包
bunzip2 压缩文件名 bunzip2 1.txt.bz2 解压压缩包,也不保留压缩包
  • bzip2 不能压缩目录

# 12.6.4 tar

  • 打包命令,只打包并不压缩
  • tar -cvf 打包文件名 源文件
    • -c 打包
    • -v 显示过程
    • -f 指定打包后的文件名
tar -cvf book.tar book 会找出一个 book.tar 文件
1
  • x 解打包
tar -xvf book.tar
1

# 12.6.4 tar.gz 压缩格式

  • zip 可以压缩目录但压缩效率不高,gzip 和 bzip2 压缩效率高但不支持目录
  • 可以先打包为.tar 格式,再压缩为.gz 格式 -z 压缩为.tar.gz 格式 -x 解压缩.tar.gz 格式
命令 示例 含义
tar -zcvf 压缩包名 .tar.gz 源文件 tar -zcvf book.gar.gz book 可以先打包为.tar 格式,再压缩为.gz 格式
tar -zxvf 压缩包名.tar.gz tar -zxvf book.tar.gz 解压 tar.gz 压缩包
tar -jcvf 压缩包名 .tar.bz2 源文件 tar -jcvf book.tar.bz2 book 可以先打包为.tar 格式,再压缩为.bz2 格式
tar -jxvf 压缩包名.tar.bz2 tar -jxvf book.tar.bz2 解压 tar.bz2 压缩包

# 12.7 关机和重启命令

# 12.7.1 关机命令shutdown

  • -c 取消前一个关机命令
  • -h 关机
  • -r 重启
shutdown -r 06:00
shutdown -c
1
2

# 12.7.2 init

关机

init 0
1

重启

init 6
1

# 12.7.3 退出登录logout

logout
1

# 12.8 查看登录用户信息

# 12.8.1 查看登录用户信息w

[root@VM-20-11-centos ~]# w
 13:43:24 up 122 days, 20:21,  1 user,  load average: 0.05, 0.06, 0.06
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    118.247.208.139  13:21    4.00s  0.06s  0.00s w
1
2
3
4
  • USER 登录的用户名
  • TTY 登录的终端 tty1 本地终端 pts/0 远程终端
  • FROM 登录的 IP
  • LOGIN 登录时间
  • IDLE 用户闲置时间
  • JCPU 该终端所有进程占用的时间
  • PCPU 当前进程所占用的时间
  • WHAT 正在执行的命令

# 12.8.2 查看登录用户信息who

[root@VM-20-11-centos ~]# who
root     pts/0        2023-04-15 13:21 (118.247.208.139)
1
2
  • USER 登录的用户名
  • TTY 登录的终端 tty1 本地终端 pts/0 远程终端
  • LOGIN 登录时间(登录的 IP)

# 12.8.3 last

查看当前登录和过去登录的用户信息 默认读取 /var/log/wtmp 文件

  • 用户名
  • 登录终端
  • 登录 IP
  • 登录时间
  • 退出时间(在线时间)

# 12.8.4 lastlog

查看所有用户的最后一次登录时间

  • 用户名
  • 登录终端
  • 登录 IP
  • 最后一次登录时间

# 12.9 磁盘管理

# 12.9.1 df

  • 查看磁盘分区使用状况
参数 描述
-l 仅显示本地磁盘(默认)
-a 显示所有文件系统的使用情况
-h 以 1024 进制计算最合适的单位显示磁盘容量
-H 以 1000 进制计算最合适的单位显示磁盘容量
-T 显示磁盘分区类型
-t 显示指定类型文件系统的磁盘分区
-x 不显示指定类型文件系统的磁盘分区

# 12.9.2 du

  • 统计以磁盘上的文件大小
参数 描述
-b 以 byte 为单位统计文件
-k 以 KB 为单位统计文件
-m 以 MB 为单位统计文件
-h 以 1024 为单位统计文件
-H 以 1000 为单位统计文件
-s 指定统计目标
du -s /etc
du -sH /etc
1
2

# 12.9.3 添加新硬盘后的分区和格式化

  • 硬件设备是由 linux 系统自动识别并以文件的形式存在于根目录下的 dev 目录下
  • 1-4 分区编号是留给主分区和扩展分区的,逻辑分区只能从 5 开始 命令| 含义| 中文 --|-- m| print this menu |打印菜单 n| add a new partition| 添加一个分区 d| delete a partition| 删除一个分区 p| print the partition table| 打印分区表 q| quit without saving changes |退出不保存 w| write table to disk and exit| 写入分区表并保存
fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
Device Boot Start End Blocks Id System
/dev/sda1 \* 1 26 204800 83 Linux

Disk /dev/sdb: 8589 MB, 8589934592 bytes
fdisk /dev/sdb 开始对这块硬盘进行分区
m 打印命令
n 创建一个分区
Partition number (1-4): 1 选择分区编号
First cylinder (1-1044, default 1): 1 输入开始扇区
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +3000M 输入结束扇区
p 查看当前分区
n 创建分区
e 扩展分区
l 创建逻辑分区
d 删除分区
w 分区表写入磁盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 12.9.4 GPT

  • MBR 下主分区最多 4 个,GPT 可达 128 个
  • MBR 下主分区容量最大 2TB,GPT 模式下容量可达 18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)
parted 开始分区,默认是对第一块硬盘分区
mklabel gpt 指定分区表的类型为 gpt
print 查看分区表的类型
mkpart 开始分区
分区名称? []? system
文件系统类型? [ext2]?
起始点? 0
结束点? 2000
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? c
(parted) 1
结束点? 2000
mkpart 2th 2000 3000
quit 退出编辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 12.9.5 格式化

ls -l /dev/sdb\*
mkfs.ext3 /dev/sdb1
mkfs -t ext4 /dev/sdb2
1
2
3

# 12.9.6 挂载

mkdir /mnt/work
mount /dev/sdb1 /mnt/work
umount /mnt/work
vim + /etc/fstab

/dev/sdb1 /mnt/work ext3 defaults 0 0
分区名称 挂载点 文件系统类型
1
2
3
4
5
6
7

# 12.9.7 添加 swap 交换分区

  • 建立普通的 linux 分区
  • 修改分区类型的 16 进制编码
  • 格式化成交换分类
  • 启动交换分区
fdisk /dev/sdb
p 查看当前的分区
Command (m for help): t 修改分区的系统 ID
Partition number (1-4): 3 修改分区编号为 3 的分区
Hex code (type L to list codes): L 列出所有编号
Hex code (type L to list codes): 82 把编号修改为 16 进制的 82
Changed system type of partition 3 to 82 (Linux swap / Solaris)
p
/dev/sdb3 767 1044 2233035 82 Linux swap / Solaris

free 查看剩余内存
mkswap /dev/sdb3 把 sdb3 设置为交换分区
swapon /dev/sdb3 挂载 sdb3 成交换区
free
swapoff /dev/sdb3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 12.9.8 挂载

# 12.9.8.1 挂载命令格式
  • mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
  • 选项
    • -t 文件系统 ext4 iso9660
    • -o 特殊选项
# 12.9.8.2 挂载光驱
mkdir /mnt/cd
mount -t iso9660 /dev/sr0 /mnt/cdrom
1
2
# 12.9.8.3 卸载光驱
umount /mnt/cdrom
1
# 12.9.8.4 挂载 U 盘
fdisk -l 查看硬盘及分区信息
mount -t vfat /dev/sdb1 /mnt/usb
1
2
  • linux 默认不支持 NTFS 格式

# 12.10 文件查看命令

# 12.10.1 cat

  • cat 命令用于连接文件并打印到标准输出设备上。
  • cat [-AbeEnstTuv] [--help] [--version] fileName
  • 参数
    • -n 或 --number:由 1 开始对所有输出的行数编号。
cat -n textfile1
1

# 12.10.2 more

  • Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
  • more fileName
more testfile
1

# 12.10.3 head

  • 用来显示开头某个数量的文字区块
head -5 readme.txt
1

# 12.10.4 tail

  • tail 命令可用于查看文件的内容
  • 有一个常用的参数 -f 常用于查阅正在改变的日志文件。
  • tail [参数] [文件]
  • 参数
    • -f 循环读取
    • -n<行数> 显示文件的尾部 n 行内容
tail -5 mail.txt
tail -f access.log
1
2

# 12.10.5 第二页

head -10 file | tail -5
1