1. 程式人生 > 實用技巧 >Linux基礎之檔案管理(基礎)等相關內容-95

Linux基礎之檔案管理(基礎)等相關內容-95

檔案管理(基礎)

一 Linux系統的單根目錄結構

linux與windows的目錄結構對比

檔案的時間

ls -l 檔名 僅看的是檔案的修改時間
Linux檔案有
三種時間,用stat檢視
例如:stat anaconda-ks.cfg
訪問時間:atime,檢視內容,用cat檢測
修改時間:mtime,修改內容
改變時間:ctime,修改內容,修改許可權等屬性,凡是有改動都會變

檔案的副檔名

Linux檔案是沒有副檔名!!!
// 方法一:
ls -l 檔名 //看第一個字元
- 普通檔案(文字檔案,二進位制,壓縮檔案,電影,圖片。。。),例如:/bin/ls
d 目錄檔案(藍色),例如/home/
b 裝置檔案(塊裝置)儲存裝置硬碟,U盤,例如:/dev/sda
c 裝置檔案(字元裝置)印表機,例如:終端/dev/tty1
s 套接字檔案,例如:/run/rpcbind.sock
p 管道檔案,例如:/run/systemd/initctl/fifo
l 連結檔案(淡藍色),例如:/bin
ps:通過顏色判斷檔案的型別是錯誤的!!!
// 方法二:
[root@xxx ~]# file /etc/grub.conf
bash shell對檔案進行管理:
1. 建立
2. 複製
3. 刪除
4. 移動
5. 檢視
6. 編輯
7. 壓縮
8. 許可權操作
9. 查詢

一切皆檔案的設計思想

二 系統目錄結構與作用

Windows: 以多根的方式組織檔案 C:\ D:\ E:\
Linux: 以單根的方式組織檔案 /
FHS(Filesystem Hierarchy Standard)指的是檔案系統層次化標準,多數Linux版本採用這種檔案組
織形式,是以樹形的結構來組織檔案的。

[root@aliyun ~]# ls -l / # /是所有linux作業系統的頂點目錄,不像windows,每個分割槽都有一個
頂點目錄
total 64
# 1、命令相關目錄
lrwxrwxrwx. 1 root root 7 Jul 11 2019 bin -> usr/bin # 普通使用者使用的命令如
ls、date
lrwxrwxrwx. 1 root root 8 Jul 11 2019 sbin -> usr/sbin # 管理員使用的命令

# 2、啟動目錄
dr-xr-xr-x. 5 root root 4096 Feb 11 19:06 boot # 存放的啟動相關的檔案,例如
kernel,grub(引導裝載程式)

# 3、系統檔案目錄
drwxr-xr-x. 13 root root 4096 Jul 11 2019 usr # 系統檔案,相當於C:\Windows
lrwxrwxrwx. 1 root root 7 Jul 11 2019 lib -> usr/lib # 庫檔案Glibc
lrwxrwxrwx. 1 root root 9 Jul 11 2019 lib64 -> usr/lib64 # 庫檔案Glibc

# 4、使用者家目錄
drwxr-xr-x. 5 root root 4096 Feb 24 16:42 home # 普通使用者家目錄
dr-xr-x---. 11 root root 4096 Jul 8 17:03 root # root使用者的HOME

# 5、配置檔案目錄
drwxr-xr-x. 79 root root 4096 Jul 8 17:04 etc # 配置檔案,很重要,系統級服務配置檔案
都在這裡
"""
/etc/sysconfig/network-script/ifcfg-*,網路配置檔案
/etc/hostname,系統主機名配置檔案
/etc/resolv.conf,dns客戶端配置檔案
/etc/hosts,本地域名解析配置檔案
/etc/fstab 系統掛載目錄 開機自啟動掛載列表
/etc/passwd 系統使用者檔案
"""

