常用 Linux 命令 (三)

217 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

四、Docker

1、仓库 REGISTRY
$ sudo docker search $KEY_WORD              # 按关键字在 Docker Hub 中查找镜像
$ sudo docker pull $REGISTRY:$TAG           # 从 Docker 仓库中拉取镜像
$ sudo docker push $IMAGE_NAME:$IMAGE_TAG   # 推送镜像到 Docker 仓库,需要先登录
$ sudo docker login $REGISTRY_URL --username=$username --password=$password # 登录仓库,password 参数不建议直接写出来
$ sudo docker logout $REGISTRY_URL          # 登出仓库
$ sudo docker info                          # 显示 Docker 的详细信息
$ sudo docker --help                        # 显示 Docker 的帮助信息
2、镜像 IMAGE
$ sudo docker images                      # 查看本地镜像
$ sudo docker images --digests | grep $IMAGE_ID # 查看本地镜像的 SHA256 摘要信息,方便和 Harbor 仓库里的镜像 SHA256 摘要信息进行比对,以确保服务器上的镜像文件到底有没有正确拉取到
$ sudo docker rmi $IMAGE_ID               # 删除本地镜像
$ sudo docker inspect $IMAGE_ID           # 查看镜像详情
$ sudo docker save $IMAGE_ID > 文件路径    # 保存镜像为本地离线文件
$ sudo docker save -o 文件路径 $IMAGE_ID   # 保存镜像为本地离线文件
$ sudo docker load < 文件路径              # 加载本地离线文件为 docker 镜像
$ sudo docker load -i 文件路径             # 加载本地离线文件为 docker 镜像
$ sudo docker tag $IMAGE_ID $NEW_IMAGE_NAME:$NEW_IMAGE_TAG  # 修改本地镜像的 TAG
$ sudo docker run 参数 $IMAGE_ID $CMD      # 运行一个镜像
$ sudo docker history $IMAGE_ID           # 显示镜像每层的变更内容(很实用,可以进行构建优化)
3、容器 CONTAINER
$ sudo docker exec $CONTAINER_ID    # 在运行的容器中执行命令
$ sudo docker attach $CONTAINER_ID  # 启动一个已存在的 Docker 容器
$ sudo docker stop $CONTAINER_ID    # 停止 Docker 容器
$ sudo docker start $CONTAINER_ID   # 启动 Docker 容器
$ sudo docker restart $CONTAINER_ID # 重启 Docker 容器
$ sudo docker kill $CONTAINER_ID    # 强制关闭 Docker 容器
$ sudo docker pause $CONTAINER_ID   # 暂停 Docker 容器
$ sudo docker unpause $CONTAINER_ID # 恢复暂停的 Docker 容器
$ sudo docker rename $CONTAINER_ID  # 重命名 Docker 容器
$ sudo docker rm $CONTAINER_ID      # 删除 Docker 容器
$ sudo docker logs $CONTAINER_ID    # 查看 Docker 容器的运行日志,确保正常运行
$ sudo docker inspect $CONTAINER_ID # 查看 Docker 容器的属性,比如 IP、网络模式、目录挂载等信息(很实用)
$ sudo docker port $CONTAINER_ID    # 查看 Docker 容器的端口映射
$ sudo docker top $CONTAINER_ID     # 查看 Docker 容器中正在运行的进程(很实用)
$ sudo docker commit $CONTAINER_ID $NEW_IMAGE_NAME:$NEW_IMAGE_TAG # 将 Docker 容器保存为镜像
$ sudo docker ps -a                 # 查看所有 Docker 容器
$ sudo docker stats                 # 查看 Docker 容器的资源使用情况
$ sudo docker cp $SOURCE $TARGET    # 在宿主机和 Docker 容器之间复制文件,可双向复制
4、docker run 命令
# -d,后台运行容器,并返回容器 ID;不指定时,启动后开始打印日志,Ctrl+C 退出会关闭容器
# -i,以交互模式运行容器,通常与 -t 同时使用
# -t,为容器重新分配一个伪输入终端,通常与 -i 同时使用
# --name container_name,设置容器名称,不指定时随机生成
# -h container_hostname,设置容器的主机名,默认随机生成
# --dns 8.8.8.8,指定容器使用的 DNS 服务器,默认和宿主机一致
# -e docker_host=172.17.0.1,设置环境变量
# --cpuset="0-2" or --cpuset="0,1,2",绑定容器到指定 CPU 运行
# -m 100M,设置容器使用内存最大值
# --net bridge,指定容器的网络连接类型,支持 bridge/host/none/container 四种类型
# --ip 172.18.0.13,为容器指定固定 IP(需要使用自定义网络)
# --expose 8081 --expose 8082,开放一个端口或一组端口,会覆盖镜像设置中开放的端口
# -p [宿主机端口]:[容器内端口],宿主机到容器的端口映射,可指定宿主机的要监听的 IP,默认为 0.0.0.0
# -P,注意是大写的,宿主机随机指定一组可用的端口映射容器 expose 的所有端口
# -v [宿主机目录路径]:[容器内目录路径],挂载宿主机的指定目录(或文件)到容器内的指定目录(或文件)
# --add-host [主机名]:[IP],为容器 hosts 文件追加 host,默认会在 hosts 文件最后追加[主机名]:[容器IP]
# --volumes-from [其他容器名],将其他容器的数据卷添加到此容器
# --link [其他容器名]:[在该容器中的别名],添加链接到另一个容器,在本容器 hosts 文件中加入关联容器的记录,效果类似于 --add-host

