Command-line Environment

Command-line Environment

任务控制

shell会使用UNIX提供的信号机制去执行进程间的通信,进程收到信号的时候,会基于信号改变其执行

停止

停止任务:^c
信号:SIGINT

在进行find遍历目录时,使用^c,发出SIGINT到该进程,停止了该任务

课程中提供了一个脚本,忽略了SIGINT信号的基本操作也就是终止程序,为了停止可以使用另外一个信号
^\
信号:SIGQUIT

import signal, time
def handler(signum, time):
	print("\nI got a SIGINT, but i am not stopping")

signal.signal(signal.SIGINT,headler)

i=0
while True:
	time.sleep(.1)
	print("\r".farmat(i),end="")
	i+=1;

程序接收到了SIGINT信号,但是并不会让该程序停止,这是就可以使用^\来停止该程序

另外还有一个信号也可以用来停止程序
信号:SIGTERM
通过执行kill -TERM <pid>发送该信号

暂停

终端暂停:^z
信号:SIGTSTP

可以使用fg恢复到前台继续,bg恢复到后台继续

使用命令:kill -STOP <pid>
信号:SIGSTOP

主要区别

特性 SIGTSTP SIGSTOP
触发方式 kill或者系统 交互界面^z
是否可捕获 不可捕获、阻塞、忽略 可捕获、阻塞、忽略
典型用途 系统强制暂停 用户暂停

后台

在命令后面加上&,即可让任务在后台执,[[#暂停]]中提到的bg也可以让暂停的任务在后台去执行

当转入后台运行后,终端关闭后会发送一个SIGHUP信号,终止该任务

可以使用nohup忽略SIGHUP信号,可以使用kill <pid>直接结束进程

更多信号信息

终端多路复用

tmux

tmux的结构:

  • 会话:每一个会话都是一个独立的工作区
    • 窗口:相当于一个标签页,将会话分为多个部分
      • 窗格:可以使一个屏幕放多个shell

tmux快速入门

别名

相当于将长命令缩短
定义语法:

alias alias_name="command"

=两边不要有空格

禁用别名语法:

unalias alias_name

获取别名的定义:

alias alias_name

默认别名是不会持续生效的,可以放进shell的启动文件中比如:bashrczshrc

bashrc中的一部分内容

配置文件(Dotfile)

因为.开头,又叫点文件

默认为隐藏文件,shell程序会读取很多文件加载配置项

可以将这些文件统一放到一个目录中,搭配git统一进行管理

远端设备

ssh远端登录

ssh username@server

输入密码即可登录远端的服务器

直接执行命令

ssh username@server ls

SSH密钥

客户端生成密钥对

ssh-keygen -o -a 100 -t rsa -f ~/.ssh/id_rsa


此时~/.ssh/下就会有一个私钥文件和公钥文件

需要将.pub文件上传到服务端上

ssh-copy-id -i id_rsa.pub username@server

然后输入密码,即可将公钥上传到服务端,以后即可直接登录,不需要使用密码验证

SSH的复制

  • ssh+tee
cat filename | username@server tee serverfile
  • scp
scp /path/local_file username@server:/path/server_file
  • rsync
    scp类似

SSH配置

配置~/.ssh/config文件,可以实现别名登录
config

Host vm
	User username
	HostName server
	IdentityFile ~/.ssh/id_rsa

使用别名即可直接登录

ssh ming

原文章:http://www.ming-ice-tea.top/?p=38

posted @ 2024-12-22 13:27  明朝冰红茶  阅读(3)  评论(0编辑  收藏  举报