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\nworld'
hello
world
$  echo -e 'hello\tworld'
hello	world

echo表示颜色

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

echo表示背景

echo -e "\033[40m黑底白字\033[0m"  
echo -e "\033[41m红底白字\033[0m"  
echo -e "\033[42m绿底白字\033[0m"  
echo -e "\033[43m黄底白字\033[0m"  
echo -e "\033[44m蓝底白字\033[0m"  
echo -e "\033[45m紫底白字\033[0m"  
echo -e "\033[46m天蓝底白字\033[0m"  
echo -e "\033[47m白底白字\033[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 \n'
 1  2  4
$  echo hello 1 char 2 next 4 |tr  -c '0-9\n' ' '
      1      2      4
  • -s 删除多余的换行符
$  cat >multi_blank.txt<<EOF 
> line1
> 
> line2
> 
> 
> line3
> line4
> EOF
$  cat multi_blank.txt 
line1

line2


line3
line4
$  tr -s '\n'<multi_blank.txt 
line1
line2
line3
line4
  1. 计算文件中数字的所有结果
$  cat sum.txt 
1
2
3
4
5

>>>> 先把算法列出来
$  echo $(tr '\n' '+'<sum.txt)
1+2+3+4+5++

>>>> 根据上面的算法, 需要多加个0, 不然会报错
$  echo $(tr '\n' '+'<sum.txt)0
1+2+3+4+5++0

>>>> 然后把结果计算出来, bash中$[加减乘除运算] 可以得到运算的结果
$  echo $[$(tr '\n' '+'<sum.txt)0]
15
  1. 计算包含字母和数字的文件中所有数字的和
$  cat test.txt 
first 1
second 2
third 3

>>> 第一种方法
----->>>首先把所有数字搞出来
$  tr -d -c '0-9\n' < test.txt
1
2
3
----->>>将算法搞出来
$  echo $(tr -d -c '0-9\n' < test.txt |tr '\n' '+')0
1+2+3+0

----->>>算出结果
$  echo $[$(tr -d -c '0-9\n' < test.txt |tr '\n' '+')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
posted @ 2019-09-29 17:06  cjw1219  阅读(752)  评论(0编辑  收藏  举报