Linux常用的命令

在下编不完 1年前 ⋅ 3134 阅读

Linux常用的命令

基础的一些命令

ls命令 查看目录中的文件

命令 命令描述 示例
-l 显示文件和目录的详细资料 ls -l
-a 列出全部文件,包含隐藏文件 ls -a
-R 连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来 ls -R
[0-9] 显示包含数字的文件名和目录名 ls [0-9]

cp 命令

命令 命令描述
-a 将文件的特性一起复制
-p 连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
-i 若目标文件已经存在时,在覆盖时会先询问操作的进行
-r 递归持续复制,用于目录的复制行为
-u 目标文件与源文件有差异时才会复制

mv命令

命令 命令描述
-f force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i 若目标文件已经存在,就会询问是否覆盖
-u 若目标文件已经存在,且比目标文件新,才会更新

rm 命令

命令 命令描述 示例
-f 就是force的意思,忽略不存在的文件,不会出现警告消息
-i 互动模式,在删除前会询问用户是否操作
-u 递归删除,最常用于目录删除,它是一个非常危险的参数

scp 命令

文件传输的两端机器都需要安装 yum install openssh-clients -y

命令 命令描述 示例
-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 保留原文件的修改时间,访问时间和访问权限。 (建议使用,传输时保留属性时间信息,否则会导致时间发生改变无法进行增量传输)
-q 不显示传输进度条。 (很适合crontab任务计划中使用)
-r 递归复制整个目录
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh
-l limit 限定用户所能使用的带宽,以Kbit/s为单位
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式
-P port 注意是大写的P, port是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项

A:192.168.0.1 B:192.168.0.2

  • 将A服务器中的/opt/home/temp.log复制到B服务器的/home目录下

scp -p /opt/home/temp.log 192.168.0.2:/home

  • 将A服务器中的/opt/temp目录复制到B服务器的/home目录下

scp -rp /opt/temp/ 192.168.0.2:/home

cat命令

(用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用)

命令 命令描述 示例
cat file1 从第一个字节开始正向查看文件的内容
tac file1 从最后一行开始反向查看一个文件的内容
cat -n file1 标示文件的行数
more file1 查看一个长文件的内容
head -n 2 file1 查看一个文件的前两行
tail -n 2 file1 查看一个文件的最后两行
tail -n +1000 file1 从1000行开始显示,显示1000行以后的
cat filename | head -n 3000 | tail -n +1000 显示1000行到3000行
cat filename | tail -n +3000 | head -n 1000 从第3000行开始,显示1000(即显示3000~3999行)

vim 命令

命令 命令描述
:q 退出
:q! 不保存退出
:w 保存
:w! 强行保存
:wq 保存退出
:wq! 强制保存并退出
gg 光标跳转到第一行
:30 光标跳转到第30行
shift+g 光标跳转到最后一行
i 在当前光标所在字符的前面,转为输入模式
a 在当前光标所在字符的后面,转为输入模式
o 在当前光标所在行的下方,新建一行,并转为输入模式
I 在当前光标所在行的行首,转为输入模式
A 在当前光标所在行的行尾,转为输入模式
O 在当前光标所在行的上方,新建一行,并转为输入模式
yy 复制当前行
p 粘贴刚刚辅助的行
dd 删除当前行
vim命令高级

如果是vi的话,则需要编辑/etc/virc文件 如果是vim的话,则需要编辑/etc/vimrc文件

以显示行数为例

  • vim /etc/vimrc
  • 找到一个空白的行,输入:set number
  • 保存、退出
命令 命令描述
set nocompatible 去掉有关vi一致性模式,避免以前版本的bug和局限
set nu 显示行号
set number 显示行号
syntax on 语法高亮度显示
set autoindent vim使用自动对齐(自动缩进)
set cindent (cindent是特别针对 C语言语法自动缩进)
set smartindent 智能的选择对齐方式,对于类似C语言编写上有用
set tabstop=4 设置tab键为4个空格
set shiftwidth=4 设置当行之间交错时使用4个空格
set ai! 设置自动缩进
set showmatch 设置匹配模式输入一个左括号时会匹配相应的右括号
set ruler 在编辑过程中,在右下角显示光标位置的状态行