# 6、裝置目錄檔案
drwxr-xr-x 19 root root 2960 Feb 15 17:22 dev # 裝置檔案,/dev/sda /dev/sr0
"""
/dev/cdrom 和/dev/sr0,系統光碟映象裝置
/dev/null,黑洞裝置,只進不出。類似於垃圾回收站
/dev/random,生成隨機數的裝置
/dev/zero,能源源不斷地產生資料,類似於取款機,隨時隨地取錢
/dev/pts/0,虛擬的Bash Shell終端,提供給遠端使用者使用 0代表第一個終端 1代表第2個終端
以此類推
/dev/stderr,錯誤輸出
/dev/stdin,標準輸入
/dev/stdout,標準輸出
"""

# 7、虛擬檔案系統:類似於小汽車的儀表板,能夠看到汽車是否有故障,或者是否缺油了。
dr-xr-xr-x 89 root root 0 Feb 15 17:22 proc # 虛擬的檔案系統,反映出來的是核心,
程序資訊或實時狀態
"""
反映系統當前程序的實時狀態
/proc/meminfo:記憶體資訊
/proc/cpuinfo:cpu資訊
"""

# 8、可變的目錄與臨時目錄
drwxr-xr-x. 19 root root 4096 Jul 11 2019 var #存放的是一些變化檔案,比如資料庫,日
志,郵件....
"""
/tmp,系統臨時目錄(類似於公共廁所),系統會定時刪除該目錄下長時間沒有訪問的檔案。
/var,存放一些變化檔案,如下
mysql: /var/lib/mysql
vsftpd: /var/ftp
mail: /var/spool/mail
cron: /var/spool/cron
log: /var/log 系統日誌檔案存放目錄
/var/log/messages系統日誌
/var/log/secure系統登入日誌
/var/tmp 臨時檔案(主要是程式產生的臨時檔案)
"""

# 9、裝置(主要指儲存裝置)掛載目錄
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media # 移動裝置預設的掛載點
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt # 手工掛載裝置的掛載點
drwxr-xr-x. 2 root root 4096 Apr 11 2018 opt # 早期第三方廠商的軟體存放的目錄.
drwxrwxrwt. 10 root root 4096 Jul 9 15:16 tmp # 臨時存放檔案,類似於回收站,超過十天
自動刪除

# 10、其他的一些重要目錄
drwx------. 2 root root 16384 Jul 11 2019 lost+found # 孤兒檔案
這個目錄是使用標準的ext2/ext3檔案系統格式才會產生的一個目錄,目的在於當檔案系統發生錯誤時, 將
一些遺失的片段放置到這個目錄下。這個目錄通常會在分割槽的最頂層存在, 例如你加裝一顆硬碟於/disk
中,那在這個系統下就會自動產生一個這樣的目錄『/disk/lost+found
lost+found這個目錄一般情況下是空的,當系統非法關機後,如果你丟失了一些檔案,在這裡能找回來用來
存放fsck過程中部分修復的檔案的
lost+found:幾乎每個被格式化過的Linux分割槽都會有,意外後找回的檔案一般在這裡面。
這個目錄是儲存發生意外後丟失的檔案的。只有root使用者才能開啟
drwxrwxr-x 6 root root 4096 Feb 23 19:24 application
drwxr-xr-x 25 root root 660 Jul 8 17:00 run # 存放程式執行後所產生的pid檔案
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv # 物理裝置產生的一些檔案
dr-xr-xr-x 13 root root 0 Feb 16 01:22 sys # 硬體裝置的驅動程式資訊

三 絕對路徑與相對路徑

絕對路徑: 從/開頭的路徑 /home ~alice
相對路徑: 相對於當前目錄開始
. 連結到當前目錄
.. 連結到上一級目錄
~ 當前使用者的家目錄

# 1、絕對路徑示例
touch /home/alice/file1
touch ~alice/file2
# 2、相對路徑示例
touch ../file3
touch file4
touch abc/file5

四 檔案管理

