欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell 基本命令

程序员文章站 2022-06-03 11:50:56
...

shell 基本命令

CLI: 命令行界面(command line interface)

目录与文件

  • cd : 切换目录,单点符(.) 表示当前目录,双点符(…)表示当前目录的父目录

  • pwd : 查看当前工作目录

  • ls : 显示当前目录下的文件和目录

    $ ls -a # 列出目录下的所有目录及文件(包括隐藏文件)
    $ ls -l # 列出目录和文件的详细信息(包括文件和目录的权限)
    total 20
    drwxr-xr-x 2 yy yy 4096 Mar 12 20:38 d2
    -rw-r--r-- 1 yy yy   61 Mar 13 01:11 test1.c  # -用户-用户组-其他用户-
    
    $ ls -l my_script  # 过滤单个文件
    $ ls -l my_scr?pt # ?代表一个字符
    $ ls -l my* # * 代表零或多个字符
    $ ls -l my_scr[ai]pt # 元字符通配符,只匹配a,i两种字符
    $ ls -l f[a-i]ll # 匹配某个范围
    $ ls -l f[!a]ll # !排除不需要的内容
    
  • touch : 创建文件,文件大小是0为空文件

  • chmod :改变文件或目录权限

    角色:
    u (user)用户(文件所有者)
    g (group)用户组(同一组中除了当前用户的其他用户)
    o (other)其他用户(其他用户组下的所有用户)
    a (all)所有用户
    
    操作符:
    + 增加权限
    - 撤销权限
    = 设置权限
    
    权限值:
    r 可读,权限值4
    w 可写,权限值2
    x 可执行,权限值1
    - 无任何权限,权限值0
    
    $ chmod u+r test.txt     # 增加用户可读
    $ chmod u-w test.txt     # 撤销用户可写
    $ chmod u=rw test.txt    # 重置用户权限(可读可写)
    $ chmod u=- test.txt     # 重置用户权限(无任何权限)
    $ chmod g=rw test.txt    # 重置用户组权限(可读可写)
    
  • cp : 复制文件 (cp 源对象 目标对象)

  • ln : 链接文件

    $ ln -s # 软链接:符号链接,一个实实在在的文件,指向存放在虚拟目录结构中某个地方的另一文件,这两个通过符号链接在一起的文件,彼此的内容并不相同。
    $ ln # 硬链接:会创建独立的虚拟文件,包含原始文件的信息和位置,但从本质上是同一个文件。
    
  • mv : 重命名文件/移动文件

  • rm : 删除文件

  • rm -r : 递归删除目录 (-rf:无提示删除)

  • mkdir : 创建目录,若目录已存在,则会提示File exists,不会再创建

  • rmdir : 删除目录(只允许删除空目录)

  • rmdir -p : 递归删除路径中的所有空的父目录和子目录,显示详细删除过程, -v 如果非空则报错。

    $ rmdir -p -v d3/d4/d5
    rmdir: removing directory, 'd3/d4/d5'
    rmdir: removing directory, 'd3/d4'
    rmdir: removing directory, 'd3'
    
  • tree : 显示目录层级结构

  • file : 查看文件类型

  • cat : 查看整个文件(-n 查看行号)

  • more : 分页查看文件

  • less : 一次查看一屏

  • tail : 默认查看文件后10行

    # -n 指查看文件后3行数
    $ tail -n 3 logname.log
    
    # 查看实时日志文件(默认查看最后十行,但是是动态刷新的)
    $ tail -f logname.log
    
  • head : 默认查看文件头10行 (-n 指定行数)