用户

命令 命令描述 示例
cat /etc/passwd 查看所有用户的列表
cat /etc/group 查看用户组
groupdel sam 删除sam组
groups 查看当前登录用户的组内成员
whoami 查看当前登录用户名

/etc/passwd 中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下: 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

文件

find

命令 命令描述 示例
find / -name fileName 从 '/' 开始进入根文件系统搜索文件和目录
find / -user user1 搜索'/'目录下属于用户 'user1' 的文件和目录
find /usr/bin -type f -atime +100 搜索'/usr/bin'目录下在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10 搜索'/usr/bin'目录下在10天内被创建或者修改过的文件
whereis halt 显示一个二进制文件、源码或man的位置
which halt 显示一个二进制文件或可执行文件的完整路径
find /var/mail/ -size +50M -exec rm {} \; 删除'/var/mail/'目录下大于50M的文件
find /home/mount/logs/car_loan -mtime +30 -type f | xargs /bin/rm -rf; 删除/opt/logs目录下30天以前的文件
find / -type f -size +100M -exec du -sh {} \; 查找/目录下大于100m的文件
find ./ -name '*.txt' 找出当前目录下的所有txt文件
find /path/temp -type f -mtime +60 -delete 删除最后修改日期超过两个月的文件
find /path/temp -type d -mtime +60 -exec rm -rf {} + 删除最后修改日期超过两个月的非空文件夹(递归删除)
find /path/temp -type d -empty -mtime +60 -delete 删除最后修改日期超过两个月的空文件夹(非递归)
find /mount/data1 -type f -not -newermt 2023-12-30 -exec rm -f {} + 递归删除目录/mount/data1下2023-12-30之前的所有文件

打包和压缩文件

tar 命令
  • 对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压
命令 命令描述 示例
-c 新建打包文件
-t 查看打包文件的内容含有哪些文件名
-x 解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
-j 通过bzip2的支持进行压缩/解压缩
-z 通过gzip的支持进行压缩/解压缩
-v 在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename filename为要处理的文件
-C dir 指定压缩/解压缩的目录dir
rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1'
rar x file1.rar 解压rar包
unzip file1.zip 解压一个zip格式压缩包
zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包
tar zcvf test.tar.gz file1 file2 dir1 将几个文件和目录同时压缩成一个gz格式的压缩包
tar -xf filename 解压 tar -xf test.tar
xz filename 压缩文件 xz /opt
xz -dk filename 解压文件 -d解压 -k保留源文件不删除 xz -dk test.tar.xz
xz -lfilename 查看压缩前后的大小、压缩率(Ratio) xz -l test.tar.xz

文本处理

grep 命令
  • 分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等
命令 命令描述 示例
grep --color=auto '管理员' log.txt; 查询log.text中'管理员'的位置
grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug"
grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇
grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行
grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug"
sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2"
sed '/^$/d' example.txt 从example.txt文件中删除所有空白行
paste 命令
命令 命令描述 示例
paste file1 file2 合并两个文件或两栏的内容
paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分
sort 命令
命令 命令描述 示例
sortfile1 file2 排序两个文件的内容
sortfile1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)
sortfile1 file2 | uniq -u 删除交集,留下其他的行
sortfile1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)
comm 命令
命令 命令描述 示例
comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容
comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容
comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分

文件的权限

  • 使用 "+" 设置权限,使用 "-" 用于取消

chmod 命令

命令 命令描述 示例
ls -lh 显示权限
chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r,4 )、写(w,2)和执行(x,1)的权限
chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限

chown 命令

  • 改变文件的所有者
