Linux學習之文件基礎

首次登錄與使用幫助

  • Linux的基本原則

  1. 由目的單一的小程序組成;組合小程序完成復雜任務;
  2. 一切皆文件;
  3. 盡量避免捕獲用戶接口;
  4. 配置文件保存為純文本格式;
  • x window與命令行

默認情況下提供6個終端來讓用戶登錄,使用ctrl+alt+F(16)來切換即可.分別命名為tty1tty6.
還有一種自然是圖形界面,稱之為x-window.如果已經安裝過x-window系統那么運行stratx命令后使用ctrl+alt+F7即可啟動.當然這個在inittab文件里是可以自行修改的.像我的是ctrl+alr+F1才是圖形界面,并且是默認的.

  • 登錄

輸入密碼登錄后,出現類似root@fredal tmp]#的提示,最左邊的代表當前用戶是root.@后面的指的是主機名fredal,接著代表當前目錄為tmp.#代表當前用戶是管理員,而$代表當前用戶是普通用戶.運行su fredal切換用戶到普通用戶fredal,那么:[fredal@fredal tmp]$.
使用su命令切換用戶,使用exit退出.

  • 命令格式與熱鍵

命令格式如下分為命令,選項與參數.

 [root@fredal ~]$ command  [-options]  parameter1  parameter2 ...

例如ls -l /root,選項分為短選項-與長選項--,不同的選項可以合在一起,例如ls -al /root.參數指的是命令的作用對象,像這兒指的是/root目錄下.
如果需要補全可以使用按兩次tab鍵,可以用于命令補全,同樣也可用于文件補全.
ctrl-c鍵用于中止程序.ctrl-d相當于輸入結束或者exit.

  • 使用幫助

我們的命令分為內部命令與外部命令.
可以用whatis 參數來區分,例如help是一個內部命令,那么

   [fredal@fredal tmp]$ whatis help
    help (1)  - bash built-in commands, see bash(1)

看到有built-in字樣,說明是內部命令,否則是外部命令.
如果是內部命令,可以使用help 參數來獲取幫助,沒錯,可以help help.得到關于help命令自身的使用幫助.
外部命令使用man 參數來獲取幫助.
輸入man 7 man得到

1_0

這樣的幫助是分章節的(上圖是第七章),每一章如下

  1. 用戶命令(/bin, /usr/bin, /usr/local/bin)
  2. 系統調用
  3. 庫用戶
  4. 特殊文件(設備文件)
  5. 文件格式(配置文件的語法)
  6. 游戲
  7. 雜項(Miscellaneous)
  8. 管理命令(/sbin, /usr/sbin, /usr/local/sbin)

默認是有哪個章節就顯示最前的那章.同樣可以用whatis 參數來查看命令有哪些章節的說明.而我們要想顯示那一章節就用man 章節數 參數即可
關于man使用幫助的一些說明:
符號:
<>:必選
[]:可選
...:可以出現多次
|:多選一
{}:分組
關鍵字:
NAME:命令名稱及功能簡要說明
SYNOPSIS:用法說明,包括可用的選項
DESCRIPTION:命令功能的詳盡說明,可能包括每一個選項的意義
OPTIONS:說明每一個選項的意義
FILES:此命令相關的配置文件
BUGS:
EXAMPLES:使用示例
SEE ALSO:另外參照
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
查找:
/KEYWORD: 向后查找
n: 下一個
N:前一個
?KEYWORD:向前查找
n: 下一個
N:前一個

另外使用q退出.
除了man命令,還可以使用info命令來獲得幫助,大概是對man的一個補充吧,就是info 參數,不贅述了.

  • 基礎命令

  • type

type 參數查看命令的類型及一些信息.

0

  • date與clock

1

