清除并重置终端
要清除终端内容,使用以下命令,或直接按键盘上的 Ctrl+L。如果你不小心用 cat 或 less 读取了二进制文件,导致屏幕显示混乱,可以使用 reset 命令重新初始化终端。列出最近执行的命令
使用 history 命令列出所有最近执行的命令。或者按 Ctrl+R 从历史记录中搜索并执行命令。关闭卡住的窗口或应用程序
$ ps ax |grep firefox[processID] ?? S 0:00.22 firefox$ kill [processID]
Tab 自动补全
这能帮你节省大量时间。例如,如果你想删除一个文件名很长的文件,可以输入文件名的前几个字符,然后按 TAB 键自动补全。如果存在多个可能项,按两次 TAB 会列出所有可能的选项。设置别名(临时)
为最常用的命令创建别名,节省时间。别名就像自定义快捷方式。alias publicip="curl ifconfig.me"
设置别名(永久)
让别名在会话之间甚至不同发行版之间保持有效。先确认你使用的 Shell:vim ~/.config/fish/config.fish
命令链式执行
自动按顺序执行多个命令。无论前面的命令是否失败,都会继续执行:command1 ; command2 ; command3
使用双与号 && 分隔时,只有前一个命令执行成功,才会执行下一个命令:使用双竖线 || 分隔时,只有前一个命令执行失败,才会执行下一个命令:命令语法
如果你的系统中没有手册页(这种情况极少见),可以检查该命令是否提供了帮助信息:一个非常实用的工具是 TLDR,它提供了命令的通用使用示例。光标导航
| 快捷键 | 功能 |
|---|
ctrl + u | 清除光标前的所有内容 |
ctrl + a | 移动到行首 |
ctrl + e | 移动到行尾 |
ctrl + f | 向前移动一个字符 |
ctrl + b | 向后移动一个字符 |
ctrl + w | 剪切最后一个单词 |
ctrl + k | 清除光标后的所有内容 |
ctrl + _ | 撤销 |
meta + f | 向前移动一个单词 |
meta + b | 向后移动一个单词 |
以上适用于默认的 Emacs 模式。你也可以切换到 Vim 模式:重定向
你可以通过在命令后添加以下符号来重定向标准输入、输出和错误。| 符号 | 功能 |
|---|
> | 将输出写入文件(会覆盖并销毁文件中已有的内容) |
| echo "Write output to file" > example.txt |
>> | 将输出追加到文件末尾 |
| echo "Append this to file" >> example.txt |
< | 从文件读取输入 |
| cowsay < example.txt |
2> | 将错误信息写入文件(覆盖模式)。这意味着错误输出可以与正常输出分开重定向 |
| rm -vf folder1 file1 > out.txt 2> err.txt |
命令中的特殊字符
Shell 特殊字符会在命令被提交时立即由 Shell 解释。例如,如果你输入 ls *.bak,Shell 会将 *.bak 翻译为当前文件夹中所有以 .bak 结尾的文件列表。ls 命令本身永远不会看到星号。因此,如果你想搜索文件名中实际包含星号的文件,必须对星号进行转义,以阻止 Shell 解释它。| 符号 | 功能 |
|---|
\ | 转义自身及其他特殊字符 |
* | 代表任意内容(包括空字符) |
| find ex*.txt |
? | 代表任意单个字符 |
| find ex?mple.txt |
[] | 包含用于匹配单个字符的模式 |
| find ex[abc]mple.txt |
() | 在子 Shell 中运行括号内的内容 |
| pwd && (cd /etc) && pwd |
; | 终止命令管道——用于在一行中分隔多个命令 |
| echo Hi ; uname |
'' | 单引号内的内容原样传递给命令,不做任何解释 |
| find '(echo abc)'* |
`` | 反引号内的内容作为命令执行,其输出作为当前命令的一部分 |
| echo [uname](/man/uname)\`` |
"" | 双引号内的内容被视为一个参数;引号内的特殊字符(除 $ 和 \ 外)不做解释 |
| cd "untitled folder" |
\| | 管道,允许你将一个命令的输出发送给另一个命令 |
| fortune | cowsay |
& | 在后台运行命令 |
| cowsay & |
&& | 仅当前一个命令执行成功时,才执行第二个命令 |
| ping localhost -c 1 && cowsay great |
\|\| | 仅当前一个命令执行失败时,才执行第二个命令 |
| ping "not.reachable" -c 1 || cowsay sorry |
>> | 这些符号用于重定向 |
!! | 重复执行上一条命令 |
| sudo !! |
!* | 更改命令,保留所有参数 |
| tail !* |
^ | 快速历史替换,将一个字符串替换为另一个 |
| ^png^xcf^ |
# | 将整行变为注释;该行不会被处理 |
| hint text
|
不要将 Shell 特殊字符与正则表达式中的特殊字符混淆。正则表达式必须用单引号括起来,以防止被 Shell 解释。查看文件权限
| 位置 | 含义 |
|---|
| 1 | 文件类型:- 表示普通文件,d 表示目录,l 表示符号链接 |
| 2-4 | 所有者权限(rwx) |
| 5-7 | 所属组权限(rwx) |
| 8-10 | 其他用户权限(rwx) |
示例:-rwxr--r-- 表示所有者有读、写、执行权限,而组用户和其他用户只有读权限。修改文件权限
$ chmod [modification] [file]
示例:赋予组用户对 test.txt 文件的读写权限。通过二进制数值设置文件权限
示例:赋予所有者读写权限,组用户读权限,其他用户无任何权限。第一个数字代表所有者权限,第二个代表组权限,最后一个代表其他用户权限。这些数字是rwx字符串的二进制表示。在后台运行命令
如果某个命令需要很长时间执行,你可以用 Ctrl+Z 将其挂起,然后让它在后台继续运行。如果你想让命令在退出登录后继续运行,使用 nohup。对于长时间运行的任务或管理多个终端会话,推荐使用 tmux。它可以让你分离和重新附加会话,即使断开连接工作也不会丢失。使用 Ctrl+B 然后按 D 分离会话。之后可以重新附加:使用 cron 调度任务
编辑用户的 crontab 文件以安排周期性任务。| 字段 | 取值范围 |
|---|
| 分钟 | 0 - 59 |
| 小时 | 0 - 23 |
| 日期 | 1 - 31 |
| 月份 | 1 - 12 |
| 星期 | 0 - 7(0 和 7 都表示星期日) |
0 2 * * * /home/user/backup.sh