轩辕李的博客 轩辕李的博客
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

轩辕李

勇猛精进,星辰大海
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 分布式

  • 代码质量管理

  • 基础

  • 操作系统

    • Linux命令汇总
      • 一、档案读取
      • 二、档案操作
      • 三、档案权限
      • 四、文件格式处理
      • 五、搜索
      • 六、管线命令
      • 七、工作管理
      • 八、程序管理
      • 九、用户
      • 十、打包压缩
      • 十一、系统信息
      • 十二、网络
      • 十三、工作排程
      • 十四、磁盘与文件系统
      • 十五、环境变量
      • 十六、Bash
    • Bash脚本教程
  • 计算机网络

  • 编程范式

  • 安全

  • 中间件

  • 心得

  • 架构
  • 操作系统
轩辕李
2021-10-31
目录

Linux命令汇总

Linux命令众多,下面会做一个简单分类。但不会对每个命令进行详细的解读,对于常用命令会给出一些示例。
命令的详细信息可以通过man、info命令来查看,同时推荐Linux命令搜索 (opens new window)。

# 一、档案读取

  • file:观察文件类型
  • od:读取非纯文本档
  • tail:取出后面几行
-f 持续监听
-n 行数
  • head:取出前面几行
-n 行数
  • less:翻页显示--向前
  • more:翻页显示--向后
  • cat:显示档案内容
  • tac:反向显示档案内容
  • nl:显示档案内容--带行号

# 二、档案操作

  • rm:删除文件
-r 递归
-f 强制
  • touch:新建空档案
  • vim:档案编辑
ctrl+f  向后翻页
ctrl+b  向前翻页
G  导航到最后一行
gg  导航到第一行
dd  删除行
yy  复制行
p   粘贴
u   复原
i,o     进入编辑

:!wq    强制保存并退出
:set nu 显示行号
:set nonu   取消显示行号
:1,$s/word1/word2/gc    替换
  • basename、dirname:取得路径的文件名和目录名称
  • mv:移动档案或改名
  • cp:复制档案
-a  此参数的效果和同时指定"-dpR"参数相同
-d  当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-f  强行复制文件或目录,不论目标文件或目录是否已存在
-i  覆盖既有文件之前先询问用户
-l  对源文件建立硬连接,而非复制文件
-p  保留源文件或目录的属性
-R/r  递归处理,将指定目录下的所有文件与子目录一并处理
-s  对源文件建立符号连接,而非复制文件
-u  使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件
-S  在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀
-b  覆盖已存在的文件目标前将目标文件备份
-v  详细显示命令执行的操作
  • ls:打印当前目录的清单
-l  详细信息,包括档案权限和属性
-a  全部档案,包括隐藏档
-d  仅列出目录本身
  • rmdir:清除空目录。非空目录删除会报错
  • mkdir:创建目录
-p  递归创建
  • pwd:输出当前目录
  • cd:切换目录
  • sz和rz:rz是向服务器上传文件,sz是从服务器下载文件到本地 (yum install lrzsz)
  • scp:堡垒机(跳板机)的文件复制 scp 1.txt linux1@堡垒机ip:/home/liheng

# 三、档案权限

  • chmod:改变档案权限。可以是数字或字母,对应规则是:r4 w2 x1
先清楚三种身份:user、group、other,简写是u/g/o。还有一个a,表示所有身份
了解权限字母:r/w/x,分别表示读、写、执行
r/w/x也可以用数字表示,分别是4 2 1

chmod u=rwx,go=rx .bashrc
chmod u=7,go=5 .bashrc
chmod a+w .bashrc
chmod a-w .bashrc
  • chown:改变档案拥有者
# 更改所属用户和群组
chown mail:mail 1.log
  • chgrp:改变所属群组
  • chattr:配置档案隐藏属性
使用+、-、=来设置
隐藏属性有:a、A、S、c、d、i、s、u
  • lsattr:显示档案隐藏属性
  • umask:指定目录的权限默认值
目录的x权限表示可进入

umask设置的权限,表示需要减掉的权限。例如umask 022,新建档案就是755

# 四、文件格式处理

  • diff:以行为单位进行档案差异比对
  • patch:差异档制作为补丁档
  • printf:输出的数据格式化
  • pr:打印
  • cmp:利用字节对比两个档案

# 五、搜索

  • find:档案搜索指令,直接搜索硬盘
