基本的命令
查看文件夹的内容
ls
ls -l # 它的别名是 ll,部分环境有。
ll 路径 # 以列表的形式,列出指定文件夹的内容复制文件
cp 原文件 新路径
cp /路径 /新路径 # 复制文件夹到其他位置
cp /路径/* /新路径 # 复制文件夹的内容到其他文件夹移动文件
mv 原文件 新路径
mv /路径 /新路径 # 移动文件夹到其他位置
mv /路径/* /新路径 # 移动文件夹的内容到其他文件夹下载文件
curl -O 链接 # 下载到当前路径
curl -o /path/name.png URL # 指定路径、文件名
cd /tmp/downloads; curl -O URL; cd - # 下载到指定路径操作 压缩包
tar -xvf 压缩包名称 # 解压
tar -xvf 压缩包路径 -C 目的地 # 解压到指定的位置
tar -czvf 压缩包 原文件 # 创建压缩包
# x:解压 c: 压缩 z:压缩包的格式为tar.gz v:输出详细信息 f:原文件,此参数必须在最后查看 文件夹占用
du -hd 1 # 查看当前目录、各子目录的大小。深度为一,类似Windows资源管理器的视图。
du -hs # 查看 当前目录 的总大小
# du -hc # 对象:当前目录、子目录
# du -ha # 对象:当前目录、子目录、文件
# h: 以人类可读的格式显示; d: depth 深度; s: summarize 只输出所有项的总大小; c: 统计列出项的大小; a: 所有目录、文件深度管理
SSH 免密码登录
假设主动发起连接的是客户端,被控制的是服务端。
核心思路:将客户端的公钥添加到服务端的 authorized_keys。
向服务端发送公钥
在客户端执行此命令,来发送自己的公钥。
# 追加本机的 ~/.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检查一下效果
cat ~/.ssh/id_rsa.pub && ssh root@192.168.5.1 "cat /root/.ssh/authorized_keys"此后,ssh root@192.168.5.1 就不再需要输入密码,但是这样还不够方便。通过增加别名,可以减少要输入的字符。
客户端配置别名(可选)。
在~/.ssh/config增加此块
# router
Host openwrt
User root
HostName 192.168.5.1
# IdentityFile ~/.ssh/id_rsa.pubsystemctl restart ssh # 重启本机SSH以生效。可能需要断开现有SSH连接。此后,ssh openwrt 命令,就意味着以身份root连接192.168.5.1,执行命令。
用户 与 组
添加用户
useradd -u 950 -g 3000 muelsyse # 创建名为 muelsyse 的用户,并指定 UID 为 950,GID 为 3000
passwd muelsyse # 设置其密码其他操作
id username # 查看指定用户的信息
sudo userdel username # 删除用户用户组
groupadd -g 1001 admin # 创建名为 admin 的组,并指定 GID 为 1001
getent group 组名 # 查看指定组的信息
sudo groupdel groupname # 删除组属主 与 权限
chmod +x /etc/script # 赋予执行权限
chown -R 3000:950 /app/syncthing # 修改文件夹的属主(UID:GID)挂载网络硬盘
挂载时期分为临时挂载、永久挂载,不同的方法效果不同。
永久挂载
按固定的格式,书写网络硬盘的信息,追加到/etc/fstab中。一行一个。
挂载 NFS
# 格式: <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
# 格式: //<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)。允许任何人读写、执行。允许挂载失败后启动(开机)。网络硬盘。
管理
mount -a # 重新挂载所有在 /etc/fstab 中定义的文件系统。
umount /mnt/* # 卸载硬盘临时挂载
mount -t nfs -o rw,nofail,_netdev 192.168.5.25:/path /mnt/nfs防火墙
ufw enable # 开启防火墙
ufw disable # 永久关闭防火墙服务
Ubuntu用systemctl和journalctl管理服务。
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 # 实时查看某服务的日志查看服务
systemctl list-units --type=service # 查看所有已加载的服务
systemctl list-units --type=service --state=running # 查看所有正在运行的服务
systemctl list-unit-files --type=service # 查看所有服务(包括未加载的)
systemctl --failed # 查看所有失败的服务INFO
服务未被加载的时机:新安装的服务、服务单元文件被修改、服务被禁用、系统启动时,配置文件存在问题或依赖关系未满足。
创建服务
- 创建服务文件:在目录
/etc/systemd/system/下创建一个新的服务文件。例如,创建一个名为myweb.service的文件: - 编辑服务文件: 格式见下文。
- 重新加载 systemd 配置:
systemctl daemon-reload - 启动服务:
systemctl restart myweb.service ; systemctl status myweb.service
简单示例
[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
[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: 定义服务的启动类型(
simple、forking、oneshot、dbus、notify、idle)。simple:默认值,ExecStart启动的进程为主进程。forking:ExecStart以fork()方式启动,父进程退出,子进程成为主进程。oneshot:类似于simple,但只执行一次,等待其完成后再启动其他服务。dbus:等待 D-Bus 信号后启动。notify:启动结束后发出通知信号。idle:等待其他任务完成后再启动。
- User: 运行服务的用户。
- Group: 运行服务的用户组。
- WorkingDirectory: 服务运行的工作目录。
- Environment: 设置环境变量。
- Restart: 定义服务进程退出后的重启策略(
no、on-success、on-failure、on-abnormal、on-abort、always)。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 的区别:前者是自身的依赖;后者表示依赖自身的其他服务。需求关系正相反。