Linux的目录结构
Linux的目录结构是一个层次化的文件系统结构,它提供了组织和访问文件和目录的方式。以下是Linux目录结构的主要部分及其简要描述:
- /(根目录)
- 这是整个文件系统的起点。所有的文件和目录都位于根目录下或其子目录中。
- /bin
- 包含基本的、用户可执行的命令(binary)。这些命令在单用户模式下也可以运行。
- /boot
- 包含Linux内核和引导加载程序(如GRUB)的配置文件。这是系统启动时首先读取的目录。
- /dev
- 包含设备文件,这些文件代表连接到系统的物理设备或逻辑设备。例如,
/dev/sda
可能代表第一个SATA硬盘。
- 包含设备文件,这些文件代表连接到系统的物理设备或逻辑设备。例如,
- /etc
- 包含系统配置文件。大多数配置文件都以
.conf
结尾。例如,/etc/fstab
包含了文件系统挂载表,/etc/passwd
包含了用户账户信息。
- 包含系统配置文件。大多数配置文件都以
- /home
- 包含用户的主目录。每个用户都有一个以其用户名命名的目录,如
/home/username
。
- 包含用户的主目录。每个用户都有一个以其用户名命名的目录,如
- /lib和/usr/lib
- 包含系统库文件,这些文件是运行程序所必需的。
/lib
通常包含系统启动时需要的库,而/usr/lib
包含其他库。
- 包含系统库文件,这些文件是运行程序所必需的。
- /lost+found
- 在某些文件系统(如ext2, ext3, ext4)中,当文件系统检查(fsck)工具修复文件系统时,它会把找不到链接的文件放到这个目录下。
- /media和/mnt
- 通常用于临时挂载可移动设备或外部文件系统。
/mnt
是传统的挂载点,而/media
是现代Linux发行版中更常用的,它会自动为每个挂载的设备创建一个子目录。
- 通常用于临时挂载可移动设备或外部文件系统。
- /opt
- 用于安装第三方软件。这个目录通常用于存储不包含在标准Linux发行版中的软件包。
- /proc
- 一个虚拟文件系统,包含了内核和进程的信息。它不是存储在磁盘上的,而是由内核在内存中创建的。
- /root
- root用户(超级用户)的主目录。通常与
/home/root
相同,但出于安全考虑,许多系统现在将root用户的主目录放在/root
。
- root用户(超级用户)的主目录。通常与
- /sbin
- 包含基本的、系统管理员可执行的命令(binary)。这些命令通常用于系统维护和管理。
- /srv
- 包含服务器特定的数据。例如,Web服务器可能会把网页文件放在
/srv/www
。
- 包含服务器特定的数据。例如,Web服务器可能会把网页文件放在
- /sys
- 一个虚拟文件系统,提供了访问内核对象(如设备驱动程序和模块)的接口。与
/proc
类似,/sys
也不是存储在磁盘上的。
- 一个虚拟文件系统,提供了访问内核对象(如设备驱动程序和模块)的接口。与
- /tmp
- 用于存储临时文件。这些文件在系统重启时通常会被删除。
- /usr
- 包含用户可读的程序和数据。
/usr/bin
包含用户可执行的命令,/usr/lib
包含库文件,/usr/share
包含共享数据(如文档和图标)。
- 包含用户可读的程序和数据。
- /var
- 包含经常变化的数据,如日志文件、邮件队列和数据库。例如,
/var/log
包含系统日志文件,/var/spool/mail
包含用户邮件。
- 包含经常变化的数据,如日志文件、邮件队列和数据库。例如,
终端命令格式
命令基本格式
command [选项] [参数]
组成部分
- command:命令本身,是你希望执行的操作。例如,
ls
、cd
、mkdir
等。 - 选项(options):修改命令行为的标志,通常以
-
或--
开头。例如,-l
、-a
、--help
等。选项可以单独使用,也可以组合使用。 - 参数(arguments):命令操作的对象,例如文件名、目录名或其他值。
选项的使用
- 短选项:通常以单个
-
开头,后跟一个字符。例如,-l
。 - 长选项:通常以两个
--
开头,后跟完整的单词或短语。例如,--help
。
选项可以组合使用。例如,ls -la
等价于ls -l -a
。
pwg命令:查看当前目录
pwd
直接输入pwd
并回车,会显示当前工作目录的绝对路径。例如:
$ pwd
/home/user
cd命令:切换文件夹
基本用法
-
切换到指定目录
cd [目录路径]
例如,切换到
/home/user
目录:cd /home/user
-
返回主目录
cd ~
或者仅使用
cd
命令:cd
-
返回上一级目录
cd ..
-
返回到上一次所在的目录
cd -
目录路径
-
绝对路径:从根目录(
/
)开始的完整路径。cd /home/user/documents
-
相对路径:相对于当前目录的路径。
cd documents/reports
特殊符号
-
~
:代表当前用户的主目录。cd ~ cd ~/documents
-
.
:代表当前目录。cd .
-
..
:代表上一级目录。cd .. cd ../projects
-
-
:返回上一次所在的目录。cd /home/user/documents cd /etc cd - # 返回 /home/user/documents
ls命令:查看目录内容
基本用法
-
列出当前目录内容
ls
-
列出指定目录内容
ls [目录路径]
例如,列出
/home/user/documents
目录内容:ls /home/user/documents
常用选项
-
-l
:使用长格式显示,提供详细信息,如权限、所有者、文件大小和修改日期。ls -l
-
-a
:显示所有文件,包括隐藏文件(以.
开头的文件)。ls -a
-
-h
:与-l
选项一起使用,以人类可读的格式显示文件大小(如K、M、G)。ls -lh
-
-R
:递归列出目录内容,包括所有子目录。ls -R
-
-t
:按修改时间排序,最近修改的文件排在前面。ls -lt
-
-r
:反向排序,与其他排序选项(如-t
)结合使用。ls -ltr
-
-S
:按文件大小排序,最大的文件排在前面。ls -lS
显示特定类型的文件
-
列出特定扩展名的文件
ls *.txt
-
列出目录中的所有文件和目录
ls -l /path/to/directory
-
列出当前目录中所有目录
ls -d */
使用通配符
文件和目录操作时非常有用。以下是对常见通配符的详细解释及其用法的表格:
通配符 | 描述 | 示例 | 匹配 | 不匹配 |
---|---|---|---|---|
* | 匹配零个或多个任意字符 | *.txt | file.txt , notes.txt , a.txt | file.doc , filetxt |
? | 匹配单个任意字符 | file?.txt | file1.txt , fileA.txt | file.txt , file12.txt |
[abc] | 匹配方括号内的任意一个字符 | file[1-3].txt | file1.txt , file2.txt , file3.txt | file4.txt , file.txt |
[!abc] | 匹配方括号内的任意一个字符以外的字符 | file[!1-3].txt | file4.txt , fileA.txt | file1.txt , file2.txt , file3.txt |
[a-z] | 匹配指定范围内的任意一个字符 | file[a-z].txt | filea.txt , filem.txt , filez.txt | fileA.txt , file1.txt |
[!a-z] | 匹配指定范围以外的任意一个字符 | file[!a-z].txt | file1.txt , fileA.txt | filea.txt , filem.txt |
注意事项
-
颜色编码:
ls
命令通常会对不同类型的文件使用不同的颜色编码,以便快速区分目录、文件、链接等。这是由--color
选项启用的,通常默认启用。ls --color
-
权限和所有权:使用
-l
选项时,会显示文件的权限和所有权信息,格式如下:drwxr-xr-x 2 user group 4096 Jan 01 12:00 directory_name
d
表示目录,-
表示文件,l
表示符号链接。rwxr-xr-x
表示权限(读、写、执行)。2
表示链接数。user
表示文件所有者。group
表示所有者的组。4096
表示文件大小(字节)。Jan 01 12:00
表示最后修改时间。directory_name
表示文件或目录名称。
mkdir命令:创建文件夹
基本用法
mkdir [选项] 目录名
常见选项
-
-p:创建父目录。如果指定的路径中包含不存在的父目录,
-p
选项会一并创建这些父目录。mkdir -p /path/to/new/directory
如果
/path/to/new
不存在,此命令会创建/path/to/new
和/path/to/new/directory
。 -
-v:显示详细信息。创建目录时,显示每个创建的目录的名称。
mkdir -v new_directory
-
-m:设置目录的权限。使用指定的权限创建目录。
mkdir -m 755 new_directory
755
是一个权限掩码,表示所有者有读、写、执行权限,组和其他用户有读、执行权限。
权限说明
权限掩码由三部分组成,每部分各占三位:
- 第一部分:所有者权限
- 第二部分:组权限
- 第三部分:其他用户权限
每部分权限值:
- 4:读权限(r)
- 2:写权限(w)
- 1:执行权限(x)
例如,755
表示:
- 所有者:读、写、执行(4+2+1=7)
- 组:读、执行(4+1=5)
- 其他用户:读、执行(4+1=5)
注意事项
- 如果尝试创建一个已存在的目录,
mkdir
会返回一个错误。使用-p
选项可以避免此问题。 - 权限设置取决于系统的
umask
值,它会影响新创建目录的默认权限。可以使用umask
命令查看或设置。
touch命令:创建文件
基本用法
touch [选项] 文件名
常见选项
-
创建新文件
如果文件不存在,
touch
会创建一个新的空文件:touch filename
如果文件已存在,
touch
不会改变文件内容,只会更新文件的访问和修改时间。 -
-a:只更新访问时间(access time)。
touch -a filename
-
-m:只更新修改时间(modification time)。
touch -m filename
-
-c或**–no-create**:如果文件不存在,不创建新文件,只更新已有文件的时间戳。
touch -c filename
-
-t:使用指定的时间戳,格式为
[[CC]YY]MMDDhhmm[.ss]
。touch -t 202306281230.45 filename
这会将文件的时间戳设置为2023年6月28日12:30:45。
-
-d:使用指定的日期和时间,格式可以是多种形式。
touch -d "2023-06-28 12:30:45" filename
-
-r:使用参考文件的时间戳。
touch -r reference_file filename
这会将
filename
的时间戳设置为与reference_file
相同。
时间戳解释
- 访问时间(atime):文件最后一次被读取的时间。
- 修改时间(mtime):文件内容最后一次被修改的时间。
- 状态改变时间(ctime):文件元数据(如权限、所有者)最后一次被改变的时间。
rm命令:删除
基本用法
rm [选项] 文件或目录
常见选项
-
删除单个文件
rm filename
-
-i:交互模式,在删除每个文件之前提示确认。
rm -i filename
-
-f:强制删除文件或目录,忽略不存在的文件,不提示确认。
rm -f filename
-
-r 或 -R:递归删除目录及其内容。
rm -r directory rm -R directory
-
-d:删除空目录。
rm -d empty_directory
-
-v:详细模式,显示删除的每个文件或目录。
rm -v filename
注意事项
- 危险性:
rm
命令非常强大且危险,特别是使用-r
和-f
选项时,可能会永久删除重要文件和目录。请务必小心使用,确保删除的是正确的文件或目录。 - 不可恢复性:删除的文件通常无法恢复,除非使用专门的文件恢复工具。因此,使用
rm
命令前请确认备份重要数据。 - 权限:删除文件或目录时需要有相应的权限,否则会提示权限错误。
- 交互模式:对于批量删除操作,建议使用
-i
选项,防止误删。
cp命令:拷贝
基本用法
cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录
常见选项
-
-a:归档模式,递归复制,并保留所有文件属性,等同于
-dR --preserve=all
。cp -a source_directory destination_directory
-
-i:交互模式,如果目标文件存在,提示确认后再覆盖。
cp -i source_file destination_file
-
-r或**-R**:递归复制目录及其内容。
cp -r source_directory destination_directory
-
-f:强制复制,删除无法打开的目标文件。
cp -f source_file destination_file
-
-u:仅在源文件较新或目标文件不存在的情况下进行复制。
cp -u source_file destination_file
-
-v:详细模式,显示复制过程中的文件名。
cp -v source_file destination_file
-
-p:保留文件属性(如修改时间、所有者、权限)。
cp -p source_file destination_file
-
–preserve:保留指定的属性,可以是
mode
、ownership
、timestamps
、links
、xattr
、all
。cp --preserve=mode,ownership source_file destination_file
注意事项
- 覆盖警告:
cp
命令默认会覆盖目标文件而不提示。因此,使用-i
选项可以避免意外覆盖重要文件。 - 权限:复制操作需要相应的读写权限,特别是在涉及系统文件或其他用户文件时。
- 符号链接:如果需要复制符号链接本身而不是其指向的文件,可以使用
-d
选项(在某些系统上需要使用--preserve=links
)。
mv命令:移动、重命名
基本用法
mv [选项] 源文件或目录 目标文件或目录
常见选项
-
-i:交互模式,如果目标文件已存在,则在移动前提示确认。
sh 复制代码 mv -i source_file.txt destination_file.txt
-
-f:强制移动,覆盖目标文件而不提示确认。
mv -f source_file.txt destination_file.txt
-
-v:详细模式,显示移动的每个文件名。
mv -v source_file.txt destination_file.txt
注意事项
- 权限:移动操作需要适当的读写权限,特别是在移动系统文件或其他用户文件时。
- 覆盖警告:默认情况下,
mv
命令会直接覆盖目标文件。使用-i
选项可以避免意外覆盖重要文件。 - 原子性:
mv
命令是原子操作,即文件在移动过程中不会在源路径和目标路径之间存在副本。
cat命令:查看文件内容
基本用法
cat [选项] 文件
常见选项
-
-n:显示行号,将文件内容与行号一起输出。
cat -n filename
-
-b:显示行号,仅对非空行进行编号。
cat -b filename
-
-E:在每行末尾显示行尾符号
$
。cat -E filename
-
-T:显示制表符为
^I
。cat -T filename
-
-A:等同于
-vET
,显示所有控制字符。cat -A filename
使用管道和重定向
将cat与管道结合使用
-
显示文件内容并通过管道传递给其他命令
cat filename | grep "pattern"
将
filename
文件的内容传递给grep
命令进行模式匹配。
将cat的输出重定向到文件
-
将cat的输出写入新文件
cat filename > newfile
将
filename
文件的内容输出到newfile
文件中。 -
追加cat的输出到现有文件
cat filename >> existingfile
将
filename
文件的内容追加到existingfile
文件的末尾。
注意事项
- 大文件处理:对于大文件,
cat
命令可能会将整个文件内容一次性读取到内存中,因此在处理大文件时需要注意内存消耗。 - 文件格式:
cat
命令默认将文件内容直接输出,不会解析或格式化文本内容。 - 权限:执行
cat
命令需要有相应的文件读取权限。
more命令:查看文件内容
more 文件名
功能和特点
- 逐页显示:
more
命令将文本文件的内容分页显示在终端上,每次显示一屏的内容。 - 交互控制:可以使用键盘控制来浏览文件,如向下翻页、向上翻页、跳至文件开头或结尾等。
- 显示文件位置:在文件的末尾显示提示,指示当前文件的页数和剩余未显示的行数。
使用示例
-
查看文件内容
more filename.txt
这将以一页一页的方式显示
filename.txt
文件的内容。可以使用空格键来向下翻页,使用b
键来向上翻页。 -
常用键盘命令
- 空格键:向下滚动一页。
- Enter 键:向下滚动一行。
- b 键:向上滚动一页。
- q 键:退出
more
命令,返回到命令行提示符。
-
显示当前位置
在文件内容的底部显示当前页数和剩余行数,如:
(END) -- 列出更多 --
高级选项
more
命令的行为可以通过一些选项进行定制:
-
-d
选项:显示指导信息,提示如何使用more
命令的交互控制键。more -d filename.txt
-
-num
选项:指定每页显示的行数。more -10 filename.txt # 每页显示10行
-
+num
选项:从文件的第num
行开始显示。more +50 filename.txt # 从第50行开始显示
注意事项
- 不支持编辑:
more
命令只能用于查看文件内容,不能用来编辑或保存文件。 - 适用范围:适合查看较大的文本文件,避免一次性在屏幕上显示过多内容。
- 与其他命令结合使用:可以将
more
命令与管道|
结合,将其他命令的输出逐页查看。
重定向
基本重定向符号
-
>
:输出重定向,将命令的标准输出发送到文件,会覆盖文件原有内容。command > file.txt
- 将命令
command
的输出写入file.txt
文件中,如果文件已存在,则覆盖原有内容。
- 将命令
-
>>
:追加重定向,将命令的标准输出追加到文件末尾。command >> file.txt
- 将命令
command
的输出追加到file.txt
文件末尾,保留原有内容并在其后添加新内容。
- 将命令
-
<
:输入重定向,将文件内容作为命令的标准输入。command < file.txt
- 将
file.txt
文件的内容作为command
命令的输入。
- 将
特殊用途和技巧
/dev/null
:丢弃输出或输入
command > /dev/null # 将命令输出丢弃
command < /dev/null # 将空输入提供给命令
/dev/null
是一个特殊的设备文件,当将输出或输入重定向到它时,会将数据丢弃,用于忽略不需要的信息或提供空输入给命令。
注意事项
- 权限和路径:确保文件的读写权限和正确的路径。
- 覆盖和追加:使用
>
和>>
时要注意是否要覆盖或追加文件内容。 - 错误重定向:标准错误重定向可以使用
2>
符号,例如command 2> error.log
将命令的错误输出写入error.log
文件中。
管道
基本语法
管道使用竖线 |
将两个或多个命令连接起来,形成数据流的传输路径:
command1 | command2 | command3 ...
基本示例
-
将命令的输出传递给另一个命令
ls -l | grep ".txt"
- 将
ls -l
命令的输出(当前目录下的文件列表及其详细信息)传递给grep
命令,过滤出包含.txt
的文件名。
- 将
结合多个命令
-
结合多个命令进行复杂操作
cat file.txt | grep "pattern" | sort | uniq > result.txt
- 将
file.txt
文件的内容传递给grep
命令,搜索包含"pattern"
的行,然后将结果通过管道传递给sort
命令进行排序,最后使用uniq
命令去重,将最终结果保存到result.txt
文件中。
- 将
管道与循环结合使用
-
使用循环和管道处理文件列表
for file in *.txt; do cat "$file" | grep "keyword" | wc -l done
- 对当前目录下所有
.txt
文件,逐个读取文件内容,通过管道传递给grep
命令搜索包含"keyword"
的行,并使用wc -l
命令统计匹配行数。
- 对当前目录下所有
注意事项
- 数据流顺序:管道传递数据是按照命令的顺序依次处理的,确保命令的顺序和逻辑正确。
- 错误处理:如果需要处理命令的错误输出,可以使用重定向符号
2>
将标准错误流导入管道中。 - 性能影响:管道可以提高系统的效率和灵活性,但过多复杂的管道可能会降低执行效率,尤其是在处理大量数据时需要注意。
软链接
特点
- 引用类型:软链接是指向文件或目录的路径名,类似于快捷方式。
- 跨文件系统:可以跨越不同的文件系统或分区。
- 独立存在:软链接可以存在于目标文件或目录被删除或移动后,变成“断开的链接”。
- 权限影响:软链接本身没有权限,但它指向的目标文件或目录的权限会影响对其的访问。
创建软链接
-
基本语法
ln -s 源文件 目标链接
-
示例
ln -s /path/to/original/file /path/to/symlink
- 创建一个软链接
symlink
,指向/path/to/original/file
。
- 创建一个软链接
管理软链接
-
删除软链接
rm /path/to/symlink
- 只删除软链接,不影响目标文件或目录。
-
列出软链接
ls -l /path/to/symlink
- 显示软链接的信息和它指向的目标文件或目录。
硬链接
特点
- 引用类型:硬链接是指向同一个物理文件数据的多个引用,每个硬链接在文件系统中都看作是一个独立文件。
- 同一文件系统:必须在同一文件系统或分区内创建硬链接。
- 数据共享:所有硬链接共享同一数据块,任何一个硬链接的更改会影响所有链接。
- 不易删除:只有当所有硬链接都被删除时,文件数据才会从文件系统中删除。
创建硬链接
-
基本语法
ln 源文件 目标链接
-
示例
ln /path/to/original/file /path/to/hardlink
- 创建一个硬链接
hardlink
,指向/path/to/original/file
。
- 创建一个硬链接
管理硬链接
-
删除硬链接
rm /path/to/hardlink
- 只删除硬链接,文件数据仍然存在于其他硬链接中。
-
列出硬链接
ls -l /path/to/hardlink
- 显示硬链接的信息,包含相同的inode号。
比较软链接和硬链接
特性 | 软链接 | 硬链接 |
---|---|---|
引用类型 | 指向路径名 | 指向文件数据 |
跨文件系统 | 可以 | 不可以 |
删除目标 | 软链接变成“断开的链接” | 文件数据仍存在 |
符号显示 | l (符号链接) | 普通文件(相同inode号) |
创建命令 | ln -s | ln |
使用场景
-
软链接
-
跨文件系统或分区链接文件或目录。
-
创建配置文件的快捷方式,如将常用的配置文件链接到一个统一目录。
-
引用动态变化的文件或目录,如链接到最新版本的日志文件或软件包。
-
-
硬链接
-
在同一文件系统中节省存储空间,通过多个引用共享同一数据块。
-
确保文件数据的持久性,即使删除一个硬链接,数据仍然存在于其他硬链接中。
-
实现多个文件名指向同一个文件数据,方便管理和访问。
-
通过理解软链接和硬链接的特点和用法,可以更高效地组织和管理文件系统,满足不同的需求。
grep命令:查找文件内容
基本语法
grep [选项] 模式 [文件...]
常见选项
-
-i
:忽略大小写差异。grep -i "pattern" file.txt
-
-v
:反转匹配,只显示不匹配模式的行。grep -v "pattern" file.txt
-
-r
或-R
:递归搜索目录下的所有文件。grep -r "pattern" /path/to/directory
-
-l
:只显示包含匹配模式的文件名。grep -l "pattern" *.txt
-
-n
:显示匹配行的行号。grep -n "pattern" file.txt
-
-c
:只显示匹配的行数。grep -c "pattern" file.txt
-
-A num
:显示匹配行以及之后的num
行。grep -A 3 "pattern" file.txt
-
-B num
:显示匹配行以及之前的num
行。grep -B 3 "pattern" file.txt
-
-C num
:显示匹配行以及前后各num
行。sh 复制代码 grep -C 3 "pattern" file.txt
-
-e
:使用多个模式。grep -e "pattern1" -e "pattern2" file.txt
-
-E
:使用扩展正则表达式。grep -E "pattern1|pattern2" file.txt
-
-F
:使用固定字符串(不解析正则表达式)。grep -F "pattern" file.txt
-
-P
:使用 Perl 兼容正则表达式。grep -P "pattern" file.txt
与其他命令结合使用
-
管道和重定向
dmesg | grep "error"
- 通过管道将
dmesg
命令的输出传递给grep
,搜索包含"error"
的行。
- 通过管道将
注意事项
- 区分大小写:默认情况下,
grep
是区分大小写的。使用-i
选项可以忽略大小写。 - 正则表达式:理解正则表达式的语法和规则可以充分发挥
grep
的强大功能。 - 文件编码:确保文件的编码格式正确,避免字符集和编码问题导致的匹配错误。
find命令:查找文件
基本语法
find [起始目录] [搜索条件] [操作]
常见选项和条件
-
-name
:按名称搜索文件或目录。find /path/to/start -name "filename"
-
-iname
:按名称搜索(忽略大小写)。find /path/to/start -iname "filename"
-
-type
:按类型搜索。f
:文件d
:目录l
:符号链接
find /path/to/start -type f
-
-size
:按大小搜索。find /path/to/start -size +100M # 大于100MB的文件 find /path/to/start -size -100M # 小于100MB的文件
-
-mtime
:按修改时间搜索。-n
:在n天内修改过+n
:n天前修改过
find /path/to/start -mtime -7 # 最近7天内修改过的文件
-
-atime
:按访问时间搜索。find /path/to/start -atime -7 # 最近7天内访问过的文件
-
-ctime
:按状态更改时间搜索。find /path/to/start -ctime -7 # 最近7天内状态更改过的文件
-
-perm
:按权限搜索。find /path/to/start -perm 755
-
-user
:按所有者搜索。find /path/to/start -user username
-
-group
:按用户组搜索。find /path/to/start -group groupname
-
-exec
:对搜索结果执行指定命令。find /path/to/start -name "filename" -exec rm {} \;
高级用法
多条件组合:使用 -and
和 -or
组合条件
find /home/user \( -name "*.txt" -or -name "*.md" \) -and -size +10k
- 在
/home/user
目录及其子目录中搜索名称以.txt
或.md
结尾且大小大于10KB的文件。
搜索结果的反向操作:排除特定模式的文件
find /home/user -not -name "*.bak"
- 在
/home/user
目录及其子目录中搜索不以.bak
结尾的文件。
注意事项
- 性能影响:
find
命令在大型文件系统中执行时可能较慢,特别是递归搜索时。可以通过限定搜索范围和条件来提高效率。 - 权限问题:确保具有足够的权限来访问和操作搜索路径中的文件和目录。
- 复杂命令组合:在使用复杂的条件组合和操作时,建议先进行测试,确保命令的正确性和预期效果。
tar命令:归档、打包
基本语法
tar [选项] [归档文件] [文件或目录...]
常见选项
-
-c
:创建一个新的归档文件。tar -cvf archive.tar file1 file2
-
-x
:解压缩一个归档文件。tar -xvf archive.tar
-
-t
:列出归档文件的内容。tar -tvf archive.tar
-
-v
:显示详细信息。tar -cvf archive.tar file1 file2
-
-f
:指定归档文件名。tar -cvf archive.tar file1 file2
-
-z
:通过gzip
压缩或解压缩归档文件。tar -czvf archive.tar.gz file1 file2 tar -xzvf archive.tar.gz
-
-j
:通过bzip2
压缩或解压缩归档文件。tar -cjvf archive.tar.bz2 file1 file2 tar -xjvf archive.tar.bz2
-
-J
:通过xz
压缩或解压缩归档文件。tar -cJvf archive.tar.xz file1 file2 tar -xJvf archive.tar.xz
-
-C
:切换到指定目录。tar -xvf archive.tar -C /path/to/directory
高级选项
-
--exclude
:排除指定文件或目录。tar -cvf archive.tar --exclude='*.log' dir1
- 创建一个 tar 归档文件
archive.tar
,但排除所有.log
文件。
- 创建一个 tar 归档文件
-
-p
:保留文件权限。tar -xvpf archive.tar
- 解压
archive.tar
,并保留文件的权限设置。
- 解压
-
--remove-files
:打包后删除原文件。tar -cvf archive.tar file1 file2 --remove-files
- 创建一个 tar 归档文件
archive.tar
,然后删除file1
和file2
。
- 创建一个 tar 归档文件
-
-P
:保留绝对路径。tar -cvf archive.tar /absolute/path/to/file
- 保留文件的绝对路径。
注意事项
- 权限和路径:确保你有权限访问和修改要打包或解压的文件和目录,并指定正确的路径。
- 压缩格式:选择适当的压缩格式(gzip、bzip2、xz)来平衡压缩率和解压速度。
- 排除选项:使用
--exclude
选项排除不需要的文件,减少归档文件的大小。
gzip命令:压缩、解压
基本语法
gzip [选项] [文件...]
常见选项
-
-d
或--decompress
或--uncompress
:解压缩文件。gzip -d filename.gz
-
-c
或--stdout
或--to-stdout
:将输出结果发送到标准输出,不改变原始文件。gzip -c file > file.gz gzip -dc file.gz > file
-
-k
或--keep
:保留原始文件。gzip -k file
-
-l
或--list
:显示压缩文件的压缩信息。gzip -l file.gz
-
-r
或--recursive
:递归压缩目录中的文件。gzip -r directory
-
-t
或--test
:测试压缩文件的完整性。gzip -t file.gz
-
-1
到-9
:设置压缩级别,-1
表示最快速度(压缩率最低),-9
表示最慢速度(压缩率最高)。默认压缩级别是-6
。gzip -1 file gzip -9 file
-
-v
或--verbose
:显示详细信息。gzip -v file
-
--help
:显示帮助信息并退出。gzip --help
-
--version
:显示版本信息并退出。gzip --version
bzip2命令:压缩、解压
基本语法
sh
复制代码
bzip2 [选项] [文件...]
常见选项
-
-d
或--decompress
或--uncompress
:解压缩文件。bzip2 -d filename.bz2
-
-k
或--keep
:保留原始文件。bzip2 -k file
-
-c
或--stdout
或--to-stdout
:将输出结果发送到标准输出,不改变原始文件。bzip2 -c file > file.bz2 bzip2 -dc file.bz2 > file
-
-z
:压缩文件(默认行为)。bzip2 -z file
-
-v
或--verbose
:显示详细信息。bzip2 -v file
-
-f
或--force
:强制覆盖现有文件。bzip2 -f file
-
-t
或--test
:测试压缩文件的完整性。bzip2 -t file.bz2
-
-1
到-9
:设置压缩级别,-1
表示最快速度(压缩率最低),-9
表示最慢速度(压缩率最高)。默认压缩级别是-9
。bzip2 -1 file bzip2 -9 file
-
--help
:显示帮助信息并退出。bzip2 --help
-
--version
:显示版本信息并退出。bzip2 --version
注意事项
- 文件扩展名:
bzip2
会将压缩文件的扩展名改为.bz2
。如果你想要解压缩一个文件,确保文件的扩展名是.bz2
。 - 压缩率和速度:压缩级别选项(
-1
到-9
)允许你在压缩速度和压缩率之间进行权衡。默认压缩级别是-9
,表示最高压缩率。 - 兼容性:
bzip2
创建的压缩文件通常可以使用其他支持bzip2
格式的工具解压缩,如bunzip2
和bzip2recover
。
zip命令:压缩、解压
基本语法
zip [选项] 压缩文件.zip 文件或目录...
常见选项
-
-r
:递归地压缩目录及其内容。zip -r archive.zip directory
-
-u
:更新已存在的压缩文件,只添加新文件或已更新的文件。zip -u archive.zip file1.txt
-
-d
:从压缩文件中删除指定的文件。zip -d archive.zip file1.txt
-
-m
:将文件移动(而不是复制)到压缩文件,并删除原始文件。zip -m archive.zip file1.txt
-
-j
:仅存储文件,不存储目录路径。zip -j archive.zip directory/file1.txt
-
-l
:显示压缩文件的详细信息。zip -l archive.zip
-
-v
:显示操作过程中的详细输出。zip -v archive.zip file1.txt
-
-q
:安静模式,不显示操作过程中的输出。zip -q archive.zip file1.txt
-
-T
:测试压缩文件的完整性。zip -T archive.zip
-
-1
到-9
:设置压缩级别,-1
表示最快速度(压缩率最低),-9
表示最慢速度(压缩率最高)。默认压缩级别是-6
。zip -9 archive.zip file1.txt
-
--help
:显示帮助信息并退出。zip --help
-
--version
:显示版本信息并退出。zip --version
注意事项
- 加密安全性:建议使用
-e
选项而不是-P
选项来添加密码保护,因为使用-P
可能会在系统日志中留下明文密码的记录。 - 文件名大小写:在Unix/Linux系统中,
zip
命令默认区分文件名的大小写。在压缩和解压缩时,请注意文件名的精确性。 - 权限和所有权:压缩和解压缩文件时,请注意文件和目录的权限和所有权,特别是当使用
sudo
或其他管理员权限时。
which命令:命令位置
基本语法
which [选项] 命令名
示例和用法
-
查找命令的路径
which ls
- 这会显示
ls
命令的路径,通常是/bin/ls
或类似的路径。
- 这会显示
-
查找系统中是否存在某个命令
which python
- 这会显示
python
可执行文件的路径,如果python
在系统路径中可执行,则显示其完整路径,否则不显示任何输出。
- 这会显示
-
显示所有匹配的命令路径
which -a python
- 如果系统中有多个与
python
相关的可执行文件,这会显示所有匹配的路径。
- 如果系统中有多个与
选项
-
-a
或--all
:显示所有匹配的路径,而不仅仅是第一个。which -a python
-
-s
或--skip-alias
:跳过别名(不显示通过别名定义的命令)。which -s ls
-
-p
或--all
:指定搜索路径(以冒号分隔的路径列表)。which -p ls
-
--version
:显示which
命令的版本信息。which --version
-
--help
:显示which
命令的帮助信息。which --help
注意事项
- 路径变量:
which
命令依赖于系统的路径变量($PATH
环境变量),它会在路径变量指定的目录中搜索命令。 - 别名和函数:
which
命令默认情况下会显示命令的路径,如果命令是通过别名或函数定义的,则可能不会显示任何输出。可以使用-a
选项显示所有匹配的路径,包括别名和函数。
su命令:切换用户
基本语法
sh
复制代码
su [选项] [用户名]
示例和用法
-
切换到超级用户(管理员)账户
su
- 这会要求输入超级用户(root)的密码,成功验证后,当前用户将切换为超级用户,即 root 用户。默认情况下,没有指定用户名时,
su
命令会尝试切换到超级用户账户。
- 这会要求输入超级用户(root)的密码,成功验证后,当前用户将切换为超级用户,即 root 用户。默认情况下,没有指定用户名时,
-
切换到其他用户账户
su username
- 这会要求输入
username
用户的密码,验证成功后,当前用户将切换到username
用户的身份。用户需要输入目标用户的密码来进行验证。
- 这会要求输入
-
使用
-
选项切换完整环境su -
或者
su - username
- 使用
-
选项会使su
命令以目标用户的环境变量启动新的 shell 会话。这对于需要使用目标用户完整环境的情况很有用,包括路径、别名和其他环境设置。
- 使用
-
切换到超级用户并执行命令
su -c "command"
- 这会以超级用户的身份执行指定的命令,而不需要交互式输入密码。
选项
-
-c command
:在切换用户后执行指定的命令。su -c "ls /root"
-
-l
或--login
:以目标用户的登录 shell 启动新会话,加载其完整的环境设置。su -l username
-
-m
或--preserve-environment
:保持当前环境变量,不更改到目标用户的环境变量。su -m username
-
-s shell
或--shell shell
:使用指定的 shell 执行su
命令,默认是/bin/sh
。su -s /bin/bash username
注意事项
- 密码安全性:切换用户时,需要输入目标用户的密码。确保不要在非安全环境下输入密码,尤其是在共享或公共计算机上。
- 权限管理:
su
命令通常需要超级用户(root)的密码才能成功切换到该用户账户。使用时要谨慎,以免误操作或错误使用导致系统问题。 - 命令执行:使用
-c
选项可以方便地以其他用户的身份执行特定命令,适用于需要特定权限的临时任务。
password命令:密码操作
基本语法
passwd [选项] [用户名]
常见选项
-l
:锁定用户账户,禁止登录。-u
:解锁用户账户,允许登录。-d
:删除密码,允许空密码登录。-e
:强制用户在下次登录时更改密码。
chmod命令:权限修改
基本语法
chmod [选项] 模式 文件或目录...
常见选项
-c
:显示每个修改的文件的操作信息。-f
:在权限更改时不显示错误消息。-v
:显示详细的权限更改信息。
符号模式
符号模式通过符号来表示权限的增减和设定:
- 设定权限
u
:所有者(user)g
:所属组(group)o
:其他用户(others)a
:所有用户(all),等同于ugo
- 操作符
+
:添加权限-
:移除权限=
:设定权限为指定的模式
- 权限
r
:读权限(4)w
:写权限(2)x
:执行权限(1)
示例:
# 将 file.txt 的所有者添加写权限
chmod u+w file.txt
# 将 file.txt 的所属组和其他用户移除执行权限
chmod go-x file.txt
# 将 file.txt 的所有权限设为 rw-r--r--
chmod a=rw file.txt
# 给 file.txt 的所有者添加读写权限,并显示操作信息
chmod -v u+rw file.txt
数字模式
数字模式使用三个八进制数字来表示权限:
- 第一个数字:所有者的权限
- 第二个数字:所属组的权限
- 第三个数字:其他用户的权限
每个数字由 0 到 7 组成,分别对应以下权限:
0
:没有权限1
:执行权限2
:写权限3
:写和执行权限4
:读权限5
:读和执行权限6
:读和写权限7
:读、写和执行权限
示例:
# 将 file.txt 的所有者权限设为 rw-, 所属组权限设为 r--, 其他用户权限设为 r--
chmod 644 file.txt
# 将 directory 的所有者权限设为 rwx, 所属组权限设为 rx, 其他用户权限设为 x
chmod 755 directory
注意事项
- 权限数字模式:数字模式中的三个数字分别代表文件所有者、所属组和其他用户的权限。例如,
644
表示文件所有者具有读写权限,而所属组和其他用户只有读权限。 - 递归操作:如果操作对象是目录,则使用
-R
选项递归地修改其所有子目录和文件的权限。 - 权限安全性:修改权限时要谨慎,确保文件和目录只开放必要的最小权限以防止安全风险。
exit命令:退出
exit
命令用于退出当前的 shell 会话或者关闭当前的终端窗口。在多个 shell 会话或者终端窗口中,执行 exit
命令会关闭当前的会话或窗口。没有额外的选项或参数。
who命令:登录信息
who
命令用于显示当前登录系统的用户信息。它显示登录用户的用户名、终端编号、登录时间等。常用的选项有 -q
和 -a
,分别用于显示登录用户的数量和详细信息。
基本语法
who [选项]
常见选项
-q
:显示登录用户的数量。-a
:显示详细信息,包括登录时间、IP地址等。
reboot命令:重启
基本语法
reboot
shutdown 命令:定时关机
基本语法
shutdown [选项] 时间
常见选项
-h
:关机后停止电源。-r
:关机后重启系统。
apt命令*:包管理
apt
命令是在基于 Debian 的 Linux 发行版(如 Ubuntu、Debian 等)中用于包管理的高级工具。它提供了一个简洁而强大的接口,用于安装、升级、删除和管理软件包及其依赖关系。以下是对 apt
命令的详细解释和使用方法:
基本语法
apt [选项] 命令
安装软件包
apt install 软件包1 软件包2 ...
- 示例
apt install nginx # 安装 nginx 软件包
apt install python3-pip # 安装 Python 3 的 pip 工具
- 选项
-y, --yes
:自动回答 “yes” 所有提示,无需用户确认安装。-f, --fix-broken
:修复安装过程中出现的依赖问题。
更新软件包列表
apt update
- 示例
apt update # 更新可用软件包的列表
- 选项
- 无
升级已安装的软件包
apt upgrade
- 示例
apt upgrade # 升级所有已安装软件包到最新版本
- 选项
-y, --yes
:自动回答 “yes” 所有提示,无需用户确认升级。
删除软件包
apt remove 软件包
- 示例
apt remove nginx # 卸载 nginx 软件包,保留配置文件
- 选项
-y, --purge
:卸载软件包并删除其配置文件。
搜索软件包
apt search 关键词
- 示例
apt search mysql # 搜索包含 "mysql" 关键词的软件包
- 选项
- 无
显示软件包信息
apt show 软件包
- 示例
sh
复制代码
apt show nginx # 显示 nginx 软件包的详细信息
- 选项
- 无
清理无用的软件包
apt autoremove
- 示例
apt autoremove # 清理系统中不再需要的无用软件包
- 选项
- 无
列出可用的软件源
apt list --installed
- 示例
apt list --installed # 列出所有已安装的软件包
- 选项
--all-versions
:显示所有可用版本的软件包信息。
注意事项
- 权限:执行
apt
命令通常需要管理员权限(使用sudo
或者作为root
用户登录)。 - 更新频率:定期执行
apt update
来更新软件包列表,以便获取最新的软件包信息。 - 谨慎操作:在删除或卸载软件包时,特别是使用
purge
选项时要小心,确保不删除必要的文件或配置。