按时间搜索:
    find / -mtime 0     24小时内有变动的
    find / -mtime 3     3天前24小时内有变动的
    find / -newer /1.log     比1.log新的文件

按使用者搜索:
    find /home -user bird       属于bird的档案
    find /home -nouser bird
    find /home -group bird
    find /home -nogroup bird

按名称或权限搜索:
    find /etc -perm /0700   部分囊括
    find /etc -perm -0700   全部囊括
    find /etc -type b       按类型。f:一般档案、b,c:装置、d:目录、s:socket、l:链接、p:FIFO
    find /etc -name mysql.conf      按名称
    find /etc -size +100k      按大小

搜索后执行指令:
    find /etc -name mysql.conf -exec cat {} \;      
    {}表示搜索到的内容,'\;'是-exec内容的终结符

  • locate、whereis:搜索档案。默认从档案数据库中搜索,所以速度快很多。但无法实时搜索出新建档案,可以通过updatedb命令更新数据库
  • which:查询指令的完整路径

# 六、管线命令

  • xargs:对非管道命令提供管道支持
像ls、mv等命令,无法作为管道命令,通过xargs可以提供该指令引用stdin之用

执行命令:
    find /sbin/ -type d | ls
    期望输出搜索的结果,但因为ls不是管道命令,所以输出了当前所在目录的档案
    可以这么做:
        1、find /sbin/ -type d | xargs ls
        2、find /sbin/ -type d | xargs -i ls {}
    1会输出find的内容+ls内容
    2用了-i参数,可以使用{}代替stdin,所以只会输出ls内容

实际应用之批量删除redis key:
    因为redis del命令不支持通配符,可以用xargs来完成批量删除
    redis-cli -h 127.0.0.1 -p 2001 keys "money*" | xargs redis-cli -h 127.0.0.1 -p 2001 del
  • sed:提供将数据进行取代、删除、新增、摄取特定行等功能
对区间行做处理:
    语法是 [n1,n2]function,n1从1开始,n2可以是数字或$--表示最后一行。
    function有:
        c(取代)、
        d(删除)、
        a(下一行新增)、
        i(上一行插入)、
        p(打印,需要与-n配合使用--silent模式,只有经过sed处理的行才被列出来)、
        s(正则取代)
        
       nl /etc/passwd | sed '2,5d'      #删除2-5行
       nl /etc/passwd | sed '2a hello'      #第二行新增hello
       nl /etc/passwd | sed '2,5c hello'    #2-5行替换为hello
       nl /etc/passwd | sed -n '2,5p'
       
对每一行做处理:
    语法1是/content/function,content是内容,function是动作
        nl /etc/passwd | sed '/root/d'  #删除包含root的行
        nl /etc/passwd | sed -n '/root/p'
    语法2是s/old/new/g,这是个正则处理的替换
        nl /etc/passwd | sed 's/root/***/g'
    组合使用
        nl testfile | sed -n '/oo/{s/oo/kk/;p;q}'   # 搜索并执行一组命令

多条sed动作组合:
    使用-e 后面可以跟操作
    sed -e '3,$d' -e 's/HELLO/RUNOOB/'  # 删除某些行之后替换  

直接修改档案:
    需要使用-i选项
        sed -i 's/\.$/\!/g' test.txt    # 每一行结尾的.替换为!
        sed -i '$a hello' test.txt      # 最后一行添加hello
  • awk:数据处理工具。倾向于一行中分成数个字段来处理
基本语法是'condition {pattern action}'
awk会把每行做分割,默认分隔符是任意个空格
内置变量:
    BEGIN   是否是开始
    END     是否是结束
    $0      完整的一行记录
    $n      第n个字段,从1开始
    FS      字段分隔符(默认是任意个空格)
    NF      一行的字段数目
    NR      行号,从1开始
    RS      记录分隔符(默认是一个换行符)
内置pattern:print、printf

基本示例:
    awk '{print $1,$4}' log.txt     # 输出第一列和第四列的值
    awk '{printf "%-8s %-10s\n",$1,$4}' log.txt     # 格式化输出
    awk '$1>2' log.txt
    awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt
    awk '$2 ~ /th/ {print $2,$4}' log.txt
    awk '$2 !~ /th/ {print $2,$4}' log.txt  # 模式取反
    awk '/re/' log.txt
    awk 'BEGIN{IGNORECASE=1} /this/' log.txt    #忽略大小写的匹配
    ls -l *.txt | awk '{sum+=$5} END {print sum}'   # 计算文件大小
    awk 'length>80' log.txt     #length是length($0)的简写,awk内置函数:https://www.runoob.com/w3cnote/awk-built-in-functions.html