4.1 檔案管理之:基本命令

# 1、檢視當前所在的目錄
[root@localhost ~]# pwd
/root

# 2、切換目錄
cd 絕對路徑 如:cd /home/alice cd ~alice
cd 相對路徑 如:cd home/alice cd ..
cd - # 返回上次目錄
cd # 直接回家,等同於cd ~
cd . #保持當前目錄不變
cd .. #切換到當前目錄的上一級目錄

# 3、檢視目錄樹:需要先安裝tree命令,執行yum install tree -y
tree -a 目錄 # 顯示所有檔案,包括隱藏檔案
tree -d 目錄 # 只顯示子目錄
tree -L 1 目錄 # -L 遍歷目錄的最大層數,-L後應該是大於0的正整數
tree -F 目錄 # -F 在條目後加上檔案型別的指示符號,例如會在顯示出的目錄後面加上左斜槓/
[root@localhost ~]# tree /a
/a
├── b
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── bb
│ ├── a.txt
│ ├── b.txt
│ └── c.txt
└── bbbb

瞭解一下tree命令其他選項
-a 顯示所有檔案和目錄。
-A 使用ASNI繪圖字元顯示樹狀圖而非以ASCII字元組合。
-C 在檔案和目錄清單加上色彩,便於區分各種型別。
-d 顯示目錄名稱而非內容。
-D 列出檔案或目錄的更改時間。
-f 在每個檔案或目錄之前,顯示完整的相對路徑名稱。
-F 在執行檔案,目錄,Socket,符號連線,管道名稱名稱,各自加上"*","/","=","@","|"號。
-g 列出檔案或目錄的所屬群組名稱,沒有對應的名稱時,則顯示群組識別碼。
-i 不以階梯狀列出檔案或目錄名稱。
-I 不顯示符合範本樣式的檔案或目錄名稱。
-l 如遇到性質為符號連線的目錄,直接列出該連線所指向的原始目錄。
-n 不在檔案和目錄清單加上色彩。
-N 直接列出檔案和目錄名稱,包括控制字元。
-p 列出許可權標示。
-P 只顯示符合範本樣式的檔案或目錄名稱。
-q 用"?"號取代控制字元,列出檔案和目錄名稱。
-s 列出檔案或目錄大小。
-t 用檔案和目錄的更改時間排序。
-u 列出檔案或目錄的擁有者名稱,沒有對應的名稱時,則顯示使用者識別碼。
-x 將範圍侷限在現行的檔案系統中,若指定目錄下的某些子目錄,其存放於另一個檔案系統上,則將該子目
錄予以排除在尋找範圍外。

# 4、瀏覽
ls # 預設瀏覽當目錄
ls -l 目錄 # 瀏覽目錄下的子目錄子檔名的詳細資訊
ls -al 目錄 # 瀏覽的結果中包含隱藏檔案
ls -dl 目錄 # 檢視目錄
[root@localhost ~]# ll a.txt
-rw-r--r--. 1 root root 0 12月 15 14:02 a.txt

# 各部分解析如下
-rw-r--r--. 許可權,後面的點代表是否在selinux開啟的情況下(enforcing或者permissive都屬於開
啟)建立的檔案
1 硬連結個數
root 屬主
root 屬組
0 檔案大小,單位位元組
12月 15 14:02 檔案修改時間
a.txt 檔名字

# 許可權的第一個為代表檔案型別
格式 說明
- 普通檔案(文字, 二進位制, 壓縮包, 圖片, 日誌等)
d 目錄檔案
b 裝置檔案(塊裝置)儲存裝置硬碟 /dev/sda1, /dev/sda2
c 裝置檔案(字元裝置)印表機,終端 /dev/tty1, /dev/zero
s 套接字檔案, 程序間通訊(socket)
p 管道檔案
l 連結檔案
注意: Linux副檔名不代表任何含義, 僅僅是為了運維人員便於識別

