Linux & Ubuntu
linux
$ ps -e | grep apt
$ ps aux |grep mysqld
服务端网卡
1 | sudo dhclient enp0s8 |
Ubuntu桌面
- 在命令行运行以下命令更新
1 | apt-get update |
- 安装桌面
1 | apt-get install -y ubuntu-desktop |
- 安装xrdp
1 | apt-get install -y xrdp |
安装完成后,即可使用Windows远程桌面工具登录Ubuntu。
Ubuntu换源
1 | $ sudo vim /etc/apt/sources.list |
ubuntu查看处理器和系统架构
1 | uname -a; |
21.04 hirsute
20.04 focal
18.04 bionic
16.04 xenial
14.04 trusty
12.04 precise
Ubuntu删除无用的dpkg包
dpkg -l 命令可以查看所有安装的包,其中rc状态的包是卸载了包但配置文件还在,可以使用以下命令进行清理:
$ dpkg -l | grep ^rc | cut -d’ ‘ -f3 | sudo xargs dpkg –purge
包管理 dpkg 解释
https://blog.csdn.net/qiuchangyong/article/details/97505379
$ sudo dpkg –add-architecture arm64 (当前状态,不行就remove掉)
$ sudo dpkg –remove-architecture arm64
sh: /bin/bash^M:执行错误
原因是windows下的文件是dos格式,即每一行结尾以\r\n来标识,而linux下的文件是unix格式,行尾则以\n来标识。
1 | vim xxx.sh |
挂载
1 | fdisk -l |
查看文件或文件夹占用大小
1 | du 命令常用来查看目录或文件所占用磁盘空间的大小。常用选项组合为:du -sh |
删除snap旧的包
查看包文件
1 | cd /var/lib/snapd/snaps/ |
查看文件版本的可用性
1 | snap list --all |
脚本自动删除
Alan Pope 在 Snapcraft 团队工作时写的一个灵巧的 bash 脚本
1 | cd |
1 |
|
1 | chmod +x clean_snap.sh |
计算文件hash值
1 | shasum filename |
网络共享文件夹:samba
$ sudo apt install samba
$ sudo vim /etc/samba/smb.conf
1 |
|
重启samba服务
$ sudo service smbd reload
打印登录成功后显示的 MOTD 信息
1 | $ sudo run-parts /etc/update-motd.d/ |
可以在 /etc/update-motd.d/
按格式编写想打印的内容/文件
会按照文件前的序号,顺序打印
查看有关“java”的进程
ps aux|grep java
查看DNS ip链路
nslookup google.cn
制作服务,并开机自启
参考文章:
编写 *.service 文件
- [Unit] 区块:启动顺序与依赖关系
Description
给出当前服务的简单描述
Documentation
给出文档位置
Before
在什么服务之前执行 如sshd.service应该在哪些服务之前启动
After
在什么服务之后执行 如network.target或sshd-keygen.service
注:[After和Before字段只涉及启动顺序,不涉及依赖关系]
Wants
与某服务之间存在“弱依赖”关系,即如果某服务启动失败或停止运行,不影响继续执行
Requires
表示“强依赖”关系,即如果某服务启动失败或异常提出,那么当前服务也必须退出
注:[Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的]
- [Service] 区块:启动行为
Type 置进程的启动类型。必须设为
simple, exec, forking, oneshot, dbus, notify, idle
之一simple(默认值)
ExecStart字段启动的进程为主进程
exec
与 simple 类似,不同之处在于, 只有在该服务的主服务进程执行完成之后,systemd 才会认为该服务启动完成。如果不能成功调用主服务进程(例如 User= 不存在、或者二进制可执行文件不存在), 那么 systemctl start 将会执行失败。
forking
ExecStart字段将以fork()方式启动,
此时父进程将会退出,子进程将成为主进程(后台运行)oneshot
与 simple 类似,不同之处在于, 只有在该服务的主服务进程退出之后,systemd 才会认为该服务启动完成,才会开始启动后继单元。 此种类型的服务通常需要设置 RemainAfterExit= 选项。 当 Type= 与 ExecStart= 都没有设置时, Type=oneshot 就是默认值。
dbus
类似于simple,但会等待D-Bus信号后启动
notify
类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
idle
类似于simple,但是要等到其他任务都执行完,才会启动该服务。
一种使用场合是为让该服务的输出,不与其他服务的输出相混合。注意:
(1)仅可用于改善控制台输出,切勿将其用于不同单元之间的排序工具;
(2)延迟最多不超过5秒, 超时后将无条件的启动服务进程。
User
用户
EnvironmentFile
环境变量
WorkingDirector
工作目录
ExecStart
定义启动进程时执行的命令
ExecReload
重启服务时执行的命令
ExecStop
停止服务时执行的命令
ExecStartPre
启动服务之前执行的命令
ExecStartPost
启动服务之后执行的命令
ExecStopPost
停止服务之后执行的命令
前缀 | 效果 |
---|---|
“@ “ |
如果在绝对路径前加上可选的 “@ “ 前缀,那么其后的那些参数将依次作为”argv[0] argv[1] argv[2] …”传递给被执行的进程(注意,argv[0] 是可执行文件本身)。 |
“- “ |
如果在绝对路径前加上可选的 “- “ 前缀,那么即使该进程以失败状态(例如非零的返回值或者出现异常)退出,也会被视为成功退出,但同时会留下错误日志。 |
“+ “ |
如果在绝对路径前加上可选的 “+ “ 前缀,那么进程将拥有完全的权限(超级用户的特权),并且 User= , Group= , CapabilityBoundingSet= 选项所设置的权限限制以及 PrivateDevices= , PrivateTmp= 等文件系统名字空间的配置将被该命令行启动的进程忽略(但仍然对其他 ExecStart= , ExecStop= 有效)。 |
“! “ |
与 “+ “ 类似(进程仍然拥有超级用户的身份),不同之处在于仅忽略 User= , Group= , SupplementaryGroups= 选项的设置,而例如名字空间之类的其他限制依然有效。注意,当与 DynamicUser= 一起使用时,将会在执行该命令之前先动态分配一对 user/group ,然后将身份凭证的切换操作留给进程自己去执行。 |
“!! “ |
与 “! “ 极其相似,仅用于让利用 ambient capability 限制进程权限的单元兼容不支持 ambient capability 的系统(也就是不支持 AmbientCapabilities= 选项)。如果在不支持 ambient capability 的系统上使用此前缀,那么 SystemCallFilter= 与 CapabilityBoundingSet= 将被隐含的自动修改为允许进程自己丢弃 capability 与特权用户的身份(即使原来被配置为禁止这么做),并且 AmbientCapabilities= 选项将会被忽略。此前缀在支持 ambient capability 的系统上完全没有任何效果。 |
RestartSec
设置在重启服务(Restart=)前暂停多长时间。 默认值是100毫秒(100ms)。
如果未指定时间单位,那么将视为以秒为单位。 例如设为”20”等价于设为”20s”。TimeoutStartSec
设置该服务允许的最大启动时长。 如果守护进程未能在限定的时长内发出”启动完毕”的信号,那么该服务将被视为启动失败,并会被关闭。 如果未指定时间单位,那么将视为以秒为单位。
TimeoutStopSec
此选项有两个用途:
(1)设置每个 ExecStop= 的超时时长。如果其中之一超时, 那么所有后继的 ExecStop= 都会被取消,并且该服务也会被 SIGTERM 信号强制关闭。
如果该服务没有设置 ExecStop= ,那么该服务将会立即被 SIGTERM 信号强制关闭。(2)设置该服务自身停止的超时时长。如果超时,那么该服务将会立即被 SIGTERM 信号强制关闭。
如果未指定时间单位,那么将视为以秒为单位。TimeoutSec
一个同时设置 TimeoutStartSec= 与 TimeoutStopSec= 的快捷方式。
RuntimeMaxSec
允许服务持续运行的最大时长。 如果服务持续运行超过了此处限制的时长,那么该服务将会被强制终止,同时将该服务变为失败(failed)状态。
注意,此选项对 Type=oneshot 类型的服务无效,因为它们会在启动完成后立即终止。 默认值为 “infinity” (不限时长)。
WatchdogSec
设置该服务的看门狗(watchdog)的超时时长。 看门狗将在服务成功启动之后被启动。
默认值”0”表示禁用看门狗功能。设为”20”等价于设为”20s”。
Restart
当服务进程 正常退出、异常退出、被杀死、超时的时候, 是否重新启动该服务。
no(默认值):退出后不会重启
on-success:只有正常退出时(退出状态码为0),才会重启
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal:只有被信号终止和超时,才会重启
on-abort:只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog:超时退出,才会重启
always:不管是什么退出原因,总是重启
Restart设为on-failure,表示任何意外的失败,就将重启sshd。如果 sshd 正常停止(比如执行systemctl stop命令),它就不会重启。RemainAfterExit
当该服务的所有进程全部退出之后, 是否依然将此服务视为活动(active)状态。 默认值为 no
GuessMainPID
在无法明确定位 该服务主进程的情况下, systemd 是否应该猜测主进程的PID(可能不正确)。
该选项仅在设置了 Type=forking 但未设置 PIDFile= 的情况下有意义。
如果PID猜测错误, 那么该服务的失败检测与自动重启功能将失效。 默认值为 yes
PIDFile
该服务PID文件的路径(一般位于 /run/ 目录下)。 强烈建议在 Type=forking 的情况下明确设置此选项。
如果设为相对路径,那么表示相对于 /run/ 目录。 systemd 将会在此服务启动完成之后,从此文件中读取主服务进程的PID 。
systemd 不会写入此文件,但会在此服务停止后删除它(若仍然存在)。
PID文件的拥有者不必是特权用户, 但是如果拥有者是非特权用户,那么必须施加如下安全限制:
(1)不能是一个指向其他拥有者文件的软连接(无论直接还是间接);
(2)其中的PID必须指向一个属于该服务的进程。
BusName
设置与此服务通信 所使用的 D-Bus 名称。 在 Type=dbus 的情况下 必须明确设置此选项。
- [Install] 区块:定义如何安装这个配置文件,即怎样做到开机启动。
WantedBy
表示该服务所在的
Target
。Target 的含义是服务组,表示一组服务。
一个示例
test.service
1 | [Unit] |
test.sh
1 |
|
注册服务实例
配置文件目录
systemctl脚本目录:/usr/lib/systemd/
=> /etc/systemd/
系统服务目录:/usr/lib/systemd/system/
=> /etc/systemd/system/
用户服务目录:/usr/lib/systemd/user/
=> /etc/systemd/user/
在/etc/systemd/system/
可以看到很多 *.target.wants
的文件夹
编写的 /usr/lib/systemd/system/
在 systemctl enable *.service
之后
会根据 WantedBy
移入到相应的目录下
编写完*.servise
之后,都需要移入到相应的/etc/systemd/
文件夹下,如/etc/systemd/system/
然后在通过 systemctl
命令 运行/启动
开机启动
将
*.service
移动到/etc/systemd/system/
下设置开机启动,可以看相关的输出判断是否成功
$ systemctl enable *.service
也可以先单独执行,判断是否能正常运行
systemctl start *.service
相关命令
1 | # 重载系统服务: |
1 |
|