本文为笔记,分为前章和正文两部分。全文介绍简略,适合有基础速通。

前章

Ubuntu 系统安装

下面提供三种安装方式,自行选择。

图形界面

虽然一般不会将 Linux 作为日用机,而是作为远程开发平台。但如果你打算将 Ubuntu 作为你的日用机的话,下面为你使用 Ubuntu 图形界面提供一些建议。

安装应用

应用程序安装方式主要有三种:aptdpkgsnapappimage

其中 apt 可以直接从网络获取并完成安装,是 Ubuntu 上最常用的安装方式,正文会有介绍。

snap 提供沙盒化的软件安装,提供隔离的软件环境。

appimage 是一个可以直接运行的单体文件,无需安装过程,直接运行即可。

dpkg 用于安装从网络下载的 .deb 应用包,此处主要对此介绍。

deb 应用程序安装

从网络下载 .deb 文件,使用命令 dpkg -i {文件} 安装。当然也可以直接双击安装,个人体验比较屎。

dpkg 常用命令 功能
dpkg -i {文件} 安装 .deb 应用包
dpkg -l 打印已安装应用列表
dpkg -r {包名} 移除应用,保留配置
dpkg -P {包名} 移除应用,移除配置
dpkg -L {包名} 打印应用关联文件
创建桌面快捷方式

如果需要,安装的应用通常会自动创建快捷方式到指定的目录,我们只需将需要的快捷方式拷贝到桌面即可。

/usr/share/application 中找到应用对应的 *.desktop 拷贝到桌面并右键允许运行,如 vscodecode.desktop。当然你也可以手动创建,如果一定要这么做你可以参考已有的 *.desktop 文件,这是一个文本文件。

终端热键

热键 功能
Ctrl Shift = 放大终端字体
Ctrl - 缩小终端字体
Ctrl Insert 命令行复制文本
Shift Insert 命令行粘贴文本
Up / Down 切换最近使用命令
Tab 命令 / 目录 / 文件自动补全,如有多选择打印待选项
Ctrl C 退出命令 / 终止进程
Ctrl L 清屏,上滑找回清除内容

终端命令帮助

  1. 终端命令格式为 command [-option] para,其中 [] 表示可选,| 表示选一。

  2. command --help 终端命令支持的内置帮助。

  3. man command (manual) Linux 手册支持的命令帮助,后文仅介绍命令的常见使用,更多内容需自行参照手册。

    敲击 q (quit) 退出,敲击 f (forward) 前滚一页,b (backward) 回滚一页,/word 在手册中搜索 word

命令 英文 功能
clear clear 清屏
man manual 手册
exit exit 退出终端

文件目录管理

命令 英文 功能
ls list 查看工作目录下文件
pwd pwd 显示工作目录位置
cd {目录} chang directory 切换工作目录
touch {文件} touch 如果文件不存在,创建
mkdir {目录} make directroy 新建文件目录
rm {文件} remove 移除文件
cp {源文件} {目标文件} copy 拷贝文件
mv {源文件} {目标文件} move 移动文件或文件重命名

ls 查看目录

Linux 文件系统命名

在 Linux 文件系统中,. 表示当前目录,.. 表示上一级目录,/ 表示根目录,~ 表示当前用户的 Home 目录。

所有文件名不能超过 256 个字符,区分大小写,任何以 . 开头的文件为隐藏目录。

其他一些文件系统也有相似。

在 ls 命令中,不同颜色显示的名称表示不同的文件类型。其中蓝色表示文件夹,白色表示普通文件,除此之外还有绿色表示可执行文件等。

ls 常用命令 功能
ls {目录} 查看普通文件,目录默认为 .
ls -a 查看所有文件
ls -A 查看所有文件,除 ...
ls -l 以列表方式查看文件,更详细
ls -l -h 人性化显示文件大小,需配合 -l

ll 命令等价于 ls -l -a,查看所有文件详细信息。

-l 命令显示的详细信息中第一字段表示文件类型和权限,此处不详细介绍。

tree 显示文件树

我们发现 ls 只能显示当前目录文件,使用 tree 可以打印文件树。