4.2 檔案管理之:建立/複製/移動/刪除

建立
# 1、=============建立檔案:touch
touch file1.txt //無則建立,有則修改時間
touch /home/file10.txt
touch file{1..20}
touch Ego{n,N}.txt //等價touch Egon.txt EgoN.txt
touch -t 2011111111 2018.rmvb
修改檔案時間 語法:
-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time
瞭解檔案的三個時間引數:https://www.cnblogs.com/linhaifeng/articles/13324247.html

# 2、=============建立目錄:mkdir
mkdir dir1
mkdir /home/dir2 /home/dir3
mkdir /home/{dir4,dir5}
mkdir -v /home/{dir6,dir7}
mkdir: 已建立目錄 “/home/dir6”
mkdir: 已建立目錄 “/home/dir7”
mkdir -p /home/dir8/111/222 //包括其父母的建立

複製
# 1、=============複製:cp
cp 源 目標
cp -v install.log /home/dir1
cp -v install.log /home/dir1/aaa.txt
cp -r /etc /home/dir1
cp install.log /home/dir2
cp anaconda-ks.cfg !$
cp anaconda-ks.cfg /home/dir2
cp -r /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/passwd /etc/grub.conf
/etc/hosts .
cp -rv /etc /tmp
\cp -rv /etc /tmp
擴充套件用法:
cp -rfv /etc/hosts{,.old}
cp -rvf /etc/sysconfig/network-scripts/ifcfg-eth0{,.old}

關於-f引數的一個實驗
[root@aliyum ~]# echo "1111" > /opt/a.txt
[root@aliyum ~]# echo "2222" > /t2/a.txt
[root@aliyum ~]#
[root@aliyum ~]# chmod o=wx /t2
[root@aliyum ~]# chmod o=- /t2/a.txt
[root@aliyum ~]#
[root@aliyum ~]# ll -d /t2
drwxr-x-wx 2 root root 4096 Oct 20 00:07 /t2
[root@aliyum ~]# ll /t2/a.txt
-rw-r----- 1 root root 5 Oct 20 00:07 /t2/a.txt
[root@aliyum ~]#
[root@aliyum ~]# su - xxx
Last login: Tue Oct 20 00:05:43 CST 2020 on pts/2
[xxx@aliyum ~]$ cp /opt/a.txt /t2/a.txt # 失敗
cp: cannot create regular file ‘/t2/a.txt’: Permission denied
[xxx@aliyum ~]$ \cp /opt/a.txt /t2/a.txt # 失敗
cp: cannot create regular file ‘/t2/a.txt’: Permission denied
[xxx@aliyum ~]$
[xxx@aliyum ~]$
[xxx@aliyum ~]$ cp -f /opt/a.txt /t2/a.txt # 成功
[xxx@aliyum ~]$ exit
logout
[root@aliyum ~]# cat /t2/a.txt
1111
[root@aliyum ~]#

========================================================
小知識:root使用者使用cp (預設有一個別名 alias cp='cp -i') -i 顯示提示資訊(是否覆蓋)
1. /bin/cp -rf /etc /tmp
2. # unalias cp
# cp -rf /etc /tmp
3. # \cp -rf /etc /tmp
4.-f 引數是強制複製,比如你在A資料夾裡面有個檔名叫B,然後你把C資料夾裡面的另一個檔名叫B的復
制到A裡面,這個時候會照成衝突,然後會提示你要不要繼續複製.加上-f 就不會提示你了.
你輸入-f 還是會提示你的原因是
-------------------------------------------------------------
有的系統在安裝的時候,cp - i 的 alias 就是 cp
也就是說你在執行cp的時候,其實是執行的cp -i
取消掉cp的alias就好了
==========================================
解決辦法
unalias cp
========================================================

移動與刪除
# 1、=============複製:mv
mv 源 目標
# mv file2 /home/dir3 將file2移動到/home/dir3裡
# mv file4 file5 將file4重新命名為file5,當前位置裡的移動就是重新命名

