從零開始緩慢深入Linux - 基礎指令篇(1)

從零開始緩慢深入Linux - 基礎篇(1)

備註: 本篇開始主要以CentOS 8 爲主,部分涉獵CentOS7,至於CentOS6 不在此範圍內

Linux目錄結構

linux裏有一句話:“一切皆文件”,基本你能夠想到的東西,都可以在我們linux操作系統裏都會以文件的形式表示出來,這也導致linux中文件數量較爲龐大,從而引申出一個問題:如何有效的對文件進行分類?

這裏我們就可以通過目錄結構大致判斷目前我們linux對於文件的分類的標準。

我們linux目錄結構類似於樹形結構,如下圖所示,最上層爲一切文件的起始,我們稱之爲根目錄(windows裏的文件夾在linux裏稱之爲目錄)。

從邏輯結構上看,我們的文件和文件之間的關係屬於一個包含的概念(實際結構上並不是包含關係),有上層、下層的區分,例如/var目錄下包含spool目錄,而spool目錄下可能還會包含一些其他的文件或目錄。
類似下圖:
在這裏插入圖片描述
主要目錄作用如下:

目錄名稱 放置文件的內容概述
/boot 開機所需文件,包括內核,開機菜單及所需配置文件等
/dev 任何設備與接口都以文件形式存放在此目錄
/etc 配置文件
/home 用戶主目錄
/bin -> usr/bin 用戶能夠操作的命令
/lib -> usr/lib 函數庫
/lib64 -> usr/lib64 函數庫
/sbin -> usr/sbin 超級用戶能夠使用的命令
/media 一般掛載或刪除的設備
/opt 放置第三方的軟件
/root 系統管理員的主文件夾
/srv 默認無文件。
/tmp 任何人均可使用的 “ 共享 ” 臨時目錄
/proc 進程信息及系統運行過程中信息存放位置
/var 主要存放經常變化的文件,如日誌。
/sys 系統文件
/usr 大量系統、程序、用戶等數據存放位置
/mnt 默認無文件,通常用於作爲掛載點
/run 系統運行時必要文件。

當我們大概瞭解目錄結構之後,我們就可以發起一些文件的操作請求。如果要找到指定文件執行一系列的操作,則我們要學會使用linux裏的關於路徑的表達方法,路徑決定了我們如何找到指定的文件。

Linux路徑

路徑表示方式分爲絕對路徑與相對路徑:

  • 絕對路徑 (absolute): 由根目錄 (/) 開始寫起的目錄或文件名
  • 相對路徑 (relative): 相對於當前路徑的寫法

舉例說有一個外國人站在上海火車站,問你去人民廣場怎麼走。

用絕對路徑的方式回答,我們就會這樣說:”要從你的國家到人民廣場,首先先從坐飛機飛到中國上海,到了浦東國際機場之後坐地鐵二號線在人民廣場站下車,X口出站,往南步行XX分鐘可到達人民廣場“。

而用相對路徑的方式回答,我們可以這樣說:“前面那條路左轉,坐地鐵一號線三站路下車,X口出站,往南步行XX分鐘可到達人民廣場。”

如果採用絕對路徑方式來尋找指定地點,那麼意味着要從起點開始慢慢尋址,任何一個人都可以按照這個提示找到人民廣場,但缺點是沒有考慮到用戶當前所處位置。

而相對路徑,則能夠彌補以上的問題,考慮到用戶當前位置,缺點是不具備普遍性。

例如我想找到hosts文件,絕對路徑和相對路徑的表達方式如下:

絕對路徑:/etc/hosts
相對路徑:假設當前位置在/etc/目錄,表達方式爲:    hosts

切換路徑的指令

命令 解釋
pwd 顯示當前所在絕對路徑位置
cd 切換當前工作目錄

cd命令用法

[tom@www tmp]$ cd /etc/ # 絕對路徑
[tom@www etc]$ cd ~ # ~代表當前用戶家目錄
[tom@www  ~]$ cd .. # 進入父目錄
[tom@www  home]$ cd - # 切換到上次所在位置
/home/tom

pwd命令用法

[tom@www tmp]$ cd /etc/nginx
[tom@www nginx]$ cd conf.d
[tom@www conf.d]$ pwd
/etc/nginx/conf.d

可以看到,我們已經學會了兩個命令,cd和pwd,那命令具體是如何實用的呢。

