# 帮助文档

长的帮助: man <command>

短的帮助: tldr <command>

有了 tldr 以后,很多教程都可以删掉了。

# 更换镜像源

镜像 命令
apt(ubuntu20) 腾讯 sudo wget -O /etc/apt/sources.list http://mirrors.cloud.tencent.com/repo/ubuntu20_sources.list
pip 豆瓣 pip3 config set global.index-url http://pypi.doubanio.com/simple && pip3 config set global.trusted-host pypi.doubanio.com
npm & pnpm 淘宝 见下
yarn 淘宝 见下
docker 阿里云 sudo wget -O /etc/docker/daemon.json https://blog.lyh543.cn/mirrors/docker.json
docker(windows) 阿里云 iwr -O ~/.docker/daemon.json https://blog.lyh543.cn/mirrors/docker-desktop-windows.json
maven 阿里云 wget -O ~/.m2/settings.xml https://blog.lyh543.cn/mirrors/maven.xml
tlmgr 科大 tlmgr option repository http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet
GitHub fastgit git config --global url."https://hub.fastgit.org/".insteadOf "https://github.com/"

npm & pnpm & yarn:

# 配置镜像源:https://www.npmjs.com/package/mirror-config-china
sudo npm install -g mirror-config-china --registry=https://registry.npm.taobao.org
cd ~ && mirror-config-china --registry=https://registry.npm.taobao.org

# swap

# 设置 swapfile

sudo mkdir /swap
sudo dd if=/dev/zero of=/swap/swapfile bs=1024 count=4194304    # 4194304 为 4GiB
sudo chmod 600 /swap/swapfile
sudo mkswap /swap/swapfile
sudo swapon /swap/swapfile
free -m # 验证成功

将下面一行追加到 /etc/fstab

/swap/swapfile                            swap swap defaults 0 0

# 文件

# 当前文件夹

pushdpopd 起了 cd 的作用,还能自动将当前目录压栈、出栈。

$ pwd
~

$ pushd /tmp
/tmp ~

$ pwd
/tmp

$ popd
~

$ pwd
~

pwd 查看当前文件夹,dirname $0 查看运行的脚本所在文件夹。配合 $() 语法可以直接切换到当前目录:

cd $(dirname $0)

# 查看文件/文件夹/磁盘的大小

中文 英文 命令
查看磁盘大小 display filesystem df -h
查看目录下的文件大小 list ls -hs
查看目录下的文件夹的大小 disk usage du -h --max-depth=1

以上的 -h 都是 --human-readable,不使用这个开关,则会使用一个数字表示大小(单位为 KB);使用开关后,则会使用 200K1.8G 的形式。
注意 du 如不加 --max-depth 参数,会统计完所有的目录。

# 进程

# 任务管理器

可以使用 tophtop(后者对鼠标、颜色支持更好)。

# 进程后台运行

# 使用 nohup

使用 nohup 的话,一行代码就 ok:

# nohup <command> & &>/dev/null
nohup ssserver & &> /dev/null

可能会看到 ignore input 之类的警告,不用管,Ctrl+C 退出前台即可,此时 ssserver 正在后台运行。

# 使用 pm2

这个要麻烦一点,要从 npm 下载,所以还得先下载 npm

apt install npm
npm install pm2 -g
pm2 --name s1 -f start http-server # 配置 pm2

pm2 save # 可选命令,作用是保存当前的 pm2 状态
pm2 startup # 可选命令,下次开机的时候可以恢复到 save 的状态

pm2 ls   # 可选命令,列出当前 pm2 的任务

# 使用 systemd

也可以配置 systemd。以下是一个模板。

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=lyh543
Restart=on-failure
RestartSec=5s
ExecStart=sudo /usr/bin/frps -c /etc/frp/frps.ini

[Install]
WantedBy=multi-user.target

将其保存在 /etc/systemd/system/xxx.service 后:

systemctl enable /etc/systemd/system/xxx.service
systemctl start xxx

即可。

# 进程开机自启

# 使用 /etc/rc.local

sudo /etc/rc.local 最后追加命令,然后给权限 sudo chmod a+x /etc/rc.local 即可。

不过貌似 alias 语句无效,可能 alias 是用户级的命令,需要用户登录时执行。

# 使用 systemd

# 任务定时运行

# 使用 crontab

编辑本用户的 crontab

crontab -e

如果命令复杂的话,推荐写成一个脚本,然后输入以下内容:

# 文件格式說明
#  ——分鐘(0 - 59)
# |  ——小時(0 - 23)
# | |  ——日(1 - 31)
# | | |  ——月(1 - 12)
# | | | |  ——星期(0 - 7,星期日=0或7)
# | | | | |
# * * * * * 被執行的命令
  0 * * * * cd /path/to/script/ && ./script.sh >>cron.log 2>&1

上面就是每小时的 0 分 0 秒,cd 到指定目录,然后执行脚本,将标准输出重定向到目录下 cron.log,将错误输出重定向到和标准输出一起。

# 用户

# 添加用户并给予 sudo 权限

sudo useradd <newuser> --disabled-password  # 禁用密码,只允许 ssh 登录
sudo usermod -aG sudo <newuser>             # 将用户加入 sudo 组
sudo -u <newuser>                           # 上号
echo >> ~/.ssh/authorized_keys "ssh-rsa xx" # 添加 ssh 公钥

然后上号 sudo 检查一下是不是可以了。如果不行,可以试试在 /etc/sudoers 里面修改 %sudo 一行:

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

# ssh

在使用 Git 和搭建服务器的时候都会用到 ssh,于是笔记也比较零散。

在这里丢几个链接:

# log

# 查看 Shell 启动过程

可以用来追踪环境变量在哪里被修改。

# bash
PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2

# zsh
zsh -xl