tree 不是 Linux 内置命令,需要用户安装。其中 sudo 表示提权,后面关于安装程序会有专门的章节。

1
sudo apt install tree
tree 常用命令 功能
tree {目录} 查看文件树,目录默认为 .
tree -d 仅查看目录,不显示文件

cd 切换目录

Linux 文件系统命名

在 Linux 文件系统中,有绝对路径和相对路径之分。绝对路径表示从根目录开始的路径,以 / (或 ~) 开始;相对路径是从当前工作目录开始的目录,如 ..

cd 常用命令 功能
cd {目录} 切换到制定目录,可以是绝对或相对目录
cd .. 切换到上级目录
cd ~ 切换到当前用户的 home 目录
cd / 切换到根目录
cd - 切换到上次目录

touch 创建文件

使用 touch {文件} 创建文件。

  • 如果文件不存在,创建空白文件。
  • 如果文件已存在,修改文件修改日期。

mkdir 创建目录

使用 mkdir {目录} 创建目录。

  • 如果需要创建多级目录,使用命令 mkdir -p {目录}

rm 移除文件

使用 rm {文件} 移除的文件 / 目录无法还原,所以请养成使用低等级移除的习惯。

rm 常用命令 功能
rm {文件} 移除文件
rm -i {文件} 移除每个文件时询问,请回复 y/n,默认 n
rm -d {目录} 移除空目录,rmdir 等价于 rm -d
rm -r {目录} 移除目录及其文件
rm -f {文件} 强制移除文件,永不提示

rmdir 命令等价于 rm -d,只能移除空目录。

cp 拷贝文件

使用 cp 拷贝文件时默认直接覆盖,所以最好每次拷贝时加上 -i

cp 常用命令 功能
cp {源文件} {目标文件} 拷贝源文件到目标文件(文件名可变)
cp {源文件} {目标目录} 拷贝源文件到目标目录(文件名不变)
cp -i 覆盖时询问,默认直接覆盖
cp -r 拷贝目录及其文件

mv 移动文件

mv 也可以为文件重命名。

使用 mv 移动文件时默认直接覆盖,所以最好每次移动时加上 -i

mv 常用命令 功能
mv {源文件} {目标文件} 移动源文件到目标文件(如果目录相同表示重命名)
mv {源文件} {目标目录} 移动源文件到目标目录(文件名不变)
mv -i 覆盖时询问,默认直接覆盖

cp 不同的是,mv 可以直接操作目录,无需 -r 选项。

ln 建立软链接

软链接可以理解为快捷方式。

1
ln -s {源文件位置} {软链接文件名}

如果不加 -s 表示建立硬链接,通常不需要建立硬链接。

源文件位置注意区分相对路径和绝对路径,使用相对路径创建的软链接会使用相对路径访问,使用绝对路径建立的软链接会使用绝对路径访问。一般使用绝对路径创建软链接。

文件通配符

可以使用文件通配符批量删除、拷贝、移动文件。

也可以使用文件通配符在 ls 查找文件等等。

符号 功能
* 匹配任意多个字符,包含零个
. 匹配一个字符
[abc] 匹配字符组中任意一个字符
[a-z] 匹配字符区间任意一个字符
[^abc] 匹配不包含字符组所有的字符

编辑显示文本

命令 英文 功能
cat {文件} concatenate 打印、创建、合并、追加文件,此处仅打印文本
more {文件} more 打印文件内容(分屏显示)
grep {文本} {文件} grep 在文件中查找文本
echo {文本} echo 打印文本或变量值

more 显示文本

catmore 命令都可以显示文本,区别是当文件内容较多时,more 可以逐渐打印部分内容,cat 一次性打印。

cat 显示文本

cat 常用命令 功能
cat {文件} 打印文件全部内容
cat -n {文件} 打印文件全部内容时显示行号

grep 查找文本

grep 可以在文件中查找带文本的行并高亮打印。

grep 常用命令 功能
grep {文本} {文件} 在文件中查找带文本的行
grep -n {文本} {文件} 打印时显示行号
grep -i {文本} {文件} 查找时忽略大小写
grep -v {文本} {文件} 查找不匹配的行

与大多数命令行相同,如果搜索的文本中包含空格,需要使用引号包含。