指定分隔符:
    使用-F
    awk -F, '{print $1,$2}'   log.txt   #-F指定分隔符为逗号
    awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt     #先使用空格分割,然后对分割结果再使用","分割

设置变量:
    使用-v
    awk -va=1 '{print $1,$1+a}' log.txt 

打印九九乘法表:
    seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'
    这里用到了sed的高阶指令,参考:https://www.cnblogs.com/fhefh/archive/2011/11/22/2259097.html
  • grep:分析一行信息,其中有需要的,则取出该行
基本用法:
    last | grep 'root'
    last | grep -v 'root'   # 反向取值
    last | grep -i 'Root'   # -i为忽略大小写
    last | grep -n 'root'   # -n为输出行号
    last | grep -e 'bird\w+'   # 正则匹配搜索
    
显示多余的行:
    -An,>n的行
    -Bn,<n的行
    last | grep -A3 -B2 'bird'  # 把所在行的前三行和后两行一起显示出来
     
  • split:将大档案拆分为小档案
-b 按字节分割
-l 按行数分割

split -b 300K 1.log
ls / | split -l 10 - root.txt   # 最后的-后面跟的是stdin,也就是文件名
  • expend:将文件中的tab转换为空格
tab以两个空格展示处理
    cat /etc/man_db.conf | grep '^MANPATH' | head -n 3 | expand -t 2
  • paste:将两行贴为一行,中间以tab隔开
  • join:两个档案中,有相同数据的那一行,才取出来
  • col:一般用来将tab键转换为对等空格键或将man信息转换为纯文本
  • tr:删除或文字信息的替换
  • tee:从标准输入读取数据并重定向到标准输出
tee example.txt <<EOF
paste
your
text
EOF

-a表示追加
  • wc:统计档案字数和行数
-l  行数。cat e.log | wc -l
-w  单词数
-m  字符数
  • uniq:排序后,要将重复的资料仅列出一个显式,可以使用unique
  • sort:根据不同的数据形态来排序
  • cut:将一段信息的某一段切出来,处理的讯息以行为单位
  • 标准输入(stdin)和标准输出(stdout)
stdin使用<和<<,分别表示输出(可用ctrl+d退出)和终止符输入
stdin使用>和>>,分别表示覆盖和追加
stderr是标准错误输出,使用2>和2>>,分别表示覆盖和追加

cat > e.log
hello
ctrl+d 退出

cat > e.log <<EOF
hello
EOF

echo hello > e.log
echo hello >> e.log

java -jar hello.jar >> app.log 2> /dev/null

# 七、工作管理

  • &:丢到背景中执行。退出当前shell,可能造成背景任务停止
  • nohub:将程序以忽略挂起信号的方式运行起来。默认输出到nohup.out文件,除非重定向指定。如果要退出shell之后任务继续执行,可以使用此命令
  • ctrl+z:将当期的工作丢到背景中,且暂停
  • jobs:观察目前背景工作的状态
  • fg:将背景工作取出到前景来处理。 fg %1
  • bg:让暂停的背景工作变为运行中
  • kill:移除工作或重启工作。kill -9强制删除
  • timeout:超时退出,如timeout 10s top -- 10秒后退出top命令

# 八、程序管理

  • ps:报告当前进程情况
ps aux:第三是cpu使用率,第四是内存使用率。可以sort -unk4来按照内存排序 
ps -l:仅观察与自己程序相关的
ps -e -o 'pid,rss,vsz,args' | grep java |  sort -nrk2	按内存大小排序
  • top:动态观察程序的变化。M是按照内存排序,c是显示出命令
  • pstree:显示程序的关联性
  • nice和renice:设置程序执行优先级
  • free:观察内存使用情况。-b、-m、-g是显示单位

# 九、用户

  • id:显示目前登录用户的uid、gid等信息
  • who:显示谁登录了系统
  • useradd:新增用户。添加完账户之后,还需要给他sudo权限
  • passwd:修改密码
  • chage:更详细的密码设定,可以让强制用户第一次登录的时候必须修改密码
  • usermod:账户数据信息进行微调
  • userdel:用户删除
  • chsh:修改用户的使用shell
  • last:使用者啥时候登入的
  • lastlog:知道每个账户的登录时间
  • write、mesg、wall:跟系统上面的用户登录
  • mail:邮箱功能
  • su:切换用户。su - root
  • cat /etc/passwd: 显示所有用户
  • cat /etc/group:显示所有群组