命令的基礎用法

命令的構成

Linux大部分命令命令由三部分構成(有些例外的),每個部分之間以空格作爲分隔

  • 命令字(執行什麼操作)
  • 選項(使用該操作的什麼功能,通常以一個-或者–作爲起始符號)
  • 參數(針對什麼對象執行操作)

例如ls -l /etc/hosts該指令ls爲命令字,-l爲選項,/etc/hosts爲參數。

注:選項和參數可互換位置

針對文件狀態和路徑的基本操作

命令 釋義
ls 羅列文件狀態
touch 創建文件
mkdir 創建目錄
rm 刪除文件或目錄
cp 複製文件或目錄
mv 移動文件或目錄

ls指令用法

ls [options]... [file]...

選項 釋義
-l 詳細列出當前目錄下的所有文件屬性
-d 查看當前目錄本身的信息
-a 查看隱藏文件(在linux裏以 . 開頭的文件爲隱藏文件)
-R 查看多層目錄
-b 將特殊字符以 \ 分割 ls 查看有特殊字符的文件
[tom@www tmp]$ ls -hl # 單字符選項之間可以合併
total 68K
srwxr-xr-x. 1 root root 0 Mar 20 23:59 gedit.root.3177893063
drwx------. 2 root root 4.0K Feb 5 18:24 keyring-JL7MKY
[tom@www tmp]$ ls -ld /tmp # 查看目錄本身屬性
drwxrwxrwt. 22 root root 4096 Mar 21 00:43 /tmp
[tom@www tmp]$ ls -la /tmp # 查看所有文件屬性
total 96
drwxrwxrwt. 22 root root 4096 Mar 21 00:43 .
dr-xr-xr-x. 29 root root 4096 Mar 20 23:55 ..
drwx------. 2 root root 4096 Mar 20 23:56 .esd-0
drwx------. 2 cong cong 4096 Jan 1 18:33 .esd-500
[tom@www tmp]$ ls -bl 
-rw-rw-r--. 1 tom tom 0 Mar 21 00:48 a\ b.txt
[tom@www tmp]$ ls -l
-rw-rw-r--. 1 tom tom 0 Mar 21 00:48 a b.txt
[tom@www tmp]$ ls -lR a/ # 遞歸查看屬性
a/:
total 4
drwxrwxr-x. 3 tom tom 4096 Mar 21 00:50 b
a/b:
total 4
drwxrwxr-x. 2 tom tom 4096 Mar 21 00:50 c
a/b/c:
total 0

touch指令用法

touch [options]... file

[tom@www ~]$ touch test{a..c}_{1..4} # 參數的擴展,{a..c}指代a,b,c。{1..4}指代1,2,3,4
[tom@www ~]$ ls
testa1 testa4 testb3 testc2
testa2 testb1 testb4 testc3
testa3 testb2 testc1 testc4
[tom@www ~]$ touch "ab cd" # 文件名中帶有特殊符號需用雙引號引用起來
[tom@www ~]$ ls -b
ab\ \ \ cd testa3 testb2 testc1 testc4
testa1 testa4 testb3 testc2
testa2 testb1 testb4 testc3

rm命令用法

rm [options]... file

