Linux 基础指令
Linux 基础指令
文章目录
- Linux 基础指令
- 1. 文件与目录操作
- 前导知识
- 路径的认识
- 文件的认识
- 1.1 ls —— 列出目录内容
- UID和GID
- 1.2 pwd —— 显示当前目录
- 1.3 cd —— 切换目录
- 1.4 stat —— 查看文件详细属性
- 1.5 file —— 检测文件类型
- 1.6 wc —— 统计行数、字数
- 1.7 touch —— 创建空文件
- Linux 文件的三种时间
- ls 显示不同时间的方式
- atime 有时不更新?
- 1.8 mkdir —— 创建目录
- 1.9 diff —— 比较文件差异
- 1.10 rmdir 和 rm —— 删除目录或文件
- 2. 文件操作
- 2.1 cp —— 复制文件或目录
- 2.2 mv —— 移动或重命名文件
- 2.3 cat —— 查看文件内容
- 2.4 more / less —— 分页查看文件内容
- 2.5 head / tail —— 查看文件头部/尾部内容
- 3. 查找操作
- 3.1 find —— 在文件树中查找文件
- 3.2 grep —— 在文件中搜索 字符串 文件
- 3.3 which —— 搜索命令
- 3.4 whereis —— 查找程序的源文件
- 4.压缩
- 4.1 zip/unzip
- 4.2 tar
- 5. 日期时间
- 5.1 date —— 显示时间
- 5.2 cal —— 查看日历
- 6. 关机与重启
- 6.1 shutdown —— 关机命令
- 7. 其他命令
- 7.1 uname
- 7.2 alias
- 7.3 clear —— 清屏
- 7.4 man
- 7.5 uname —— 显示系统信息
- 7.6 bc —— 计算器
- 8. 重要快捷键
1. 文件与目录操作
前导知识
路径的认识
Linux
系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件- 其中普通文件一定是目录树的叶子节点
- 目录可能是叶子(空目录), 也可能是路上节点
- 理解路径存在的意义: 树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就
需要具有唯一性的方案来进行定位文件。其中任何一个节点,都只有一个父节点,所以,从根目
录开始,定位指定文件,路径具有唯一性 - 绝对路径:一般从/开始,不依赖其他目录的定位文件的方式
- 相对路径:相对于当前用户所处目录,定位文件的路径方式
- 绝对路径一般不会随着用户的路径变化而丧失唯一性,一般在特定服务的配置文件中经常被使用
- 相对路径因为它的便捷性,一般在命令行中使用较多
文件的认识
Linux
下的文件一般形式如下
-rw-rw-r-- 1 wyf wyf 3709 Apr 11 21:28 file.txt
1.1 ls —— 列出目录内容
语法:
ls [选项] [目录或文件]
功能: 显示指定目录下的文件和子目录,对于目录,列出该目录下的所有子目录与文件,对于文件,列出文件名以及其他信息
常用选项:
-a
列出目录下的所有文件,包括以 . 开头的隐含文件-d
将目录像文件⼀样显示,而不是显示其下的文件。 如:ls ‒d
指定目录-i
输出文件的i
节点的索引信息。 如ls ‒ai
指定文件-k
以k
字节的形式表示文件的大小。ls ‒alk
指定文件-n
用数字的UID
,GID
代替名称-F
在每个文件名后附上⼀个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示
目录;“@”表示符号链接;“|”表示FIFOs
;“=”表示套接字(sockets
)(目录类型识别)-r
对目录反向排序-t
以时间排序-s
在l文件名后输出该文件的大小(大小排序,如何找到⽬录下最大的文件)-R
列出所有子目录下的文件(递归)-1
一行只输出⼀个文件
UID和GID
UID(User ID)
- 定义:每个用户账号的唯一数字标识符
- 分类:
Root
用户:UID
为0
,拥有最高权限- 系统用户:
UID
范围通常为1-999
(Debian
系)或1-499
(RHEL
系) - 普通用户:
UID
从1000
(旧系统从500
)开始,由管理员创建
- 作用
- 系统通过
UID
识别用户身份 - 文件或进程的所有者信息以
UID
形式存储 - 权限检查时,系统将用户名转换为对应的
UID
- 系统通过
GID(Group ID)
每个用户组的唯一标识符
- 分类
- 主组(
Primary Group
):用户创建文件时默认归属的组(每个用户必须属于一个主组) - 附加组(
Supplementary Group
):用户可加入多个附加组,用于获取额外权限
- 主组(
- 作用
- 控制组成员对资源的共享访问权限
- 文件或目录的所属组以
GID
形式存储
..
和.
..
表示上一级路径,类似于Windows
下的返回上一级文件夹.
表示当前路径,在Linux
下,执行某个可执行文件时,需要用到.
如./程序名
示例:
$ ls
dir1 log.txt test.txt
$ ls -a
. .. dir1 log.txt test.txt
$ ls -al
total 16
drwxrwxr-x 3 wyf wyf 4096 Apr 10 19:52 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1
-rw-rw-r-- 1 wyf wyf 10 Apr 10 19:52 log.txt
-rw-rw-r-- 1 wyf wyf 0 Apr 10 19:52 test.txt
$ ls -a -l -F
total 16
drwxrwxr-x 3 wyf wyf 4096 Apr 10 19:52 ./
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ../
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1/
-rw-rw-r-- 1 wyf wyf 10 Apr 10 19:52 log.txt
-rw-rw-r-- 1 wyf wyf 0 Apr 10 19:52 test.txt
$ ls -alFn
total 16
drwxrwxr-x 3 1000 1000 4096 Apr 10 19:52 ./
drwx------ 15 1000 1000 4096 Apr 10 19:51 ../
drwxrwxr-x 2 1000 1000 4096 Apr 10 19:52 dir1/
-rw-rw-r-- 1 1000 1000 10 Apr 10 19:52 log.txt
-rw-rw-r-- 1 1000 1000 0 Apr 10 19:52 test.txt
1.2 pwd —— 显示当前目录
语法:
pwd
功能: 显示当前所在的绝对路径
示例:
$ pwd
/home/wyf/test
1.3 cd —— 切换目录
语法:
cd [目录]
功能: 切换到指定目录
常用选项:
cd ..
返回上一级目录cd ~
回到当前用户的主目录cd -
返回上一次所在的目录
示例:
$ pwd
/home/wyf/test
$ cd ..
$ pwd
/home/wyf
$ cd
$ pwd
/home/wyf
$ cd /
$ ls
bin dev lib media proc sbin tmp
boot etc lib64 mnt root srv usr
CloudrResetPwdAgent home lost+found opt run sys var
1.4 stat —— 查看文件详细属性
语法
file 文件名
功能 显示文件详细属性(创建、修改时间等)
示例
$ stat test.txt File: ‘test.txt’Size: 40 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 666552 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ wyf) Gid: ( 1000/ wyf)
Access: 2025-04-11 21:08:48.117273895 +0800
Modify: 2025-04-11 20:51:27.045964812 +0800
Change: 2025-04-11 20:57:28.980548460 +0800Birth: 2025-04-11 15:12:08.209514658 +0800
$
1.5 file —— 检测文件类型
语法
file 文件名
功能 检测文件类型(如二进制、文本、目录等)
示例
$ file file.txt
file.txt: ASCII text
$ file dir/
dir/: directory
$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=241baf96d17e6e4644f4acb5dcbee88d768eca65, not stripped
$
1.6 wc —— 统计行数、字数
语法
wc [选项] 文件名
功能 统计文件行数、字数、字节数
常用选项
-l
统计行数-w
统计单词数-c
统计字节数-m
统计字符数
示例
$ wc -wl log.txt6 12 log.txt
$ wc -c log.txt72 log.txt
$ wc -m log.txt72 log.txt
$
1.7 touch —— 创建空文件
语法:
touch [文件名]
功能: 创建一个新的空文件,也可以更改文档或目录的日期时间,包括存取时间和更改时间
常用选项:
-a
改变存取时间-m
仅修改修改时间-c
改变更改时间
Linux 文件的三种时间
时间字段 | 英文全称 | 含义 | 修改行为 |
---|---|---|---|
atime | Access Time | 最近一次访问文件的时间(读) | 被读取时自动更新 |
mtime | Modify Time | 最近一次修改内容的时间 | 内容变化时更新 |
ctime | Change Time | 最近一次元数据变化的时间(权限/所有者/链接数) | chmod 、chown 等操作更新 |
ls 显示不同时间的方式
命令 | 显示哪个时间 |
---|---|
ls -l | 默认显示 mtime |
ls -lu | 显示 atime |
ls -lc | 显示 ctime |
atime 有时不更新?
现代 Linux
出于性能考虑,很多系统挂载时带了 relatime
或 noatime
选项,不再频繁写磁盘更新 atime
,可以查看当前挂载策略:
$ mount | grep ' / '
看到有 relatime
或 noatime
的话,就说明访问时间不会每次都改,节省 I
/O
示例:
$ touch file.txt
$ ls
dir1 file.txt log.txt test.txt
$ stat file.txtFile: ‘file.txt’Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 666553 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ wyf) Gid: ( 1000/ wyf)
Access: 2025-04-10 21:22:15.526617258 +0800
Modify: 2025-04-10 21:22:15.526617258 +0800
Change: 2025-04-10 21:22:15.526617258 +0800Birth: -
$ touch -a file.txt
$ stat file.txtFile: ‘file.txt’Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 666553 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ wyf) Gid: ( 1000/ wyf)
Access: 2025-04-10 21:27:11.015538537 +0800 # 访问时间发生变化
Modify: 2025-04-10 21:22:15.526617258 +0800
Change: 2025-04-10 21:27:11.015538537 +0800Birth: -
$ touch -m file.txt
$ stat file.txt File: ‘file.txt’Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 666553 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ wyf) Gid: ( 1000/ wyf)
Access: 2025-04-10 21:27:11.015538537 +0800
Modify: 2025-04-10 21:34:50.408080619 +0800 # 修改时间发生变化
Change: 2025-04-10 21:34:50.408080619 +0800Birth: -
1.8 mkdir —— 创建目录
语法:
mkdir [选项] 目录名
功能: 创建新的目录
常用选项:
-p
递归创建多级目录,就是一次创建多个目录
示例:
$ mkdir mydir
$ mkdir -p mmmmmydir/mmmmydir/mmmdir/mmdir/mydir
$ ls -l
total 16
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1
-rw-rw-r-- 1 wyf wyf 0 Apr 10 21:34 file.txt
-rw-rw-r-- 1 wyf wyf 10 Apr 10 19:52 log.txt
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:38 mmmmmydir
drwxrwxr-x 2 wyf wyf 4096 Apr 10 21:38 mydir
-rw-rw-r-- 1 wyf wyf 0 Apr 10 19:52 test.txt
$ tree mmmmmydir
mmmmmydir
└── mmmmydir└── mmmdir└── mmdir└── mydir4 directories, 0 files
$
# tree 命令需要安装
# centos下安装命令为 yum -y install tree
1.9 diff —— 比较文件差异
语法
diff 文件名1 文件名2
功能 比较文件差异
常用选项
-u
以合并格式显示差异-r
递归比较目录内容-i
忽略大小写差异
示例
$ diff a dir
Only in dir: a.out
Only in a: b
Only in dir: file.txt
Only in dir: log.txt
Only in dir: test.c
Only in dir: test.txt
$ diff -r a dir
Only in dir: a.out
Only in a: b
Only in dir: file.txt
Only in dir: log.txt
Only in dir: test.c
Only in dir: test.txt
$ diff -i a dir
Only in dir: a.out
Only in a: b
Only in dir: file.txt
Only in dir: log.txt
Only in dir: test.c
Only in dir: test.txt
$
1.10 rmdir 和 rm —— 删除目录或文件
语法:
rmdir [目录名] # 仅删除空目录
rm [选项] [文件或目录]
功能: 删除文件或目录
常用选项:
- rmidr
-p
当子目录被删除后如果父目录也变成空目录的话,就连带父目录⼀起删除
- rm
-r
递归删除目录及其内容-f
强制删除-i
删除前逐一询问
示例:
$ ls -al
total 24
drwxrwxr-x 5 wyf wyf 4096 Apr 10 21:38 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1
-rw-rw-r-- 1 wyf wyf 0 Apr 10 21:34 file.txt
-rw-rw-r-- 1 wyf wyf 10 Apr 10 19:52 log.txt
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:38 mmmmmydir
drwxrwxr-x 2 wyf wyf 4096 Apr 10 21:38 mydir
-rw-rw-r-- 1 wyf wyf 0 Apr 10 19:52 test.txt
$ rm file.txt
$ rm mydir
rm: cannot remove ‘mydir’: Is a directory
$ rm -r mydir
$ ls -al
total 20
drwxrwxr-x 4 wyf wyf 4096 Apr 10 21:42 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1
-rw-rw-r-- 1 wyf wyf 10 Apr 10 19:52 log.txt
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:38 mmmmmydir
-rw-rw-r-- 1 wyf wyf 0 Apr 10 19:52 test.txt
# 删除普通文件前询问
$ rm -i log.txt
rm: remove regular file ‘log.txt’? y
$ ls -al
total 16
drwxrwxr-x 4 wyf wyf 4096 Apr 10 21:43 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:38 mmmmmydir
-rw-rw-r-- 1 wyf wyf 0 Apr 10 19:52 test.txt
# 删除目录前逐一询问
$ rm -ri mmmmmydir/
rm: descend into directory ‘mmmmmydir/’? n
# 递归强制删除非空目录
$ rm -rf mmmmmydir
$ ls -al
total 12
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:44 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1
-rw-rw-r-- 1 wyf wyf 0 Apr 10 19:52 test.txt
2. 文件操作
2.1 cp —— 复制文件或目录
语法:
cp [选项] 源文件 目标文件
功能: 复制文件或目录
注意
- 如果同时指定两个以上的文件或目录,并且最后一个目的目录是一个已经存在的目录,则会把前面指定的所有文件或目录复制到此目录中
常用选项:
-f
强行复制文件或目录, 不论目的文件或目录是否已经存在-r
递归复制目录,将指定目录下的文件与子目录一并处理-p
保持文件属性-i
覆盖文件前提示确认
示例:
$ ls -al
total 12
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:44 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1
-rw-rw-r-- 1 wyf wyf 0 Apr 10 19:52 test.txt
$ echo "Hello World" > test.txt
# echo命令是
$ ls -al
total 16
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:44 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 19:52 dir1
-rw-rw-r-- 1 wyf wyf 12 Apr 10 21:47 test.txt
$ cat test.txt
Hello World
$ cp test.txt dir1/
$ cat dir1/test.txt
Hello World
$ mkdir log.txt
$ ls -al > log.txt
# > 是重定向符号,可以将原本输出到显示器的内容重定向到指定文件中,> h会清空文件,文件不存在就新建;>> 追加重定向,是在文件中追加,不会清空文件
$ ls -al
total 20
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:49 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 21:48 dir1
-rw-rw-r-- 1 wyf wyf 236 Apr 10 21:49 log.txt
-rw-rw-r-- 1 wyf wyf 12 Apr 10 21:47 test.txt
$ cp *.txt dir1/
# * 表示通配符,匹配所有以 .txt结尾的文件
$ cd dir1/
$ ls -al
total 16
drwxrwxr-x 2 wyf wyf 4096 Apr 10 21:49 .
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:49 ..
-rw-rw-r-- 1 wyf wyf 236 Apr 10 21:49 log.txt
-rw-rw-r-- 1 wyf wyf 12 Apr 10 21:49 test.txt
$ cat log.txt
total 16
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:49 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 21:48 dir1
-rw-rw-r-- 1 wyf wyf 0 Apr 10 21:49 log.txt
-rw-rw-r-- 1 wyf wyf 12 Apr 10 21:47 test.txt
$ cp log.txt test.txt
# cp 命令遇到目标文件存在的情况,不会询问是否覆盖,而是直接覆盖
$ ls -al
total 16
drwxrwxr-x 2 wyf wyf 4096 Apr 10 21:49 .
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:49 ..
-rw-rw-r-- 1 wyf wyf 236 Apr 10 21:49 log.txt
-rw-rw-r-- 1 wyf wyf 236 Apr 10 21:50 test.txt
$ cat log.txt
total 16
drwxrwxr-x 3 wyf wyf 4096 Apr 10 21:49 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 10 21:48 dir1
-rw-rw-r-- 1 wyf wyf 0 Apr 10 21:49 log.txt
-rw-rw-r-- 1 wyf wyf 12 Apr 10 21:47 test.txt
2.2 mv —— 移动或重命名文件
语法:
mv [选项] 源文件 目标文件
功能: 移动或重命名文件
常用选项:
-f
如果目标文件已经存在,不会询问而直接覆盖-i
覆盖前提示(如果目标文件已经存在,就会询问是否覆盖)-u
仅移动更新的文件
示例:
$ ls -al
total 12
drwxrwxr-x 3 wyf wyf 4096 Apr 11 20:06 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:05 mydir
-rw-rw-r-- 1 wyf wyf 0 Apr 11 20:05 myfile.txt
$ ls -al > myfile.txt
$ mv myfile.txt mydir/
$ ls -al
total 12
drwxrwxr-x 3 wyf wyf 4096 Apr 11 20:07 .
drwx------ 15 wyf wyf 4096 Apr 10 19:51 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:07 mydir
$ cd mydir
$ ls -al
total 12
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:07 .
drwxrwxr-x 3 wyf wyf 4096 Apr 11 20:07 ..
-rw-rw-r-- 1 wyf wyf 191 Apr 11 20:06 myfile.txt
$ touch mmfile.txt
$ ls -al
total 12
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:07 .
drwxrwxr-x 3 wyf wyf 4096 Apr 11 20:07 ..
-rw-rw-r-- 1 wyf wyf 0 Apr 11 20:07 mmfile.txt
-rw-rw-r-- 1 wyf wyf 191 Apr 11 20:06 myfile.txt
$ mv myfile.txt mmfile.txt
# 如果当前路径存在同名文件,重命名就会覆盖,并且没有提示
$ ls -al
total 12
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:08 .
drwxrwxr-x 3 wyf wyf 4096 Apr 11 20:07 ..
-rw-rw-r-- 1 wyf wyf 191 Apr 11 20:06 mmfile.txt
$ touch myfile.txt
# 添加询问选项,让用户做出选择
$ mv -i mmfile.txt myfile.txt
mv: overwrite ‘myfile.txt’? y
$ ls -al
total 12
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:08 .
drwxrwxr-x 3 wyf wyf 4096 Apr 11 20:07 ..
-rw-rw-r-- 1 wyf wyf 191 Apr 11 20:06 myfile.txt
2.3 cat —— 查看文件内容
语法:
cat [选项] 文件名
功能: 查看目标文件内容
常用选项:
-b
对⾮空输出⾏编号-n
对输出的所有⾏编号-s
不输出多⾏空⾏-n
显示行号-E
显示行尾的$
示例:
$ ls -al
total 12
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:13 .
drwxrwxr-x 3 wyf wyf 4096 Apr 11 20:07 ..
-rw-rw-r-- 1 wyf wyf 103 Apr 11 20:15 test.txt
$ cat test.txt
Hello World
Hello WorldHello WorldHello WorldHello WorldHello WorldHello World
Hello World
# 对输出所有行编号
$ cat -n test.txt 1 Hello World2 Hello World3 4 5 Hello World6 7 Hello World8 9 Hello World10 11 Hello World12 13 14 Hello World15 Hello World
# 不输出多行空行,多行空行压缩为一行
$ cat -s test.txt
Hello World
Hello WorldHello WorldHello WorldHello WorldHello WorldHello World
Hello World
# 对非空输出行编号
$ cat -b test.txt 1 Hello World2 Hello World3 Hello World4 Hello World5 Hello World6 Hello World7 Hello World8 Hello World
2.4 more / less —— 分页查看文件内容
语法:
more 文件名
less 文件名
功能:
more
more
类似于cat
,直接全部输出
less
less
的功能比more
强大(less is more)less
可以前后翻阅,而不是一次性全部打印出来less
还具有搜索功能,既可以向上搜,也可以向下搜
常用选项:
-i
忽略搜索时的⼤⼩写-N
显⽰每⾏的⾏号/字符串
向下搜索“字符串”的功能?字符串
向上搜索“字符串”的功能n
重复前⼀个搜索(与/
或?
有关)N
反向重复前⼀个搜索(与/
或?
有关)q
退出
示例:
# more
$ ls -al
total 12
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:13 .
drwxrwxr-x 3 wyf wyf 4096 Apr 11 20:07 ..
-rw-rw-r-- 1 wyf wyf 3709 Apr 11 20:19 test.txt
$ more test.txt
Hello World -> 0
Hello World -> 1
Hello World -> 2
Hello World -> 3
Hello World -> 4
Hello World -> 5
Hello World -> 6
Hello World -> 7
Hello World -> 8
Hello World -> 9
Hello World -> 10
Hello World -> 11
Hello World -> 12
Hello World -> 13
Hello World -> 14
Hello World -> 15
Hello World -> 16
Hello World -> 17
Hello World -> 18
Hello World -> 19
Hello World -> 20
Hello World -> 21
Hello World -> 22
Hello World -> 23
Hello World -> 24
Hello World -> 25
Hello World -> 26
Hello World -> 27
Hello World -> 28
Hello World -> 29
Hello World -> 30
Hello World -> 31
Hello World -> 32
Hello World -> 33
Hello World -> 34
Hello World -> 35
Hello World -> 36
Hello World -> 37
Hello World -> 38
--More--(18%)
$
# less
$ less -N test.txt 1 Hello World -> 02 Hello World -> 13 Hello World -> 24 Hello World -> 35 Hello World -> 46 Hello World -> 57 Hello World -> 68 Hello World -> 79 Hello World -> 810 Hello World -> 911 Hello World -> 1012 Hello World -> 1113 Hello World -> 1214 Hello World -> 1315 Hello World -> 1416 Hello World -> 1517 Hello World -> 1618 Hello World -> 1719 Hello World -> 1820 Hello World -> 1921 Hello World -> 2022 Hello World -> 2123 Hello World -> 2224 Hello World -> 2325 Hello World -> 2426 Hello World -> 2527 Hello World -> 2628 Hello World -> 2729 Hello World -> 2830 Hello World -> 2931 Hello World -> 3032 Hello World -> 3133 Hello World -> 3234 Hello World -> 3335 Hello World -> 3436 Hello World -> 3537 Hello World -> 3638 Hello World -> 3739 Hello World -> 3840 Hello World -> 3941 Hello World -> 4042 Hello World -> 4143 Hello World -> 4244 Hello World -> 43
:
$
2.5 head / tail —— 查看文件头部/尾部内容
语法:
head -n 行数 文件名
tail -n 行数 文件名
功能: 显示文件的开头或结尾
常用选项:
-n 行数
显示指定行数
示例:
# head
$ head test.txt
Hello World -> 0
Hello World -> 1
Hello World -> 2
Hello World -> 3
Hello World -> 4
Hello World -> 5
Hello World -> 6
Hello World -> 7
Hello World -> 8
Hello World -> 9
$ head -5 test.txt
Hello World -> 0
Hello World -> 1
Hello World -> 2
Hello World -> 3
Hello World -> 4
$ #tail
$ tail test.txt
Hello World -> 191
Hello World -> 192
Hello World -> 193
Hello World -> 194
Hello World -> 195
Hello World -> 196
Hello World -> 197
Hello World -> 198
Hello World -> 199
Hello World -> 200
$ tail -5 test.txt
Hello World -> 196
Hello World -> 197
Hello World -> 198
Hello World -> 199
Hello World -> 200
$ # 查看文件的[180,200]行的内容
Hello World -> 180
Hello World -> 181
Hello World -> 182
Hello World -> 183
Hello World -> 184
Hello World -> 185
Hello World -> 186
Hello World -> 187
Hello World -> 188
Hello World -> 189
Hello World -> 190
Hello World -> 191
Hello World -> 192
Hello World -> 193
Hello World -> 194
Hello World -> 195
Hello World -> 196
Hello World -> 197
Hello World -> 198
Hello World -> 199
$
3. 查找操作
3.1 find —— 在文件树中查找文件
语法
find [查找路径] []
功能 在文件树中查找文件,并作出相应处理(如访问磁盘)
常用选项
-name
按照文件查找文件(区分大小写)-iname
按文件名搜索(不区分大小写)-type
f
普通文件d
目录l
符号链接- 示例:
find /var/log -type f
(搜索/var/log
下的所有文件)
-mtime n
+n
n
天前修改-n
n
天内修改find /tmp -mtime +7
(搜索7
天前修改的文件)
-atime n
按访问时间(Access Time
)过滤,用法同-mtime
-size n
+n
大于n
-n
小于n
- 单位:
c
(字节)、k
(KB
)、M
(MB
)、G
(GB
) find / -size +100M
(搜索大于100MB
的文件)
-perm
权限 -> 按文件权限搜索(八进制或符号格式)- 示例:
find . -perm 644
(搜索权限为644
的文件)
- 示例:
-user
用户名 -> 按文件所有者搜索- 示例:
find /home -user alice
- 示例:
-group
组名 -> 按文件所属组搜索
示例
$ ls -n
total 28
drwxrwxr-x 8 1000 1000 4096 Apr 8 16:24 code
drwxrwxr-x 18 1000 1000 4096 Mar 30 13:16 learning-c
-rw-rw-r-- 1 1000 1000 677 Mar 17 16:31 makefile
drwxrwxr-x 2 1000 1000 4096 Feb 26 13:26 process
drwxrwxr-x 3 1000 1000 4096 Mar 3 15:05 project
drwxrwxr-x 3 1000 1000 4096 Apr 11 20:07 test
drwxrwxr-x 2 1000 1000 4096 Mar 23 21:34 tmp
$ find test test
test
test/mydir
test/mydir/test.txt
test/mydir/log.txt
test
test/mydir
test/mydir/test.txt
test/mydir/log.txt
$
3.2 grep —— 在文件中搜索 字符串 文件
语法
grep [选项] [搜索字符串 文件]
功能 在文件中搜索字符串,将找到的行打印出来
常用选项
-i
忽略⼤⼩写的不同,所以⼤⼩写视为相同-n
顺便输出⾏号-v
反向选择,亦即显⽰出没有 ‘搜寻字符串’ 内容的那⼀⾏
示例
$ cat -n test.txt 1 abcd2 ABCD3 what4 why5 when6 where7 who8 12349 $ grep "abcd" test.txt
abcd
# 忽略大小写的不同
$ grep -i "abcd" test.txt
abcd
ABCD
# 输出行号
$ grep -in "abcd" test.txt
1:abcd
2:ABCD
# 反向选择,除了指定字符串不输出,其他全输出
$ grep -v "abcd" test.txt
ABCD
what
why
when
where
who
1234$ grep -vni "abcd" test.txt
3:what
4:why
5:when
6:where
7:who
8:1234
9:
$
3.3 which —— 搜索命令
语法
which 命令
功能 查找可执行文件的绝对路径
示例
$ which ls
alias ls='ls --color=auto'/usr/bin/ls
$ which pwd
/usr/bin/pwd
$ which gcc
/usr/bin/gcc
$
3.4 whereis —— 查找程序的源文件
语法
whereis 命令
功能 查找程序的源、二进制文件或手册的位置
示例
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
$ whereis stdio.h
stdio: /usr/include/stdio.h /usr/share/man/man3/stdio.3.gz
$ whereis libc.so
libc: /usr/lib64/libc.so /usr/share/man/man7/libc.7.gz
$ whereis dir
dir: /usr/bin/dir /usr/share/man/man1/dir.1.gz
$
4.压缩
4.1 zip/unzip
语法
zip 要压缩的文件.zip 目录或文件
功能 将目录或文件压缩为 zip
格式
常用选项
- 基础压缩
-r
递归处理,将指定目录下的所有文件和子目录一并处理-q
静默模式(不显示压缩过程输出)-e
加密压缩文件(设置密码)-s
大小
- 基础解压
-d 目录
指定解压目标目录-l
列出压缩包内容(不解压)-o
覆盖已存在的文件(无需确认)-n
不覆盖已存在的文件-P 密码
直接提供密码(避免交互式输入)-q
静默模式(不显示解压过程)
示例
$ tree mydir/
mydir/
├── log.txt
└── test.txt0 directories, 2 files
$ zip -r test.zip mydiradding: mydir/ (stored 0%)adding: mydir/test.txt (deflated 13%)adding: mydir/log.txt (deflated 76%)
$ ls -al
total 16
drwxrwxr-x 3 wyf wyf 4096 Apr 11 21:08 .
drwx------ 15 wyf wyf 4096 Apr 11 20:52 ..
drwxrwxr-x 2 wyf wyf 4096 Apr 11 20:57 mydir
-rw-rw-r-- 1 wyf wyf 524 Apr 11 21:08 test.zip
$ mkdir zip
$ unzip test.zip zip/
Archive: test.zip
caution: filename not matched: zip/
$ unzip test.zip -d zip/
Archive: test.zipcreating: zip/mydir/inflating: zip/mydir/test.txt inflating: zip/mydir/log.txt
$ cd zip
$ tree mydir/
mydir/
├── log.txt
└── test.txt0 directories, 2 files
$
4.2 tar
语法
tar [选项] 文件/目录
常用选项
-c
创建新的归档文件(Create
)
示例:tar -cvf archive.tar /path/to/dir
(将目录打包为archive.tar
,-v
显示过程)-x
提取归档文件(Extract
)
示例:tar -xvf archive.tar
(解压到当前目录)-t
列出归档文件内容(List)
示例:tar -tvf archive.tar
(显示归档中的文件列表及详细信息)-z
使用gzip
压缩(后缀.tar.gz
或.tgz
)
示例:tar -czvf backup.tar.gz /path/to/dir # 压缩tar -xzvf backup.tar.gz # 解压
-j
使用bzip2
压缩(后缀.tar.bz2
)
示例:tar -cjvf backup.tar.bz2 /path/to/dir # 压缩 tar -xjvf backup.tar.bz2 # 解压
-J
使用xz
压缩(后缀.tar.xz
,高压缩率)
示例:tar -cJvf backup.tar.xz /path/to/dir # 压缩 tar -xJvf backup.tar.xz # 解压
-f
指定归档文件名(必须放在选项末尾)
示例:tar -cvf myfiles.tar /path/to/files
-v
显示详细操作过程(Verbose)-C
指定解压目标目录
示例:tar -xvf archive.tar -C /target/dir
--exclude="模式"
排除指定文件或目录
示例:tar -czvf backup.tar.gz --exclude="*.log" /path/to/dir # 排除 .log 文件
-r
向归档中追加文件(仅对未压缩的.tar
文件有效)
示例:tar -rvf archive.tar newfile.txt
-p
保留文件权限(常用于备份系统文件)
示例:tar -czvpf backup.tar.gz /etc
--wildcards
解压时使用通配符匹配文件
示例:tar -xzvf backup.tar.gz --wildcards "*.conf"
示例
$ ls -l
total 4
drwxrwxr-x 2 wyf wyf 4096 Apr 11 21:27 mydir
# 仅打包,不压缩
$ tar -cvf dir.tar mydir
mydir/
mydir/test.txt
mydir/log.txt
mydir/file.txt
# 打包后,以gzip压缩
$ tar -zcvf dir.tar.gz mydir/
mydir/
mydir/test.txt
mydir/log.txt
mydir/file.txt
# 打包后,以bzip2压缩
$ tar -jcvf dir.tar.bz2 mydir
mydir/
mydir/test.txt
mydir/log.txt
mydir/file.txt
$ ls -l
total 24
-rw-rw-r-- 1 wyf wyf 10240 Apr 11 21:29 dir.tar
-rw-rw-r-- 1 wyf wyf 585 Apr 11 21:31 dir.tar.bz2
-rw-rw-r-- 1 wyf wyf 714 Apr 11 21:30 dir.tar.gz
drwxrwxr-x 2 wyf wyf 4096 Apr 11 21:27 mydir
# 查看压缩文件中有哪些文件
$ tar -ztvf dir.tar.gz
drwxrwxr-x wyf/wyf 0 2025-04-11 21:27 mydir/
-rw-rw-r-- wyf/wyf 40 2025-04-11 20:51 mydir/test.txt
-rw-rw-r-- wyf/wyf 72 2025-04-11 20:26 mydir/log.txt
-rw-rw-r-- wyf/wyf 3709 2025-04-11 21:28 mydir/file.txt
$ mkdir tar
# 解压到指定目录
$ tar -zxvf dir.tar.gz -C tar
mydir/
mydir/test.txt
mydir/log.txt
mydir/file.txt
$ tree tar
tar
└── mydir├── file.txt├── log.txt└── test.txt1 directory, 3 files
$
5. 日期时间
5.1 date —— 显示时间
语法
date [选项]…… [格式]
功能 指定格式显示时间
- 显示时间的时候,可以设定显示的格式,格式设定为一个+后加数个标记,其中常用的标记如下:
%H
⼩时(00..23
)%M
分钟(00..59
)%S
秒(00..61
)%X
相当于%H:%M:%S
%d
⽇ (01..31
)%m
⽉份 (01..12
)%Y
完整年份 (0000..9999
)%F
相当于%Y-%m-%d
- 设定时间的时候
date -s
//设置当前时间,只有root权限才能设置,其他只能查看。date -s
20080523 //设置成20080523,这样会把具体时间设置成空00:00:00date -s 01:01:01
//设置具体时间,不会对日期做更改date -s
“01:01:01 2008-05-23″ //这样可以设置全部时间date -s
“01:01:01 20080523″ //这样可以设置全部时间date -s
“2008-05-23 01:01:01″ //这样可以设置全部时间date -s
“20080523 01:01:01″ //这样可以设置全部时间
- 时间戳
- 时间->时间戳:
date +%s
- 时间戳->时间:
date -d@1508749502
Unix
时间戳(英文为Unix epoch
,Unix time
,POSIX time
或Unix timestamp
)是从1970
年1
月1
日(UTC
/GMT
的午夜)开始所经过的秒数,不考虑闰秒
指定格式显示时间
示例
$ date
Fri Apr 11 21:44:04 CST 2025
$ date +%Y/%m/%d
2025/04/11
$ date +%Y/%m/%d-%H:%M:%S
2025/04/11-21:44:56
# 显示时间戳
$ date +%s
1744379107
# 时间戳转换为正常时间
$ date +%Y/%m/%d-%H:%M:%S -d @0
1970/01/01-08:00:00
$ date +%Y/%m/%d-%H:%M:%S -d @1744379190
2025/04/11-21:46:30
$
5.2 cal —— 查看日历
语法
cal [选项] [年份]
功能 查看日历等时间信息,如只有一个选项,则表示年份(1-9999
),如有两个参数,则表示月份和年份
常用选项
-3
显示系统前一个月,当前月,下一个月的月历-j
显示在当年中的第几天(一年日期按天算,从1
月1
号算起,默认显示当前月在⼀年中的天数)-y
显示当前年份的日历
示例
$ calApril 2025
Su Mo Tu We Th Fr Sa1 2 3 4 56 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30$ cal 19991999 January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa1 2 1 2 3 4 5 6 1 2 3 4 5 63 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa1 2 3 1 1 2 3 4 54 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 3030 31July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa1 2 3 1 2 3 4 5 6 7 1 2 3 44 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa1 2 1 2 3 4 5 6 1 2 3 43 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31$ cal -3March 2025 April 2025 May 2025
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa1 1 2 3 4 5 1 2 32 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 109 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17
16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24
23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31
30 31
$
6. 关机与重启
6.1 shutdown —— 关机命令
语法:
shutdown [选项] [时间]
功能: 关闭或重启系统。
常用选项:
-h now
立即关机-r now
立即重启
示例:
shutdown -h now
7. 其他命令
7.1 uname
语法
uname [选项]
功能 uname
用于获取电脑和操作系统的相关信息,可以显示 Linux
主机所用的操作系统版本、硬件名称等基本信息
常用选项
-a
详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理
器类型,硬件平台类型,操作系统名称-s
--kernel-name
显示内核名称(默认行为)-n
--nodename
显示网络节点主机名-r
--kernel-release
显示内核版本号-v
--kernel-version
显示内核构建版本和时间-m
--machine
显示硬件架构(CPU
类型)
示例
$ clear
$ uname -s
Linux
$ uname -n
hcss-ecs-0be3
$ uname -r
3.10.0-1160.119.1.el7.x86_64
$ uname -a
Linux hcss-ecs-0be3 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
$
7.2 alias
语法
alian 别名='原始命令'
功能 设置命令的别名,将长命令或复杂命令创建快捷别名
示例
$ alias ..='cd ..'
$ pwd
/home/wyf/test/mydir
$ ..
$ pwd
/home/wyf/test
$ ..
$ pwd
/home/wyf
$ una
unalias uname
# 查看所有别名
$ alias
alias ..='cd ..'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias updatetags='ctags -R -f ~/.vim/tags --languages=C,C++ --exclude=.git --exclude=node_modules --exclude=build --exclude=.config --exclude=.VimForCpp ~/code'
alias vi='vim'
alias vim='/home/wyf/.VimForCpp/nvim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
# 删除别名
$ unalias ..
$
7.3 clear —— 清屏
功能 当屏幕敲满命令时,使用clear
可以清除屏幕上的命令
clear
7.4 man
功能 查看手册页(manual pages
)的核心工具,提供了系统命令、函数、配置文件等的详细文档
手册页的章节
手册页按内容分为多个章节(默认按顺序查找):
- 用户命令(如
ls
,cp
) - 系统调用(如
open
,read
) - 库函数(如
printf
,malloc
) - 设备文件(如
/dev/tty
) - 文件格式(如
/etc/passwd
) - 游戏和屏保
- 杂项(如
man
,groff
) - 系统管理命令(如
ifconfig
,mount
) - 内核例程(非标准)
常用选项
f
显示命令的简短描述(等价于whatis
)k
按关键字搜索手册页(等价于apropos
)a
显示所有匹配的手册页(按章节顺序)w
显示手册页的物理路径(如man -w ls
)K
全局搜索手册页内容(全文检索,较慢)
手册页结构
一个典型的手册页包含以下部分:
NAME
:名称及简要功能SYNOPSIS
:命令语法或函数原型DESCRIPTION
:详细描述OPTIONS
:命令行选项解释EXAMPLES
(可选):使用示例SEE ALSO
:相关参考内容BUGS
(可选):已知问题
示例
man 2 open # 查看系统调用 open 的文档
man 3 printf # 查看 C 库函数 printf 的文档
man ls
man -f printf # 显示所有章节的 "printf"(如 printf(1), printf(3))
7.5 uname —— 显示系统信息
1. uname
命令
功能:显示系统信息(内核版本、操作系统名称、硬件架构等)
常用选项
选项 | 作用 |
---|---|
-a | 显示所有信息(等价于 -snrvm ) |
-s | 显示内核名称(如 Linux ) |
-n | 显示网络节点主机名(等同于 hostname ) |
-r | 显示内核版本(如 5.15.0-86-generic ) |
-v | 显示内核编译时间/版本详细信息 |
-m | 显示硬件架构(如 x86_64 ) |
-o | 显示操作系统名称(如 GNU/Linux ) |
示例
- 显示所有系统信息:
uname -a
# Linux mypc 5.15.0-86-generic #96-Ubuntu SMP Wed Oct 11 08:15:58 UTC 2023 x86_64 GNU/Linux
- 仅查看内核版本:
uname -r
# 5.15.0-86-generic
- 查看硬件架构:
uname -m
# x86_64
7.6 bc —— 计算器
功能:高精度数学计算器工具,支持交互式或脚本中的数学运算(包括进制转换、函数计算等)
常用选项
选项 | 作用 |
---|---|
-l | 加载数学库(支持 sin , cos , log 等函数) |
-i | 强制进入交互模式 |
-q | 静默模式(不显示欢迎信息) |
基本用法
直接计算表达式
$ echo "5 + 3 * 2" | bc
11
设置小数精度
通过 scale
变量控制小数位数:
echo "scale=3; 10/3" | bc
3.333
进制转换
十进制转二进制:
# outbase 设置输出结果的进制
$ echo "obase=2; 42" | bc
101010
二进制转十进制:
# input base 设置输入数值的进制
echo "ibase=2; 101010" | bc
42
高级功能
使用数学库(-l 选项)
echo "s(3.14159/2)" | bc -l # 计算 sin(π/2)
.99999999999911980765
定义自定义函数
在交互模式中定义函数:
bc -l
define add(a, b) { return a + b }
add(5, 7)
12
8. 重要快捷键
Ctrl + C
终止当前进程Ctrl + Z
挂起当前进程Ctrl + D
退出终端Ctrl + R
搜索命令历史Tab
具有命令补全的功能