搜索文本是正则表达式

搜索中的文本实际是正则表达式,自行学习。

需要注意的是,其中一些需要转义,如 . 在正则中表示匹配任意字符,而如果需要匹配 . 需要在匹配写 \.

grep 提供了正则开关,包括:-F (仅匹配文本)、-G (基础正则,默认)、-E (拓展正则) 。如果您是小白,建议经常加上 -F,当然会使用正则更好。

wc 统计字数

另外提一嘴,可以使用 wc 进行字数统计,详见 man wc

echo 打印变量

echo 常用命令 功能
echo {文本}echo "Hello World" 打印文本
echo ${变量}echo $HOME 打印变量值

echo {文本} 很少单独使用,下面我们将介绍文件重定向与管道。

文件重定向与管道

< {文件}:重定向命令读自文件。

> {文件}:重定向命令写到文件,使用覆盖而非追加。

>> {文件}:重定向命令写到文件,使用追加而非覆盖。

更多重定向操作

<<<:将文本当做文件读入,如:cat <<< "Hello World!"

0<:重定向标准输入(文件描述符 0),与 < 相同。

1>:重定向标准输出(文件描述符 1),与 > 相同。

2>:重定向报错输出(文件描述符 2)。

&>:同时重定向普通和报错输出,可用 1> ... 2>&1 替代。

同时你可以通过数字和 < / > / >> 进行自定义文件描述符,也可以使用形如 2>&1 进行绑定,如:

1
2
3
4
5
./main < test.in > result.out 2>> report.log 3>&1
# 从 test.in 作标准输入读取
# 向 result.out 作标准输出写入
# 向 report.log 作报错输出写入
# 将文件描述符 3 与描述符 1 绑定, 与重新指定不同, 绑定会交替追加

cat test1.txt >> test2.txt 将文件 test1.txt 的内容追加到 test2.txt 中。另外如果想要隐藏输出可以将输出重定向到 /dev/null(空设备,黑洞),这是一个隐藏输出的专用文件。

管道符:|,可以将前一个命令的输出当作第二个命令的输入,常用的第二个命令有 moregrep

ls -l -h | more 分屏显示目录信息,相应的 grep 可以用于高级搜索。

远程系统控制

关机 / 重启

shutdown 常用命令 功能
shutdown {时刻} 计划在该时刻关机,可以使用相对或绝对时间
shutdown 默认时间为 +1,在一分钟后关机
shutdown now 立即关机
shutdown -r 重启计算机
shutdown -c 取消关机 / 重启计划

注意尽量不要使用关机命令,因为关闭远程系统后你就打不开系统了。

查看配置网卡

需要使用 ifconfigping 命令,其中 ifconfig 用于查看本地网卡配置,ping 用于测试网络连接。

ifconfig 不是 Linux 内置命令,需要用户安装。

1
sudo apt install net-tools

查看网卡信息:可以结合 grep 筛选。

1
ifconfig

测试网络连接:可以查看 IP 地址、网络延迟等信息,使用 ctrl c 退出。

1
2
ping localhost        # 测试本地网卡是否正常
ping www.example.com # 测试远程网络连接

远程 SSH 控制

SSH 可以通过命令行远程控制 Linux 主机,如果电脑为 Windows 系统需要其他设置。

安装 Openssh-Server

在服务机 (被控制) 上要求安装 openssh-server,而在客户机 (控制) 上安装 openssh-client

在服务机上进行如下操作:

1
2
apt list --installed | grep ssh  # 查找是否安装了 openssh-server, 如果以安装结束此步骤
sudo apt install openssh-server # 安装 openssh-server

连接 SSH 服务

在客户机上进行如下操作:

1
2
3
apt list --installed | grep ssh  # 查找是否安装了 openssh-client, 我的计算机默认安装, 因此跳过安装
ssh -p 22 {用户名}@{远程地址} # -p 22 表示 ssh 服务端口, 如果使用默认的 22 端口可省略该部分
# 进入提示窗口后 yes, 并输入用户密码, 然后你可以通过当前命令行直接控制远程主机, exit 退出

当然,你也可以在本机上测试 {用户名}@localhost

scp 远程文件拷贝