命令 命令描述 示例
chown user1 file1 改变一个文件的所有人属性
chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性
chown user1:group1 file1 改变一个文件的所有人和群组属性

chgrp 命令

  • 改变文件所属用户组
命令 命令描述 示例
chgrp group1 file1 改变文件的群组

docker

docker的常用命令

命令 命令描述 备注
docker version 查看docker版本
systemctl start docker 启动docker
service docker start 启动docker
systemctl enable docker 设置开机自启
service docker restart 重启docker
systemctl restart docker 重启docker
systemctl stop docker 停止docker
systemctl stop docker.socket 停止docker Warning: Stopping docker.service, but it can still be activated by:docker.socket
docker search xxx(镜像名) 检索镜像
docker pull xxx(镜像名) 下载镜像
docker pull xxx(镜像名):[tag版本号] 带版本号下载镜像
docker images 列出本地镜像列表
docker ps 列出当前所有正在运行的container
docker ps -a 列出所有的container
docker stop 容器ID或者容器名 停止容器
docker restart 容器ID或者容器名 重启容器
docker ps --filter name=$name 查询容器名包含某个字符的容器 docker ps --filter name=nginx
systemctl stop docker 关闭docker
docker exec -it 容器id /bin/bash 进入容器内部
docker stats docker资源使用情况 每隔1秒钟就会刷新输出内容
docker stats --no-stream 只是返回当前的状态
docker stats --no-stream 容器ID/Name 只输出指定的容器
docker stats --format "table{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" 格式化输出的结果 只输出了 Name, CPUPerc 和 Memusage 三列
docker restart $(docker ps -qf "name=^app_") 重启容器名字以app开头的容器
docker rmi $(docker images -q) 删除所有镜像信息
docker rm $(docker ps -aq) 删除所有容器信息
docker rm $(docker ps -q -f status=exited) 删除状态为exited的容器
docker rm $(docker ps -q -f status=created) 删除状态为created的容器
docker rm 容器ID或者容器名 删除容器
docker rmi xxx(镜像名) 删除镜像
docker rm docker ps -a | grep Exited | awk '{print $1}' 删除已停止的docker容器
docker rmi -f docker images | grep '<none>' | awk '{print $3}' 删除名称或标签为none的镜像
docker rmi $(docker images | grep "^" | awk "{print $3}") 想要删除untagged images,也就是那些id为的image
docker rmi $(docker images | grep xxxx | awk "{print $3}") 想要删除iamges名字中包含xxxx的镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi 删除名称或标签为none的镜像
docker image prune -a 删除没有关联的镜像
docker image prune -a -f 删除没有关联的镜像(强制,无需确认)
docker system prune -f --volumes 自动清理未使用的资源
docker service update xxx --env-add nacos.addr=172.0.0.1:8848 更新docker swarm服务的环境变量
docker stop $(docker ps -aq) 停止所有容器信息
docker kill 容器ID或者容器名 强制停止容器
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名] 将已有镜像重新打包
docker container cp containerId:/opt/logs/credit-server/output.log /home/mount/logs/car_loan/credit-server/ 将docker中的文件复制到宿主机上
docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID 查看指定时间后的日志,只显示最后100行
docker logs --since 30m CONTAINER_ID 查看最近30分钟的日志
docker logs -t --since="2021-04-08T13:23:37" CONTAINER_ID 查看某时间之后的日志
docker logs -t --since="2021-04-08T13:23:37" --until "2021-04-13T12:23:37" CONTAINER_ID 查看某时间段日志
docker logs Name/ID 从一个容器中取日志
docker logs -f --tail=1000 容器ID或者容器名 读取docker容器日志的后一千行信息的命令
docker logs -f -t --tail 容器ID 查看容器的日志 -t 是加入时间戳 --tail 数字 显示最后多少条 -f 跟随最新的日志打印
docker commit -p containerId showdoc 备份容器 docker commit -p 679f25747a94 backups:1.0
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] 标记本地镜像,将其归入某一仓库 docker tag ubuntu:15.10 172.16.10.152:5000/library/ubuntu:v3
docker inspect 容器id 查看镜像的详细信息 docker inspect 5678
docker inspect --format '{{.Name}}' "$containerId" | sed 's/^\///' 通过容器id来获取docker server名字 docker inspect --format '{{.Name}}' "39958997c61b" | sed 's/^\///'
docker inspect redis_s | grep IPAddress 获取容器ip
docker inspect redis_s | grep IPAddress 获取容器ip
docker export $containerId > $backupFile 将容器id导出到文件backupFile docker export 12Fhd > /opt/temp/test_backup_241227.tar
docker import $BACKUP_FILE container:latest 从 tar 文件创建新的 Docker 镜像 docker import /opt/temp/test_backup_241227.tar test:1.0
docker save -o FILE.tar $containerId 导出镜像 docker save -o test.tar nginx
docker load -i FILE.tar 导入镜像,镜像名字是之前镜像名字 docker load -i test.tar
docker import $BACKUP_FILE container:latest 从 tar 文件创建新的 Docker 镜像 docker import /opt/temp/test_backup_241227.tar test:1.0
docker update --restart always $CONTAINER_NAME 设置容器在失败后自动重启 docker update --restart always nginx
docker cp $CONTAINER_ID:$SOURCE_PATH $DEST_PATH 在容器和主机之间复制文件或目录 docker cp nginx:/etc/nginx.conf /opt/nginx/nginx.conf
docker top $containerId 查看容器内部进程的状态 docker top nginx
docker rename OLD_NAME NEW_NAME 更改容器的名字
docker diff CONTAINER_ID 检查容器文件系统的变化
docker run -d -p 1234:1234 --memory="512m" --cpus="1" -e JVM_XMS=512m -e JVM_XMX=2048m --name test --restart=always -v /opt/test/conf:/opt/conf -e "test.test=Y" imageName  
  • --memory="512m":限制容器的内存使用为 512MB
  • --cpus="1":限制容器使用一个 CPU 核心