看上去沒啥區別,不過前者指的是系統時間,后者指的是硬件時間.他們自身的修改不會影響到對方.
可以用自己喜歡的格式顯示,例如date +%Y/+%m/+%d,就顯示2016/3/13.同樣修改時間例如date 1210161730是修改成2030年12月10日16:17:00.可以看到格式是月日時分年.
clock操作類似.如果想讓硬件時間同步到系統時間,使用hwclock -s,反之使用hwclock -w.

  • cal

顯示日歷的命令,cal顯示當前月,cal 年份顯示某一年的年歷.cal 月份 年份顯示某年某月的月歷.

1_1

  • bc

一個簡單的計算器,值得注意的是除法運算和java一樣1/3變成0.如果要保留小數使用scale=小數位.使用quit退出

  • nano

一個簡單的文本編輯器,使用nano 文件名即可新建文件,進入到以下界面.使用ctrl+O保存,ctrl+x離開

1_2

  • sync

sync進行數據的寫入操作,會使內存中尚未更新的數據寫入到硬盤中.

  • 開關機

慣例上使用shutdown即可,同時poweroff關機,reboot重啟,比如

    shutdown -h now
    poweroff -f

更多參數參考man page.

  • 切換執行等級

常用的幾個等級
1. level 0: 關機
2. level 3: 命令行模式
3. level 5: 圖形界面模式
4. level 6: 重啟

那么顯然`init 0`可以執行關機.  
  • 忘記密碼

passwd命令,輸入兩次新密碼即可.

文件與目錄配置

  • 文件屬性

我們用ls -al命令來查看文件,出現如下格式.

2

從左到右基本上可以劃分為七列,意義如下:

  1. 文件的類型吧及權限
  2. 表示有多少文件名鏈接到此節點
  3. 表示這個文件或目錄的"所有者帳號"
  4. 表示這個文件的所屬用戶組
  5. 文件的容量大小,默認為B
  6. 文件的創建日期或者是最近的修改日期
  7. 文件名

說說第一列,也就是類型權限.共有10個字符,第一個字符代表文件的類型:
-:普通文件 (f)
d: 目錄文件
b: 塊設備文件,可供存儲的接口設備 (block)
c: 字符設備文件,串行端口設備 (character)
l: 符號鏈接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
后面九位,每三個一組,均為"rwx"的三個參數的組合.[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute),如果都沒有權限就是[-].

  1. 第一組為"文件所有者的權限"
  2. 第二組為"同用戶組的權限"
  3. 第三組為"其他非本用戶組"的權限

說說第六列,也就是時間戳.基本上記錄以下三類:
訪問時間:access
修改時間:modify,文件內容發生了改變
改變時間:change,metadata,元數據(本身的屬性改變)

  • 目錄配置標準FHS

文件層次標準(FHS,Filesystem Hierarchy Standard)統一解決碎片化問題.
按照文件系統使用頻繁與否可分為四類

3_0

根目錄:是整個系統最重要的一個目錄,所有的目錄都由根目錄衍生出來,同時也與開機,還原,系統修復等操作有關.
在根目錄查看所有文件可以看到
3_1