scp 命令与 cp 相似,但用于通过 SSH 协议在远程主机间传输文件。下面仅提供一些演示:

1
2
3
scp -P 22 {用户名}@{远程地址}:{目标路径} {本地路径}  # 拷贝到本地路径. -P 22 表示 ssh 服务端口, 可缺省; 远程路径需使用实例表示
scp -P 22 {本地路径} {用户名}@{远程地址}:{目标路径} # 拷贝到远程路径
scp -r {源路径} {目标路径} # 拷贝文件夹

SSH 端口映射

使用端口映射可以在连接到远程的同时,将端口映射到本地或其他网络路径。

1
2
ssh -L {远程端口}:{映射地址}:{映射端口} {正常登录命令}
# ssh -L 8888:localhost:8888 -P 22 root@ubuntu

SSH 免密登陆

配置本地 SSH 密钥

Win+R \to 键入 cmdpowershell \to 回车打开命令行

1
2
3
$ ssh-keygen -t rsa  # 生成本地的RSA加密的SSH密钥,一路回车
$ cd .ssh # 切换到SSH目录
$ notepad id_rsa.pub # 使用记事本打开公钥文件,复制文件内容

配置虚拟机 SSH 密钥

1
2
3
$ ssh-keygen -t rsa  # 生成虚拟机的RSA加密的SSH密钥,一路回车
$ cd ~/.ssh # 切换到SSH目录
$ vim authorized_keys # 添加认证,粘贴文本内容,保存并退出;也可以使用 scp 拷贝到远端

此时重新使用 SSH 登录不再提示输入密码。

用户权限设置

sudo 超级用户权限

用户 / 权限 / 组的基本概念

用户是进行工作的单位,用户对不同的文件或目录有不同的权限,其中包括:读 read r、写 write w、执行 excute x

为方便用户的管理,产生了组的概念。用户组可以包含多个用户,具有相同的权限。一个用户可以属于多个组。

超级用户即 root 用户,具有系统的最高权限。为避免误操作,日常用户一般不运行在 root 用户上。

sudo 命令本义为切换用户执行,默认为使用超级用户权限执行语句,临时获取超级用户需要输入密码,初始用户与 root 用户密码相同,密码有效时间为 5 分钟。

我们之前使用的 sudo apt install tree 等命令就是临时获取超级用户权限,因为包管理需要超级用户权限,而需要代为执行命令为 apt install tree

在后续的操作中,创建与管理用户和组等都需要超级用户权限。

su 代理其他用户

susudo 类似可以获取其他用户的权限。不同的是 sudo 用于临时获取用户权限执行一条命令,而 su 命令可以进入其他用户的终端,使用 exit 退出用户代理。

1
2
su {用户名}    # 代理其他用户, 用户名的缺省值为 root
su - {用户名} # 代理其他用户并跳转到用户家目录

which 查找程序位置

1
which {命令}  # 查找命令路径
1
2
which useradd  # /usr/sbin/useradd
which ls # /usr/bin/ls
程序常用目录 程序文件类型
/bin/ 一般内置程序
/sbin/ 用于系统管理的内置程序
/usr/bin/ 一般用户安装程序
/usr/sbin/ 用于系统管理的用户安装程序

组管理

后续与用户管理相关的命令请使用 sudo 提权。

groupadd / groupdel 增删组

增删组常用命令 功能
groupadd {组名} 新建组
groupdel {组名} 移除组

cat 查看组信息

查看组常用命令 功能
cat /etc/group 查看所有组信息

/etc/group 文件:使用 : 分割字段,组名:x:GID:组成员。可以使用前面提到的 | grep 提高查看效率。

用户管理

useradd / passwd / userdel 增删用户

增删用户常用命令 功能
useradd -m -g {组名} {用户名} 创建用户。-m 表示新建用户家目录;-g {} 表示规定用户主组,默认新建同名组。
passwd {用户名} 修改用户密码。用户名默认为当前用户。未设置密码的用户是未激活的,以此设置。
passwd -l {用户名} 锁定用户密码。被锁定的用户永远无法通过密码认证。
userdel -r {用户名} 移除用户。-r 表示同时删除用户家目录。提供的一些报错信息可以忽略。