五、其他

1、scp

scp 命令允许从一台 Linux 服务器安全复制文件或目录到另外一台远程 Linux 服务器(前提是网络要通),省去了先下载到本地再上传到远程服务器这一环节,命令如下——

# 复制文件
scp local_file remote_username@remote_ip:remote_folder 
# 或者 
scp local_file remote_username@remote_ip:remote_file 
# 或者 
scp local_file remote_ip:remote_folder 
# 或者 
scp local_file remote_ip:remote_file

如果本机和远程主机的用户名一样,就不需要 remote_username@ 这一部分。

# 复制目录
scp -r local_folder remote_username@remote_ip:remote_folder 
# 或者 
scp -r local_folder remote_ip:remote_folder

-r 是递归复制的意思。

如果远程地址在前,本地地址在后,那就是从远程复制到本地

2、rz 与 sz

sz 命令是利用 ZModem 协议来从 Linux 服务器传送文件到本地,一次可以传送一个或多个文件。相对应地,从本地上传文件到 Linux 服务器,可以使用 rz 命令。这两个命令,都要在 Linux 服务器上运行,s 代表 send,r 代表 receive。如果找不到这两个命令,需要用 yum install -y lrzsz 命令安装下。sz 命令默认会将服务器上的文件发送到本机的下载目录,运行 rz 命令则会弹出一个文件上传窗口,需要对 SecureCRT 做一下 ZModem 的设置,Putty 不支持 ZModem。

3、which 与 whereis

which 命令用于查看可执行文件(可执行文件可以简单理解成命令,比如 cd 命令)的位置,whereis 命令用于查看文件(包括可执行文件、源代码文件、帮助文件等)的位置。

which cd
whereis -b cd

-b,代表二进制执行文件。

如果查出来的命令在 /usr/****in、/****in、/root/bin、/usr/local/****in 目录下面,则只有 root 用户或者 root 权限才能运行。反之,如果查出来的命令在 /usr/bin、/bin 目录下面,则普通用户也能运行。

4、zip 与 unzip

服务器上不总是自带 zip 与 unzip 命令,可以用 yum install -y unzip zip 命令安装下。大家如果用 vim 命令打开 jar 包时报错,提示类似于 error (zip#Write) sorry, your system doesn’t appear to have the zip pgm 这样的,就是因为服务器上还未安装 zip 和 unzip,因为 jar 包其实就是一种压缩文件,是需要解压才能进入的。当然,如果 vim 命令都没有,那就要用 yum install -y vim 先装一下。

5、history

history 命令用于展示使用过的历史命令,每个历史命令前面有个数字编号,我们可以输入英文叹号加数字编号,来再次运行这个历史命令。

有些时候我们想看命令运行的具体时间,可以在当前登录用户家目录下找到隐藏文件 .bashrc 进行修改(vim ~/.bashrc),在文件最底下加入如下内容:

HISTTIMEFORMAT="%Y-%m-%d:%H-%M-%S:`whoami`:  "
export HISTTIMEFORMAT

最后运行 source ~/.bashrc 使修改生效,再运行 history 命令就能看到具体的执行时间了。

6、回到命令行首与行尾

在 Linux 服务器的 shell 里运行命令时,按 Ctrl+A 可快速回到行首,按 Ctrl+E 可快速回到行尾。

在 Vim 编辑模式(按 i 进入的就是编辑模式)中,连按两个字母 G 可快速回到第一行,按 Shift+G 可快速回到最后一行,按 Home 快速回到行首,按 End 可快速回到行尾。在 Vim 正常模式(使用 vim 命令后,默认的模式)中,按 Ctrl+U 可向上滚动半屏,按 Ctrl+D 可向下滚动半屏。

在 Vim 底线命令模式(按 : 进入的就是底线命令模式,意思就是在最底一行输入命令)中,输入 %s/aaa/bbb/g 后再按回车,就可以把当前用 vim 打开的文件里的所有 aaa 字符串全局批量替换成 bbb 字符串,然后再按冒号并输入 wq(再按冒号并输入 wq 也可以换成按键盘 Shift+zz )保存文件即可