Skip to content

基本的命令

查看文件夹的内容

shell
ls 
ls -l  # 它的别名是 ll,部分环境有。
ll 路径 # 以列表的形式,列出指定文件夹的内容

复制文件

shell
cp 原文件 新路径
cp /路径 /新路径 # 复制文件夹到其他位置
cp /路径/* /新路径 # 复制文件夹的内容到其他文件夹

移动文件

shell
mv 原文件 新路径
mv /路径 /新路径 # 移动文件夹到其他位置
mv /路径/* /新路径 # 移动文件夹的内容到其他文件夹

下载文件

shell
curl -O 链接 # 下载到当前路径
curl -o /path/name.png URL # 指定路径、文件名
cd /tmp/downloads; curl -O URL; cd - # 下载到指定路径

操作 压缩包

shell
tar -xvf 压缩包名称        # 解压
tar -xvf 压缩包路径 -C 目的地 # 解压到指定的位置
tar -czvf 压缩包 原文件     # 创建压缩包
# x:解压 c: 压缩   z:压缩包的格式为tar.gz   v:输出详细信息   f:原文件,此参数必须在最后

查看 文件夹占用

shell
du -hd 1 # 查看当前目录、各子目录的大小。深度为一,类似Windows资源管理器的视图。
du -hs   # 查看 当前目录 的总大小
# du -hc   # 对象:当前目录、子目录
# du -ha   # 对象:当前目录、子目录、文件
# h: 以人类可读的格式显示; d: depth 深度; s: summarize 只输出所有项的总大小; c: 统计列出项的大小; a: 所有目录、文件

深度管理

SSH 免密码登录

假设主动发起连接的是客户端,被控制的是服务端。

核心思路:将客户端的公钥添加到服务端的 authorized_keys

向服务端发送公钥

在客户端执行此命令,来发送自己的公钥。

shell
# 追加本机的 ~/.ssh/id_rsa.pub 到 192.168.5.1 的 /root/.ssh/authorized_keys
ssh root@192.168.5.1 "tee -a /root/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
# 重启服务端SSH以生效。可能需要断开现有SSH连接。
ssh root@192.168.5.1 systemctl restart ssh

检查一下效果

shell
cat ~/.ssh/id_rsa.pub && ssh root@192.168.5.1 "cat /root/.ssh/authorized_keys"

此后,ssh root@192.168.5.1 就不再需要输入密码,但是这样还不够方便。通过增加别名,可以减少要输入的字符。

客户端配置别名(可选)。

~/.ssh/config增加此块

ini
# router
Host openwrt
	User root
	HostName 192.168.5.1
    # IdentityFile ~/.ssh/id_rsa.pub
shell
systemctl restart ssh  # 重启本机SSH以生效。可能需要断开现有SSH连接。

此后,ssh openwrt 命令,就意味着以身份root连接192.168.5.1,执行命令。

用户 与 组

添加用户

shell
useradd -u 950 -g 3000 muelsyse # 创建名为 muelsyse 的用户,并指定 UID 为 950,GID 为 3000
passwd muelsyse # 设置其密码

其他操作

shell
id username # 查看指定用户的信息
sudo userdel username # 删除用户

用户组

shell
groupadd -g 1001 admin # 创建名为 admin 的组,并指定 GID 为 1001
getent group 组名 # 查看指定组的信息
sudo groupdel groupname # 删除组

属主 与 权限

shell
chmod +x /etc/script # 赋予执行权限
chown -R 3000:950 /app/syncthing # 修改文件夹的属主(UID:GID)

挂载网络硬盘

挂载时期分为临时挂载、永久挂载,不同的方法效果不同。

永久挂载

按固定的格式,书写网络硬盘的信息,追加到/etc/fstab中。一行一个。

挂载 NFS

shell
# 格式: <server>:</remote/export> </local/directory> nfs <options> 0 0
192.168.5.25:/mnt/pool_1/Main /mnt/nfs nfs rw,nofail,_netdev 0 0

这代表挂载 192.168.5.25 的位于/mnt/pool_1/Main的文件 到本地的/mnt/nfs。云盘类型为nfs。允许读写。允许挂载失败后启动(开机)。网络硬盘。

挂载 SMB

shell
# 格式: //<server>:</remote/export> </local/directory> cifs <options> 0 0
//192.168.5.25/pool_1 /mnt/NAS cifs username=用户,password=密码,dir_mode=0777,file_mode=0777,nofail,_netdev 0 0

这代表挂载 192.168.5.25 的位于pool_1的文件 到本地的/mnt/NAS。云盘类型为cifs(SMB)。允许任何人读写、执行。允许挂载失败后启动(开机)。网络硬盘。

管理

shell
mount -a # 重新挂载所有在 /etc/fstab 中定义的文件系统。
umount /mnt/* # 卸载硬盘

临时挂载

shell
mount -t nfs -o rw,nofail,_netdev 192.168.5.25:/path /mnt/nfs

防火墙

bash
ufw enable # 开启防火墙
ufw disable # 永久关闭防火墙

服务

Ubuntu用systemctljournalctl管理服务。

shell
systemctl status name.service  # 查看状态
systemctl start name.service   # 启动服务
systemctl restart name.service # 重启服务
systemctl stop name.service    # 停止服务
systemctl enable name.service  # 开机自启
systemctl disable name.service # 禁止自启

journalctl -u name    # 查看某服务的日志
journalctl -u name -f # 实时查看某服务的日志

查看服务

shell
systemctl list-units --type=service                 # 查看所有已加载的服务
systemctl list-units --type=service --state=running # 查看所有正在运行的服务
systemctl list-unit-files --type=service            # 查看所有服务(包括未加载的)
systemctl --failed                                  # 查看所有失败的服务

INFO

服务未被加载的时机:新安装的服务、服务单元文件被修改、服务被禁用、系统启动时,配置文件存在问题或依赖关系未满足。

创建服务

  1. 创建服务文件:在目录/etc/systemd/system/ 下创建一个新的服务文件。例如,创建一个名为 myweb.service 的文件:
  2. 编辑服务文件: 格式见下文。
  3. 重新加载 systemd 配置systemctl daemon-reload
  4. 启动服务: systemctl restart myweb.service ; systemctl status myweb.service

简单示例

ini
[Unit]
Description=Neuro-sama, an artificial intelligence VTuber and chatbot that livestreams on Twitch, interacting with viewers through a large language model
After=network.target

[Service]
ExecStart=python run_server.py
WorkingDirectory=/app/Open-LLM-VTuber
Restart=always

[Install]
WantedBy=multi-user.target

详细介绍

Details
ini
[Unit]
Description=Example Service
Requires=network.service
Wants=monitoring.service
After=network.target

[Service]
ExecStart=/usr/bin/example-service
WorkingDirectory=/opt/example
User=exampleuser
Group=examplegroup
Restart=on-failure
RestartSec=10s
Environment="ENV_VAR=value"

[Install]
WantedBy=multi-user.target
RequiredBy=another-service.service
Alias=my-service-alias.service
Also=related-service.service

编写 systemd 服务文件可以帮助你更好地管理和控制系统服务。以下是 systemd 服务文件的详细介绍及常用选项:

服务文件的基本结构

systemd 服务文件通常位于 /etc/systemd/system//usr/lib/systemd/system/ 目录下,文件名以 .service 结尾。一个典型的服务文件由三个主要部分组成:[Unit]、[Service] 和 [Install]。

[Unit] 部分

定义服务的描述、依赖关系和启动顺序。

  • Description: 服务的简要描述。
  • Documentation: 服务相关文档的位置。
  • After: 定义服务应该在其他哪些服务之后启动。
  • Before: 定义服务应该在其他哪些服务之前启动。
  • Wants: 定义弱依赖关系,指定的服务启动失败或停止运行不影响当前服务。
  • Requires: 定义强依赖关系,指定的服务启动失败或异常退出会导致当前服务也退出。
[Service] 部分

定义服务的启动行为和运行环境。

  • ExecStart: 启动服务时执行的命令。
  • ExecStop: 停止服务时执行的命令。
  • ExecReload: 重载服务时执行的命令。
  • Type: 定义服务的启动类型(simpleforkingoneshotdbusnotifyidle)。
    • simple:默认值,ExecStart 启动的进程为主进程。
    • forkingExecStartfork() 方式启动,父进程退出,子进程成为主进程。
    • oneshot:类似于 simple,但只执行一次,等待其完成后再启动其他服务。
    • dbus:等待 D-Bus 信号后启动。
    • notify:启动结束后发出通知信号。
    • idle:等待其他任务完成后再启动。
  • User: 运行服务的用户。
  • Group: 运行服务的用户组。
  • WorkingDirectory: 服务运行的工作目录。
  • Environment: 设置环境变量。
  • Restart: 定义服务进程退出后的重启策略(noon-successon-failureon-abnormalon-abortalways)。
    • no:不重启。
    • on-success:仅在正常退出时重启。
    • on-failure:仅在非正常退出时重启。
    • on-abnormal:仅在异常退出时重启。
    • on-abort:仅在被终止时重启。
    • always:总是重启。
  • RestartSec: 设置重启服务的延迟时间。
[Install] 部分

定义服务的安装信息和目标,主要用于指定服务在系统中的启用和禁用方式。

  • WantedBy:定义服务在哪些目标(target)下启用。通常用于指定服务在多用户模式(multi-user.target)或图形界面模式(graphical.-rget)下启用。
  • RequiredBy:定义哪些单元强依赖于当前服务。如果这些单元未能启动,当前服务也不会启动。
  • Alias:为服务定义一个或多个别名,可以通过这些别名来管理服务。
  • Also:在启用或禁用当前服务时,同时启用或禁用其他相关服务。

疑问

Unit.Requires, Install.RequiredBy 的区别:前者是自身的依赖;后者表示依赖自身的其他服务。需求关系正相反。