# 2、=============複製:rm
示例:刪除/home/dir1
# cd /home
# rm -rf dir1
-r 遞迴
-f force強制
-v 詳細過程

4.3 檔案管理之:檢視檔案內容

==文字檔案 (cat less more head tail grep)
/etc/hosts
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/passwd
/etc/shadow
/etc/group
/etc/grub.conf
/etc/resolv.conf
/var/log/messages //系統的主日誌檔案
cat
-n 顯示行號
-A 包括控制字元(換行符)linux $ Windows ^M$
========================================================
擴充套件知識:
dos2unix 將Windows格式的檔案轉換成Unix格式
unix2dos 將Unix格式的檔案轉換成Windows格式
例如
# unix2dos file1
# dos2unix file2
========================================================
less more head tail
# head /etc/passwd
# head -2 /etc/passwd
# tail /etc/passwd
# tail -1 /etc/passwd
# more /etc/passwd # 使用more命令之後,每次在螢幕上顯示一屏(一頁)的檔案內容,並且在螢幕
的尾部將會出現“—More--(n%)”的資訊,其中,n%是已經顯示檔案內容的百分比。按空格下一頁,按b上一
頁,more +40 a.txt從第40行開始檢視
# tail -f /var/log/messages //-f 動態檢視檔案的尾部
# logger xxxxxxxxx //手動產生日誌資訊

grep 針對檔案內容進行過濾
# grep 'root' /etc/passwd
# grep --color 'root' /etc/passwd
# grep --color '^root' /etc/passwd
# grep --color 'bash$' /etc/passwd

4.4 檔案管理之:修改檔案內容

1、什麼是vim
可以理解為windows下面的文字編輯器,比如記事本,比如word文件。
vi編輯器通常被簡稱為vi,而vi又是visual editor的簡稱。它在Linux上的地位就像Edit程式在DOS上
一樣。它可以執行輸出、刪除、查詢、替換、塊操作等眾多文字操作,而且使用者可以根據自己的需要對其進行
定製,這是其他編輯程式所沒有的。
vi 編輯器並不是一個排版程式,它不像Word或WPS那樣可以對字型、格式、段落等其他屬性進行編排,它只
是一個文字編輯程式。沒有選單,只有命令,且命令繁多。
2、為何要用vim
1.修改配置
2.寫指令碼
3、vi與vim的區別
vi不顯示高亮顏色語法
vim顯示高亮顏色語法。
其他功能沒有什麼區別。
所以在linux系統下,使用vi還是vim取決個人習慣。
預設vi是安裝的 , vim需要通過yum install vim -y
4、vi編輯器的操作模式

# 1、命令列模式:在編輯模式下按下ESC鍵返回命令列模式。
vi的預設模式。在這一模式中,所有的輸入被解釋成vi命令,可以執行修改、複製、移動、貼上和刪除正文等
命令,也可以進行移動游標、搜尋字串和退出vi的操作等。
# 2、編輯/插入模式:輸入a、i、o之一
在編輯模式中,可以往一個檔案中輸入正文。在這一模式下,輸入的每一個字元都被vi編輯器解釋為輸入的正
文。使用ESC鍵返回命令列模式。
a:進入插入模式並在游標之後進行新增。
i:進入插入模式並在游標之前進行插入。
o:進入插入模式並在當前(游標所在)行之下開啟新的一行。
# 3、擴充套件/末行模式:輸入冒號:
在一些UNIX系統上也叫最後一行模式。在這一模式下,可以使用一些高階編輯命令,如搜尋和替代字串、存
盤或退出vi編輯器等。要進入最後一行模式,需要在命令列模式中輸入冒號(:),冒號這一操作將把游標移
到螢幕的最後一行。
5、在vi編輯器中游標的移動

6、在命令列模式下刪除與複製的操作

7、貼上命令

8、復原和重做命令

