Linux常用的命令

傻男人 1年前 ⋅ 2018 阅读

Linux常用的命令

基础的一些命令

ls命令 查看目录中的文件

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

cp 命令

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

mv命令

命令命令描述
-fforce强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-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)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题
-ccipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh
-Fssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh
-iidentity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh
-llimit 限定用户所能使用的带宽,以Kbit/s为单位
-ossh_option 如果习惯于使用ssh_config(5)中的参数传递方式
-Pport 注意是大写的P, port是指定数据传输用到的端口号
-Sprogram 指定加密传输时所使用的程序。此程序必须能够理解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 autoindentvim使用自动对齐(自动缩进)
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 filenamefilename为要处理的文件
-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停止dockerWarning: 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 statsdocker资源使用情况每隔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导出到文件backupFiledocker 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 loan-car.yml loan-car --with-registry-auth启动loan-car.yml
docker service update --image ${newImage} ${serverName}重启docker swarm服务
docker service scale ${serverName}=1改变docker swarm服务的副本数量

系统和关机

  • 系统的关机、重启以及登出
命令命令描述示例
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

    我有话说: