zombie110year / blog-source

https://blog.zombie110year.top
2 stars 1 forks source link

Linux 使用技巧 #68

Open zombie110year opened 5 years ago

zombie110year commented 5 years ago

主动扫描设备

当在 Linux 主机上插入新的硬盘时, 如果设备没有出现在 /dev 目录下,需要手动命令机器扫描 SCSI 接口:

  1. 进入 /sys/class/scsi_host 目录,查看当前运行了哪些主机:
ls /sys/class/scsi_host
  1. /sys/class/scsi_host/hostx/scan 文件中写入 - - - 以命令其主动扫描:
# 我的机器上有 host0~host5,不知道具体是哪一个,因此命令全部都扫描一遍
for $num in {0..5}
do
    echo "- - -" > "/sys/class/scsi_host/host${num}/scan"
done
zombie110year commented 5 years ago

控制任务执行

前台任务与后台任务互换.

# C-z 将任务挂起后, 更改执行方式
jobs # 查看挂起的任务列表
fg %1 # 将 1 号任务放到前台执行
bg %1 # 将 1 号任务放到后台执行

将正在运行的任务设置为 nohup

https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-nohup

# 同样先 C-z 挂起
bg %1 # 将 1 号任务放到后台
disown -h %1 # 让 1 号任务忽略当前 Session 发出的中断信号

使用 tmux

我编写的 tmux 简明教程

zombie110year commented 5 years ago

创建交换空间

20

以下操作默认为 root 用户

使用 dd 命令创建空文件

# 创建一个 16GB 大小的空文件
dd if=/dev/zero of={{ 一个方便的位置 }}/.swapfile bs=1G count=16
# 最好放在根目录下, 并且让其拥有者为 root 用户(UID=0)

将文件格式化为 swap 格式

mkswap /.swapfile

将文件挂载为 swap 分区

swapon /.swapfile

将文件卸载并删除

# 卸载全部交换分区
swapoff -a
# 卸载指定文件
swapoff /.swapfile
# 就像普通的文件那样删除即可
rm /.swapfile
zombie110year commented 5 years ago

手动生成账户与密码

在 Linux 中除了使用 useradd, passwd 等命令来创建账户外,还可以通过编辑系统文件来创建用户:

  1. /etc/passwd 文件,存储了系统中的用户信息
  2. /etc/shadow 文件,存储了系统中的密码信息

这两个文件都类似于 csv 格式,只不过用 : 做字段间分隔符。

passwd 文件字段

username:x:comment:uid:gid:home_dir:login_shell

x 是密码占位,真正的密码被加密后存储在 /etc/shadow 文件中。

shadow 文件字段

username:password:mtime:min_change_interval:valid_cycle:warning:disable_countdown:disable_time

第 2 列是最重要的,它就是密码列。其值可能有 6 中形式:

要生成这样的密码,可以用 Python 中的 crypt 库(这个库在 Windows 上没有):

>>> import crypt
>>> crypt.crypt("example")
'$6$JaqRj6qyyBz8WY5o$jR/tLU9JwGR2H2C77eXAQvQGrUqvFYwBsVv6LH/79lqaWjqlh0BubHMbHw6ozUkGWlHeGycRukQvIU3Tfmn5L/'

crypt 会自动生成 salt 并格式化为 shadow 文件所需格式。

关于其他字段:

  1. 用户名
  2. 密码
  3. 最后修改密码的日期,从 Unix 时间戳起点(1970-2-1)开始,单位为天
  4. 最小修改间隔,允许用户多久修改一次密码,单位为天
  5. 密码有效期,密码自设置后多少天到期
  6. 警告阈值,用户在密码到期之前多少天收到警告
  7. 账户禁用倒计时,在密码到期后多少天禁用此账户
  8. 禁用计时,账户已经被禁用多少天

验证已有的密码

使用 Python crypt 库,可以通过这样的方式生成一个指定的密码:

from crypt import crypt
>>> crypt("pi", "$6$pkr123456ZQ7jHMb")
'$6$pkr123456ZQ7jHMb$QT5Eh4hzYqn3Ihxs1y8nHPnmtIGaaQiXGvA0anR6p16TNZGhJU8.HuaY9/fvyxsju1r3y5.dqzD│~                                                                                              Y6msSeppz6/'

以此来验证 /etc/shadow 中的用户 pi 的密码是否是 pi.

zombie110year commented 5 years ago

dnsmasq

部署 dnsmasq 用作 DNS (缓存) 服务器,一般包管理器中就有,安装下载后会自动生成配置文件和 systemd unit-file。

修改配置文件 /etc/dnsmasq.conf,原本的内容都被注释了,要用的配置添加在末尾,以便日后对照示例修改。

# DNS 默认端口是 53
port=53
# 监听所有地址的访问
listen-address=0.0.0.0
# 不读取 /etc/hosts
no-hosts
# 读取指定的 hosts 文件
addn-hosts=/var/lib/dnsmasq/custom-hosts
addn-hosts=/var/lib/dnsmasq/googlehosts
# 设置缓存大小
cache-size=1024

其中 custom-hosts 是内网中一些网络服务使用的域名,而 googlehosts 是从 https://github.com/googlehosts/hosts 下载下来的 DNS,用于访问一些被 DNS 污染而无法访问或访问性能降低的网站。