从 Ubuntu 不知道哪个版本开始,对修改密码有了严格的要求,比如重复用户名、使用连续序列、密码过短都是无法通过修改的。

cat / id / who 查看用户信息

查看用户常用命令 功能
cat /etc/passwd 查看所有用户信息。
id {用户名} 查看用户 UID 和所属组 GID。这些信息都包含于 /etc/passwd
who 查看当前登陆机器的所有用户。
whoami 我是谁?

/etc/passwd 文件:使用 : 分割字段,用户名:密码(加密):UID:GID:昵称:家目录:终端

usermod 更改用户权限

需要注意的是,用户所属的组分为主组和附加组,主组即 etc/passwd 中的 GID,而附加组可以通过 /etc/group 文件和 id 命令查看,表示用户的附加权限。例如,新建用户不属于 sudo 组,因此不可以使用 sudo 提权。

usermod 常用命令 功能
usermod -g {组名} {用户名} 设置用户主组。用户主组通常在新建用户时确定,很少修改。
usermod -G {组名} {用户名} 设置用户附加组。用户需要具有附加组才能访问一些文件和程序。
usermod -aG {组名} {用户名} 设置用户附加组。追加而非重写的,必须与 -G 连用。
usermod -s {终端} {用户名} 修改用户登陆终端。如 /bin/bash,默认终端为 /bin/sh 比较丑。

文件权限与所有者

文件权限与所有者概念

我们使用 ls -l 命令显示的第一个字段就表示文件权限。例如:

1
2
3
4
5
6
总计 20
drwxrwxr-x 3 jamhustao jamhustao 4096 8月 14 20:48 ./
drwxrwxr-x 3 jamhustao jamhustao 4096 8月 14 22:56 ../
-rw-rw-r-- 1 jamhustao jamhustao 22 8月 14 19:34 1.txt
drwxrwxr-x 3 jamhustao jamhustao 4096 8月 14 19:50 a/
-rw-rw-r-- 1 jamhustao jamhustao 45 8月 14 20:48 z.txt
d rwx rwx rwx
文件类型,如 d 表示目录 文件所有用户权限 文件所有组权限 其他用户权限

可以将文件权限字段划分为四个部分 d|rwx|rwx|rwx,通常权限是递减的。

命令输出的第二个字段表示硬链接数,及访问到该文件的方式,其中目录 a/ 可以通过 a... (如果 a/ 有多个子目录就会有多个 ..) 访问,所以硬链接数为 3 。

命令还会显示两个用户名字段 jamhustao,分别表示文件所有者和文件所有组。

chown 修改文件所有者

1
chown -R {用户名} {文件/目录}  # 修改文件 / 目录所有者, -R 表示同时修改下属文件所有者

chgrp 修改文件所有组

1
chgrp -R {用户名} {文件/目录}  # 修改文件 / 目录所有组, -R 表示同时修改下属文件所有组

chmod 修改多级权限

使用 chmod +/-rwx {文件/目录} 修改文件权限。例如:

1
2
3
4
# 以下实例每条语句独立, 而非顺序执行
chmod -w z.txt # -r--r--r-- 1 jamhustao jamhustao 45 8月 14 20:48 z.txt
chmod -r z.txt # --w--w---- 1 jamhustao jamhustao 45 8月 14 20:48 z.txt
chmod -x test.py # -rwxrwxr-x 1 jamhustao jamhustao 45 8月 14 20:48 test.py

关闭可读权限的文件无法显示内容,关闭可写权限的文件无法修改其内容,打开执行权限的文件可运行 (如果支持) 。

关闭可读权限的目录无法查看文件 (ls) ,关闭可写权限的文件无法管理目录,关闭执行权限的文件无法查看和切换至。

选项 功能
+r 为所有用户添加可读权限。
+w 为所有者、所有组添加可写权限。
+x 为所有用户添加可执行权限。
-r 移除所有用户的可读权限。
-w 移除所有用户的可写权限。
-x 移除所有用户的可执行权限。

之所以称之为修改多级权限,是因为我们发现使用该命令会同时修改多级用户的权限,如果仅仅粗糙地修改文件权限,这样通常够用,后面我们也可以针对每级用户管理权限。

