Linux命令基础(下)
文章目录
- 一、目录操作相关命令
- 1. 查看当前目录 `pwd`
- 2. 切换目录 `cd`
- 3. 创建目录 `mkdir`
- 4. 删除空目录 `rmdir`
- 二、文件相关命令
- `ls`(list)
- `touch`
- `cp`(copy)
- `rm`(remove)
- `mv`(move)
- 三、查看文件内容命令
- `cat`
- `more`
- `less`
- `head`
- `tail`
- 五、`du` 和 `df` 命令
- `du`(disk usage)
- `df`(disk free)
- 六、查找命令
- `find`—— 查找文件
- `grep`—— 文本内容搜索
- 七、管道 `|`
- 八、压缩包管理
- `gzip` / `bzip2`
- 压缩
- 解压缩
- `zip` / `unzip`
- 九、文件权限管理
- 9.1 文件权限结构
- 9.2 用户分类
- 9.3 权限说明示例
- 9.4 `chmod`
- 9.5 `chown`
- 9.6 `chgrp`
- 十、 进程管理
- `ps`
- `top`
- `kill`
- `killall`
- `reboot`
- 十一、重定向
- 11.1 标准输出(stdout)重定向
- 11.2 错误输出(stderr)重定向
- 11.3 标准输出 + 错误输出重定向
- 11.4 **标准输入(stdin)重定向**
- 十二、 其它命令
- `tree`
- `ln`
一、目录操作相关命令
1. 查看当前目录 pwd
pwd
输出当前所在的完整路径。
2. 切换目录 cd
cd /path/to/dir # 进入指定绝对路径
cd .. # 返回上一级目录
cd # 返回主目录
cd - # 返回上一次所在的目录
3. 创建目录 mkdir
mkdir test # 创建test目录
mkdir -p a/b/c # 递归创建多层目录
mkdir "a b" 或 mkdir a\ b # 创建带空格的目录
mkdir file{1..3} # 批量创建file1 file2 file3
4. 删除空目录 rmdir
rmdir test # 删除空目录test
rmdir file{1..3} # 批量删除空目录
rmdir "a b" 或 rmdir a\ b # 删除带空格目录
注意:rmdir 只能删除空目录,不为空时用
rm -r
。
二、文件相关命令
ls
(list)
-
作用:列出目录内容。
-
常用参数:
-l
:详细列表-a
:显示隐藏文件-h
:人类可读大小(配合-l
)
-
示例:
ls -alh
touch
-
作用:创建空文件,或更新文件时间戳。
touch test.txt
cp
(copy)
-
作用:复制文件或目录。
-
常用参数:
-r
:递归复制目录-i
:覆盖前确认
-
语法:cp 参数A 参数B
- 参数A文件
- 参数B是目录,且目录存在:将A文件拷贝放到B目录中
- 参数B不存在,且不是目录:将A文件拷贝生成B
- 参数B不存在,是目录:报错
- 参数B是已存在文件:A覆盖B
- 参数A目录
- 必须添加参数:-r 或 -a
- -r :递归。相当于新建文件
- -a :all。拷贝时带有文件默认属性
- 参数A文件
-
示例:
# 复制文件到另一个文件名 cp a.txt b.txt# 复制文件到目录中 cp a.txt /tmp/# 复制整个目录(递归) cp -r /etc/nginx/ ./backup/# 保留文件属性复制(推荐方式) cp -a ./src ./dest# 覆盖前提示 cp -i config.conf /etc/# 丢弃提示直接覆盖 cp -f config.conf /etc/
rm
(remove)
-
作用:删除文件或目录。删除的文件不能恢复。
-
常用参数:
-r
:递归删除-f
:强制删除
-
示例:
rm file.txt rm -rf dir/
mv
(move)
-
作用:移动或重命名文件。
- 操作时不需要额外参数。
- mv 源文件 目标文件。
- 目标文件不存在,直接改名。
- 目标目录存在,移动。
-
示例:
mv oldname.txt newname.txt mv file.txt /tmp/
三、查看文件内容命令
cat
- 显示整个文件内容。
cat file.txt cat file1 > file2 # file2不存在则创建,存在则覆盖 cat file1 >> file2 # 将file1的内容追加到file1中 tac file.txt # 倒序显示
more
- 分页显示,按空格翻页。
more file.txt
- q 退出
- Enter 多显示一行
- Space 多显示一屏
less
- 分页显示,支持上下滚动。
less file.txt
head
- 显示文件开头内容,默认 10 行。
head -n 5 file.txt
- 查看前 5 行
tail
-
显示文件末尾内容,支持实时查看。
tail -n 5 file.txt # 查看后5行 tail -f /var/log/syslog
五、du
和 df
命令
du
(disk usage)
- 查看文件或目录大小。
- 常用:
du -sh *
df
(disk free)
- 查看磁盘剩余空间。
- 常用:
df -h
六、查找命令
find
—— 查找文件
基本语法:
find [搜索路径] [搜索条件] [执行操作]
- 按文件名查找
find /path -name "filename"
- 模糊查找(通配符)如:
"*.conf"
- 忽略大小写:
-iname
- “ * ” 匹配 0~N 个字符,“?”匹配 1 个任意字符
- 按大小查找
find /path -size +100k # 大于100k
find /path -size -50M # 小于50M
find /path -size +50k -size -100k # 范围查询
- 单位大小:
k
(小写)、M
(大写)、G
- 按类型查找(-type)
f # 普通文件
d # 目录
l # 符号链接
c # 字符设备
b # 块设备
s # 套接字
p # 管道
- 按时间查找
find / -mtime +2 # 修改时间超过2天前
find / -atime -1 # 最近1天访问过的文件
find / -ctime -3 # 最近3天内状态变化
-mtime
:内容修改时间-atime
:访问时间-ctime
:权限/属主/链接数变化时间
- 按权限与属主查找
find / -user root # 属主为root
find / -group root # 属组为root
find / -perm 777 # 权限为777
find / -nouser # 没有属主
find / -nogroup # 没有属组
- 高级查找
-maxdepth -n
指定搜寻的层级,放在其他参数前-exec
:将 find 搜索的结果,指定给某一个其他命令执行find命令 -exec shell命令 {} \;
# 示例 1:查找当前目录下的所有 .txt 文件(不递归子目录)
find . -maxdepth 1 -name "*.txt"
# 说明:
# . :当前目录
# -maxdepth 1 :最多查找 1 层(即不进入子目录)
# -name :按照文件名匹配# 示例 2:查找并删除所有 .log 文件(危险操作!)
find . -name "*.log" -exec rm {} \;
# 说明:
# -exec :对查找到的每一个文件执行后面的命令
# rm {} :删除文件,{} 是 find 查找到的文件名
# \; :以分号结尾,必须加反斜杠# 示例 3:查找所有 .c 文件并显示详细信息(ls -l)
find ~/Documents -name "*.c" -exec ls -l {} \;
# 说明:
# 对每一个查找到的 .c 文件,执行 ls -l 查看详细信息# 示例 4:查找 /etc 目录下(最多 2 层)的所有 .conf 文件
find /etc -maxdepth 2 -name "*.conf"
# 说明:
# 限制查找深度为2层,更高效且避免进入过深目录# 示例 5:查找并删除所有 .log 文件(推荐更高效写法)
find . -name "*.log" -exec rm {} +
# 说明:
# 与 \; 相比,+ 会把多个文件名一起传给 rm,提高效率# 示例 6:查找并交互式删除所有 .log 文件(每次询问确认)
find . -name "*.log" -ok rm {} \;
# 说明:
# -ok 和 -exec 类似,但执行命令前会提示用户确认(更安全)
grep
—— 文本内容搜索
基本语法:
grep [选项] "关键词" 文件/路径
常用参数与用法:
选项 | 含义 |
---|---|
-r | 递归查找目录下所有文件(搜索目录) |
-i | 忽略大小写 |
-n | 显示匹配行号 |
-v | 显示不匹配的行 |
--color | 高亮显示匹配关键词(推荐) |
-w | 匹配完整单词 |
示例
grep "hello" file.txt # 搜索hello
grep -i "hello" file.txt # 忽略大小写
grep -n "hello" file.txt # 显示行号
grep -v "hello" file.txt # 显示未包含hello的行
grep -r "hello" /etc/ # 在目录递归搜索
grep -w "hello" file.txt # 完整单词匹配
grep --color=auto "hello" file.txt # 高亮匹配
特殊情况处理
grep -a "text" binaryfile # 在二进制文件中查找文本
七、管道 |
-
作用:连接多个命令,将前一个输出作为后一个输入。
ls -l | grep ".txt"
八、压缩包管理
Linux 操作系统默认支持的压缩格式:gzip、bzip2,默认这两种压缩模式只能压缩单个文件,不支持打包;压缩后,源文件消失。
在 Linux / Unix 中压缩、解压缩,借助 tar 命令来完成。tar 的作用是“打包”
gzip
/ bzip2
- 不能压缩目录,只能一个一个文件进行压缩,压缩之后会使源文件消失
gzip*
压缩当前目录下的所有文件,但是目录不能压缩gunzip*
解压当前目录下所有的.gz
文件bzip2*
压缩当前目录下的所有文件,但是目录不能压缩bunzip2
解压当前目录下所有的.bz2
文件
压缩
- 格式:
tar zcvf 压缩包名.tar.gz 压缩原材料
- z:使用 gzip 压缩格式。如果选用 bzip2,将 z 替换成 j
- c:创建压缩包
- v:显示压缩过程
- f:用来指定压缩包包名。f 必须是最后一个参数,后面紧跟压缩包名称
- 示例
# 压缩多个文件为一个压缩包
tar zcvf myfiles.tar.gz file1 file2 file3# 使用 bzip2 格式压缩
tar jcvf mydir.tar.bz2 mydir/
解压缩
- 格式:
tar zxvf 压缩包名.tar.gz
- z:使用 gzip 压缩格式。如果选用 bzip2,将 z 替换成 j
- x:解包(extract)
- v:显示压缩过程
- f:用来指定压缩包包名。f 必须是最后一个参数,后面紧跟压缩包名称
- 直接解压缩到当前目录,将解压缩的文件存储到指定目录,使用参数 -C
- 示例
# 解压 mydir.tar.gz 到当前目录
tar zxvf mydir.tar.gz# 解压 bzip2 格式的包
tar jxvf mydir.tar.bz2tar zxvf mydir.tar.gz -C /path/to/destination
zip
/ unzip
-
zip 格式压缩解压
zip a.zip file1 file2 unzip a.zip
九、文件权限管理
9.1 文件权限结构
rwx
,分别代表读/写/执行
9.2 用户分类
-
所有者(user)
-
所属组(group)
-
其他人(other)
-
添加新用户:
sudo adduser 新用户名
- 删除用户
sudo deluser 用户名
- 切换用户
sudo [用户名]
9.3 权限说明示例
Linux 下使用 ls -l
查看文件权限时,会看到类似这样的输出:
-rwxr-xr--
这个 10 个字符 的字符串,可以分为以下部分:
位置 | 含义 | 示例 |
---|---|---|
第 1 位 | 文件类型 | - 表示普通文件,d 表示目录 |
第 2-4 位 | 所有者权限 | rwx 表示读、写、执行权限 |
第 5-7 位 | 所属组权限 | r-x 表示读和执行 |
第 8-10 位 | 其他用户权限 | r-- 表示只读 |
-
:普通文件rwx
:所有者有读、写、执行权限r-x
:同组用户有读和执行权限(不能写)r--
:其他用户只能读
9.4 chmod
一、字母法
格式:
chmod [u/g/o/a] [+/-/=] [r/w/x] 文件名
符号 | 含义 |
---|---|
u | 所有者(user) |
g | 同组用户(group) |
o | 其他用户(other) |
a | 所有人(all) |
+ | 添加权限 |
- | 删除权限 |
= | 直接设置权限(替换原权限) |
示例:
- 允许其他用户写文件:
chmod o+w notes.txt
- 移除所有者的读权限:
chmod u-r secret.txt
- 将组用户权限设为“仅执行”:
chmod g=x run.sh
二、数字法
格式:
chmod XYZ 文件名
每一位分别代表:u(所有者)
、g(同组用户)
、o(其他用户)
权限,总和如下:
权限 | 数字 | 说明 |
---|---|---|
r | 4 | 可读 |
w | 2 | 可写 |
x | 1 | 可执行 |
- | 0 | 无权限 |
示例:
- 设置权限为 751:
chmod 751 myscript.sh
权限表示:
- 所有者:7 →
rwx
- 同组用户:5 →
r-x
- 其他用户:1 →
--x
- 设置为所有用户都有全部权限:
chmod 777 data.log
- 所有人均为
rwx
权限,常见于共享目录或测试场景,但不推荐用于生产环境。
三、递归设置子目录权限
加上 -R
选项可递归设置目录及其内容:
chmod -R 755 /home/user/project
- 将
project
及其子目录和文件全部设置为755
权限。
9.5 chown
-
更改文件所有者
-
chown 用户名 文件或目录名
chown user:group file.txt
9.6 chgrp
-
更改所属组
-
chgrp 用户组名 文件或目录名
chgrp developers file.txt
十、 进程管理
ps
ps命令可以查看进程的详细状况,常用选项(选项可以不加“-”)如下:
选项 | 含义 |
---|---|
-a | 显示终端上的所有进程,包括其他用户的进程 |
-u | 显示进程的详细状态 |
-x | 显示没有控制终端的进程 |
-w | 显示加宽,以便显示更多的信息 |
-r | 只显示正在运行的进程 |
- 查看进程信息
ps aux | grep firefox
top
top命令用来动态显示运行中的进程。top命令能够在运行后,在指定的时间间隔更新显示信息。可以在使用top命令时加上-d 来指定显示信息更新的时间间隔。
- 实时查看进程状态、资源占用
top
在top命令执行后,可以按下按键得到对显示的结果进行排序:
按键 | 含义 |
---|---|
M | 根据内存使用量来排序 |
P | 根据CPU占有率来排序 |
T | 根据进程运行时间的长短来排序 |
U | 可以根据后面输入的用户名来筛选进程 |
K | 可以根据后面输入的PID来杀死进程。 |
q | 退出 |
h | 获得帮助 |
kill
-
杀死进程(通过 PID)
kill 1234 kill -9 1234
-
有些进程不能直接杀死,这时候我们需要加一个参数“ -9 ”,“ -9 ” 代表强制结束
killall
- 通过进程名杀死进程
killall firefox
reboot
- 重启命令
sudo reboot
十一、重定向
Linux 中的输入/输出流默认有三种类型:
类型 | 编号 | 默认设备 |
---|---|---|
标准输入 stdin | 0 | 键盘 |
标准输出 stdout | 1 | 屏幕 |
错误输出 stderr | 2 | 屏幕 |
11.1 标准输出(stdout)重定向
操作 | 命令 | 说明 |
---|---|---|
覆盖写入 | > | 将正确输出写入文件,覆盖原内容 |
追加写入 | >> | 将正确输出追加到文件末尾 |
示例:
ls /etc/passwd > output.txt # 输出写入 output.txt(覆盖)
ls /etc/shadow >> output.txt # 输出追加到 output.txt
11.2 错误输出(stderr)重定向
操作 | 命令 | 说明 |
---|---|---|
覆盖写入 | 2> | 将错误信息写入文件,覆盖原内容 |
追加写入 | 2>> | 将错误信息追加到文件末尾 |
丢弃错误输出 | 2> /dev/null | 将错误输出丢弃(黑洞) |
示例:
ls invalid_dir 2> error.txt # 错误信息写入 error.txt
ls invalid_dir 2>> error.txt # 错误信息追加写入
ls invalid_dir 2> /dev/null # 丢弃错误输出
11.3 标准输出 + 错误输出重定向
操作 | 命令 | 说明 |
---|---|---|
全部重定向(覆盖) | &> | 正确+错误输出都写入文件,覆盖 |
全部重定向(追加) | &>> | 正确+错误输出都追加到文件 |
全部重定向到黑洞 | &> /dev/null | 屏蔽所有输出 |
示例:
ls good_dir bad_dir &> all.txt # 正确+错误都写入 all.txt
ls good_dir bad_dir &>> all.txt # 正确+错误都追加写入
ls good_dir bad_dir &> /dev/null # 所有输出丢弃
11.4 标准输入(stdin)重定向
操作 | 命令 | 说明 |
---|---|---|
使用文件作为输入 | < | 从文件中读取数据作为输入 |
示例:
cat < input.txt # 从 input.txt 读取内容显示
十二、 其它命令
tree
- 树状结构展示目录,使用该命令需要安装软件 tree
ln
Linux 使用 ln
命令创建链接文件,分为两种类型:
类型 | 符号链接(软链接) | 硬链接 |
---|---|---|
命令格式 | ln -s 源文件 链接文件 | ln 源文件 链接文件 |
是否跨目录 | 可以跨目录 | 不能跨目录 |
是否链接目录 | 可以链接目录 | 只能链接普通文件 |
是否依赖源文件 | 源文件删了,链接就失效 | 源文件删了,链接仍可用 |
占用空间 | 不额外占用空间(只存路径) | 占用空间(和原文件共享 inode) |
是否常用 | 常用 | 使用较少,限制多 |
- 硬链接源文件和链接文件之间,有“同步更新”的特性
创建软链接:
ln -s /home/user/original.txt shortcut.txt
- 创建一个名为
shortcut.txt
的软链接,指向/home/user/original.txt
- 如果源文件在不同目录,建议使用绝对路径以防链接失效
示例:
ln -s /etc/passwd passwd_link
- 创建指向系统用户文件
/etc/passwd
的链接文件passwd_link
创建硬链接:
ln original.txt hardcopy.txt
- 创建一个与
original.txt
共享 inode 的硬链接 - 删除
original.txt
后,hardcopy.txt
仍然有效,内容不会丢失 - 限制:不能链接目录,不能跨分区
使用 readlink
查看软链接的真实目标
readlink 链接文件
示例:
readlink passwd_link
- 输出:
/etc/passwd
- 说明该链接指向
/etc/passwd