9、掌握擴充套件模式下常用的命令

10、掌握快速移動游標在檔案中的位置的命令

11、掌握快速在螢幕中移動游標的位置的命令

12、三種模式下的操作彙總與補充
vi ===> vim 檔案編輯器
# vim /boot/grub2/grub.cfg
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
命令模式:
a. 游標定位
hjkl
0 $
gg G
3G 進入第三行
/string(n N 可以迴圈的) 快速定位到某一行
b. 文字編輯(少量)
y 複製 yy 3yy ygg yG (以行為單位)
d .刪除 dd 3dd dgg dG (以行為單位)
p 貼上
x 刪除游標所在的字元
D 從游標處刪除到行尾
u undo撤銷
^r redo重做
r 可以用來修改一個字元
c. 進入其它模式
a 進入插入模式
i 進入插入模式
o 進入插入模式
A 進入插入模式
: 進入末行模式
^v 進入可視塊模式
R 進入替換模式

插入模式:
^p 唯一補齊

末行模式:
a. 儲存退出
:10 進入第10行
:w 儲存
:q 退出
:wq 儲存並退出
:w! 強制儲存
:q! 不儲存並退出
:wq! 強制儲存退出
:x 儲存並退出
b. 查詢替換
:範圍 s/old/new/選項
:1,5 s/Note/yyy/ 從1-5行的Note 替換為yyy
:5,$ s/Note/yyy/ $表示最後一行
:1,$ s/to/xxx/g = :% s/to/xxx/g %表示全文 g表示全域性
:4,9 s/^#// 4-9行的以#開頭的替換為空
:% s#/dev/sda#/var/ccc#g
:,8 s/to/xxx/ 從當前行到第8行
c. 讀入檔案/寫檔案
:w
:w /aaa.txt 另存為/aaa.txt
:1,3 w /2.txt
:1 w! /root/ccc.txt 如果目標檔案已經存在則需要加!號
:r /etc/hosts
d. 設定環境
臨時設定:
:set nu 設定行號
:set ic 不區分大小寫
:set ai 自動縮排
:set list
:set nonu 取消設定行號
:set noic

永久的環境:
/etc/vimrc 影響所有系統使用者
~/.vimrc 影響某一個使用者
# vim ~/.vimrc # 在家目錄下新增一個檔案,輸入下述內容
set ic
set nu

# vim -O /etc/hosts /etc/grub.conf ^w 按兩次切換
# vimdiff grub.conf /etc/grub.conf 對比檔案,^w 按兩次切換
# vim -p /etc/hosts /etc/grub.conf ^PgUp, ^PgDn
13、同時編輯多個檔案
#1、
vim -o 檔案1 檔案2 # 水平分隔
vim -O 檔案1 檔案2 # 垂直分隔
使用ctrl + ww切換
#2、
vim -p /etc/hosts /etc/grub.conf
使用 ^PgUp, ^PgDn切換
14、檔案內容對比
# 相同檔案之間差異對比,通常用於對比修改前後的差異。
diff #檔案對比(No)
vimdiff #以vim方式開啟兩個檔案對比,高亮顯示不同的內容
# patch實驗:
touch a.txt b.txt
[root@localhost ~]# echo 111 >> a.txt
[root@localhost ~]# echo 222 >> b.txt
[root@localhost ~]# diff -u a.txt b.txt > patch.diff
[root@localhost ~]# patch a.txt patch.diff
patching file a.txt
[root@localhost ~]# cat a.txt
222
15、vim執行過程

==============Vim非正常退出===============
(1)、模擬故障:
編輯檔案的時候斷開連線即可(斷網或斷電)
重新連線伺服器
再次進行編輯檔案
(2)、故障報錯:
Found a swap file by the name ".vim.log.swp"
Swap file ".vim.log.swp" already exists
(3)、故障解決:
刪除臨時檔案或者先恢復內容再刪除
使用-r選項進行恢復。