1.mv
作用:將文件移動、文件重命名
語法: mv (選項) 源文件/目錄 目標文件/目錄
(1)將文件/目錄移動到當前目錄的新文件/目錄(也就是重命名操作)
這里我們mv了test.txt文件到當前目錄下當前并不存在的ln.txt文件,這種操作就是將test重命名了
(2)將文件/目錄移動到已經存在的目錄下(剪切操作)
這里我們利用mv將ln文件剪切移動到了d1目錄下
(3)將目錄移動到已經存在的目錄中,但是目錄中不存在指定目錄(剪切+重命名)
這里我們將dir目錄先剪切到了text目錄中,然后將dir重命名為d
2.cat
作用:查看目標文件的內容
語法: cat (選項) 文件
(1)將目標文件內容寫入到顯示器文件
我們先追加了一個new message到log文件,然后cat顯示文件內容
(2)打印時添加行號顯示
加一個-n就可以顯示行號
(3)打印時壓縮連續空行為一行
這里我們利用-s選項將原本有多行的連續空行壓縮為了一行
(4)對非空輸出行編號
這里是由四行空輸出行和十行非空輸出行構成的文件內容,我們利用-b就可以對非空輸出行進行編號,而不對空行進行編號
補充:tac命令
tac是把cat命令反過來了,所以他的作用也很好記,就是將文件內容倒著輸出
3.文件內容顯示的其他指令
?cat主要用于小文件/配置文件的打印
對于大文件(日志)我們有其他的命令負責顯示,之所以不再使用cat不是因為cat不能打印,而是cat的打印會刷屏,不方便查看具體數據信息
(1)more(不方便)
語法: more (選項) 文件名
作用:分段查看大文件內容
優勢:比起cat,他不會再進行刷屏,而是可以慢慢將所有文件內容顯示出來
劣勢:只能用回車鍵進行向下數據查看,無法上翻
(2)less(用于一行一行看的時候)
語法: less (選項) 文件名
作用:分段查看大文件內容
優勢:比起more只能向下查看,less支持上下頁面的查看,更加靈活
操作的寫入位置:在less末尾的“:”后面寫
操作1:q(quit:退出)
進入less查大文件內容后,如果想退出,直接按q即可
操作2:/
/主要用于查找指定內容
操作3:n
在使用/查找指定內容后,如果我們想跳轉到下一個同樣的內容,按一個n即可
(3)head
語法: head (選項) 文件名
作用:?用于打印從文件的開頭開始的若干行信息
選項1: -n(n是任意數值)
這里我們用-1,就把log文件的第一行數據給打印出來了
(4)tail
語法: tail (選項) 文件名
作用:用于打印從文件的末尾開始的若干行信息
選項和head一樣,作用改為了從倒數第n行開始輸出n行
這里我們看到用tail把倒數六行數據倒著輸出了
思考:如果我們想打印一段區間的數據,應該怎么做?
方法一:先用head將[0,right]的數據寫入臨時文件,然后從臨時文件用tail讀取[left,right]的區間數據
我們先將log文件的前10行輸出重定向到newlog文件中,然后再打印newlog的尾部6行即可
方法二:使用管道"|"一行指令實現目標
管道的左側為輸入端,輸入端進行了輸出重定向,重定向數據到管道文件中
管道右側位輸出端,輸出端進行了輸入重定向,將數據重定向到顯示器文件中
注意:如果管道有多段,前一段的輸出端就相當于下一段的輸入端了
4.時間相關的命令
?(1)date
語法: date +(選項)
作用:以自定義格式輸出時間信息
其中:
%Y:表示年? ? %m:表示月? ? %d:表示日? ? %H:表示時? ? %M:表示分? ? %S:表示秒
注意:中間的反斜杠\是轉義字符,負責將空格轉義打印到顯示器上
補充:時間戳
現在顯示的數字就是從1970年的午夜12點到現在所經過的秒數,而這個數字就叫時間戳,和日期不同的是,時間戳是全球同步的。
時間戳沒有轉化之前就是秒數
1.我們也可以將時間戳轉化為日期信息
通過-d選項我們就可以把時間戳轉化為具體的日期信息
2.查看北京時間的起始點
之前我們說起始點的時間是1970年1月1日的0點,但是這里卻是早上八點,這是為什么?
因為地球的自轉,所以地球上的不同地區被太陽照射的時間不是同步的,故不同的地區之間存在時差,這里我們把北京地區的時差加上之后,北京時間就可以同步到正確的時間戳上了。
(2)cal
語法:cal (選項)年份
作用:顯示指定年份的日歷
5.find
?語法:find? 所處目錄層級(選項)文件名
作用:用于指定目錄層級下開始查找文件
選項1:-name
-name的作用是讓我們可以指定需要查找的文件的名字
6.nano
?nano是一個用于修改文件內容的指令工具,它又叫文本編輯器。
語法:nano 文件名
修改方法:直接在內容中修改
保存修改:ctrl+o加enter
退出修改:ctrl+x
其余快捷鍵在底部顯示
7. grep
語法:grep (選項)字符串 查找文件名
功能:在指定文件中查找目標字符串,找到后打印有目標字符串的行
(1)不帶選項查找
我們先將內容重定向到test文件中,然后用grep查找指定字符,需要注意的是grep大小寫敏感,所以若查找A就沒有結果打印
(2)-i選項
加了-i選項后,我們的大小寫就被忽略了,既可以查找大寫的也可以查找小寫的
(3)-v選項
加了-v選項后,我們打印出來的行就是沒有指定字符串的行
比如上面,我們的查找策略就是找沒有b字符的行
(4)-n選項
讓輸出的行帶上行號?
8.top
語法:top
功能:以特定頻率查看系統進程和cpu占用等情況
退出方式:q
若不退出則一直運行
選項1:-d
-d可以指定我們的刷新頻率
選項2:-n
-n可以指定一共刷新的次數,若刷新次數達到-n指定的次數就直接退出
9.zip與unzip
zip:壓縮指令
語法:zip 壓縮后文件?待壓縮文件功能:將待壓縮文件壓縮到壓縮后文件指定路徑中
需要注意的是:
1.若不帶任何選項,壓縮的只有待壓縮文件本身,無論他是目錄還是文件。也就是說他是目錄的話,我們壓縮的就是空目錄
2.帶上-r選項,我們就可以對目錄的全部內容進行打包壓縮
unzip:解壓縮指令
語法:unzip 待解壓文件 解壓路徑功能:將文件解壓到指定目錄
這里我們使用unzip指令將d壓縮文件解壓縮到當前目錄下
?10.tar
(1)打包壓縮
語法:tar -czvf 文件名?待壓縮文件
功能:將文件壓縮到某個路徑
選項解釋:
1.-c:表示create一個文件2.-z:表示具有gzip屬性
3.-v:表示顯示壓縮的文件名、解壓的文件名
4.-f: 表示接檔名,且加了f選項,他后面不可以直接再接其他選項
補充:
文件檔名:主文件名+擴展名
擴展名中用tar一般是只對文件打包(不壓縮,僅僅將文件打包到一個文件中)
用tar.gz(可簡寫為tgz)表示對文件用gzip進行了壓縮
(2)解壓
語法:tar -xzvf 壓縮文件名 解壓縮路徑
功能:將文件壓縮到指定路徑
注意:tar和zip是兩種壓縮算法,他們只能解壓他們對應的壓縮文件,只能壓縮成他們各自的壓縮文件
11.bc
?語法:bc
功能:進行浮點型運算
程序不會自行結束,而是要使用quit手動終止程序
補充:
1.ctrl+c
如果我們在給鍵盤文件寫入數據的時候寫錯了,想終止寫入,我們可以用ctrl+c命令終止輸入
2.tab
tab的作用是進行命令的補全,如果再按一次enter鍵就會讓有相同前字符匹配的所有指令都顯示出來
3.ctrl+r
ctrl+r的作用是對歷史命令進行搜索,這里我們輸入t進行歷史命令搜索,可以發現之前寫過的以t開頭的命令
12.file
?功能:查看更詳細的文件信息
?語法: file 文件名
通過file我們知道了test.c為空文件,d文件為具有粘滯位的目錄文件。
13.體系結構查詢指令
(1)uname
語法: uname (選項)
功能: 查找硬件體系結構
若直接查詢只能查到是linux系統,用上-a選項就可以查看所有信息,此時我們就可以顯示硬件體系結構
(2)lsb_release?
語法:lsb_release (選項)功能:查找軟件體系結構
我們需要加-a選項才能查看具體的軟件體系結構配置
14.對操作系統的理解
?狹義上:linux的操作系統就只特指linux的內核
廣義上:linux的操作系統還包括外殼程序,甚至某些默認安裝軟件
圖示:
(1)什么是外殼程序?
外殼程序(命令行解釋器):就像shell一樣,主要負責將用戶輸入的命令翻譯給內核,并把內核的執行結果翻譯返回給用戶
(2)為什么需要有外殼程序?
1.為了保護操作系統:如果用戶輸入非法的指令,外殼程序這一層就可以直接截斷下來,而不會繼續傳遞給內核判斷2.為了方便用戶操作:若讓用戶直面內核程序,需要用戶付出很高的學習成本,不利于用戶上手
(3)操作系統主要通過管理軟硬件來達到優化用戶使用操作系統體驗的目的
圖示:
?
15.linux中的權限
1.linux的文件類型
對于windows系統,使用文件的后綴名來區分文件類型
就像這里,我們的代碼會產生很多不同的文件,而windows就是根據這些文件的后綴名來區分文件類型的
對于linux系統,使用文件的屬性列來區分文件類型
其中以d開頭的就是目錄,以-開頭的就是普通文件。
雖然說linux不以文件后綴名區分文件類型,但是這并不代表我們不被允許在linux系統中使用文件后綴名,因為文件后綴名還有一個用處就是可以幫助我們快速區分文件類型
文件后綴名可能會被用于linux系統的不同工具中,在這些工具中,會以文件后綴名做區分
這里我們以gcc工具為例:
gcc是一個用于編譯代碼的指令工具,這里我們是使用gcc將.cpp的代碼編譯出來
如果我們將代碼文件的后綴從.c改為其他后綴名,雖然linux系統仍然認為他是一個文件,但是gcc工具就不再認為他是一個.cpp文件,不再對它進行編譯
2.linux用戶
?在windows系統中,我們在開機的時候可以看到有切換賬號的選項,其實windows可以有多個用戶賬號和一個管理員賬號,這就是多用戶操作系統。
而linux也是多用戶操作系統,其中一個root管理員賬號和多個user普通用戶賬號
(1)linux中的用戶創建與銷毀
1.adduser:創建新用戶
2.passwd:設置密碼
3.userdel -r :銷毀用戶(2)將普通用戶轉賬號為root賬號(管理員才進行這個操作)
轉換為root賬號需要我們輸入root的賬號密碼,輸入失敗會提示輸入錯誤,輸入成功就將用戶轉化為root,但是此時的工作路徑仍然是普通用戶的路徑
我們輸入ctrl+d就可以退出root賬號回到普通用戶賬號
(3)將root賬號轉化為其他普通用戶
如果我們以普通用戶的身份想轉換成其他普通用戶身份,那么我們需要知道想轉換成的普通用戶的密碼才可以轉換,但是如果我們是root賬號,可以通過su指令直接轉化為任意普通用戶賬號。
此時的工作路徑仍然是root的
(4)su - 重新登錄賬號
前面的su命令只會改變操作人身份,而不會改變工作路徑。而su-則會直接進行重新登錄的操作,不僅改變操作者身份而且改變工作路徑
(5)普通用戶使用sudo直接用管理員級別權限進行操作
更正:不是user/bin,而是usr/bin
這里我們需要輸入的密碼不是root的密碼,而是普通用戶自己的密碼。
疑問1:為什么執行管理員權限操作不用輸入root的密碼?
因為有時候小組內成員需要執行管理員權限的操作,如果都交給管理員來做不現實,而如果我們將root密碼交給小組內成員又會導致權責不明確的現象(root賬號操作出現重大失誤無法追責),所以此時我們就可以讓root賬號給普通賬號授權,給他們進行管理員權限進行操作,這樣出現問題就可以溯源了
疑問二:為什么現在我們的普通用戶無法進行管理員權限的操作?
因為此時root賬號還沒有給lhc用戶授權
授權操作:
以root的賬號登錄,先用nano進入配置文件,然后找到權限授予位置,添加lhc用戶進入
這里我們就可以添加lhc用戶到授權區域,獲得和root一樣的操作權限
授權后的操作演示:
由于我們前面幾分鐘內輸入過lhc用戶密碼,所以此時我們就不用再重復輸入,直接執行管理員權限將test.txt從/usr/bin目錄中刪除
3.權限的理論理解
?文件權限 = 角色?+ 文件屬性(權限屬性)
簡單來說就是我們能利用某事物做一件事的前提是這個事物本身有這個功能,且我們的角色被允許做這件事
權限總的來說就是可不可以干某件事情。
接下來我們看看具體的文件屬性界面
一共分七部分:
第一部分是文件的讀寫執行權限分布-rw-rw-r--
第二部分是文件引用計數
1
第三部分是擁有者名字
lhc
第四部分是所屬組名字
lhc
第五部分是文件的大小
0
第六部分是文件創建日期
May 22 19:57
第七部分是文件名
text.txt
內容補充:
1.文件權限:rwx其中r是讀的權限,w是寫的權限,x是執行權限
其中x如果放開并不意味這這個文件一定可以執行,只是說我們允許這個文件執行,最終是否可以執行還是要看這個文件本身
2.職能域分類:
(1)擁有者:文件的創建者
(2)所屬組:創建者所在的工作組
(3)other:除了擁有者和所屬組之外的其他用戶
第一部分就是控制文件權限的部分,第一個占位符位置表示文件類型,是目錄還是普通文件
后面接著的三個占位符是擁有者的,然后接著三個是所屬組的,最后三個占位符是other用戶的。-表示沒有對應權限
4.權限的操作
4.1修改文件權限屬性方法一
?(1)對單個角色屬性的權限進行修改
指令:chmod
語法: chmod 角色+/-權限 文件名
角色:u表示擁有者,g表示所屬組,o表示其他用戶
權限: r/w/x(讀/寫/執行)
對擁有者權限進行修改
這里我們使用chmod指令給擁有者增加了文件可執行權限
對所屬組權限進行修改
這里我們使用chmod給test.c的所屬組權限增加了可執行
對other用戶權限進行修改
這里我們使用chmod給test.c的other用戶權限增加了可執行
(2)對多個角色權限進行修改
語法:chmod?角色+/-權限(多個之間用逗號隔開) 文件名
這里我們就將u,g,o的可執行權限收回了
(3)對所有角色權限進行修改
語法: chmod a+/-權限 文件名
a就是all的意思,也就是全部角色的替代。我們對a+/-權限就是對所有角色進行權限修改
注意:
1.root賬號可以無視權限限制
這里我們將test.c的w權限收回,但是我們現在是root賬號卻仍然可以寫入內容到test.c中,這說明root賬號可以無視權限限制
2.角色身份只會匹配一次
這里我們的擁有者只有讀的權限,所以我們進行寫入的時候就會被拒絕。不過我們的lhc用戶不僅是擁有者這個身份,他還是所屬組的成員,而所屬組是有寫入權限的,為什么我們還是無法寫入?
因為身份只會匹配一次,按照擁有者->所屬組->other的順序進行身份匹配,匹配成功了就不會再往后匹配了
4.2修改文件權限屬性方法二?
由于每個角色對應的權限rwx分別都只有兩種狀態,有/無,所以我們可以用二進制0/1來表示權限的狀態
eg:對于擁有者,它是rw-,此時r和w是有的用1表示,x是沒有的,用0表示。所以用二進制表示就是110
而如果我們都用二進制表示狀態會導致我們需要用九個位置的二進制數來表示權限狀態,而其實rwx最大的二進制表示就是111,也就是是轉成八進制的7,所以其實我們可以用一個八進制數表示一個角色的權限,三個角色就是三個八進制數即可
eg:u:rw-? ? ?g:r--? ? ?o:r--
此時我們的u就是110->6,g是100->4,o是100->4.所以最終就是644表示權限設置情況
接下來我們實際操作一次:
通過chmod 644我們確實把test.c的權限更改為了我們一開始假設的情況
4.3修改角色屬性
1.更改擁有者
?指令:chown
語法:chown 修改成的用戶名 文件名
功能:將對應文件的擁有者改為其他用戶
這里我們試圖將test.c文件傳遞給root賬號,但是這被拒絕了,因為普通用戶沒有轉角色屬性的權限。
疑問:為什么設計的時候不給普通用戶修改角色屬性的權限?
因為這涉及到分工責任,如果員工a寫爛了一個代碼文件,該文件導致公司服務器癱瘓,此時員工a若把文件的擁有者轉給員工b,那么此時員工b就應該要為這件事負責,員工a就把黑鍋甩給了員工b
root賬號/權限允許進行角色轉換:
(1)root賬號條件下進行轉換
這里我們用root賬號將test.c的擁有者從root改為了lhc
(2)root權限下進行轉換
這里我們用sudo來提權,將文件的擁有者改為了root
2.更改所屬組
?指令:chgrp
語法:chgrp 修改成的用戶名 文件名
功能:將對應文件的所屬組改為其他用戶
這里我們將test.c的所屬組從lhc改為了root
4.4目錄權限
?r:決定是否執行用戶要的查看文件的命令
w:決定用戶是否可以修改文件名,新建/刪除執行目錄下的文件
x:是否可以進入目錄
所以我們的目錄創建好之后默認帶上的權限就是都有x的。
普通文件默認權限:666
目錄文件默認權限:777
疑問:那么我們真正創建文件/目錄的時候為什么不是根據這個默認權限生成的?
因為我們還需要對默認權限進一步操作,將權限掩碼的擁有部分除去,而權限掩碼是用來增強默認生成的靈活性的,特殊情況下我們可能需要創建一堆特定權限要求的文件,所以我們用原來的默認權限和權限掩碼組合使用就可以達到目的權限掩碼的作用:可以將權限掩碼中出現的權限從默認權限中過濾掉,從而得到最終權限
權限掩碼查看指令:umask
第一位可以先不看,后面三位就是權限的八進制表示
過濾方法:默認權限 & (~umask)
eg:
我們通過對umask取反然后再與默認權限按位與的計算方法就可以將權限掩碼的權限從默認權限中過濾掉
修改umask的方法:
語法: umask 要改成的權限
這里我們就將權限掩碼改為了007
對目錄的w權限的理解:
一個文件本身是否可被讀,寫,執行,取決于他的文件權限。而他是否可以被刪除和修改文件名取決于他所處的目錄是否有w權限。
一般來說,普通用戶的目錄都不允許其他用戶進入,也就是說普通用戶的目錄只有用戶自己和root可以進入
假設現在我們想實現多個用戶共享一個文件,我們可以怎么做?
首先我們一定不能把該目錄文件創建在任何一個普通用戶的家目錄下,因為普通用戶的家目錄只有root和用戶本身可以進入,無法實現共享功能。
1.利用root創建一個shared目錄文件,并把other權限的w和x打開,從而其他普通用戶都可以進入shared目錄進行文件操作。
2.此時雖然可以進行文件共享,但是可能會出現錯誤刪除或惡意刪除的情況,所有用戶都有對目錄下文件的新建和刪除權限。
3.此時我們可以使用粘滯位來限制普通用戶的刪除權限
粘滯位:當我們給目錄設置了粘滯位后,只有該文件的擁有者/root/目錄擁有者可以刪除該文件,其他用戶無權刪除。
演示粘滯位設置:
粘滯位設置后x就被替換為了t,此時就可以限制普通用戶的刪除權限了