Linux常用命令实践

有些Linux命令或者参数还是蛮有用但是不常用的,需要记录一下,这样就不用到处找了。

关机命令:

1、halt 立刻关机
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启

重启命令:

1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启

Terminal

SCREEN(后台挂起)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查询screen提示
screen -help
# 查看在后台运行的终端
screen -ls
# 使用screen -R命令,如果不存在则创建一个screen,如果存在则会直接进入
# 使用-S创建和直接输入screen创建的虚拟终端,不会检录之前创建的screen
screen -R Name
# -r不会创建,只会进入
screen -r [pid/name]
# 分离(分离会话而不终止它)
按下 Ctrl + A,然后按 D
# 退出终端并释放资源,在screen内使用
exit
# 使用-R/-r/-S均可,释放资源,在terminal使用
screen -R [pid/Name] -X quit

SCREEN绑定键

在虚拟终端内,输入Ctril + a将等待接受预先设置的绑定键,这个时候可以输入对应的一些命令,来操作虚拟终端,如:

  • d:保存会话,后台运行改虚拟终端,返回terminal
  • k:关闭对话,等同输入:exit
  • c:新建一个虚拟终端
  • ?:显示所有绑定键盘
1
2
# 修改文件
vim ~/.screenrc

crontab(定时任务)

安装

1
2
3
4
5
6
7
8
9
安装:apt-get install cron
启动:service cron start
重启:service cron restart
停止:service cron stop
检查状态:service cron status
查询cron可用的命令:service cron
检查Cronta工具是否安装:crontab -l
设置 cron 服务在系统启动时自动启动:systemctl enable cron
立即启动 cron 服务:systemctl start cron

crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

1
2
3
4
5
6
7
8
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
-u user:用来设定某个用户的crontab服务
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表
# 查看系统调度任务
cat /etc/crontab

直接使用 crontab -e 进入编辑模式即可新建任务,每个任务格式如下:

1
2
3
4
5
6
7
m    h    dom  mon  dow   command
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

mail(邮件)

安装,之后配置防火墙并重启

1
2
sudo apt-get install mailutils
sudo apt install ssmtp

编辑ssmtp配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo vim /etc/ssmtp/ssmtp.conf

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=Overstars@foxmail.com

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.qq.com:465
AuthUser=Overstars@foxmail.com
AuthPass=生成的QQ授权码
UseTLS=Yes

hostname=overstars

QQ邮箱授权码可以在 邮箱设置-账号-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 中开启,也可参考SMTP/IMAP服务

1
2
3
4
5
sudo vim /etc/ssmtp/revaliases
----------------------------------
# 添加以下语句
overstars:Overstars@foxmail.com:smtp.qq.com:465 # oversatrs是当前电脑的用户名
----------------------------------

测试一下

1
echo "This is the mail body" | mail -s "TEST"  receive@foxmail.com

image-20240924222555186

Docker

安装,可以参考官方文档

1
2
3
4
5
6
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo service docker start

curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh

会提示,安装成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
================================================================================

To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:

dockerd-rootless-setuptool.sh install

Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.


To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
to root access on the host. Refer to the 'Docker daemon attack surface'
documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================

免sudo使用docker命令

1
2
3
sudo gpasswd -a $USER docker
newgrp docker
docker ps

卸载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo systemctl stop docker  
ps -ef | grep docker | awk '{print $2}' | xargs sudo kill -s 9

sudo rm -rf /var/lib/docker
sudo rm -rf /var/run/docker
sudo rm -rf /var/run/docker.sock
sudo rm -rf /var/run/docker.pid
sudo rm -rf /etc/systemd/system/docker.service
sudo rm -rf /etc/docker/daemon.json
sudo rm -rf ~/.docker/

whereis docker
sudo rm -rf /usr/bin/docker

apt-get autoremove docker docker-ce docker-engine docker.io containerd runc
apt-get autoremove docker-ce-*
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P # 删除无用的相关的配置文件

或者按照官方文档卸载

