本文记录一些 Linux 下的命令,方便在我忘记的的时候快速的查一查。大部分都是一些有用但又不常用的命令,记性实在不好,每次用都要重新查,这里写一下也能更好的记住。
压缩与解压缩
tar
tar 是 linux 下常用的 打包工具 (Tape ARchive),常用于将多个文件/目录合并为一个包,不进行压缩,后来常与 gzip, bzip2 等压缩工具结合。
基本格式 tar [选项] [参数] -f 压缩包名.tar[.gz|.bz2|.xz] 文件/目录 ...
常见选项:
| 选项 | 含义 |
|---|---|
| c | create, 打包 |
| x | extract, 解包 |
| t | list, 查看包的内容 |
| v | verbose,显示详细过程 |
| f | file,指定包文件名(必须紧跟在 f 后) |
| z | gzip 压缩/解压 |
| C | 解压到指定目录 |
| r | 在没有压缩时,追加特定文件 |
- 打包并使用 gzip 压缩:
tar -czvf archive.tar.gz dir/ - 指定解压目录:
tar -xzvf archive.tar.gz -C /path/to/dir/ - 查看压缩包内容:
tar -tvf archive.tar.gz - 追加文件到 tar 包中:
tar -rvf archive.tar newfile.txt
zip
为了更好的兼容其他操作系统,往往 zip 命令更为常用。一个比较诡异的点是 zip 命令不能执行解压缩,只能压缩,解压缩必须由 unzip 来完成。
基本格式 zip [选项] 压缩包名.zip 文件/目录 ...
常用选项:
| zip 选项 | 含义 |
|---|---|
| r | recursive, 递归的把目录以及子目录中的文件都加入 zip |
| q | quiet, 抑制过程输出,适合于脚本 |
| e | encrypt, 加密 |
| 0-9 | 指定压缩等级,默认为4 |
| m | move,文件移动到压缩包中 = 压缩完删除原文件 |
| @ | read names from stdin, 与一些脚本命令配合 |
| unzip 选项 | 含义 |
|---|---|
| l | list, 查看包的内容 |
| d | dir, 解压到指定目录,后面紧跟目录路径 |
| o | over, 覆盖已存在文件 |
- 标准压缩:
zip -r project.zip project/ - 只压缩 .py 文件:
find src -name '*.py' -print | zip code.zip -@ - 查看内容:
unzip -l archive.zip - 解压并覆盖文件:
unzip -o archive.zip
文件查找与参数导入
find
文件搜索工具,可以按照文件名、时间、大小、类型、权限等等条件搜索文件。
基本格式 find [搜索路径] [匹配条件] [处理动作]
常用匹配条件:
| 选项 | 含义 |
|---|---|
| -name | 人如其名 |
| -type | f 普通文件,d 目录,l 符号链接 |
| -size | +100M, -10K |
| -mtime | 修改内容时间,以天为单位, -7, +10 |
| -user | 按用户查找 |
常用处理动作:
| 选项 | 含义 |
|---|---|
| stdout, 默认动作 | |
| -delete | 删除文件 |
| -exec | 传入参数 |
举一个传入参数的例子 find . -name *.tex -exec rm {} +,其中 {} 表示当前匹配的文件,+ 表示批量传入处理,否则文件多时较为低效。但更为推荐使用接下来介绍的 xargs 来处理。
xargs
在 zip 的实例中有通过管道导入参数的功能,但那是 zip 脚本提供了 -@的选项。很多命令是不提供这样从标准输入读入参数的选项,所以要借用额外的命令来实现。
一个很重要的点是 xargs 对文件名含有空格不太安全!这一点非常重要,不要用来处理含有空格的文件名,也提醒文件命名规范非常重要。
基本语法 command1 | xargs [options] command2,选项基本不太常用,举几个例子。
echo "file1 file2 file3" | xargs rmfind . -name "*.txt" | xargs rm
核心就是将标准输入转换为命令参数。