chmod 修改不同级权限

前面提到文件权限被表达为 rwxrwxrwx 的形式,我们可以将权限表示为八进制的形式,每一位当作二进制,每三位即一级用户进行绑定。例如:八进制 664 的二进制表示为 110110100 再对应到权限表达式为 rw-rw-r--。修改不同权限就是通过这种方式表达。

1
2
chmod {八进制权限表示} {文件/目录}  # 最常用的权限为 664, 因为多数文件不可执行
# chmod 664 z.txt

chmod 也可以使用 -R 同时修改目录下属文件权限。

系统状态查询

date 查看系统时间

1
2
date  # 查看系统时间
# 2023年 08月 21日 星期一 21:53:20 CST

df / du 查看磁盘占用

dfdisk free 的意思,表示查看磁盘余量。

1
df -h  # 查看磁盘占用, -h 表示以人性化方式显示内存

dudisk usage 的意思,表示查看目录大小。

1
2
3
du -h  # 查看当前目录磁盘占用, -h 表示以人性化方式显示内存
du {文件/目录} # 查看指定文件 / 目录占用
du -s # 仅显示总结, 只显示当前目录占用而不显示子目录占用

使用 ls 也可以查看各个文件的占用,但无法查看目录占用,它不会统计目录内文件大小。

进程管理

ulimit 查看进程资源限制

1
ulimit -a  // 查看全部进程资源限制

ps 查看进程状态快照

1
ps aux  // 或 ps ajx
  • (默认):显示当前终端进程及其子进程的粗略信息。

  • a:显示终端上的所有进程,包括其他用户进程。

  • x:显示无终端的所有进程,不包括其他用户进程。

  • u:显示进程详细信息。多为用户关注信息,如:CPU占用、内存占用、STAT状态。

  • j:显示进程详细信息。多为控制相关信息,如:PPIDGIDSTAT状态。

STAT状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
状态:
R 运行或就绪
S 可中断的睡眠
D 不可中断的睡眠 (usually IO)
Z 僵尸进程 (nearly dead)
X 已死 (should never be seen)
I 空闲的内核线程
T 停止或被追踪
t 追踪时被调试器停止

其他:
< 高优先级 (not nice to other users)
N 低优先级 (nice to other users)
s 拥有子进程
l 拥有多线程
+ 前台进程

top 监视实时进程状态

1
2
top
top -d 1 // 设置刷新时间间隔(秒)

按键操作:

  • h:相关帮助。

  • P:按CPU占用排序。

  • M:按内存占用排序。

  • T:按运行时长排序。

  • U:按用户名筛选。

  • k:杀死进程,输入无效数据退出。

  • q:退出top

kill 杀死进程

kill 命令实际是向进程发送信号,通常用于杀死进程。

1
2
kill {pid}  // 杀死进程(默认通过 15 号信号)
kill -9 {pid} // 通过 9 号信号强制杀死进程(自杀, 杀死暂停进程), kill -l 查看所有信号。

打包压缩安装

不同的操作系统有其不同的压缩文件格式,例如 Windows 使用 rarmacOS 使用 zipLinux 使用 tar.gz

tar 打包文件

tar 只对文件进行打包,不进行压缩。

tar 常用命令 功能
tar -cvf {目标.tar文件} {源文件/目录} 打包文件,-c 表示打包,-v 表示显示进度,-f 表示文件名。
tar -tf {.tar文件} 查看包内容。
tar -xvf {源.tar文件} -C {目标目录} 解包文件,-x 表示解包,-C 表示指定解包目录默认 .

gzip 压缩文件

gz 用于压缩 tar 打包的文件,打包压缩后缀为 .tar.gz

tar 打包与解包时可以同时使用 -z 选项进行压缩与解压缩。

gzip 常用命令 功能
tar -czvf {目标.tar.gz文件} {源文件/目录} 打包文件同时压缩。
tar -xzvf {源.tar.gz文件} 解包文件同时解压。如果已压缩,解包时自动解压。
gzip -k {源.tar文件} 压缩已打包文件,-k 表示压缩完不删除源文件。
gzip -dk {源.tar.gz文件} 解压已打包文件,-d 表示解压。
gzip -1~9 可以使用 1-9 表示压缩程度,与压缩时间呈反相关。