1
2
3
4
5
6
7
8
# Uninstall the Docker Engine, CLI, containerd, and Docker Compose packages:
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
# Images, containers, volumes, or custom configuration files on your host aren't automatically removed. To delete all images, containers, and volumes:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# Remove source list and keyrings
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
## 查看公共镜像
sudo docker search keywords
## 镜像命令
docker images 查看docker镜像
docker images -a #列出本地所有的镜像
docker images -q #只显示镜像ID
docker images --digests #显示镜像的摘要信息
docker images --no-trunc #显示完整的镜像信息
docker rmi hello-world #从Docker中删除hello-world镜像
docker rmi -f hello-world #从Docker中强制删除hello-world镜像
## 容器命令
docker ps #列出当前所有正在运行的容器
docker ps -a #列出所有的容器
docker ps -l #列出最近创建的容器
docker ps -n 3 #列出最近创建的3个容器
docker ps -q #只显示容器ID
docker ps --no-trunc #显示当前所有正在运行的容器完整信息
exit #退出并停止容器
Ctrl+p+q #只退出容器,不停止容器
docker start 容器ID或容器名称 #启动容器
docker restart 容器ID或容器名称 #重新启动容器
docker stop 容器ID或容器名称 #停止容器
docker kill 容器ID或容器名称 #强制停止容器
docker rm 容器ID或容器名称 #删除容器
docker rm -f 容器ID或容器名称 #强制删除容器
docker rm -f $(docker ps -a -q) #删除多个容器
docker logs -f -t --since="2025-02-22" --tail=10 容器ID或容器名称 #查看容器日志
如:docker logs -f -t --since=”2018-09-10” --tail=10 f9e29e8455a5
 -f : 查看实时日志
 -t : 查看日志产生的日期
 --since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志
 --tail=10 : 查看最后的10条日志
docker top 容器ID或容器名称 #查看容器内运行的进程
docker inspect 容器ID或容器名称 #查看容器内部细节,更新镜像时是重要的参考配置文件
docker attach 容器ID #进到容器内
docker exec 容器ID #进到容器内

常见报错

Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

可能是由于网络问题、DNS服务器问题等导致的。

1
2
3
4
# 重启试试
sudo systemctl restart docker
# 检查DNS,如果显示nameserver后面没有IP地址,或者显示的IP地址有问题,可以尝试修改该文件。
cat /etc/resolv.conf

修改Docker配置文件

1
vim /etc/docker/daemon.json

添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io",
"https://docker.unsee.tech",
"https://docker.1panel.live",
"http://mirrors.ustc.edu.cn",
"https://docker.chenby.cn",
"http://mirror.azure.cn",
"https://dockerpull.org",
"https://dockerhub.icu",
"https://hub.rat.dev",
"https://proxy.1panel.live",
"https://docker.1panel.top",
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://docker.ketches.cn"
]
}

重启守护进程

1
sudo systemctl restart docker

或者换源,例如登录阿里云 制品中心看看想要的镜像,并复制制品地址(未成功,可能只能在阿里云使用)

1
2
# 查看镜像更新时间(示例使用阿里云)
curl -s https://registry.cn-hangzhou.aliyuncs.com/v2/library/nginx/tags/list | jq

新建目录

1
mkdir -p $HOME/docker/navidrome && cd $HOME/docker/navidrome && mkdir -p /data/media/music && chmod 755 -R /data/media/music

在navidrome目录下新建docker-compose.yaml

如果指定users,似乎会出现不好解决的bug,所以删去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
ports:
- 9001:4533 #左侧端口如有冲突,可随意修改,并在防火墙开放
volumes:
- $HOME/docker/navidrome:/data #数据路径
- /data/media/music:/music:ro #音乐路径
environment:
#程序默认语言
- ND_DEFAULTLANGUAGE=zh-Hans
#启用GRAVATAR头像
- ND_ENABLEGRAVATAR=true
#关闭转码,如需要转码请设置为true
- ND_ENABLETRANSCODINGCONFIG=false
#SPOTIFY相关
# - ND_SPOTIFY_ID=
# - ND_SPOTIFY_SECRET=
#LAST.FM相关
# - ND_LASTFM_LANGUAGE=zh
# - ND_LASTFM_APIKEY=
# - ND_LASTFM_SECRET=
#PROXY相关
# - HTTP_PROXY=http://proxy:port
# - HTTPS_PROXY=http://proxy:port
restart: unless-stopped

按顺序执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
docker compose up -d
docker compose ps
#若报错,执行
docker-compose up -d
docker-compose ps
#若修改了yaml
docker-compose pull
docker-compose up -d [需要更新的服务]
docker image prune
#或者
docker-compose stop [service-name]
docker-compose rm -f [service-name]
docker-compose up -d [service-name]

防火墙开放9001,tcp

1
2
3
4
5
6
sudo ufw status
sudo ufw allow 9001
sudo ufw status verbose
sudo ufw reload

sudo netstat -tuln | grep 9001

访问 IP:9001

新建管理员用户

1
2
Overstars
Overstars

SHELL

1
2
3
4
5
uat: 182.119.78.15
uat2: 182.214.14.217
uatc: 182.214.93.115
tranCode=MUIP0643 & key=cache_dispatcher_
增/改tranCode=MUIP0642 & key=cache_dispatcher_ &value
1
2
3
4
5
while read line
do
echo $line
array=(${line// / })
done < test.txt