# 十、打包压缩

  • tar:打包
tar -cvf    压缩
tar -tvf    查看
tar -xvf    解压

配合-z是gz算法、-j是bz2算法
  • bzip2/bzcat、gzip/zcat、compress、zip/unzip

# 十一、系统信息

  • uname:取出电脑和操作系统的相关信息
  • uptime:观察系统的启动时间与工作负载
  • dmesg:分析核心产生的讯息。系统开始的时候,核心会侦测系统的硬件,这些信息会一闪而过,我们可以使用dmesg来把信息捉出来
  • vmstat:侦测系统资源变化。如果要了解繁忙系统那一部分最累人,可以用此命令分析看看
  • lsb_release:查看系统发行版的情况 cat /etc/redhat-release
  • poweroff:关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中
  • halt:用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统
  • shutdown:安全的关闭系统
-h  关机
-r  重启
  • reboot:重启
  • sync:更新inode表,并将缓冲文件写入硬盘

# 十二、网络

  • ifconfig:用于显示或配置网络设备
  • netstat:显示各种网络相关的信息。常用:-apn
  • ping:测试与目标主机的连通性
  • ip和ss:centos7中,用来替换 ifconfig route arp netstat
  • host:根据主机名(域名)获得ip
  • nslookup:通过ip找出主机名称(windows同)
  • traceroute:追踪两台主机间各个节点的通信状况(windos是tracet)
  • telnet:基于telnet协议的远程登录。还可用来确定远程服务的状态,确定某个端口是否能访问
  • lynx:文本模式下的浏览器
  • wget:进行网页数据的读取
  • curl:综合传输工具,支持文件的上传和下载
curl -X GET -H 'Host:www.example.com' http://www.baidu.com
curl --basic  -u user:password http://www.example.com/posts/
curl --cookie "name1=value1" http://www.example.com
curl --form upload=@localfilename --form press=OK http://www.example.com
curl -o file.html http://www.example.com    # 下载
curl -O http://www.example.com/1.jpg
  • tcpdump:可以分析数据包的流向,连数据包的内容也可以进行监听
  • nc:可用来作为某些服务的检测,也可以连接到某个port来进行通信。还可以启动一个port来倾听其他用户的联机

# 十三、工作排程

  • at:定时执行一次任务
  • batch:通过at执行,但会在CPU负载小于0.8时,才进行你下达的工作任务
  • crontab:示例:50 8 * * * /usr/sbin/ntpdate -s cn.pool.ntp.org 分时日月周
-l      展示列表
-e      编辑

# 十四、磁盘与文件系统

  • dumpe2fs:查看文件系统(分割槽)的相关信息
  • ln:建立连结档
  • du:评估目录的磁盘使用量
-s      仅列出总量
-h      已读的方式展示(M、G)
du -sh
du -sh *
  • df:列出文件系统的整体磁盘使用量

# 十五、环境变量

  • echo:输出字符
  • export:为shell变量或函数设置导出为环境变量
  • env 所有环境变量
  • set 查看本地环境变量

# 十六、Bash

  • alias:设置别名
alias lm = 'ls –al | more' 
  • history:查询命令记录
  • type:想要知道指令是外部指令还是bash内建指令,利用type这个指令来观察
type ls ,输出:
    ls is aliased to `ls --color=auto'
type docker ,输出:
    docker is /usr/bin/docker 
  • ulimit:多人任务时的资源限制
  • declare、typeset:宣告变量类型
  • read:shell中和使用者对谈
  • locale:查询Linux支持多少语系
  • date:显示日期
date +%Y/%m/%d_%H:%M:%S
date +'%Y/%m/%d %H:%M:%S' --date '+1 day'  
编辑 (opens new window)
上次更新: 2025/04/01
字符编码研究:ASCII、GBK、UTF-8
Bash脚本教程

← 字符编码研究:ASCII、GBK、UTF-8 Bash脚本教程→

最近更新
01
Spring Boot版本新特性
09-15
02
Spring框架版本新特性
09-01
03
Spring Boot开发初体验
08-15
更多文章>
Theme by Vdoing | Copyright © 2018-2025 京ICP备2021021832号-2 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式