bzip2 压缩文件

用法与 gzip 相似,打包压缩后缀为 .tar.bz2

bzip2 常用命令 功能
tar -cjvf {目标.tar.bz2文件} {源文件/目录} 打包文件同时压缩。
tar -xjvf {源.tar.bz2文件} 解包文件同时解压。如果已压缩,解包时自动解压。
bzip2 -k {源.tar文件} 压缩已打包文件,-k 表示压缩完不删除源文件。
bzip2 -dk {源.tar.bz2文件} 解压已打包文件,-d 表示解压。
bzip2 -1~9 可以使用 1-9 表示压缩程度,与压缩时间呈反相关。

zip 压缩文件

zip 也是一种非常常用的压缩文件格式,这么多格式确实也挺头大的。

zip 常用命令 功能
zip -r {目标.zip文件} {源文件/目录} 压缩文件,-r 表示递归添加文件。
unzip {源.zip文件} -d {目标目录} 解压文件,-d 表示目标目录,可缺省默认当前目录。

apt 软件管理

apt 常用命令 功能
sudo apt install {包名} 安装程序。
sudo apt remove {软件名} 卸载程序。
sudo apt list 查看已安装程序,可以使用 --installed--upgradable 筛选。
sudo apt upgrade 批量更新应用程序。
sudo apt autoremove 自动卸载无关程序。

实用工具推荐

find 文件查找

内置命令,用于在繁杂的文件中找到匹配的文件。功能类似 Everything,但查找速度偏慢。

find 常用命令 功能
find {目录} -name {逻辑通配符} 使用逻辑通配符匹配文件名,目录可缺省默认为 .
find -regex {正则表达式} 使用正则表达式匹配文件路径。
find -type {文件类型} 按文件类型筛选,有如 f:文件 / d:目录。
find -size {文件大小} 按文件大小筛选,可有单位,可用 +/- 表示大于或小于。
find -ctime {时差} 查找若干天前创建的文件。
find -cmin {时差} 查找若干分钟前创建的文件。
find -atime {时差} 查找若干天前访问的文件。
find -amin {时差} 查找若干分钟前访问的文件。
find -mtime {时差} 查找若干天前修改的文件,通常使用 mtime/mmin 筛选。
find -mmin {时差} 查找若干分钟前修改的文件,通常使用 mtime/mmin 筛选。
find -user {用户名} 按文件所有者筛选。
find -group {组名} 按文件所有组筛选。
find -perm {八进制权限表示} 按文件权限筛选,可用 +/- 表示大于或小于。

注意时差部分可以填写一个数字表示一个时刻,如 find -mtime 10 表示第 [10,11)[10, 11) 天前;使用 +/- 则可以表示大于或小于若干时间,如 find -mtime -10 表示第 [0,10)[0, 10) 天前,find -mtime +10 表示第 [10,+)[10, +\infty) 天前,其余关于时间的选项同理。

类似于 -size 选项也可以使用 +/- 符号表示大于和小于。size 文件大小单位中使用 GGB / MMB / kKB / cBytes 注意区分大小写,默认单位为 b (块) 512 Bytes

diff 比对文本

内置命令,使用过 git 都知道文本比对是什么样的。

1
2
diff a.txt b.txt  # 比对 a.txt 和 b.txt 内容差异, 用过 git 的都知道
# 无差异不输出任何

time 运行计时

内置命令,即使程序运行时间,包含 realusersys 时间。

1
2
3
4
time a.out  # 测试 a.out 运行时间, 如果程序异常退出会返回退出值
# real 0m0.059s # 实时时间, 即程序运行的完整时间, 包含 IO 阻塞 / 时间片轮转等
# user 0m0.047s # 用户时间, 即程序以用户态 (即一切非阻塞的非内核态) 运行的时间
# sys 0m0.013s # 系统时间, 即程序以系统态运行的时间

factor 分解质因数

内置命令,用于分解质因数。其内部实现是 Pollard Rho 算法。

1
2
factor 1234567
# 1234567: 127 9721