uncategorized

Linux基础知识

记录常用的Linux命令和场景

SSH

配置 Linux 免登陆

将本机的 ssh 公钥内容拷贝到目标服务器的 ~/.ssh/authorized_keys 里面,公钥可以添加多个,空行隔开

authorized_keys 中存在的公钥对应的机器可以免密码登录

配置SSH连接防断开

长时间idle的ssh默认配置下10分钟如果双方都没有通信,连接会被断开

从客户端配置:

1
2
3
TCPKeepAlive yes
ServerAliveInterval 300
ServerAliveCountMax 3

这几个配置都可以直接在ssh 命令的 -o 后面跟随发送

  1. ssh 客户端根据 TCPKeepAlive 决定是否发送心跳包保持连接
  2. 客户端每隔 ServerAliveInterval 秒向服务器发送数据包,表示要保持连接 (默认是没有发送的)
  3. 若服务端没有响应,则记录下没响应的次数,当次数超过 ServerAliveCountMax 后,则断开连接

从服务端配置:

1
2
ClientAliveInterval 60
ClientAliveCountMax 1

服务端也可以主动发心跳来检查客户端是否还在线,以上配置就表示每隔60s发送心跳给客户端, 客户端无响应次数超过1后,服务端断开连接

  1. ssh 服务器每 ClientAliveInterval 秒发送一个信号到客户端,并等待客户端响应; (默认是0,不发送)
  2. 若客户端没有响应,则记录下没响应的次数,当次数超过 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]

  1. -a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
  2. -v, –verbose 详细模式输出
  3. -c, –checksum 打开校验开关,强制对文件传输进行校验
  4. –ignore-existing 忽略已经存在的文件,增量同步,对持续增加的数据比较友好

nohup

大多数情况下,进程被关闭时会收到SIGHUP信号(如在前台运行服务器程序时,按Ctrl+C终止运行)

例如在我运行一个 nodejs 后端程序时,我想让它后台运行,不要一直占用我前台IO,也不会因为我的远程登录断开而随之终止[*],这时可以在原本要运行的命令前加 nohup : nohup node server.js

这样这个进程就会无视SIGHUP信号,将输出导到非tty(如默认当前目录下的nohup.out文件)用户就可以自由切断当前IO,甚至退出用户

[*] 可以认为用户在退出时会向他的进程组下的进程发送SIGHUP信号,系统会默认终止收到信号的进程

前台任务转后台

当前正在运行的前台任务也可以通过暂停+bg切到后台的方式实现;

与 nohup 启动后无视信号的方式不同,这个方法可以处理当前正在运行中的前台任务,而不用关闭进程重新用 nohup 打开

1
2
3
4
5
6
7
# 1. 在运行进程的窗口中按 Ctrl+Z, 这个组合键默认会挂起当前正在运行的前台进程
# 2. 可以用 jobs 检查刚刚被挂起的任务
$ jobs
# 输出 [1] + suspended docker-compose up # suspended 表明这个任务被挂起

# bg 指令把1号任务放到后台执行, 其他任务号依次类推: bg %n
$ bg %1

column 格式化输出

1
cat /some.text | column -t -s:
  1. -t 使用表格输出,同一列取最大宽度
  2. -s 分隔符,默认空格

文本处理 / 查找

SED 替换文件内容

sed -i s/[target]/[replacement]/g

grep 在文件夹下花式查找包含特定字符的内容

grep -r [pattern] ./

grep -lr [pattern] ./

  1. -r 递归查找子文件夹
  2. -l 只列出文件名,不加此参数则输出文件内容

awk文本处理

awk 是一个面向行的文本处理程序

1
2
3
4
awk -F: '{ print $1 }'

# 大多数使用的时候都不是直接填入待处理内容,都是将其他地方的输出管道到 awk
cat /some.text | awk -F: '{ print $1 }'
  1. -F 表示指定分割符,不填写该参数默认使用空格作为分隔符(上例用冒号作为分隔符)

网络

查看端口占用情况

1
2
netstat -anp
netstat -anp | grep tcp | grep 8080
  1. -a 显示所有的连接,包括 LISTEN(监听进程) 和 ESTABLISHED(与监听进程建立连接的客户进程)
  2. -n 显示为数字, (而不是用 ssh 代替22端口;https 代替 443 端口等
  3. -p 列出程序名称

硬件相关

笔记本合盖不休眠 (CentOS)

1
2
3
4
5
sudo /etc/systemd/logind.conf
# 启用 HandleLidSwitch 这行,设置值为 ignore, 即合盖后不做任何动作

# 重启服务
sudo service systemd-logind restart

术语

  • EPEL - Extra Package for Enterprise Linux
Share