FHS定義出根目錄/應該有以下子目錄才好
/bin:放置的是單用戶模式下還能被操作的命令,上圖中是一個鏈接文件.
/boot:放置開機會使用到的文件,包括linux內核文件以及配置文件等
/dev: 任何設備與接口文件都是存在這個目錄中
/etc: 系統的主要配置文件都在這,一般普通用戶可以查閱但只有root用戶才能修改
/home: 這是系統默認的用戶主文件夾,比如說我這個里面會有fredal的目錄在,但是root用戶是不在這兒的.帶上~選項,表示當前用戶的主文件夾.
/lib:放置開機會用到的函數庫,以及/bin與/sbin下命令調用的函數庫.
/media:媒體的意思,放置的是可刪除的設備,包括軟盤,光盤...
/mnt:掛載設備的目錄
/opt:給第三方軟件放置的目錄
/root:系統管理員得到主文件夾,和/home是不同的.
/sbin:管理命令,與/bin用戶命令不同,包括開機,修復,還原系統等命令
/srv:"service"的縮寫,一些網絡服務啟動之后,所需要取用的數據目錄
/tmp:臨時文件
當然還有一些目錄也是需要了解的
/lost+found:在文件系統發生錯誤時,將一些丟失的片段放置到這個目錄下
/proc:虛擬文件系統,放置的數據都在內存中,如系統的內核,進程,外部設備的狀態,網絡狀態等.
/sys:也是虛擬文件系統,跟硬件設備相關的屬性映射文件
接下來需要了解/usr了,(UNIX SoftWare Resource)縮寫,也就是操作系統軟件資源,而不是什么用戶的目錄.所有的系統默認的軟件都會放置在這,類似于windows中"C:\windows".與/下很多重復目錄的區別在于是否與開機相關
/usr/bin:用戶可使用的命令,和/bin區別在于是否與開機相關
/usr/sbin:非系統正常運行所需要的系統命令,如網絡服務的服務命令
/usr/lib:各種應用軟件的函數庫,目標文件
/usr/local:系統管理員在本機自行安裝的軟件,建議放到此目錄.這里面也有/bin,/sbin,/lib
/usr/src:源碼
接下來將/var.定義為可變的文件,包括緩存,登錄文件以及某些軟件運行產生的文件.
/var/cache:緩存文件
/var/lib:程序本身執行的過程中需要使用的庫
/var/tmp:也是臨時文件
我們的目錄樹如下:
3_2

  • 路徑

文件的路徑:就是文件存放的地方,通過它系統就可以找到該文件。
絕對路徑:路徑的寫法一定是由根目錄“/”寫起的。例如:/usr/local/mysql
相對路徑:路徑的寫法不是由根目錄“/”寫起的。例如例如 ./home/dmtsai../../home/dmtsai/ 等等
. :代表當前的目錄,也可以使用 ./ 來表示;
.. :代表上一層目錄,也可以 ../ 來代表。
-:代表前一次目錄,按多次相當于來回輪換
~:當前用戶的主文件夾

文件與目錄管理

  • cd(切換目錄)

就是一個切換命令的操作,加上~或者啥都不加表示回到主目錄.-表示與前一層來回切換,cd ..表示回到上一層,cd /var/spool這種屬于絕對路徑寫法,cd ../bin屬于相對路徑寫法

4

  • pwd(顯示目錄)

用于打印當前目錄,有參數-P表示顯示出真實的路徑(而不是鏈接)

4_1

我們知道/bin是一個鏈接目錄.鏈接到/usr/bin中,所以加了參數會有區別

  • mkdir(創建新目錄)

主要參數
-m:用于指定要創建的目錄的權限。(不常用)
-p:創建一大串級聯目錄,并且當創建一個已經存在的目錄時不會報錯
如果目錄已經存在,報錯.創建不存在的級聯目錄時需要加上參數.另外不指定權限會默認為drwxr-xr-x

4_2

我們在創建目錄的時候,可以使用{}進行輔助,例如在創建多個目錄的時候,或者交叉目錄的時候.
[root@fredal tmp]# mkdir -p hello/black/{one,two/guess}創建了多個目錄.
[root@fredal tmp]# mkdir -p hello/test/{a,b}_{c,d}這行命令會創建a_c,a_d,b_c,b_d四個目錄

  • install

只說-d參數,同樣有創建目錄的效果

4_2a

  • rmdir(刪除目錄)

刪除空的目錄,-p參數可以刪除一連串的單源空目錄,自底向上的.

  • 環境變量$PATH

為什么可以在某些地方不加地址就可以直接那個命令呢,就是環境變量的原因,可以查看路徑設置的詳細

4_3

  • ls(查看文件與目錄)

