常用Linux命令
添加systemctl服务
-
准备好需要使用systemctl管理的可执行程序或脚本
-
在
/etc/systemd/system
目录下新增服务配置文件xxx.service
[Unit] # 描述名称 Description= What is this tool for? # 启动依赖顺序 #After=network.target auditd.service # 限制在一定的时间内多次重启,0-可以无限次重启 StartLimitIntervalSec=0 [Service] # 前置命令 #ExecStartPre=/bin/sleep 60 # 要运行的程序 ExecStart=/home/sada/plugins/deviceupdater/device_updater # 工作路径 WorkingDirectory=/home/sada/plugins/deviceupdater/ # 等待关闭的时长,超过60s就kill -9 TimeoutStopSec=60 # 除了systemctl stop service命令外,其他情况全部自动重启 Restart=always # 两次重启之间的间隔 RestartSec=10 # ulimit -c unlimited LimitCORE=infinity [Install] # 注册到target WantedBy=multi-user.target
-
重载服务配置
echo "加载启动升级服务" systemctl daemon-reload #重新加载服务配置 systemctl enable xxx.service #设置自启动(自动随着系统启动) systemctl start xxx.service #启动服务 systemctl status xxx.service #检查服务状态 #journalctl -u sada_device_updater -f #查看服务实时日志
解压缩文件
tar
-
必须参数:这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件 -
可选参数
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
# 打包tar c - create 压缩, v - 打印日志
tar -cvf pack.tar dir/
# 解包
tar -xvf pack.tar
# 压缩,体积比直接cvf小
tar -zcvf pack.tar.gz dir/
# 解压
tar -zxvf pack.tar.gz
xz 压缩之王
xz压缩基于tar -cvf
打包的文件,适用于压缩不频繁但是解压频繁的场景
-
参数
xz -z 要压缩的文件
xz -d 要解压的文件
参数 -k 表示不删除原文件
参数 -0 到 -9调节压缩率,默认为6.
# 压缩
## 1. 打包tar文件
tar -cvf xxx.tar xxx/
## 2. 压缩tar文件,产生xxx.tar.xz文件
xz -z xxx.tar
# 解压
## 1. 提取tar文件
xz -d xxx.tar.xz
## 2. 解包tar
tar -xvf xxx.tar.xz
pigz并行压缩
使用tar
,zip
压缩时速度比较慢,可以使用pigz
来多线程压缩,提高效率,适用于频繁压缩的场景
-
参数
-p: 设置最大使用线程数量,默认所有在线cpu,如果不能获取cpu数量,则取8
-b:设置压缩块大小,默认128k
-d:解压缩
-q:静默模式,不输出任何信息
-k:不删除原始文件
-l:输出压缩内容
-r:递归子目录
-S:使用sss后缀替换gz
-v:输出详细信息
# 安装pigz
sudo apt install pigz
# 压缩,不指定-p 默认使用全部核心
tar -cvf - dir1 dir2 dir3 | pigz -p 8 > output.tar.gz
# 解压
pigz -p 8 -d output.tar.gz
zip
# 递归压缩Dir
zip -9r Dir.zip Dir/
# 解压Dir.zip
unzip Dir.zip
从脚本中读取参数到当前终端
Shell脚本在当前终端添加环境变量的正确姿势
https://segmentfault.com/u/wunima**吴尼玛2021-08-22** **阅读** 1 分钟
- 在Linux中我们经常需要设置一些环境变量,设置环境变量的方式有很多,有些是对当前用户有效的,有些是对所有用户有效的,有些是永久的。很多时候我们会有这样的需求,只要在当前终端中让设置的环境变量生效,这样退出该终端后不影响其他程序的运行。
- 一般可以通过export命令来设置环境编写,比如设置动态库加载路径export LD_LIBRARY_PATH=./lib。
- 如果需要配置的环境变量很多,或者每次做某件工作前都得配置这些环境变量,这时通过手动输入命令的方式就很不方便了,这时就需要shell脚本登场。
- 我们可以将配置的命令写到shell脚本中,这样只用执行一下脚本就能完成工作了,程序员的原则就是能用脚本做的事情绝不动手。
- 写好脚本set_env.sh后,我们欢欣鼓舞的在当前终端中执行./set_env.sh,却会发现设置并没有生效,用export命令查看也没有看到新的配置。
- 关键原因就在于通过./set_env.sh这种方式执行一个脚本文件其实脚本中的命令是在子shell中运行的,执行的结果只对子shell有效,并不会在父shell中生效。
- 这种情况下正确的姿势就是使用source set_env.sh,这样设置的环境变量就会在当前终端中生效。
- source命令的作用是在当前bash终端下读取并执行shell文件中的命令。
- 更简单的命令是. set_env.sh,点命令(.)和source是等效的。
挂载smb目录
参考资料
挂载群晖NAS遇到mount error(95):Operation not supported
步骤
- 安装smb连接工具
# 更新软件源
sudo apt update
# 安装Cifs-utils
sudo apt install cifs-utils
- 创建挂载点
sudo mkdir /media/share
- 挂载共享目录
# 挂载例子
# sudo mount -t cifs //file-system-id.region.nas.aliyuncs.com/myshare /mnt -o vers=2.0,guest,uid=0,gid=0,dir_mode=0755,file_mode=0755,mfsymlinks,cache=strict,rsize=1048576,wsize=1048576
# 选择合适的版本
mount -t cifs -v "${smb}" "${dir}" -o username="${user}",password="${psd}",iocharset=utf8
# mount -t cifs -v "${smb}" "${dir}" -o username="${user}",password="${psd}",iocharset=utf8,vers=2.0
# mount -t cifs -v "${smb}" "${dir}" -o username="${user}",password="${psd}",iocharset=utf8,vers=1.0
- 设置重启自动挂载
上述操作在重启后失效,修改/etc/fstab
实现重启自动进行挂载,在文件中添加如下内容
# /etc/fstab中修改内容
//nas-ds120j/ebook /home/pi2023/Docker/Calibre/smb_data/ cifs credentials=/home/pi2023/.ebook_smb_credentials,iocharset=utf8
数 | 说明 |
---|---|
文件系统类型 | 在Linux操作系统中挂载SMB协议文件系统,必须配置-t cifs 参数。 |
挂载点地址 | 添加文件系统挂载点时,自动生成的挂载点地址,请根据实际值替换。您可以在NAS控制台,单击目标文件系统,然后单击挂载使用,将鼠标放置在挂载点地址列的![]() |
myshare | SMB文件系统的共享目录名称,不支持变更。 |
挂载目录 | 您要挂载的目标路径,例如: /mnt/sharepath。 |
挂载选项 | 通过添加-o 参数指定挂载必选选项:* vers:支持2.0及以上协议版本。* guest:只支持基于ntlm认证协议的客户端挂载。* rsize:用来设置读数据包的最大限制。一般需要设置成1048576(1 MB)。* wsize:用来设置写数据包的最大限制,一般需要设置成1048576(1 MB)。通过添加-o 参数指定挂载可选选项:* uid:挂载成功后,文件所属的用户。如果未设置uid,则默认uid=0。* gid:挂载成功后,文件所属的用户组。如果未设置gid,则默认gid=0。* dir_mode:向用户授予指定目录的读取、写入和执行权限。必须以0开头,例如:0755、0644等。如果未设置dir_mode,则默认dir_mode=0755。* file_mode:向用户授予普通文件的读取、写入和执行权限。必须以0开头,例如:0755、0644等。如果未设置file_mode,则默认file_mode=0755。* mfsymlinks:支持symbol link功能。* cache: * cache=strict:设置SMB文件系统使用客户端缓存。如果未设置cache,则默认cache=strict。* cache=none:设置SMB文件系统不使用客户端缓存。* atime |
注意⚠️:如果要挂载群晖需要设置群晖nas的smb版本
跨设备文件传输
rsync
参数
使用rsync
命令行工具,以-rlptDvzh
参数进行文件同步。其中:
-
-r
:递归同步子目录。 -
-l
:保留符号链接。 -
-p
:保留权限。 -
-t
:保留时间戳。 -
-D
:保留设备文件。 -
-v
:显示详细同步信息。 -
-z
:压缩传输。 -
-h
:以人类可读的格式显示传输信息。 -
`--delete
-
-e ‘ssh -p2345
:指定非标准ssh端口,与目标机器ssh端口一致rsync -e 'ssh -p2345' <sourcefile> user@host:/path/to/destination/directory
注意事项
使用rsync复制时,会讲源文件和目录复制为你指定的目标路径,而不是在目标路径下一级新建
查看某个目录的文件大小并排序 (单位为MB)
du -hm --max-depth=1 /var/ | sort -n
journalctl
日志清理
-
查看日志使用情况
journalctl --disk-usage
-
设置日志使用空间,执行后会立即清理
/var/log/journal/
中的日志文件到限制的大小journalctl --vacuum-size=200M
-
通过配置文件设置日志文件
/etc/systemd/journald.conf
大小限制,放开配置文件中SystemMaxUse
的注视,并设置为期望的大小[Journal] ... SystemMaxUse=200M ...
设置时区
# 查看当前时区
timedatectl
# 获取时区列表
timedatectl list-timezones
# 设置时区为上海
sudo timedatectl set-timezone Asia/Shanghai
使用nmcli查看网络信息
查看网关
在Ubuntu系统中,可以使用nmcli命令行工具来查看网关信息。具体步骤如下:
- 打开终端。
- 输入以下命令查看当前活动的网络连接:
nmcli con show
它会列出所有网络连接,找到当前活动的连接,一般是上面带有"* "的那一行。
- 记下该活动连接的名称,比如叫"Wired connection 1"。
- 然后运行以下命令查看该连接的详细信息:
nmcli con show "Wired connection 1"
替换引号中的内容为你前面获取的活动连接名称。
- 在输出信息中,找到"IP4.GATEWAY"的那一行,冒号后面的值就是当前网关地址了。
示例输出:
IP4.GATEWAY: 192.168.1.1
这里192.168.1.1就是网关地址。
除了nmcli之外,你也可以用之前提到的route、ip route、netstat等命令查看网关。nmcli是NetworkManager提供的命令行工具,可以方便地管理和查询网络连接信息。
软连接的拷贝
总之,如果您要复制软链接指向的文件,使用cp -L 命令;如果您要复制软链接本身,请使用 cp -P 命令。
查看文件夹并按从大到小排序
解释一下这个命令:
-
du
命令用于估算文件或文件夹的磁盘使用情况。 -
-s
选项用于显示文件夹的总大小,而不显示其子文件夹的详细信息。 -
-h
选项用于以人类可读的格式显示文件夹大小(例如,使用KB,MB,GB等单位)。 -
*
通配符表示当前目录下的所有文件夹。 -
sort
命令用于排序输出结果。 -
-r
选项用于反向排序,即从大到小排列。 -
-h
选项用于人类可读的排序,以便正确地处理文件夹大小的单位。
du -sh * | sort -rh
# 文件过多可以加| less
du -sh * | sort -rh | less