接上篇 【从Python基础到深度学习】4. Linux 常用命令-CSDN博客
1.文件查找 - find 命令
python
find [搜索路径] [搜索条件] [操作]
1.1 常用选项和参数
-
-name
:按文件名搜索。
find
命令的-name
选项可以接受通配符来匹配文件名。通配符可以帮助你更灵活地搜索文件名,以下是一些常见的通配符: -
*
:匹配任意长度的字符。 -
?
:匹配单个字符。 -
搜索当前目录及其子目录下以
.txt
结尾的文件:pythonfind . -name "*.txt"
-
搜索当前目录及其子目录下以
file
开头的.txt
文件:pythonfind . -name "file*.txt"
-
搜索当前目录及其子目录下以
test
开头,后跟一个字符,然后以.txt
结尾的文件:pythonfind . -name "test?.txt"
-
搜索当前目录及其子目录下以
file
或document
开头的.txt
文件:pythonfind . -name "file*.txt" -o -name "document*.txt"
-
[...]
:匹配方括号中任意一个字符。 -
[^...]
:匹配除方括号中字符以外的任意字符。 -
-
:定义范围,在方括号内部使用。例如[a-z]
匹配小写字母。
-
-empty:查找空目录或大小为0 的文件。
-
-uid
:参数用于匹配指定的用户 ID 所属的文件或目录。可以指定一个特定的用户 ID,也可以使用+
或-
表示大于或小于某个用户 ID。 -
-gid
:参数用于匹配指定的组 ID 所属的文件或目录。可以使用+
或-
表示大于或小于某个组 ID。 -
-type
:按文件类型搜索,如-type f
表示搜索普通文件,-type d
表示搜索目录。 -
-size
:按文件大小搜索,可以使用+
或-
表示大于或小于某个大小,单位可以是k
、M
等。 -
-exec
:对搜索到的文件执行指定的命令。 -
-delete
:删除搜索到的文件。 -
-print
:打印搜索到的文件名。 -
-maxdepth
:指定搜索的最大深度。
1.2 示例
-
搜索当前目录及其子目录下所有文件名以 ".txt" 结尾的文件:
pythonfind . -name "*.txt"
-
在
/etc
目录中搜索所有类型为普通文件的文件,并打印它们的文件名:pythonfind /etc -type f -print
-
搜索当前目录及其子目录下所有大于 1MB 的文件,并删除它们:
pythonfind . -size +1M -delete
-
搜索当前目录及其子目录下所有名为
example.txt
的文件,并在找到的每个文件上执行ls -l
命令:pythonfind . -name "example.txt" -exec ls -l {} \;
1.3 查找条件中的与或非
find
命令默认使用 AND 逻辑操作符,即指定的多个条件都必须同时满足才会匹配到文件。但是可以使用 -o
来表示 OR 逻辑操作符,以及使用 !
来表示 NOT 逻辑操作符。
1.3.1 AND 操作符
默认情况下,find
命令会使用 AND 操作符。例如:
python
find /path -name "file1" -type f
上述命令会搜索路径 /path
下文件名为 file1
且类型为普通文件的文件。
1.3.2 OR 操作符
使用 -o
来表示 OR 操作符。例如:
python
find /path \( -name "file1" -o -name "file2" \) -type f
上述命令会搜索路径 /path
下文件名为 file1
或 file2
且类型为普通文件的文件。
1.3.3 NOT 操作符
使用 !
来表示 NOT 操作符。例如:
python
find /path ! -name "file1" -type f
上述命令会搜索路径 /path
下文件名不为 file1
且类型为普通文件的文件。
需要注意的是,逻辑操作符的优先级可以通过括号来调整。在使用 OR 操作符时,为了确保优先级的正确性,通常会使用括号将每个 OR 操作符的条件包裹起来。
举个例子,假设我们希望找到 /path
目录下文件名为 file1
且类型为普通文件,或者文件名为 file2
且类型为目录的文件。我们可以这样表达这个条件:
python
find /path \( -name "file1" -type f \) -o \( -name "file2" -type d \)
在这个命令中,使用了两次 OR 操作符 -o
,每次都用括号将操作符包裹起来,这样就明确了它们的优先级。首先会匹配第一组括号中的条件,然后匹配第二组括号中的条件,最后将两组条件的结果进行 OR 操作,以得到最终的结果。
如果不使用括号,而是直接写成以下形式:
python
find /path -name "file1" -type f -o -name "file2" -type d
那么就会出现问题,因为默认情况下 AND 操作符的优先级高于 OR 操作符,所以上述命令会被解释为:
python
(find /path -name "file1" -type f) OR (-name "file2" AND -type d)
这并不是我们期望的条件,因此使用括号来明确操作符的优先级是非常重要的。
2.更改文件或目录的权限 - chmod
命令
2.1 基本语法
python
chmod [选项] 模式 文件/目录
2.2 常用选项
-R
:递归地更改文件和目录的权限。-v
:显示操作的详细信息。-c
:仅在发生更改时显示信息。-f
:不显示错误信息。-R
:递归更改权限。
2.3 模式
模式可以用符号形式或数字形式表示。
符号形式
- u:文件所有者(用户)权限。
- g:文件所属组的权限。
- o:其他用户的权限。
- a:所有用户的权限。
- +:添加权限。
- -:移除权限。
- =:设置权限。
例如:
chmod u+x file.txt
:给文件所有者添加执行权限。chmod go-rw file.txt
:移除文件所属组和其他用户的读写权限。
数字形式
数字形式以三位数字表示权限,每位数字代表一个权限位(读、写、执行)。每位数字的含义分别是:
- 第一位:所有者权限。
- 第二位:所属组权限。
- 第三位:其他用户权限。
每个权限位的值分别为:
- 4:读权限。
- 2:写权限。
- 1:执行权限。
例如:
chmod 755 file.txt
:给文件所有者添加读、写、执行权限,给所属组和其他用户添加读、执行权限。
2.4 示例
-
添加执行权限给所有用户:
pythonchmod a+x file.txt
-
移除其他用户的写权限:
pythonchmod o-w file.txt
-
递归地更改目录及其子目录的权限:
pythonchmod -R 755 directory
-
将文件所有者的权限设置为读写,所属组和其他用户的权限设置为只读:
pythonchmod 644 file.txt
3.创建空文件或更改文件的访问和修改时间戳 - touch
命令
3.1 基本语法
python
touch [选项] 文件名
3.2 常用选项
-a
:仅更新文件的访问时间戳。-c
:仅在文件不存在时才创建文件。-m
:仅更新文件的修改时间戳。-d
:使用指定的日期时间戳而不是当前时间戳。
3.3 示例
-
创建一个名为
file.txt
的空文件:pythontouch file.txt
-
更新文件的访问和修改时间戳:
pythontouch file.txt
-
仅更新文件的访问时间戳:
pythontouch -a file.txt
-
仅更新文件的修改时间戳:
pythontouch -m file.txt
-
使用指定的日期时间戳更新文件的时间戳:
pythontouch -d "2023-01-01 12:00:00" file.txt
4.查看命令手册 - man 命令
5.echo
命令
5.1 基本语法
python
echo [选项] [字符串或变量]
5.2 常用选项
-e
:允许在字符串中使用转义字符。-n
:不在末尾添加换行符。
5.3 示例
-
打印字符串到标准输出:
pythonecho "Hello, world!"
-
打印变量的值:
pythonname="Alice" echo "Hello, $name!"
-
使用转义字符:
pythonecho -e "This is a\ttab character."
-
不在末尾添加换行符:
pythonecho -n "This text will be followed by no newline."
6.cat 命令
基本语法
python
cat [选项] [文件]
常用选项
-n
:显示行号。-b
:仅对非空行显示行号。-s
:压缩连续的空行。-E
:在每行末尾显示$
符号。
示例
-
显示文件内容:
pythoncat file.txt
-
显示文件内容并显示行号:
pythoncat -n file.txt
-
合并多个文件并输出到标准输出:
pythoncat file1.txt file2.txt
-
创建新文件:
pythoncat > newfile.txt
-
将输入重定向到文件:
pythoncat > file.txt
7. 查看文件或目录的inode 号 - ls -il
命令
inode(索引节点)是文件系统中的一个重要概念,用于存储关于文件或目录的元数据信息,如文件的权限、大小、所有者、时间戳等。每个文件或目录都有一个唯一的inode 条目,这个条目包含了该文件或目录的所有信息,而实际的文件数据则存储在数据块中。在 Unix 和类 Unix 系统中,例如 Linux,每个文件系统都有一个固定大小的inode 表,用于存储所有文件和目录的inode 条目。
inode 值是文件系统中的一个唯一标识符,它用于访问和定位文件或目录的元数据信息。每个inode 条目都有一个唯一的编号,称为inode 号。通过inode 号,文件系统可以快速定位和读取文件或目录的元数据信息。
在 Unix/Linux 系统中,可以使用命令 ls -il
来查看文件或目录的inode 号。
8.建立文件软链接
基本语法
python
ln -s [目标文件] [链接文件名]
示例
假设有一个名为 source.txt
的文件,我们希望创建一个指向它的软链接 link.txt
。
-
创建软链接:
pythonln -s file1 file2
-
查看软链接:
pythonls -l file2
删除原始文件会导致软链接失效
9.建立文件硬链接
python
ln [选项] 目标文件 链接文件名
目标文件
是要创建硬链接的原始文件,链接文件名
是要创建的硬链接的文件名。
示例
假设有一个文件 original.txt
,我们想要创建一个硬链接 link.txt
:
python
ln original.txt link.txt
这将在当前目录下创建一个名为 link.txt
的硬链接,它指向 original.txt
文件。
示例2(创建硬链接到目录)
如果想要创建一个硬链接到目录的话,例如将 /home/user1/dir1
这个目录链接到 /home/user2/dir2
,可以使用如下命令:
python
ln -d /home/user1/dir1 /home/user2/dir2
这会创建一个硬链接,使得 /home/user2/dir2
现在也指向 /home/user1/dir1
。