ls可能是最常用的指令之一.
主要參數:
-l:長格式(包含文件的屬性與權限等數據)
-h:做單位轉換(KB,GB)
-a: 顯示以隱藏文件
-A: 顯示隱藏文件但不包括.和..
-d: 顯示目錄自身屬性
-i: 列出index node, inode
-r: 逆序顯示
-R: 遞歸(recursive)顯示,連同子目錄文件
-F: 根據文件目錄等信息給與附加數據結構(*代表可執行文件,/代表目錄,=代表socket文件,|代表FIFO文件)
--color=never :不要顏色;
--color=always :顯示顏色
--color=auto :自動決定顏色顯示
--full-time :以完整時間模式 (包含年、月、日、時、分) 輸出

4_4
  • touch

一般來說我們用文本編輯器創建新文件,但這個也可以.描述為若之前對應文件不存在,創建一個新文件;若存在,則修改這個文件的最后修改期限(時間戳)
主要參數
-a:只更改存取時間
-c:不建立任何文件
-d:<時間日期>:使用指定的日期時間
-m:只更改變動時間
-r:<參考文件或目錄>:把指定的文件或者目錄的日期時間,統統設置成為參考文件或目錄的日期時間。:
-t:<時間日期>:使用指定的日期時間

4_5

4_6

  • cp(復制文件或目錄)

cp使用形如cp SRC DEST.還是有許多要注意的地方.例如如果目標已經存在且是目錄,那么會放到該目錄下.如果目標已經存在且是文件,會覆蓋.如果復制多個文件那么目標必須為目錄,如果目標是目錄那么必須是存在的等等,如果源文件是目錄必須加上-r等等.
主要參數:
-r:遞歸處理,將指定目錄下的文件和子目錄一起復制
-i:覆蓋現有的文件之前先詢問用戶
-f: 強制復制
-p: 連同文件的屬性一起復制過去
-a:歸檔復制,常用于備份
-d: 復制鏈接文件本身而非源文件

4_7

4_8

另外要注意,復制的文件是誰創建的就是誰的用戶組,如果要保留用戶組的話需要使用-a.而如果源文件是鏈接文件的話默認復制源文件的,如果復制鏈接文件本身需要使用-d

  • rm(刪除文件或目錄)

主要參數
-f:強制刪除文件或目錄。
-i:刪除既有文件或目錄之前先詢問用戶。
-r:遞歸處理,將指定目錄下的所有文件及子目錄一并處理。等同于rmdir。
-v:顯示指令的執行過程
注意在root用戶中,rm相當于rm-i.使用\rm來使用rm

4_9

  • mv(移動文件與目錄,重命名)

同樣要考慮目標文件或目錄是否存在等等
主要參數
-b:若需覆蓋文件,覆蓋前先備份。
-f:若目標文件和現有的文件或目錄重復,則直接覆蓋現有的文件或目錄。
-i:覆蓋現有的文件之前先詢問用戶。
-v:顯示指令執行的過程
-u: 若目標文件存在,比較哪個更新

4_10

  • stat與file(查看屬性,類型)

stat用于查看文件各種屬性狀態,而file用于查看文件類型(包括目錄)

4_11

文件內容查閱

有部分內容涉及到管道命令,但是更多的管道命令之后還會細說.

  • cat(查看文件內容)

cat有連接的意思,除了查看單個文件內容,還可以查看多個文件拼接的內容,用空格隔開即可

5_1

主要參數
-n:由1開始對所有輸出的行數進行編號。
-b:和-n相似,但是對于空白的行不進行編號。
-s:當遇到有連續的兩行以上的空白行時,代換為一行的空白行。
-E:結尾用斷行符號$表示出來
5_2

  • tac(反向顯示)

就是cat的倒序顯示,先顯示最后一行.

5_3

  • more和less(分屏顯示)