選項 釋義
-f 強制
-r 遞歸刪除
[root@www ~]# rm -f b.test # 強制刪除文件
[root@www ~]$ rm a/
rm: cannot remove `a/': Is a directory
[root@www ~]$ rm -rf a/ # 強制刪除目錄

mkdir命令用法

mkdir [options]... directory

[tom@www ~]$ mkdir -p test/test1 # 遞歸創建目錄
[tom@www ~]$ mkdir {a..f} # 使用參數的擴展

cp命令用法

cp [OPTION]... SOURCE... DIRECTORY

選項 釋義
-p 保留文件原權限等屬性
-a 保留文件所有屬性(包括遞歸)
-r 遞歸複製
[root@www tom]# cp testa_4 /tmp # 複製testa_4文件至/tmp目錄下
[root@www tom]# cp -p testa_3 /tmp # 保留文件原屬性複製 
[root@www tom]# cp -r abc/ /tmp # 將abc目錄複製至/tmp/下

mv命令用法

mv [OPTION]... SOURCE... DIRECTORY

[tom@www ~]$ mv testa_3 test # 原地移動文件等於重命名
[tom@www ~]$ mv testb_1 /tmp/ # 將testb_1文件從當前位置移動至/tmp目錄下
[tom@www ~]$ mv /abc /tmp # 將/abc目錄移動至/tmp目錄

針對文件內容的查看及統計

文件內容的查看

命令 作用
cat 適用於小文件查看
tac 倒敘查看小文件
head 查看文件頭部,默認10行,可通過-n指定行號
tail 查看文件尾部,默認10行,可通過-n指定行號,-f動態查看文件尾部追加內容
more 查看大文件
less 查看大文件

cat和tac指令用法

cat [OPTION]... [FILE]...

tac [OPTION]... [FILE]...

[kiosk@foundation0 etc]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[kiosk@foundation0 etc]$ cat /etc/hosts -n   # -n代表顯示行號
     1	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
     2	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[kiosk@foundation0 etc]$ tac /etc/hosts # 倒敘查看
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

head和tail指令用法

head [options]... [FILE]

tail [options]... [FILE]

[kiosk@foundation0 etc]$ head -n 2 /etc/passwd # 顯示文件頭部2行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[kiosk@foundation0 etc]$ tail -n 2 /etc/passwd # 顯示文件尾部2行
named:x:25:25:Named:/var/named:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
[root@foundation0 ~]# tail -f /var/log/messages # 動態刷新文件尾部信息,可ctrl+C中斷
Nov  1 21:11:31 foundation0 dbus-daemon: dbus[940]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Nov  1 21:11:31 foundation0 systemd: Starting Hostname Service...
Nov  1 21:11:31 foundation0 dbus[940]: [system] Successfully activated service 'org.freedesktop.hostname1'
Nov  1 21:11:31 foundation0 systemd: Started Hostname Service.
Nov  1 21:11:31 foundation0 dbus-daemon: dbus[940]: [system] Successfully activated service 'org.freedesktop.hostname1'
Nov  1 21:15:31 foundation0 su: (to root) kiosk on pts/1
Nov  1 21:15:31 foundation0 dbus-daemon: dbus[940]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
Nov  1 21:15:31 foundation0 dbus[940]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
Nov  1 21:15:31 foundation0 dbus[940]: [system] Successfully activated service 'org.freedesktop.problems'
Nov  1 21:15:31 foundation0 dbus-daemon: dbus[940]: [system] Successfully activated service 'org.freedesktop.problems'

more和less的用法

more [options] file [...]

less [options] file

[root@foundation0 ~]# more /var/log/messages 
[root@foundation0 ~]# less /var/log/messages 

文件內容的統計、排序、過濾、截取

命令 作用
wc 統計文件行數等信息
sort 排序
uniq 去重
grep 過濾行
cut 截取列

wc指令用法

wc [OPTION]... [FILE]...

[root@stu15 ~]# wc /etc/resolv.conf -l  # -l統計行數 -w統計單詞數 -c統計字節數 -m統計字符數
3 /etc/resolv.conf

sort命令用法

sort [OPTION]... [FILE]...

[root@foundation0 ~]# sort -n -k 3 -t: /etc/passwd # 以冒號作爲分隔,以第三列爲排序標準,以數字從小到大進行排序
默認按照首字母 ASCII 碼
-n 按照數字大小排序
-u 剔除重複的行
-r 降序排列
-k 指定某一列
-t 分隔符

uniq用法(去除連續重複的行)

uniq [OPTION]... [INPUT [OUTPUT]]

[root@foundation0 ~]# uniq /tmp/test 
a
b

b


[root@foundation0 ~]# cat /tmp/test 
a
a
a
a
a
b

b

grep用法(過濾文本行)

grep [OPTIONS] ... [pattern] [file]...

[root@www ~]# grep jenny /etc/passwd
jenny:x:1006:1007::/home/jenny:/bin/bash

[root@www ~]# grep -v ^# /etc/zabbix/zabbix_agentd.conf 
# 剔除以#開頭的行,即爲剔除註釋行,-v爲反選
...

[root@www ~]# grep root -A 5 -B 5 /etc/passwd
# A代表截取到文本後X行
# B代表截取到文本前X行

[root@www ~]# grep -v ^$ /etc/zabbix/zabbix_agentd.conf  # 剔除空行

cut用法(截取文本列)

cut OPTION... [FILE]…

[root@www ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
...
# 截取以冒號分割的第一列字符
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章