处理数据文件

  • sort : 将文件内容排序,默认按照字符

    -n : 按照数字进行识别,按值排序
    -M : 识别三字符的月份名,按照月份进行排序
    -t : 指定字段分隔符
    -k : 指定排序的字段
    
  • grep : 搜索数据

    -v : 反向搜索,输出不匹配该模式的行
    -n : 显示行号, 输出包含某个关键词的行和行号
    -c : 显示多少行含有匹配的模式
    -l : 输出包含某个关键词的文件名,不输出具体的行
    -e : 指定多个匹配模式
    [] : 可使用正则表达式来匹配模式,比如grep [tf]
    
    # 搜索
    $ grep girl test*.c
    test1.c:yuanyuan is a good girl
    test2.c:yuanyuan is a pretty girl
    test3.c:yuanyuan is a girl and student
    
    # 显示行号
    $ grep -n girl test*.c
    test1.c:1:yuanyuan is a good girl
    test2.c:1:yuanyuan is a pretty girl
    test3.c:1:yuanyuan is a girl and student
    
    # 反向搜索
    $ grep -v girl test*.c
    test1.c:hahhahah
    test2.c:yesyesyes!!!
    test3.c:she works hard
    
    # 输出包含关键词的数量
    $ grep -c girl test*.c
    test1.c:1
    test2.c:1
    test3.c:1
    
    # 查找空行数量
    $ grep -c ^$ test1.c
    
    # 查找非空行的数量
    $ grep -c ^[^$] test1.c
    
    # 输出包含某个关键词的文件名
    $ grep -l girl test*.c
    test1.c
    test2.c
    test3.c
    
    # 输出两个文本中的相同内容
    $ grep -f test1.c test2.c
    yuanyuan is a good girl
    
    # 输出两个文本中的不同内容 -vf
    $ grep -vf test2.c test1.c  
    i'm test11111
    
    
  • echo命令 : 输出字符串或提取Shell变量的值

    # 把字符串导入文件test中(源文件会被覆盖)
    $ echo "ooooooooo" > test.c 
    
    # 用$来提取变量的值,再配合echo命令将变量值输出
    $ echo $PATH
    /opt/jvm/jdk1.8.0_221/bin:/opt/jvm/jdk1.8.0_221/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
    
  • sed命令 : 处理编辑文本文件

    # 截取指定时间段日志并输出到指定文件
    
    $ sed -n '/2020-01-01 00:00:/,/2020-12-12 24:00:/p' xxx.log > xxx.txt
    
    -n:仅显示script处理后的结果。
    p:print,打印输出。
    注意:日期时间格式要和日志文件中的保持一致。
    
  • gzip : 压缩文件

  • gzcat : 查看压缩后的文件

  • gunzip : 解压文件

  • tar : 归档数据

    -c : 创建一个tar归档文件
    -v : 在处理时显示文件
    -f : 输出结果到文件
    -t : 列出已有的归档文件
    -x : 提取归档文件
    $ tar -cvf test.tar test/ test2/ # 创建来test.tar 文件,包含 test和 test2目录内容
    $ tar -tf test.tar # 列出test.tar 的内容
    $ tar -xvf test.tar # 提取test.tar 文件内容
    