docker stack启动服务

命令 命令描述 示例
docker stack deploy -c test.yml test --with-registry-auth 启动test.yml
docker service update --image ${newImage} ${serverName} 重启docker swarm服务
docker service scale ${serverName}=1 改变docker swarm服务的副本数量
docker service update --limit-memory 2048M --reserve-memory 1024M serviceId 设置容器的最大使用内存与保留内存

系统和关机

  • 系统的关机、重启以及登出
命令 命令描述 示例
shutdown -h now 关闭系统
init 0 关闭系统
telinit 关闭系统
shutdown -h hours:minutes & 按预定时间关闭系统
shutdown -c 取消按预定时间关闭系统
shutdown -r now 重启
reboot 重启
logout 注销
time 测算一个命令(即程序)的执行时间

防火墙

systemctl的方式

查看防火墙的状态

systemctl status firewalld

关闭防火墙

systemctl stop firewalld

启动防火墙

systemctl start firewalld

设置开机启用防火墙

systemctl enable firewalld.service

设置开机禁用防火墙

systemctl disable firewalld.service

使用firewall-cmd配置端口

查看防火墙的状态

firewall-cmd --state

重新加载配置

firewall-cmd --reload

查看开放的端口

firewall-cmd --list-ports

开启防火墙端口

firewall-cmd --zone=public --add-port=9200/tcp --permanent

命令含义(添加端口后,必须用命令firewall-cmd --reload重新加载一遍才会生效)

  • –zone #作用域
  • –add-port=9200/tcp #添加端口,格式为:端口/通讯协议
  • –permanent #永久生效,没有此参数重启后失效
关闭防火墙端口

firewall-cmd --zone=public --remove-port=9200/tcp --permanent

进程相关的命令