當顯示內容過多時候我們需要分屏顯示.
more /etc/man.config可以分屏顯示文件,空格鍵下一屏,b鍵上一屏,Enter鍵下一行,q表示離開,/KEY表示向下查詢.基本與man使用類似,但是卻沒有上一行的操作.
相對來說less命令更好用一些,less /etc/man.config就是分屏查看,操作與man操作幾乎一致.

  • head(取出前幾行)

不加參數的話,默認取出前十行.參數-n 數字表示取出前多少行

5_4

另外head -n -100的話表示,后面一百行不打印,只打印前面的.

  • tail(取出后幾行)

不加參數同樣默認后十行,-n可以指定取出尾部多少行.

5_5

類似的如果tail -n +100,表示前面一百行不打印,只打印后面的,相當于取多少行后的所有.
參數-f非常有用,相當于持續檢測后面的內容.比如tail -f test.txt后,在另一個終端尾部添加test.txt的內容,當前終端會實時顯示.

  • cut(選取)

這個與之后幾個也是涉及到管道命令,這里先有個基礎的認識.
選取命令就是將一段數據進行分析,然后選出我們想要的,當然這個過程是不會改變數據的內容的,只是顯示內容改變
主要參數:
-d:后面接分割字符,與-f一起使用
-f:表示取出第幾段的意思
-c:以字符的固定單位取出固定字符

5_6

看到passwd文件都是以:為分隔符的一串,那么如果要取出每行的第一段就應該使用cut -d: -f1 /etc/passwd.
5_7

如果要去出第一段到第三段就使用cut -d: -f1-3 /etc/passwd
5_8

那如果沒有分隔符,而只想根據第幾個字符來分割,比如只想取出前面三個字符,或者12個字符以后的所有字符怎么辦?
可以使用cut -c -3 /etc/passwd,cut -c 12- /etc/passwd
5-9

  • sort(排序顯示)

排序是默認根據ASCII表順序的
主要參數:
-f:忽略大小寫的差異,Aa認為一樣.
-b:忽略最前面的空格符部分
-n:使用數字的排序方式
-r:反向排序
-u:表示重復的行僅出現一行
-t:分隔符
-k:表示以哪個區間的字段進行排序

5_10

接下來我們對passwd的第三個字段進行排序
5_11

  • uniq(去除重復顯示)

要注意的是和sort -u不同,這兒只有相鄰并且重復才會被認為是重復
主要參數:
-d:顯示重復的行
-D:顯示所有重復的行
-c:進行重復的計數

5_12

  • wc(計數)

想要知道有多少行,多少字,多少字符.可以使用這個命令
主要參數:
-l:僅輸出多少行
-w:僅輸出多少字
-m:僅輸出多少字符

5_13

  • tr(操作字符)

tr可以刪除一段信息當中的文字,或者進行替換.當然這個只是在顯示上做得改動,不會真的刪除或替換.
主要參數:
-d:刪除這個字符串
-s:替換掉重復字符

5_14

  • join(合并文件操作)

處理兩個文件間的數據,把相同數據的一行加在一起.
主要參數:
-t::分隔符
-i:忽略大小寫的差別
-1:表示第一個文件要用哪個字段來分析
-2:表示第二個文件用哪個字段分析
我們建立兩個文件,第一個以姓名,性別,年份,班級來建立字段.第二個以姓名,年份,身高體重來建立字段.
那么如果是默認的,就是會以空格符分割數據,并且對比第一個字段的數.這里join -t: a.txt b.txt就會對比兩個文件的名字字段并合并顯示.我們看到年份字段也是兩個文件共有的,第一個文件中第三段和第二個文件中第二段是年份,那么join -t: -1 3 a.txt -2 2 b.txt可以按年份進行合并,但是注意到我們文件中有兩個相同年份2015,所以會出現交叉

5_15

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,048評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,414評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,169評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,722評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,465評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,823評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,813評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,000評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,554評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,295評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,513評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,722評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,125評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,430評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,237評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,482評論 2 379

推薦閱讀更多精彩內容