Linux運維學習第一周總結
目錄
一、Linux的文件系統與目錄結構
二、shell的簡介
三、改變終端的顯示的用戶名、主機名前綴、目錄路徑後綴
四、當執行一條命令時的查找順序
五、使用shell腳本編寫自己的時間命令
六、文件的時間戳
七、文件的硬鏈接和軟連接
八、管道與輸入輸出重定向
九、練習題難點
十、總結
一、Linux的文件系統與目錄結構
在Linux中一切皆可以被看作是文件,文件和目錄被組織成一棵單根倒置樹,根在上,枝、幹、葉在下。如圖所示:
各級目錄簡介:
1. / 根目錄,位於目錄的最頂端,是所有文件和目錄的父目錄,其自身沒有父目錄。
2. /boot 引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader,grub)都存放於此目錄。
3. /bin 存放用戶基本命令,不能關聯至獨立分區,OS啟動就會用到的程序。
4. /sbin 存放管理類基本命令,不能關聯至獨立分區,OS啟動就會用到的程序。
5. /lib 啟動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)
6. /lib64 專用於x86_64系統上的輔助共享庫文件存放位置
7. /etc 配置文件目錄
8. /home/USERNAME 普通用戶家目錄
9. /root 管理員的家目錄
10. /media 便攜式移動設備掛載點
11. /mnt 臨時文件系統掛載點
12.
a) b: block device,隨機訪問
b) c: character device,線性訪問
13. /opt 第三方應用程序的安裝位置
14. /srv 系統上運行的服務用到的數據
15. /tmp 臨時文件存儲位置
16./usr: universal shared, read-only data
bin: 保證系統擁有完整功能而提供的應用程序
sbin:
lib:32位使用
lib64:只存在64位系統
include: C程序的頭文件(header files)
share:結構化獨立的數據,例如doc, man等
local:第三方應用程序的安裝位置
bin, sbin, lib, lib64, etc, share
17. /var: variable data files
cache: 應用程序緩存數據目錄
lib: 應用程序狀態信息數據
local:專用於為/usr/local下的應用程序存儲可變數據;
lock: 鎖文件 log: 日誌目錄及文件
opt: 專用於為/opt下的應用程序存儲可變數據;
run: 運行中的進程相關數據,通常用於存儲進程pid文件
spool: 應用程序數據池
tmp: 保存系統兩次重啟之間產生的臨時數據
18. /proc: 用於輸出內核與進程信息相關的虛擬文件系統
19. /sys:用於輸出當前系統上硬件設備相關信息虛擬文件系統
20. /selinux: security enhanced Linux,selinux相關的安全策 略等信息的存儲位置
二、shell的簡介
shell(計算機殼層)
在計算機科學中,Shell俗稱殼(用來區別於核),是指“提供使用者使用界面”的軟件(命令解析器)。它類似於DOS下的command.com和後來的cmd.exe。它接收用戶命令,然後調用相應的應用程序。同時它又是一種程序設計語言。作為命令語言,它交互式解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程序設計語言,它定義了各種變量和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。
三、改變終端的顯示的用戶名、主機名前綴、目錄路徑後綴
1. 使用echo $PS1查看當前的提示符格式,結果如圖:
2. 接下來改變主機名為\H,改變目錄路徑為\w,輸出結果:
可以看到用戶名顯示為全名,路徑名顯示為全部路徑
3.當用戶關閉並重啟虛擬機後,我們會發現,我們所修改保存的格式又變為了系統默認格式。那麽如何保證系統重啟後還能保持不變呢?接下來介紹一種方法來完成對格式的永久修改。
1) 使用vim命令對/etc目錄下的bashrc文件進行編輯,單擊i進入編輯模式。
2) 將PS1="\[\e[31m\][\u@\h \W]\\$\[\e[0m\] "粘貼到文件中的一行中,註意不要帶#號(#號為註釋符)
3) 單擊esc退出編輯模式,使用Shift+:並鍵入x進行保存退出。
4) 最後使用reboot命令重啟系統,查看修改是否成功。
四、當執行一條命令時的查找順序
當Linux執行一道命令時遵循著以下順序的查找過程:
1. 別名
2. 內部命令
3. 外部命令
1) hash
2) PATH
註釋:一般情況下,操作系統在開機運行時會預加載一部分命令在內存中,這部分命令大多為常用命令(如:ls、ceho),這些命令被稱為常用命令,在這些命令中,還有一部分命令被系統設置了別名(如:ls="ls --color=auto"),系統在查詢內部命令時會首先在別名裏尋找,如果找不到,才會尋找內部命令;當系統在內存中找不到與其匹配的內部命令,系統會在磁盤中尋找,此時首先會尋找系統hash過的命令,其次才是從PATH中從左至右一次尋找。
別名alias的使用方法:
alias 顯示所有的別名信息
alias 別名='command -選項 參數' 例如:
unalias 別名
unalias -a 取消所有別名
別名的保存 nano /etc/bashrc
顯示內部命令的使用方法enable:
enable 顯示所有已激活的內部命令
enable command 激活被禁用的內部命令
enable |wc -l 顯示激活中的內部命令的數量
enable -a 顯示所有的內部命令
enable -a |wc -l 顯示所有的內部命令的數量
enable -n 顯示所有被禁用的內部命令
enable -n command 禁用某個內部命令
五、使用shell腳本編寫自己的時間命令
首先,我們學習一下顯示當前時間的命令date
date
+%Y 年
+%m 月
+%d 日
+%H 時
+%M 分
+%S 秒
+%w 星期
+%F 年-月-日
+%T 時:分:秒
單純運行date命令,顯示如下:
這樣的顯示很不符合我們的閱讀習慣,接下來我們自己編寫shell腳本執行自己的時間顯示方式:
1) 使用touch創建一個shell腳本riqi.sh
2) 用vim編輯riqi.sh腳本文件:輸入vim riqi.sh進入編輯模式,按i或者o進入編輯,在腳本中輸入內容後按esc返回,按住Shift+:按鍵,然後在:後面輸入x回車,完成編輯。
3) 用chmod增加riqi.sh的可執行權限,並檢驗其正確性:
4) 使用alias對其更改,並驗證,於是我們就有了自己的日期顯示命令了:
六、文件的時間戳
在文件系統中,數據只有兩種:數據與元數據,在元數據中存放著文件的權限、所屬人、所屬組和時間戳等,而時間戳又分為三類;
1) atime 訪問時間
2) mtime 文件數據修改時間
3) ctime 文件元數據修改時間
我們可以通過stat filename命令查看文件的元數據:
這裏的touch filename 當文件不存在時,則創建一個空文件,名為filename
當文件已存在時,則更新期時間戳
-a 僅更新atime,ctime
-m 僅更新mtime, ctime
touch filename 更新全部時間戳。
七、文件的硬鏈接和軟連接
在講硬鏈接和軟連接之前,首先了解什麽是節點(inode)
節點inode(index node)表中包含文件系統所有文件列表
一個節點 (索引節點)是在一個表項,包含有關文件的信息 ( 元數據 ),包括:
文件類型,權限,UID,GID
鏈接數(指向這個文件名路徑名稱個數)
該文件的大小和不同的時間戳
指向磁盤上文件的數據塊指針
有關文件的其他數據
硬鏈接
創建硬鏈接會增加額外的記錄項以引用文件
對應於同一文件系統上一個物理文件
每個目錄引用相同的inode號
創建時鏈接數遞增
刪除文件時:
rm命令遞減計數的鏈接
文件要存在,至少有一個鏈接數
當鏈接數為零時,該文件被刪除
不能跨越驅動器或分區
語法: ln filename [linkname ]
例如:在/etc目錄下的passwd文件的節點號是123,在/app目錄下創建的硬鏈接密碼的節點號同樣是123,那麽在相同節點號的情況下,passwd和mima在內存中儲存的是同一樣數據。
符號(或軟)鏈接
一個符號鏈接指向另一個文件
ls - l的 顯示鏈接的名稱和引用的文件
一個符號鏈接的內容是它引用文件的名稱
可以對目錄進行
可以跨分區
指向的是另一個文件的路徑;
其大小為指向的路徑字符串的長度;
不增加或減少目標文件inode的引用計數;
語法: ln -s filename [linkname]
註意:一般情況下,創建軟連接是采用相對地址,這樣可以避免在上級目錄更改時會發生地址不匹配的錯誤。但是要在創建軟連接的時候註意軟連接的作用對象是否時該目錄,如果不是,雖然會創建成功,但會發生軟鏈接報錯的現象。
八、管道與輸入輸出重定向
1. 輸入輸出重定向
> 正確輸出
2> 錯誤輸出
&> 全部輸出
文件不存在時,>和>> 都能創建新文件,文件已存在時 >表示覆蓋,>>表示追加
2>&1 把錯誤的結果轉成正確的結果
1>&2 把正確的結果轉成錯誤的結果
示例:用普通用戶查找/etc目錄下所有以.conf為結尾的文件,將權限錯誤無法查看的錯誤信息輸出到/app目錄下的error.txt文件中去:
查看error.txt文件中是否存放了錯誤信息:
2. 管道
2>&1 | 或 |& 將所有的結果傳遞給管道處理
echo youkongma |mail -s "yuema2" guanyu
示例:用liubei用戶向root發送郵件:
root用戶查看郵件:
九、練習題難點
1、只顯示/root下的隱藏文件和目錄
2、顯示/etc目錄下,文件名至少包含一個小寫字母和一個數字並以.conf結尾的文件或目錄
3、定義別名命令baketc,每天將/etc/目錄下所有文件,備份到/testdir獨立的子目錄下,並要求子目錄格式為 backupYYYY-mm-dd,備份過程可見
4、如何創建/testdir/dir2/x, /testdir/dir2/y,/testdir/dir2/x/a, /testdir/dir2/x/b
3、一個linux用戶給root發郵件,要求郵件標題為”help”,郵件正文如下:
Hello, I am 用戶名,The system version is here,please help me to check it ,thanks
操作系統版本信息
登陸root帳號查看郵件是否發送成功:
5、計算1+2+3+..+99+100的總和 提示:echo 1+2 |bc echo {1..100}
十、總結
本周是第一次學習Linux運維相關知識,一周下來的學習量很大,只能挑一些認為是重點的內容和概念寫在博客裏,有些內容如:安裝虛擬機、man命令的用法、cp命令的運行機制等並沒有寫在博客裏,所以有很多欠缺的地方。以後會盡量多寫一些內容放在這裏,就這樣了。
Linux運維學習第一周總結