jps命令

  • 显示当前系统的java进程情况,及其id号
  • jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。

ps命令

  • 用于将某个时间点的进程运行情况选取下来并输出,process之意
命令 命令描述 示例
-A 所有的进程均显示出来
-a 不与terminal有关的所有进程
-u 有效用户的相关进程
-x 一般与a参数一起使用,可列出较完整的信息
-l 较长,较详细地将PID的信息列出
ps aux 查看系统所有的进程数据
ps ax 查看不与terminal有关的所有进程
ps -lA 查看系统所有的进程数据
ps axjf 查看连同一部分进程树状态

kill命令

  • 用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号,它通常与ps和jobs命令一起使用
命令 命令描述 示例
kill -9 pid 杀死进程((-9表示强制关闭))
killall -9 programName 杀死进程
pkill programName 杀死进程

killall命令

  • 向一个命令启动的进程发送一个信号

top命令

  • 是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
命令 命令描述 示例
top -H -p pid 查看某个进程内部线程占用情况分析 top -H -p 1203

free命令

  • total 总内存
  • used 已用内存
  • free 空闲内存
  • buff/cache 已使用的缓存
  • avaiable 可用内存
[root@anjingsi ~]# free -mh
              total        used        free      shared  buff/cache   available
Mem:           3.5G        1.8G        111M        716K        1.7G        1.5G
Swap:            0B          0B          0B

如果需要清除buff/cache的缓存数据使用以下的命令

  • 仅清除页面缓存(PageCache) sync; echo 1 > /proc/sys/vm/drop_caches
  • 清除目录项和inode sync; echo 2 > /proc/sys/vm/drop_caches
  • 清除页面缓存,目录项和inode sync; echo 3 > /proc/sys/vm/drop_caches

在生产环境中不建议使用上面的第三个选项"...echo 3 > ..." ,除非你明确自己在做什么,因为它会清除缓存页,目录项和inodes

top命令中的pid转换为docker服务

下面以pid=26526为示例

1、获取pid对应的docker服务的镜像id
[root@carloan-worker120 ~]#  cat /proc/26526/cgroup
11:devices:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
10:blkio:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
9:freezer:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
8:pids:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
7:cpuacct,cpu:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6ameba/uploadpic:/opt/docker/uploadpic   -v /home/mount/zham
6:memory:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a.120:5000/zhameba/zhameba:1.0 -Dconfig.file=conf/applicati
5:hugetlb:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
4:cpuset:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
3:perf_event:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
2:net_prio,net_cls:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
1:name=systemd:/docker/39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a
2、通过镜像id查询docker server名字
[root@carloan-worker120 ~]# docker inspect --format '{{.Name}}' "39958997c61bf10ce58540b3e851d095c0df199d8c02c4f630cbf43ae5aa5c6a" | sed 's/^\///'
car-loan_auth-server.1.8tc18vzp0lkqrsam0dwo477pg

其他常用的命令

命令 命令描述 示例
netstat -tunlp | grep 端口号 查看进程端口号 netstat -tunlp | grep 9093
ps aux | grep pid 查看top命令下pid对应的服务 ps aux | grep 21381
ps -ef | grep 使用ps命令查看进程详细信息 ps -ef | grep 123
netstat -tuln | grep <端口号> 使用netstat命令查看端口被哪个服务使用 netstat -tuln | grep 80
ps -ef | grep 使用ps命令查看进程详细信息 ps -ef | grep 123
ps aux | sort -rk 4,4 | head -n 10 列出排名前10的内存占用进程
sed -i 's/\r$//' xx.sh /bin/bash^M: 坏的解释器 需要执行的命令

查看已经使用的端口

ss -tuln

-t 表示显示TCP端口

-u 表示显示UDP端口

-l 表示显示正在监听的端口。

-n 表示直接使用数字形式显示地址和端口号,不进行域名解析。

全部评论: 0

    我有话说: