Linux檔案系統、目錄

weixin_34308389發表於2018-08-27

本節主要內容

  1. 如何獲取幫助文件
  2. Linux檔案系統簡介
  3. 目錄操作

1. 如何獲取幫助文件

在實際工作過程當中,經常會忘記命令的使用方式,例如ls命令後面可以跟哪些引數,此時可以使用man命令來檢視其使用方式,例如

//man命令獲取命令幫助手冊
xtwy@ubuntu:~$ man ls
11864311-b50cac652f1d3d2a.png
image.png

可以使用鍵盤上的


11864311-8090bc22af98f9c5.png
image.png

來顯示下一行或上一行命令,也可以使用


11864311-aec5a4b7af2aabd5.png
image.png

進行上一頁或下一頁(屏)命令的檢視,另外
11864311-832c3caa8f056972.png
image.png

空格鍵也可以用來顯示下一屏的命令。想退出命令檢視,直接按q鍵退出即可,也可以h鍵顯示less命令列表(man命令通過less命令輸出結果)

2. Linux檔案系統簡介

(一) 檔案和目錄

本節從使用者的角度來介紹Linux檔案系統,Linux根據檔案形式將檔案分為目錄和普通檔案,如下圖:


11864311-cc1a5f1a5278ea93.png
image.png

目錄或檔案的名稱長度不超過255個字元,檔案或目錄名可由下列字元構成:

Uppercase letters (A–Z)
Lowercase letters (a–z)
Numbers (0–9)
Underscore ( _ )
Period(.)
Comma(,)
檔案或目錄名區分大小寫,屬於不同的檔案或目錄

(二) 副檔名與不可見檔名

與Window作業系統有很大不同的是,Linux檔案對副檔名沒有強制要求,例如假設編寫了一個c語言原始檔,你可以將其命名為complier.c,也可以是其它如complier、complier.ccc等檔名,但不推薦這麼做,因為如果能將副檔名與特定的檔案進行關聯的話,有利於理解檔案內容,目前約定成俗的linux副檔名如下表:

帶副檔名的檔名 副檔名的含義
max.c C語言原始檔
max.o 編碼後的目的碼檔案
max max.c對應的可執行檔案
memo.txt 文字檔案
memo.pdf pdf檔案,必須在GUI介面上使用xpdf或kpdf才能檢視
memo.ps PostScript檔案,必須在GUI介面上使用ghostscript或kpdf才能檢視
memo.z 經壓縮程式壓縮後的檔案,可使用uncompress或gunzip解壓
memo.gz 經gzip壓縮程式壓縮後的檔案,可使用gunzip解壓
memo.tar.gz或memo.tgz 經gzip壓縮後的tar歸檔檔案,可使用gunzip解壓
memo.bz2 經bzip2壓縮後的檔案,可使用bunzip2解壓
memo.html html檔案,使用GUI環境的firefox檢視
memo.jpg等 影象檔案,使用GUI環境的照片檢視器開啟
在前一講中我們看到,linux中還存在大量的隱藏檔案,採用ls -a 命令可以顯示,想定義隱藏檔案,只要檔名或目錄以.開始即可

11864311-12997207785f9811.png
image.png

(三) 絕對路徑與相對路徑

在Linux中絕對路徑與相對路徑是一個很重要的概念,下圖給出了什麼是絕對路徑


11864311-c48db49100dd3573.png
image.png

所有以根目錄”/”作為開始的都是絕對路徑,其它的均為相對路徑

//絕對路徑訪問
xtwy@ubuntu:~/Public$ cd /home/
xtwy@ubuntu:/home$ ls
xtwy
//相對路徑訪問
xtwy@ubuntu:/home$ cd xtwy/

3. 目錄操作

(一) 建立目錄 mkdir

為演示方便,使用下列目錄結構進行演示:


11864311-cf361d83b4121ebb.png
image.png

1 絕對路徑建立方式

//使用絕對路徑建立
root@ubuntu:/home# mkdir /home/max
root@ubuntu:/home# ls
max  xtwy
root@ubuntu:/home# 

2 相對路徑建立方式

//使用相對路徑進行建立
root@ubuntu:/home# mkdir max/names
root@ubuntu:/home# mkdir max/temp
root@ubuntu:/home# mkdir max/literature
root@ubuntu:/home# cd max
root@ubuntu:/home/max# mkdir demo
root@ubuntu:/home/max# ls
demo  literature  names  temp

有時不想層層目錄建立,此時可以在mkdir 後面加上引數 -p(parents),將父子目錄一起建立

root@ubuntu:/home/max# mkdir -p literature/promo
root@ubuntu:/home/max# ls
demo  literature  names  temp
root@ubuntu:/home/max# cd literature/
root@ubuntu:/home/max/literature# ls
promo

(二) 更改目錄 cd

工作目錄與主目錄的區別
使用者每次登入後的預設目錄就是主目錄,與系統會話期間保持不變,主目錄用~表示

xtwy@ubuntu:/root$ cd ~
xtwy@ubuntu:~$ pwd
/home/xtwy

工作目錄又稱當前目錄,cd命令執行完成後的目錄就是工作目錄,它是可以隨意改變的。

//.表示當前目錄即工作目錄
//..表示當前目錄的上一級目錄
xtwy@ubuntu:~$ cd .
xtwy@ubuntu:~$ cd ..
xtwy@ubuntu:/home$ 

(三) 刪除目錄 rmdir

rmdir是remove directory的簡稱,用於刪除目錄,它先刪除目錄下的所有檔案,然後再刪除該目錄,但當目錄下還有子目錄時,該命令不能執行,需要使用rm命令,例如

//刪除temp目錄,先刪除目錄下的檔案
//再刪除temp目錄自身
root@ubuntu:/home/max# rmdir temp/
root@ubuntu:/home/max# rmdir literature/
rmdir: failed to remove `literature/': Directory not empty
root@ubuntu:/home/max# rm -r literature/
root@ubuntu:/home/max# ls
demo  names

其中rm -r中的r指的是遞迴的刪除目錄及目錄中的檔案,因此它具有很強的破壞力,要謹慎使用。

(四) 移動目錄 mv

//將目錄demo移到/home/xtwy/目錄下
root@ubuntu:/home/max# mv demo/ /home/xtwy/
root@ubuntu:/home/max# cd /home/xtwy/
root@ubuntu:/home/xtwy# ls
demo     Documents  examples.desktop  Pictures  Templates
Desktop  Downloads  Music             Public    Videos
root@ubuntu:/home/xtwy# rmdir demo
//原來目錄的demo目錄已經不存在了
root@ubuntu:/home/xtwy# cd /home/max/
root@ubuntu:/home/max# ls
names

(五) 複製目錄 cp

前面用mv命令移動目錄,有時候需要對目錄進行拷貝,使用方式如下:

//先建立一個演示目錄,用-p,父目錄如果不存在將會被建立
root@ubuntu:/home/max# mkdir -p literature/demo
//由於literature還包括子目錄,此時拷貝不成功
root@ubuntu:/home/max# cp literature/ /home/xtwy/
cp: omitting directory `literature/'
//如果包括子目錄的話,則加上-r引數,表示遞迴地拷貝
root@ubuntu:/home/max# cp -r literature/ /home/xtwy/
root@ubuntu:/home/max# cd /homt
bash: cd: /homt: No such file or directory
root@ubuntu:/home/max# cd /home/xtwy/
root@ubuntu:/home/xtwy# ls
Desktop    Downloads         literature  Pictures  Templates
Documents  examples.desktop  Music       Public    Videos
root@ubuntu:/home/xtwy# cd literature/
root@ubuntu:/home/xtwy/literature# ls
demo

4. 檔案操作

(一) 建立檔案

直接通過命令列的方式建立檔案的方式有多種,常用方式如下:

//通過echo命令,將輸出的命令重定向到檔案
root@ubuntu:/home/xtwy# echo "hello linux" > hello.txt
root@ubuntu:/home/xtwy# ls
Desktop    Downloads         hello.txt   Music     Public     Videos
Documents  examples.desktop  literature  Pictures  Templates
//touch命令,如何檔案不存在,會建立檔案
root@ubuntu:/home/xtwy# touch hell1.txt
root@ubuntu:/home/xtwy# ls
Desktop    Downloads         hell1.txt  literature  Pictures  Templates
Documents  examples.desktop  hello.txt  Music       Public    Videos

(二) 顯示檔案內容

cate命令可以顯示檔案內容,它的全稱是catenate,意思是將單詞一個接一個地連線起來

root@ubuntu:/home/xtwy# cat hello.txt 
hello linux

cat命令會將檔案中所有的內容全部一次性顯示出現,例如

root@ubuntu:/home/xtwy# cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
  ......

有時候我們希望能夠分屏檢視檔案內容,此時可以使用less或more分頁程式,less和more的使用方式相差不大,通過空格鍵顯示下一屏資訊,它們之間的差別在於less在檔案末尾會顯示END訊息,而more直接返回shell終端,例如:
less命令


11864311-6626869c993aecb9.png
image.png

more命令


