Command-line Environment
Command-line Environment
常用信号
- SIGTERM: 终止信号,通常用于请求进程正常退出。
- SIGINT: 中断信号,通常由用户按下Ctrl+C产生,用于中断正在运行的进程。
- SIGKILL: 杀死信号,强制终止进程,无法被进程捕获或忽略。
- SIGSTOP: 停止信号,暂停进程的执行。
- SIGCONT: 继续信号,继续被暂停的进程。
- SIGALRM: 闹钟信号,用于实现定时器功能。
- SIGCHLD: 子进程状态改变信号,当子进程终止或停止时,父进程会收到该信号。
- SIGUSR1,SIGUSR2: 用户自定义信号,可以用来实现进程之间的通信。
- Ctrl+C (SIGINT): 这是最常用的信号,当你在终端中运行一个程序时,按下Ctrl+C,就会向该程序发送SIGINT信号,通常会终止程序的运行。
- Ctrl+Z (SIGTSTP): 这个信号会将当前的前台进程挂起,你可以使用命令
fg
将挂起的进程恢复到前台,或者使用bg
将挂起的进程放到后台运行。 - Ctrl+\ (SIGQUIT): 这个信号除了终止程序外,还会生成一个core dump文件,这个文件可以用来调试程序。
nohup
用于在终端窗口关闭后继续运行命令。nohup command &
nohup
: 告诉系统在终端窗口关闭后继续运行命令。command
: 要执行的命令。&
: 将命令放到后台运行。
jobs
- -l 或 –list: 以长格式显示作业信息,包括作业编号、进程 ID、命令行等。
- -p 或 –pids: 只显示作业的进程 ID。
- -r 或 –running: 只显示正在运行的作业。
- -s 或 –stopped: 只显示已停止的作业。
可以使用百分号 + 任务编号(jobs
会打印任务编号)来选取该任务。如果要选择最近的一个任务,可以使用$!
这一特殊参数。
与 jobs 命令配合使用的命令
- fg: 将后台作业调回前台继续运行。
- bg: 将一个停止的作业放到后台继续运行。
kill [signal] jobspec
:其中signal如果不指定,默认发送SIGTERM
。-l
可以查看可发送的信号列表。
pgrep
- -a: 显示进程的命令行。
- -f: 根据完整的命令行进行匹配。
- -l: 显示进程名。
- -u: 根据用户 ID 匹配。
- -g: 根据进程组 ID 匹配。
- -P: 根据父进程 ID 匹配。
- -t: 根据终端名匹配。
- -x: 精确匹配进程名。
- -i: 忽略大小写。
- -v: 反向匹配,即查找不匹配的进程。
disown
用于将后台运行的作业从当前 shell 的作业列表中删除。这意味着,即使你关闭了终端窗口,这些作业仍然会继续运行。disown [-r] jobspec
- jobspec:指定要删除的作业。可以使用作业号(如
%1
)、作业名(如myjob
)或进程 ID(PID)。 - -r:删除所有后台作业。
tmux
tmux 的核心概念
- 会话 (session): 一个独立的工作环境,可以包含多个窗口。
- 窗口 (window): 会话中的一个视图,可以包含多个窗格。
- 窗格 (pane): 窗口中的一个子区域,用于显示不同的命令行。
常用操作
会话 - 每个会话都是一个独立的工作区,其中包含一个或多个窗口
tmux
开始一个新的会话tmux new -s NAME
以指定名称开始一个新的会话tmux ls
列出当前所有会话- 在
tmux
中输入<C-b> d
,将当前会话分离 tmux a
重新连接最后一个会话。您也可以通过-t
来指定具体的会话
窗口 - 相当于编辑器或是浏览器中的标签页,从视觉上将一个会话分割为多个部分
<C-b> c
创建一个新的窗口,使用<C-d>
关闭<C-b> N
跳转到第 N 个窗口,注意每个窗口都是有编号的<C-b> p
切换到前一个窗口<C-b> n
切换到下一个窗口<C-b> ,
重命名当前窗口<C-b> w
列出当前所有窗口
面板 - 像 vim 中的分屏一样,面板使我们可以在一个屏幕里显示多个 shell
<C-b> "
水平分割<C-b> %
垂直分割<C-b> <方向>
切换到指定方向的面板,<方向> 指的是键盘上的方向键<C-b> z
切换当前面板的缩放<C-b> [
开始往回卷动屏幕。您可以按下空格键来开始选择,回车键复制选中的部分<C-b> <空格>
在不同的面板排布间切换
alias
用于创建命令别名。
例如:alias ll='ls -la'
注意等号左右都没有空格。unalias 别名
删除别名 alias
查看所有别名
为了使自定义的别名在每次打开终端时都生效,可以将它们写入 shell 的配置文件中。
- Bash:
~/.bashrc
- Zsh:
~/.zshrc
配置文件dotfiles
这些文件通常隐藏在你的用户目录下,用来存储各种应用程序和操作系统的个性化设置。
实际上,很多程序都要求您在 shell 的配置文件中包含一行类似 export PATH="$PATH:/path/to/program/bin"
的命令,这样才能确保这些程序能够被 shell 找到。
ssh
ssh-keygen
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa
:指定使用 RSA 算法。-b 4096
:密钥长度为 4096 位,保证更高的安全性。-C "your_email@example.com"
:注释,用于标识这个密钥,一般填写你的邮箱地址。Enter file in which to save the key (/home/your_user/.ssh/id_rsa):
这里保持默认按enter。1
2Enter passphrase (empty for no passphrase):
Enter same passphrase again:ls -al ~/.ssh
查看密钥文件cat ~/.ssh/id_rsa.pub
将该公钥粘贴到你想要连接的远程服务器或服务上。通常是粘贴到~/.ssh/authorized_keys
文件或在服务中配置 SSH 公钥。
ssh-copy-id
用于将本地主机的公钥复制到远程主机的 authorized_keys
文件中的命令行工具。允许使用 SSH 密钥进行无密码登录。ssh-copy-id [options] user@host
选项:
-i identity_file
: 指定要使用的私钥文件(默认为~/.ssh/id_rsa
)。-f authorized_keys_file
: 指定远程主机的authorized_keys
文件(默认为~/.ssh/authorized_keys
)。-K
: 将公钥添加到远程主机的known_hosts
文件中。-R
: 从远程主机的authorized_keys
文件中删除公钥。
scp
- -r:递归复制整个目录。
- -p:保留文件属性(权限、时间戳等)。
- -v:显示详细的传输过程。
- -q:静默模式,不显示输出。
- -i identity_file:指定使用的私钥文件。
rsync
rsync [options] source destination
常用选项
- -a:归档模式,保留文件属性(权限、时间戳等)。
- -v:详细模式,显示传输过程。
- -z:压缩传输数据,提高效率。
- -r:递归同步整个目录。
- -u:更新模式,仅传输更新的文件。
- -t:保留文件修改时间。
- -p:保留文件权限。
- -P:保留文件所有者和组。
- –progress:显示传输进度。
- –delete:删除目标中不存在的源文件。
课后练习
1、答:
1 |
|
2、kill
命令成功退出时其状态码为 0 ,其他状态则是非 0。kill -0
则不会发送信号,但是会在进程不存在时返回一个不为 0 的状态码。
答:
1 |
|
然后在当前目录下运行该脚本,并确保它在当前shell会话中定义了pidwait函数source filename.sh
。然后再执行pidwait <pid>即可。