系统管理

  • find命令 : 查找和搜索文件

    # 列出当前目录下的所有文件和子文件
    $ find .
    .
    ./d4
    ./d2
    ./d2/test1.c
    ./d2/test2.c
    ./test.c
    ./test5.c
    
    # 查看d2目录下所有后缀名为.c的文件
    $ find ./d2 -name "*.c"
    ./d2/test1.c
    ./d2/test2.c
    
    # 找出d2目录下不为test1.c的文件(包括目录本身)
    $ find ./d2 ! -name "test1.c"
    ./d2
    ./d2/test2.c
    
    
  • ps : 查看进程

    $ ps -ef  # 查看系统上所有进程
    $ ps -l  # 长模式,查看更多信息
    $ ps -d # 指定屏幕刷新的延迟时间
    
  • top : 实时显示进程信息,默认10s更新一次

    # top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。
    $ top
    Processes: 323 total, 2 running, 321 sleeping, 1358 threads            18:55:46
    Load Avg: 1.36, 1.61, 1.62  CPU usage: 4.7% user, 4.7% sys, 91.84% idle
    SharedLibs: 155M resident, 46M data, 28M linkedit.
    MemRegions: 93635 total, 2540M resident, 78M private, 687M shared.
    PhysMem: 7933M used (2198M wired), 258M unused.
    VM: 1674G vsize, 1112M framework vsize, 25092448(0) swapins, 26273811(0) swapout
    Networks: packets: 6926277/8004M in, 5741131/2508M out.
    Disks: 5514267/162G read, 3415020/130G written.
    
    PID    COMMAND      %CPU TIME     #TH   #WQ  #PORTS MEM    PURG   CMPRS  PGRP
    39081  top          3.1  00:00.48 1/1   0    23     3020K+ 0B     0B     39081
    39062  bash         0.0  00:00.02 1     0    19     940K   0B     0B     39062
    39061  login        0.0  00:00.04 2     1    30     1164K  0B     0B     39061
    39060  iTerm2       0.0  00:00.02 2     1    30     2796K  0B     0B     39060
    39058  iTerm2       16.2 00:01.63 10    4    310    42M-   2556K  0B     39058
    39055  mdworker     0.0  00:00.07 3     1    51     3092K  0B     0B     39055
    39054  mdworker     0.0  00:00.08 3     1    51     3108K  0B     0B     39054
    39053  mdworker     0.0  00:00.07 3     1    51     3080K  0B     0B     39053
    39051  CFNetworkAge 0.0  00:00.10 3     2    48     12M    0B     0B     39051
    
    进程中:
    VIRT:所需的虚拟内存大小
    RES:所用的实际物理内存大小
    SHR:所用的共享内存大小
    %CPU:所用的CPU的占比
    %MEM:所用的物理内存的占比
    
  • kill : 通过 pid 结束进程

    kill [PID] 可将指定的信号发送给相应的进程或工作。 
    kill命令默认使用信号为15,用于结束进程或工作。
    如果进程或工作忽略此信号,则可以使用信号9,强制杀死进程或作业。
    一般搭配ps和grep,根据文本搜索来查找出进程的PID号,然后再使用kill杀掉它。
    
  • killall : 通过进程名结束进程

监测磁盘空间

  • mount : 查看当前系统上挂载的设备列表
  • umount : 通过设备文件或者挂载点来卸载设备 (注意 没有字母n)
  • df : 查看所有已挂载的磁盘空间
  • du : 查看特定目录的磁盘使用情况(按文件、子目录、目录逐级向上)
    -c : 显示所有已列出文件的总大小
    -h : 按易读格式输出大小 (K、M、 G)
    -s : 显示每个输出参数的总计
    

网络通信

  • ssh命令 : 管理远程服务器

    # 登录远程服务器
    $ ssh [-p port] [远程主机]
    
    
    port是端口号,不指定的话默认为22,后面加上IP地址。
    连接成功之后,就可以远程操控另外一台主机了,在它的目录下创建文件、修改文件等等。
    
    Q: 如何免密登录?
    
    在终端中执行ssh-****** 即可生成SSH钥匙,一路回车即可。
    上传公钥到服务器。在终端中执行ssh-copy-id [-p port] [远程主机] 可以让远程服务器记住我们。
    
  • ping命令 : 测试主机间网络的连通性

    # 测试主机与百度网站的连通性
    $ ping www.baidu.com 
    PING www.a.shifen.com (180.101.49.11): 56 data bytes
    64 bytes from 180.101.49.11: icmp_seq=0 ttl=51 time=10.711 ms
    64 bytes from 180.101.49.11: icmp_seq=1 ttl=51 time=12.496 ms
    64 bytes from 180.101.49.11: icmp_seq=2 ttl=51 time=12.194 ms
    64 bytes from 180.101.49.11: icmp_seq=3 ttl=51 time=10.880 ms
    64 bytes from 180.101.49.11: icmp_seq=4 ttl=51 time=10.588 ms
    
  • ifconfig命令 : 显示和配置网络设备信息

    # 显示网络设备信息
    $ ipconfig
    
    # 配置IP地址
    ifconfig eth0 192.168.1.56 //给eth0网卡配置IP地址
    ifconfig eth0 192.168.1.56 netmask 255.255.255.0 // 给eth0网卡配置IP地址,并加上子掩码
    ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255// 给eth0网卡配置IP地址,加上子掩码,加上个广播地址
    
  • hostname命令 : 显示系统的主机名

    # 显示主机的IP地址
    $ hostname -I   
    127.0.1.1
    
    # 显示主机名
    $ hostname  
    ubuntu
    
相关标签: shell