常用Linux命令

添加systemctl服务

  1. 准备好需要使用systemctl管理的可执行程序或脚本

  2. /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
    
  3. 重载服务配置

    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目录

参考资料

如何在Ubuntu上挂载SMB共享?

Linux系统挂载SMB协议文件系统

挂载群晖NAS遇到mount error(95):Operation not supported

步骤

  1. 安装smb连接工具
# 更新软件源
sudo apt update

# 安装Cifs-utils
sudo apt install cifs-utils
  1. 创建挂载点
sudo mkdir /media/share
  1. 挂载共享目录
# 挂载例子
# 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
  1. 设置重启自动挂载

上述操作在重启后失效,修改/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版本

imageimage

跨设备文件传输

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命令行工具来查看网关信息。具体步骤如下:

  1. 打开终端。
  2. 输入以下命令查看当前活动的网络连接:
nmcli con show

它会列出所有网络连接,找到当前活动的连接,一般是上面带有"* "的那一行。

  1. 记下该活动连接的名称,比如叫"Wired connection 1"。
  2. 然后运行以下命令查看该连接的详细信息:
nmcli con show "Wired connection 1"

替换引号中的内容为你前面获取的活动连接名称。

  1. 在输出信息中,找到"IP4.GATEWAY"的那一行,冒号后面的值就是当前网关地址了。

示例输出:

IP4.GATEWAY:                         192.168.1.1

这里192.168.1.1就是网关地址。

除了nmcli之外,你也可以用之前提到的route、ip route、netstat等命令查看网关。nmcli是NetworkManager提供的命令行工具,可以方便地管理和查询网络连接信息。

软连接的拷贝

总之,如果您要复制软链接指向的文件,使用cp -L 命令;如果您要复制软链接本身,请使用 cp -P 命令。

查看文件夹并按从大到小排序

解释一下这个命令:

  1. du​命令用于估算文件或文件夹的磁盘使用情况。
  2. -s​选项用于显示文件夹的总大小,而不显示其子文件夹的详细信息。
  3. -h​选项用于以人类可读的格式显示文件夹大小(例如,使用KB,MB,GB等单位)。
  4. *​通配符表示当前目录下的所有文件夹。
  5. sort​命令用于排序输出结果。
  6. -r​选项用于反向排序,即从大到小排列。
  7. -h​选项用于人类可读的排序,以便正确地处理文件夹大小的单位。
du -sh * | sort -rh
# 文件过多可以加| less 
du -sh * | sort -rh | less

Q.E.D.

  • reword 如果我的文章帮到你,可以考虑请我喝杯咖啡