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

硬連接和軟連接

和源文件索引節點同樣的文件是硬連接, 反之則是軟連接java

用戶所使用的命令的目錄

目錄 說明
/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

顯示目錄列表node

選項 說明
-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

切換目錄linux

cd   /      切換到根目錄
cd  .       保持當前目錄
cd ..       切換到當前目錄的上一級目錄
cd  ~       切換到當前用戶的家目錄下
cd          默認切換到當前用戶的家目錄下
cd  -       切換到上一次所在的目錄

tree

以樹狀形顯示目錄結構nginx

選項git

選項 說明
-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

建立文件shell

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

移動json

選項 說明
-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

刪除centos

選項 說明
-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

tailftail -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
相關文章
相關標籤/搜索