11864311-3306d9bf3793c2bb.png
image.png

(三) cp命令複製檔案

root@ubuntu:/home/xtwy# ls
Desktop    Downloads         hell1.txt  literature  Pictures  Templates
Documents  examples.desktop  hello.txt  Music       Public    Videos
//複製檔案
root@ubuntu:/home/xtwy# cp hell1.txt literature/demo
root@ubuntu:/home/xtwy# cd literature/demo
//cd -返回上一次執行的工作目錄
root@ubuntu:/home/xtwy/literature/demo# cd -
/home/xtwy

需要注意的是cp命令在複製時,如果目標目錄中已存在該檔案,系統不會給出警告,而是直接覆蓋,因此它可能存在銷燬檔案的風險,為解決這個問題可以使用-i引數讓系統給出警告,例如:

root@ubuntu:/home/xtwy# cp -i hell1.txt literature/demo
cp: overwrite `literature/demo/hell1.txt'?

(三) mv命令移動或重新命名檔案

//在同一目錄時,相當於檔案重新命名,執行完成後hell1.txt不存在
root@ubuntu:/home/xtwy# mv hell1.txt hell2.txt
root@ubuntu:/home/xtwy# ls
Desktop    Downloads         hell2.txt  literature  Pictures  Templates
Documents  examples.desktop  hello.txt  Music       Public    Videos
//移動hell2.txt到literature/demo
root@ubuntu:/home/xtwy# mv hell2.txt literature/demo
root@ubuntu:/home/xtwy# cd literature/demo/
root@ubuntu:/home/xtwy/literature/demo# ls
hell1.txt  hell2.txt
root@ubuntu:/home/xtwy/literature/demo# cd -
/home/xtwy
//源目錄hell2.txt已不存在
root@ubuntu:/home/xtwy# ls
Desktop    Downloads         hello.txt   Music     Public     Videos
Documents  examples.desktop  literature  Pictures  Templates

(四)顯示檔案頭部或尾部

顯示檔案頭部內容用head命令,尾部用tail命令,預設顯示行數為10

root@ubuntu:/home/xtwy# head ~/.bashrc 
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace
root@ubuntu:/home/xtwy# tail ~/.bashrc
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
#    . /etc/bash_completion
#fi

head及tail的預設行數是可以修改的,例如:

//僅顯示前兩行
root@ubuntu:/home/xtwy# head -2 ~/.bashrc 
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)

tail命令在檢視日誌檔案內容增長時可能經常會使用,例如在hadoop啟動之後,會產生許多日誌,但出現問題時,可以採用tail命令動態地監測日誌檔案內容的增長,檢視問題出在哪個地方。

//初始顯示情況
root@ubuntu:/home/xtwy# tail -f hello.txt 
hello linux

//向檔案中追加內容
root@ubuntu:/home/xtwy# echo "hello linux linux" >> hello.txt

//追加後的輸出情況
root@ubuntu:/home/xtwy# tail -f hello.txt 
hello linux
hello linux linux

(五)其它常見檔案操作命令

下面的命令都不會改變檔案內容

root@ubuntu:/home/xtwy# cp hello.txt hello1.txt
root@ubuntu:/home/xtwy# ls
Desktop    Downloads         hello1.txt  literature  Pictures  Templates
Documents  examples.desktop  hello.txt   Music       Public    Videos
//根據檔案內容排序
root@ubuntu:/home/xtwy# sort hello1.txt
hello linux
hello linux linux
//逆序輸出
root@ubuntu:/home/xtwy# sort -r  hello1.txt
hello linux linux
hello linux
//diff進行內容比較
root@ubuntu:/home/xtwy# diff hello1.txt hello.txt
//向檔案中追加內容
root@ubuntu:/home/xtwy# echo "hello linux linux" >> hello.txt
//內容比較
root@ubuntu:/home/xtwy# diff hello1.txt hello.txt
2a3
> hello linux linux
//格式化輸出
//-u引數將檔案分成多塊
//比較的兩個檔案分別用-、+表示
//本例中 -表示hello1.txt,+表示hello.txt
root@ubuntu:/home/xtwy# diff -u hello1.txt hello.txt
--- hello1.txt  2015-08-22 17:28:44.071202558 -0700
+++ hello.txt   2015-08-22 17:29:49.131181281 -0700
//@@xxx@@用於標識行起始編號、行數
//-1,2表示 hello1.txt檔案起始編號為1,行數為2
//+1,3表示 hello.txt檔案起始編號為1,行數為3
@@ -1,2 +1,3 @@
 hello linux
 hello linux linux
+hello linux linux

相關文章