记录常用的Linux命令和场景
SSH
配置 Linux 免登陆
将本机的 ssh 公钥内容拷贝到目标服务器的 ~/.ssh/authorized_keys
里面,公钥可以添加多个,空行隔开
authorized_keys 中存在的公钥对应的机器可以免密码登录
配置SSH连接防断开
长时间idle的ssh默认配置下10分钟如果双方都没有通信,连接会被断开
从客户端配置:
1 | TCPKeepAlive yes |
这几个配置都可以直接在ssh 命令的 -o 后面跟随发送
- ssh 客户端根据
TCPKeepAlive
决定是否发送心跳包保持连接 - 客户端每隔
ServerAliveInterval
秒向服务器发送数据包,表示要保持连接 (默认是没有发送的) - 若服务端没有响应,则记录下没响应的次数,当次数超过
ServerAliveCountMax
后,则断开连接
从服务端配置:
1 | ClientAliveInterval 60 |
服务端也可以主动发心跳来检查客户端是否还在线,以上配置就表示每隔60s发送心跳给客户端, 客户端无响应次数超过1后,服务端断开连接
- ssh 服务器每 ClientAliveInterval 秒发送一个信号到客户端,并等待客户端响应; (默认是0,不发送)
- 若客户端没有响应,则记录下没响应的次数,当次数超过 ClientAliveCountMax 后,则断开连接
服务器配置完别忘了重启sshd:service ssh restart
用户和权限
新增用户:
adduser
: 会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
useradd
:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本
为用户新增组
usermod -aG <group-name> <user-name>
-a 表示 append, 不加这个参数会导致用户只属于被改后的一个组(其他组都不再归属)
文件归属
$ chown [file] [username]
修改文件归属用户
$ chgrp [file] [groupname]
修改文件归属组
$ chown -R [dir] [username]
递归修改目录和子项归属用户
文件权限
$chmod u+x [file]
给文件添加用户执行权限(u+x 意思是user + execute, 还有u+w, u+r 等,分别是添加用户读权限和写权限,同理为组添加读写执行权限分别为 g+r, g+w, g+x, 删除相应权限就用减号)
防止文件误删
$ chattr =i <file>
改变文件自身属性,使其变得不可删除,sudo rm -f 也不行
查看当前登入系统的用户
w
最后一列显示正在执行的程序
USER | TTY | FROM | LOGIN@ | IDLE | JCPU | PCPU | WHAT |
---|---|---|---|---|---|---|---|
yuantu | pts/1 | 192.168.0.12 | 01:16 | 24:18 | 0.56s | 0.56s -bash | -bash |
root强制别的已登录用户下线
pkill -kill -t tty
其中tty也就是用w指令查看到的那个tty号
运维
查看 history 带时间
执行history 前先执行 HISTTIMEFORMAT=”%d/%m/%y %T “
(或者写入 .bashrc 之类的)
查看系统日志
journalctl
使用 rsync 备份文件夹
rsync -avc --ignore-existing [usr]@[host]:/path/to/dir [dest]
- -a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
- -v, –verbose 详细模式输出
- -c, –checksum 打开校验开关,强制对文件传输进行校验
- –ignore-existing 忽略已经存在的文件,增量同步,对持续增加的数据比较友好
nohup
大多数情况下,进程被关闭时会收到SIGHUP信号(如在前台运行服务器程序时,按Ctrl+C终止运行)
例如在我运行一个 nodejs 后端程序时,我想让它后台运行,不要一直占用我前台IO,也不会因为我的远程登录断开而随之终止[*],这时可以在原本要运行的命令前加 nohup : nohup node server.js
这样这个进程就会无视SIGHUP信号,将输出导到非tty(如默认当前目录下的nohup.out文件)用户就可以自由切断当前IO,甚至退出用户
[*] 可以认为用户在退出时会向他的进程组下的进程发送SIGHUP信号,系统会默认终止收到信号的进程
前台任务转后台
当前正在运行的前台任务也可以通过暂停+bg切到后台
的方式实现;
与 nohup 启动后无视信号的方式不同,这个方法可以处理当前正在运行中的前台任务,而不用关闭进程重新用 nohup 打开
1 | 1. 在运行进程的窗口中按 Ctrl+Z, 这个组合键默认会挂起当前正在运行的前台进程 |
column 格式化输出
1 | cat /some.text | column -t -s: |
- -t 使用表格输出,同一列取最大宽度
- -s 分隔符,默认空格
文本处理 / 查找
SED 替换文件内容
sed -i s/[target]/[replacement]/g
grep 在文件夹下花式查找包含特定字符的内容
grep -r [pattern] ./
grep -lr [pattern] ./
- -r 递归查找子文件夹
- -l 只列出文件名,不加此参数则输出文件内容
awk文本处理
awk 是一个面向行的文本处理程序
1 | awk -F: '{ print $1 }' |
- -F 表示指定分割符,不填写该参数默认使用空格作为分隔符(上例用冒号作为分隔符)
网络
查看端口占用情况
1 | netstat -anp |
- -a 显示所有的连接,包括 LISTEN(监听进程) 和 ESTABLISHED(与监听进程建立连接的客户进程)
- -n 显示为数字, (而不是用 ssh 代替22端口;https 代替 443 端口等
- -p 列出程序名称
硬件相关
笔记本合盖不休眠 (CentOS)
1 | sudo /etc/systemd/logind.conf |
术语
- EPEL - Extra Package for Enterprise Linux