zoukankan      html  css  js  c++  java
  • Linux文件管理

    目录结构

    一切以根为顶点的目录

    $  ll /
    总用量 24
    lrwxrwxrwx.   1 root root    7 9月  12 10:55 bin -> usr/bin
    dr-xr-xr-x.   5 root root 4096 9月  12 11:02 boot
    drwxr-xr-x.  20 root root 3240 9月  20 10:54 dev
    drwxr-xr-x.  77 root root 8192 9月  20 12:15 etc
    drwxr-xr-x.   3 root root   18 9月  12 11:01 home
    lrwxrwxrwx.   1 root root    7 9月  12 10:55 lib -> usr/lib
    lrwxrwxrwx.   1 root root    9 9月  12 10:55 lib64 -> usr/lib64
    drwxr-xr-x.   2 root root    6 4月  11 2018 media
    drwxr-xr-x.   2 root root    6 4月  11 2018 mnt
    drwxr-xr-x.   2 root root    6 4月  11 2018 opt
    dr-xr-xr-x. 114 root root    0 9月  20 10:54 proc
    dr-xr-x---.   5 root root 4096 9月  20 12:10 root
    drwxr-xr-x.  26 root root  760 9月  20 12:45 run
    lrwxrwxrwx.   1 root root    8 9月  12 10:55 sbin -> usr/sbin
    drwxr-xr-x.   2 root root    6 4月  11 2018 srv
    dr-xr-xr-x.  13 root root    0 9月  20 10:54 sys
    drwxrwxrwt.  25 root root 4096 9月  20 13:02 tmp
    drwxr-xr-x.  13 root root  155 9月  12 10:55 usr
    drwxr-xr-x.  19 root root  267 9月  12 11:24 var
    

    硬链接和软链接

    和源文件索引节点一样的文件是硬链接, 反之则是软链接

    用户所使用的命令的目录

    目录 说明
    /bin /bin目录的硬链接
    /sbin /sbin 目录的硬链接
    /usr/bin 普通用户所使用得命令的目录
    /usr/sbin 超级管理员所使用的命令目录
    $  ls -lid /usr/bin/
    50331721 dr-xr-xr-x. 2 root root 24576 9月  20 12:45 /usr/bin/
    $  ls -lid /bin/
    50331721 dr-xr-xr-x. 2 root root 24576 9月  20 12:45 /bin/
    $  ls -lid /usr/sbin/
    77 dr-xr-xr-x. 2 root root 12288 9月  20 12:45 /usr/sbin/
    $  ls -lid /sbin/
    77 dr-xr-xr-x. 2 root root 12288 9月  20 12:45 /sbin/
    

    引导目录

    目录 说明
    /boot 引导目录, 存放grub菜单和内核的信息

    设备目录

    目录 说明
    /dev 设备目录
    /dev/cdrom /dev/sr0 的软链接
    /dev/sr0 光驱, 光盘
    /dev/random 产生随机数
    /dev/zero 源源不断产生数据的文件
    /dev/pts/ 虚拟终端
    /dev/sd* 磁盘分区
    /dev/stderr 错误输出 2
    /dev/stdin 标准输入 0
    /dev/stdout 标准输出 1
    /dev/null 黑洞
    >>> 光驱, 光盘
    $  ll -i /dev/cdrom 
    28731 lrwxrwxrwx. 1 root root 3 9月  20 10:54 /dev/cdrom -> sr0
    $  ll -i /dev/sr0 
    17931 brw-rw----. 1 root cdrom 11, 0 9月  20 10:54 /dev/sr0
    
    >>> 虚拟终端
    $  ll /dev/pts/
    总用量 0
    crw--w----. 1 root tty  136, 0 9月  20 13:25 0
    c---------. 1 root root   5, 2 9月  20 10:54 ptmx
    
    >>> 输入输出目录
    $  ll -i /dev/stderr 
    8729 lrwxrwxrwx. 1 root root 15 9月  20 10:54 /dev/stderr -> /proc/self/fd/2
    $  ll -i /dev/stdin 
    8727 lrwxrwxrwx. 1 root root 15 9月  20 10:54 /dev/stdin -> /proc/self/fd/0
    $  ll -i /dev/stdout 
    8728 lrwxrwxrwx. 1 root root 15 9月  20 10:54 /dev/stdout -> /proc/self/fd/1
    

    配置文件目录

    目录 说明
    /etc 配置文件
    /etc/sysconfig/network-scripts/ifcfg-e* 网卡配置文件(这里配置的DNS优先级高)
    /etc/hostname 主机名配置文件
    /etc/resolv.conf 本地的dns配置文件(这里配置的DNS优先级低)
    /etc/fstab 挂载设备配置文件
    /etc/sysconfig/selinux 安全策略配置文件
    /etc/motd 登录系统前显示内容
    /etc/hosts 本地域名解析的文件
    >>> 网卡配置文件
    $  cat /etc/sysconfig/network-scripts/ifcfg-ens33
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    NAME=ens33
    UUID=a5ae4b2e-6cb7-45b9-90dd-0420ce5d4b02
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.142.23
    PREFIX=24
    GATEWAY=192.168.142.2
    DNS1=223.5.5.5
    
    >>> 主机名配置文件
    $  cat /etc/hostname 
    git
    
    >>> 本地的dns配置文件
    $  grep -v '#' /etc/resolv.conf
    nameserver 223.5.5.5
    
    >>> 挂载设备配置文件
    $  grep -v '#' /etc/fstab 
    /dev/mapper/centos-root /                       xfs     defaults        0 0
    UUID=67ddc4bb-c4e8-4715-b6b4-292df3699ce5 /boot                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0
    
    >>> 安全策略配置文件
    $  grep -v '#' /etc/sysconfig/selinux 
    SELINUX=enforcing
    SELINUXTYPE=targeted
    
    >>> 本地域名解析的文件
    $  grep -v '#' /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    >>> 登录系统前显示内容(一般不推荐, 会占用内存)
    $  cat /etc/motd 
    "###################欢迎登陆主机##############"
    
    >>> 退出重新登录主机
    Last login: Fri Sep 20 14:08:11 2019 from 192.168.142.11
    "###################欢迎登陆主机##############"
    $  
    

    用户家目录

    目录 说明
    /home 所有普通用户的家目录
    /root 超级管理员的家目录

    系统管理的目录

    目录 说明
    /proc 虚拟的信息,存放系统实时状态信息
    /run 程序运行产生的pid文件存放点
    /usr 安装软件目录
    /usr/local 安装软件目录
    /var 可变的目录
    /var/run /run的硬链接
    /var/log 存放日志的目录
    /var/log/messages 系统日志
    /var/log/secure 用户登录日志
    >>>> 程序运行产生的pid文件存放点
    $  ll -id /run/
    8713 drwxr-xr-x. 26 root root 760 9月  21 00:30 /run/
    $  ll -id /var/run/
    8713 drwxr-xr-x. 26 root root 760 9月  21 00:30 /var/run/
    
    >>>> 系统日志
    $  tail -f /var/log/messages
    Sep 21 00:05:54 git chronyd[6155]: Forward time jump detected!
    Sep 21 00:05:54 git nm-dispatcher: req:2 'connectivity-change': start running ordered scripts...
    Sep 21 00:05:54 git nm-dispatcher: req:3 'up' [ens33]: start running ordered scripts...
    Sep 21 00:05:54 git nm-dispatcher: req:4 'connectivity-change': start running ordered scripts...
    Sep 21 00:08:46 git chronyd[6155]: Selected source 202.112.29.82
    Sep 21 00:09:52 git systemd: Started Session 11 of user root.
    Sep 21 00:09:52 git systemd-logind: New session 11 of user root.
    Sep 21 00:20:18 git systemd: Got automount request for /proc/sys/fs/binfmt_misc, triggered by 9488 (ls)
    Sep 21 00:20:18 git systemd: Mounting Arbitrary Executable File Formats File System...
    Sep 21 00:20:18 git systemd: Mounted Arbitrary Executable File Formats File System.
    
    >>>> 用户登录日志
    $  tail -f /var/log/secure
    Sep 20 14:07:59 git sshd[8981]: pam_unix(sshd:session): session closed for user root
    Sep 20 14:08:11 git sshd[9008]: Accepted publickey for root from 192.168.142.11 port 57050 ssh2: DSA SHA256:mGJDCO9vLiNLJQZA6NRYY4lyHBUdrnAFihpxJSN9n3w
    Sep 20 14:08:11 git sshd[9008]: pam_unix(sshd:session): session opened for user root by (uid=0)
    Sep 20 14:08:38 git sshd[9008]: error: Received disconnect from 192.168.142.11 port 57050:0:
    Sep 20 14:08:38 git sshd[9008]: Disconnected from 192.168.142.11 port 57050
    Sep 20 14:08:38 git sshd[9008]: pam_unix(sshd:session): session closed for user root
    Sep 20 14:08:53 git sshd[9036]: Accepted publickey for root from 192.168.142.11 port 57052 ssh2: DSA SHA256:mGJDCO9vLiNLJQZA6NRYY4lyHBUdrnAFihpxJSN9n3w
    Sep 20 14:08:54 git sshd[9036]: pam_unix(sshd:session): session opened for user root by (uid=0)
    Sep 21 00:09:52 git sshd[9412]: Accepted publickey for root from 192.168.142.11 port 61648 ssh2: DSA SHA256:mGJDCO9vLiNLJQZA6NRYY4lyHBUdrnAFihpxJSN9n3w
    Sep 21 00:09:52 git sshd[9412]: pam_unix(sshd:session): session opened for user root by (uid=0)
    

    不常用的目录

    目录 说明
    /lib /usr/lib的软链接
    /lib64 /usr/lib64的硬链接
    usr/lib 命令调用的库文件的目录
    usr/lib64 命令调用的64位库文件的目录
    /media 挂载点,可移动的设备
    /mnt 临时挂载点
    /opt 早期第三方软件安装目录
    /srv 物理设备的信息
    /sys 物理设备的信息
    /tmp 文件的临时的存放点
    >>>>  命令调用的库文件的目录
    $  ll -id /usr/lib
    16777313 dr-xr-xr-x. 28 root root 4096 9月  12 10:57 /usr/lib
    $  ll -id /lib
    80 lrwxrwxrwx. 1 root root 7 9月  12 10:55 /lib -> usr/lib
    
    >>>> 命令调用的64位库文件的目录
    $  ll -id /usr/lib64/
    79 dr-xr-xr-x. 42 root root 24576 9月  14 01:01 /usr/lib64/
    $  ll -id /lib64/
    79 dr-xr-xr-x. 42 root root 24576 9月  14 01:01 /lib64/
    $  du -shx /usr/lib64/
    172M	/usr/lib64/
    $  du -shx /lib64/
    172M	/lib64/
    

    文件和目录的操作命令

    ls

    显示目录列表

    选项 说明
    -a 显示所有文件, 包括隐藏文件
    -l 以长格式显示目录列表, 带属性信息
    -1 显示列表
    -d 只显示目录本身信息
    -i 显示索引节点信息(inode号)
    -h 以人类可读的形式显示文件大小
    -F 给显示出来的目录加个标识符(/)
    -S 根据文件大小排序
    -t 根据时间进行排序
    -r 倒序排序
    >>>> 给显示出来的目录加个标识符(/)
    $  ll -F
    总用量 36
    -rw-r--r--. 1 root root    0 9月  16 09:36 ,$1}
    -rw-r--r--. 1 root root    0 9月  16 09:36 ,$1,$NF}
    -rw-------. 1 root root 1681 9月  12 11:02 anaconda-ks.cfg
    -rwxr-xr-x. 1 root root   86 9月  16 19:12 array.sh*
    -rw-r--r--. 1 root root  131 9月  14 01:24 col6.txt
    drwxr-xr-x. 3 root root   18 9月  17 02:18 FishC/
    drwxr-xr-x. 3 root root   45 9月  13 22:55 git_data/
    -rw-r--r--. 1 root root 4056 9月  20 12:10 help.txt
    -rw-r--r--. 1 root root  924 9月  14 01:02 netstat.txt
    -rw-r--r--. 1 root root    0 9月  16 10:54 ,$NF}
    -rw-r--r--. 1 root root   12 9月  19 12:46 oldboy.sh
    -rw-r--r--. 1 root root  989 9月  16 09:45 passwd
    -rw-r--r--. 1 root root   28 9月  16 19:29 test.sh
    -rw-r--r--. 1 root root  202 9月  16 20:48 test.txt
    
    >>>> 根据文件大小排序
    $  ll -S
    -rw-r--r--. 1 root root 4056 9月  20 12:10 help.txt
    -rw-------. 1 root root 1681 9月  12 11:02 anaconda-ks.cfg
    -rw-r--r--. 1 root root  989 9月  16 09:45 passwd
    -rw-r--r--. 1 root root  924 9月  14 01:02 netstat.txt
    -rw-r--r--. 1 root root  202 9月  16 20:48 test.txt
    -rw-r--r--. 1 root root  131 9月  14 01:24 col6.txt
    ...
    
    >>>> 根据时间进行排序
    $  ll -t
    -rw-r--r--. 1 root root 4056 9月  20 12:10 help.txt
    -rw-r--r--. 1 root root   12 9月  19 12:46 oldboy.sh
    drwxr-xr-x. 3 root root   18 9月  17 02:18 FishC
    -rw-r--r--. 1 root root  202 9月  16 20:48 test.txt
    -rw-r--r--. 1 root root   28 9月  16 19:29 test.sh
    -rwxr-xr-x. 1 root root   86 9月  16 19:12 array.sh
    ...
    
    >>>> 倒序排序
    $  ll -rt
    -rwxr-xr-x. 1 root root   86 9月  16 19:12 array.sh
    -rw-r--r--. 1 root root   28 9月  16 19:29 test.sh
    -rw-r--r--. 1 root root  202 9月  16 20:48 test.txt
    drwxr-xr-x. 3 root root   18 9月  17 02:18 FishC
    -rw-r--r--. 1 root root   12 9月  19 12:46 oldboy.sh
    -rw-r--r--. 1 root root 4056 9月  20 12:10 help.txt
    ...
    

    cd

    切换目录

    cd   /		切换到根目录
    cd	.		保持当前目录
    cd ..		切换到当前目录的上一级目录
    cd	~		切换到当前用户的家目录下
    cd			默认切换到当前用户的家目录下
    cd  -		切换到上一次所在的目录
    

    tree

    以树状形显示目录结构

    选项

    选项 说明
    -a 显示隐藏文件
    -d 只显示目录
    -f 只显示文件
    -F 给目录加个标识符
    -L 查看目录的深度,层级,后面跟的是正整数
    >>> 查看目录的深度,层级,后面跟的是正整数
    >>> 给目录加个标识符
    $  tree -LF 2
    .
    ├── ,$1}
    ├── ,$1,$NF}
    ├── anaconda-ks.cfg
    ├── array.sh*
    ├── col6.txt
    ├── FishC/
    │   └── sle2/
    ├── git_data/
    │   ├── a
    │   ├── b
    │   └── c
    ├── help.txt
    ├── netstat.txt
    ├── ,$NF}
    ├── oldboy.sh
    ├── passwd
    ├── test.sh
    └── test.txt
    
    3 directories, 15 files
    
    >>>> 只显示目录
    $  tree -d
    .
    ├── FishC
    │   └── sle2
    └── git_data
    
    3 directories
    

    mkdir

    创建目录

    选项 说明
    -p 创建多层目录
    -v 显示创建过程
    -m 创建给目录设置其他权限
    {} 生成序列, 创建多个目录
    >>>> 创建给目录设置其他权限
    $  mkdir -m 700 data2
    $  mkdir data3
    $  ll -d data3
    drwxr-xr-x. 2 root root 6 9月  21 01:32 data3
    $  ll -d data2
    drwx------. 2 root root 6 9月  21 01:32 data2
    
    >>>> 创建多个文件
    $  mkdir oldboy oldgirl newboy newgirl
    $  mkdir oldboy{1..10}
    $  mkdir oldboy{frank,tank,json}
    

    touch

    创建文件

    1.在一个路径下,不能出现同名的文件,会改变原文件的时间戳
    2.使用{},创建多个文件,区分大小写。
    

    cp

    复制,拷贝

    选项 说明
    -r 递归复制
    -p 保持属性
    -d 保持软连接
    -t 把原目标和目标位置进行替换
    -a =-pdr
    -i 交互式询问,系统自带别名
    $  ll /
    总用量 24
    lrwxrwxrwx.   1 root root    7 9月  12 10:55 bin -> usr/bin
    dr-xr-xr-x.   5 root root 4096 9月  12 11:02 boot
    drwxr-xr-x.  20 root root 3240 9月  20 10:54 dev
    drwxr-xr-x.  77 root root 8192 9月  21 00:05 etc
    drwxr-xr-x.   3 root root   18 9月  12 11:01 home
    lrwxrwxrwx.   1 root root    7 9月  12 10:55 lib -> usr/lib
    lrwxrwxrwx.   1 root root    9 9月  12 10:55 lib64 -> usr/lib64
    drwxr-xr-x.   2 root root    6 4月  11 2018 media
    drwxr-xr-x.   2 root root    6 4月  11 2018 mnt
    drwxr-xr-x.   2 root root    6 4月  11 2018 opt
    dr-xr-xr-x. 115 root root    0 9月  20 10:54 proc
    dr-xr-x---.  25 root root 4096 9月  21 01:35 root
    drwxr-xr-x.  26 root root  760 9月  21 00:30 run
    lrwxrwxrwx.   1 root root    8 9月  12 10:55 sbin -> usr/sbin
    drwxr-xr-x.   2 root root    6 4月  11 2018 srv
    dr-xr-xr-x.  13 root root    0 9月  20 10:54 sys
    drwxrwxrwt.  25 root root 4096 9月  21 01:35 tmp
    drwxr-xr-x.  13 root root  155 9月  12 10:55 usr
    drwxr-xr-x.  19 root root  267 9月  12 11:24 var
    $  cp -a /lib /opt/
    $  ll /opt/
    总用量 0
    lrwxrwxrwx. 1 root root 7 9月  12 10:55 lib -> usr/lib
    

    mv

    移动

    选项 说明
    -f 强制覆盖
    -t 把原目标和目标位置进行替换
    -i 交互式询问,系统自带别名
    $  ll -d netstat.txt 
    -rw-r--r--. 1 root root 26 9月  21 01:59 netstat.txt
    $  ll  /mnt/netstat.txt 
    -rw-r--r--. 1 root root 924 9月  14 01:02 /mnt/netstat.txt
    $  mv -f netstat.txt /mnt/
    $  ll /mnt/netstat.txt 
    -rw-r--r--. 1 root root 26 9月  21 01:59 /mnt/netstat.txt
    
    $  ll
    -rw-r--r--. 1 root root  989 9月  16 09:45 passwd
    $  ll /opt/
    lrwxrwxrwx. 1 root root 7 9月  12 10:55 lib -> usr/lib
    drwxr-xr-x. 2 root root 6 9月  21 01:51 oldboy
    
    $  mv -t ./ /opt/oldboy/
    $  ll
    drwxr-xr-x. 2 root root    6 9月  21 01:51 oldboy
    -rw-r--r--. 1 root root  989 9月  16 09:45 passwd
    

    rm

    删除

    选项 说明
    -f 强制删除
    -r 递归删除
    -i 交互式询问,系统自带别名

    查看文件命令

    echo

    所见即所得

    选项 意义
    -e 支持特殊符号的含义
    符号名字 含义
    单引号 强引用,所见即所得
    双引号 所见即所得,支持变量,会解析变量
    不加引号 所见即所得,出现空格不会看做是个整体,会解析变量,支持通配符
    反引号 先执行反引号里面的命令,把结果交给外面的命令。和$()作用一样

    -e支持换行符, tab键

    $  echo -e 'hello
    world'
    hello
    world
    $  echo -e 'hello	world'
    hello	world
    

    echo表示颜色

    $  echo -e "33[30m黑色字33[0m"  
    $  echo -e "33[31m红色字33[0m"  
    $  echo -e "33[32m绿色字33[0m"  
    $  echo -e "33[33m黄色字33[0m"  
    $  echo -e "33[34m蓝色字33[0m"  
    $  echo -e "33[35m紫色字33[0m"  
    $  echo -e "33[36m天蓝字33[0m"  
    $  echo -e "33[37m白色字33[0m"
    

    echo表示背景

    echo -e "33[40m黑底白字33[0m"  
    echo -e "33[41m红底白字33[0m"  
    echo -e "33[42m绿底白字33[0m"  
    echo -e "33[43m黄底白字33[0m"  
    echo -e "33[44m蓝底白字33[0m"  
    echo -e "33[45m紫底白字33[0m"  
    echo -e "33[46m天蓝底白字33[0m"  
    echo -e "33[47m白底白字33[0m"
    

    cat

    查看文件内容

    选项 含义
    -n 给显示内容加上行号
    -A 给每行的结尾加上标识符
    1. 使用cat创建新文件
    >>> cat创建新文件
    $  cat >> oldboy.txt <<E
    > egon
    > lxx
    > alex
    > E
    $  cat oldboy.txt 
    egon
    lxx
    alex
    $  cat -A oldboy.txt 
    egon$
    lxx$
    alex$
    
    >>> cat追加数据到文件
    $  cat >>oldboy.txt <<E
    > hhp
    > lll
    > E
    $  cat oldboy.txt 
    egon
    lxx
    alex
    hhp
    lll
    

    cat 创建文件遇到的小坑

    当文件里面出现'$'符号, 结束符在定义的时候需要加上引号(单引号双引号都可以)

    • 结束符EOF不加引号的情况
    $  cat > test2.sh << EOF
    > #!/bin/bash
    > read -p '请输入用户名' name
    > read -p '请输入密码' pwd
    > echo "用户名 $name,  密码 $pwd"
    > EOF
    $  cat test2.sh 
    #!/bin/bash
    read -p '请输入用户名' name
    read -p '请输入密码' pwd
    echo "用户名 ,  密码 "
    $  chmod +x test2.sh 
    $  ./test2.sh 
    请输入用户名lxx
    请输入密码sb
    用户名 ,  密码
    
    • 结束符EOF加上引号可以正常输出
    $  cat > test.sh << 'EOF'
    > #!/bin/bash
    > read -p '请输入用户名' name
    > read -p '请输入密码' pwd
    > echo "用户名 $name,  密码 $pwd"
    > EOF
    $  chmod +x test.sh 
    $  ./test.sh 
    请输入用户名lxx
    请输入密码123       
    用户名 lxx,  密码 123
    

    more

    分页显示文件内容,文件结束时,会自动退出文件

    外部选项 说明
    -n(数字) 指定一页显示多少行
    +n(数字) 指定从第几行开始显示
    $  more +15 /etc/passwd
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    java:x:1000:1000:java:/home/java:/bin/bash
    
    $  more -5 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    --More--(18%)
    
    内部命令 说明
    空格或f 向下翻页
    b 向上翻页
    回车 下一行
    / 搜索
    = 显示当前光标所在行
    q 退出

    less

    分页显示文件内容,文件结束时,不会自动退出

    外部选项 说明
    -N 显示的时候加上行号
    $  less -N /etc/services 
    
    内部命令 说明
    空格或f 向下翻页
    b 向上翻页
    回车 下一行
    / 搜索, 会高亮
    = 显示当前光标所在页, 第几行到第几行, 会显示字节大小
    q 退出

    显示文件头部信息,默认显示前十行内容

    选项 说明
    -n (数字) 取消默认输出,指定显示几行
    -c 显示头部几个字符
    $  head -n5 /etc/services 
    # /etc/services:
    # $Id: services,v 1.55 2013/04/14 ovasik Exp $
    #
    # Network services, Internet style
    # IANA services version: last updated 2013-04-10
    
    $  head -5 /etc/services 
    # /etc/services:
    # $Id: services,v 1.55 2013/04/14 ovasik Exp $
    #
    # Network services, Internet style
    # IANA services version: last updated 2013-04-10
    
    $  head -c 5 /etc/services 
    # /et
    

    tail

    显示文件尾部信息,默认显示十行内容

    选项 说明
    -n 取消默认输出,指定显示几行 简写 -数字
    -c 显示尾部几个字符,最后一个是换行符
    -f 实时查看文件的更新
    -F 实时查看文件的更新,文件不存在时,不会退出,会一直尝试读取该文件

    tailf 实时查看文件的更新,在磁盘不更新时,不会读取磁盘,减少磁盘的读写

    $  tail -F /var/log/mess
    tail: 无法打开"/var/log/mess" 读取数据: 没有那个文件或目录
    
    $  tail -f /var/log/messages
    $  tailf /var/log/messages
    

    tailf tail -f 区别

    在显示结果上没有任何区别, 在底层有区别

    tail -f会不停地读取磁盘中文件的内容, 不管文件有没有更新

    tailf则是只有文件更新的时候才会读取磁盘中文件的内容

    tailf会减少磁盘的读写, 减少性能的使用

    文件查找

    locate

    根据本地数据库进行查找, 查找前需要更新数据库

    $  yum provides locate
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: ftp.sjtu.edu.cn
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    mlocate-0.26-8.el7.x86_64 : An utility for finding files by name
    源    :base
    匹配来源:
    文件名    :/usr/bin/locate
    
    
    
    $  yum -y install mlocate-0.26-8.el7.x86_64
    $  locate hostname
    locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
    $  updatedb
    $  locate hostname
    /etc/hostname
    /etc/dbus-1/system.d/org.freedesktop.hostname1.conf
    /etc/selinux/targeted/active/modules/100/hostname
    /etc/selinux/targeted/active/modules/100/hostname/cil
    /etc/selinux/targeted/active/modules/100/hostname/hll
    /etc/selinux/targeted/active/modules/100/hostname/lang_ext
    /usr/bin/hostname
    
    
    >>> 支持正则(需要加上-r选项)
    $  locate -r hostname$ 
    /etc/hostname
    /etc/selinux/targeted/active/modules/100/hostname
    /usr/bin/hostname
    /usr/bin/nmtui-hostname
    /usr/lib64/gettext/hostname
    

    which

    查找命令的绝对路径

    $  which hostname
    /usr/bin/hostname
    

    whereis

    $  whereis hostname
    hostname: /usr/bin/hostname /etc/hostname /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz
    

    type

    查看命令类型

    • -a 查看内置命令的绝对路径
    $  type hostname
    hostname 是 /usr/bin/hostname
    $  type cd
    cd 是 shell 内嵌
    $  type -a cd
    cd 是 shell 内嵌
    cd 是 /usr/bin/cd
    

    find

    >>>> 默认精确查找
    $  find / -type f -name "*hostname"
    
    >>>> 加上通配符模糊查询
    find / -type f -name "*hostname*"  >>> 类似于locate hostname
    

    文件上传下载

    curl

    通过url的方式进行文件传输

    • 查看是否能访问网站

      输出的结果是网站的HTML代码

    $  curl www.baidu.com
    

    • -o 下载文件
    $  curl -o nginx.tar.gz http://nginx.org/download/nginx-0.1.14.tar.gz
    $  ll nginx.tar.gz 
    -rw-r--r--. 1 root root 263949 9月  21 21:36 nginx.tar.gz
    

    wget

    下载文件

    $  wget -O  nginx.tar.gz http://nginx.org/download/nginx-0.1.14.tar.gz
    

    scp

    • 上传文件
    $  scp nginx.tar.gz root@192.168.142.40:/root/
    
    • 下载文件
    $  scp root@192.168.142.40:/root/nginx.tar.gz .
    

    rz

    本地上传和下载

    $  yum install -y lrzsz
    
    • 上传
    $  rz
    

    • 下载
    $  sz *
    

    xftp

    大文件上传和下载

    安装注册码 101210-450789-147200

    字符处理

    sort

    排序

    2

    选项 说明
    -t 指定分隔符, 默认以空白字符为分隔符
    -k 指定列数
    -n 以数字的大小方式进行排序
    -r 倒序
    $  cat > file.txt <<EOF
    > b:3
    > c:4
    > d:5
    > e:11
    > f:33
    > a:22
    > EOF
    
    $  sort file.txt 
    a:22
    b:3
    c:4
    d:5
    e:11
    f:33
    $  sort -t ':' file.txt 
    a:22
    b:3
    c:4
    d:5
    e:11
    f:33
    $  sort -t ':' -k2 file.txt 
    e:11
    a:22
    b:3
    f:33
    c:4
    d:5
    $  sort -t ':' -nk2 file.txt 
    b:3
    c:4
    d:5
    e:11
    a:22
    f:33
    $  sort -t ':' -rnk2 file.txt 
    f:33
    a:22
    e:11
    d:5
    c:4
    b:3
    
    $  sort -t ':' /etc/passwd -nk3
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    ...
    

    uniq

    相邻的行进行去重统计

    • -c 统计次数
    $  cat >>test.txt <<EOF
    > tank
    > egon
    > tank
    > egon
    > oldboy
    > frank
    > EOF
    $  sort test.txt |uniq
    egon
    frank
    oldboy
    tank
    

    统计每一行中的内容出现的次数

    $  sort test.txt |uniq -c |sort -nr
          2 tank
          2 egon
          1 oldboy
          1 frank
    

    cut

    擅长取列, 默认是以tab键为分隔符

    选项 说明
    -d 指定分隔符
    -f 指定取出的列
    -c 取指定的字符
    $  echo 'oldboyfgkdfssdsd' |cut -c 1-6
    oldboy
    
    $  echo 'frank, QQ is 1176494252' > file2.txt
    $  cut -d ' ' -f2,4 file2.txt 
    QQ 1176494252
    
    $  echo 'frank ,QQ is 1176494252'>file2.txt
    
    >>> 第一种方法
    $  cut -d ' ' -f2,4 file2.txt |cut -d ',' -f2
    QQ 1176494252
    
    >>> 第二种方法
    $  cut -d ' ' -f2,4 file2.txt |tr -d ','
    QQ 1176494252
    

    统计/etc/passwd中所有解释器用到的次数

    >>> 第一种方法
    $  cut -d: -f7 /etc/passwd|sort|uniq -c|sort -n
          1 /bin/sync
          1 /sbin/halt
          1 /sbin/shutdown
          2 /bin/bash
         16 /sbin/nologin
    
    >>> 第二种方法
    $  awk -F: '{print $7}' /etc/passwd|sort|uniq -c|sort -n
          1 /bin/sync
          1 /sbin/halt
          1 /sbin/shutdown
          2 /bin/bash
         16 /sbin/nologin
    
    >>> 第三种方法
    $  awk -F: '{a[$7]++}END{for(i in a){print a[i]":"i}}' /etc/passwd|sort -t: -n
    1:/bin/sync
    1:/sbin/halt
    1:/sbin/shutdown
    2:/bin/bash
    16:/sbin/nologin
    

    wc

    统计

    选项 说明
    -l 统计文件的行数
    -c 统计文件的字节数, 包括换行符
    -w 以空格为分隔符, 统计文件的单词数
    $  cat > test5.txt <<EOF
    > root:apple
    > /bin/bash:bin
    > apple
    > root:apple
    > EOF
    $  wc -l test5.txt 
    4 test5.txt
    $  wc -w test5.txt 
    4 test5.txt
    $  wc -c test5.txt 
    42 test5.txt
    

    tr

    不能单独对文件操作, 必须先将文件输入给tr命令

    tr全局替换

    $  echo 'frank QQ, is 1176494252'>file2.txt
    $  cut -d ' ' -f2,4 file2.txt|tr '1' '0'
    QQ, 0076494252
    
    $  echo "HELLO WHO IS SB"|tr 'A-Z' 'a-z'
    hello who is sb
    

    说明: 这里的A被替换为a, B被替换为b, ...Z被替换为z

    $  echo 12345 |tr '0-9' '9876543210'
    87654
    

    说明: 0被替换为9, 1被替换为8, 2被替换为7, ...9替换为0

    • -d 删除字符
    $  echo 'frank QQ, is 1176494252'>file2.txt
    
    >>> 通过cut无法筛选出QQ 117649425
    $  cut -d ' ' -f2,4 file2.txt|cut -d ',' -f1,2
    QQ, 117649425
    
    >>>> 通过tr -d 删除字符串中的逗号
    $  cut -d ' ' -f2,4 file2.txt|tr -d ','
    QQ 1176494252
    
    • -c 替换或者删除差集
    $  echo hello 1 char 2 next 4 |tr -d -c '0-9 
    '
     1  2  4
    $  echo hello 1 char 2 next 4 |tr  -c '0-9
    ' ' '
          1      2      4
    
    • -s 删除多余的换行符
    $  cat >multi_blank.txt<<EOF 
    > line1
    > 
    > line2
    > 
    > 
    > line3
    > line4
    > EOF
    $  cat multi_blank.txt 
    line1
    
    line2
    
    
    line3
    line4
    $  tr -s '
    '<multi_blank.txt 
    line1
    line2
    line3
    line4
    
    1. 计算文件中数字的所有结果
    $  cat sum.txt 
    1
    2
    3
    4
    5
    
    >>>> 先把算法列出来
    $  echo $(tr '
    ' '+'<sum.txt)
    1+2+3+4+5++
    
    >>>> 根据上面的算法, 需要多加个0, 不然会报错
    $  echo $(tr '
    ' '+'<sum.txt)0
    1+2+3+4+5++0
    
    >>>> 然后把结果计算出来, bash中$[加减乘除运算] 可以得到运算的结果
    $  echo $[$(tr '
    ' '+'<sum.txt)0]
    15
    
    1. 计算包含字母和数字的文件中所有数字的和
    $  cat test.txt 
    first 1
    second 2
    third 3
    
    >>> 第一种方法
    ----->>>首先把所有数字搞出来
    $  tr -d -c '0-9
    ' < test.txt
    1
    2
    3
    ----->>>将算法搞出来
    $  echo $(tr -d -c '0-9
    ' < test.txt |tr '
    ' '+')0
    1+2+3+0
    
    ----->>>算出结果
    $  echo $[$(tr -d -c '0-9
    ' < test.txt |tr '
    ' '+')0]
    6
    
    >>>> 第二种方法
    ----->>>首先把所有数字搞出来
    $  tr -d [a-z]<test.txt 
     1
     2
     3
    ----->>>将算法搞出来
    $  tr -d [a-z]<test.txt |echo $(tr ' ' '+')
    +1 +2 +3
    ----->>>算出结果
    $  tr -d [a-z]<test.txt |echo $[echo $(tr ' ' '+')]
    6
    
  • 相关阅读:
    .NET 开源框架
    ORM 开发框架
    C# 文件下载四方法
    用ASP.net判断上传文件类型的三种方法
    站在十字路口的程序媛,该如何选择?
    突然的烦恼
    Request获取url信息的各种方法比较 及 Request.UrlReferrer详解
    JS 获得当前地址栏url
    MvcPager 概述
    Simditor使用方法
  • 原文地址:https://www.cnblogs.com/cjwnb/p/11608842.html
Copyright © 2011-2022 走看看