1.常見指令及權限理解
- 初始Linux作業系統
- 初識shell命令 ,了解若干背景知識,
- 使用常用Linux命令
- 了解Linux權限概念與思想,能深度理解“權限”
- 初步了解Linux 目錄結構含義
文章目錄
- 1.常見指令及權限理解
- 1.linux系統及計算機背景
- 2.使用XShell遠程登錄linux
- 2.1XShell下的復制粘貼
- 3.linux下的指令
- 3.1 pwd指令與whoami指令
- 3.2 ls指令
- 3.3cd指令
- 3.4touch指令
- 3.5mkdir指令(重要)
- 3.6 rmdir指令 && rm 指令(重要)
- 3.7man指令(重要)
- 3.8 echo指令與cat指令
- 3.9 cp指令(重要)
- 3.10 mv 指令(重要)
- 3.11 cat指令
- 3.12 more指令
- 3.13less指令(重要)
- 3.14head指令
- 3.15tail指令
- 3.16時間相關的命令
- 3.17cal(日歷指令)
- 3.18find指令:(非常重要)
- 3.19which指令與whereis及(alias)
- 3.20.grep指令
- 3.20.1grep的介紹
- 3.20.2grep的應用場景
- 3.21 zip/unzip指令
- 3.22 tar指令(重要):打包/解包,,不打開它,直接看內容
- 3.23bc指令(計算器)
- 3.24.uname –r指令
- 3.25常見的熱鍵
- 3.25.1 ctrl+C
- 3.25.2 tab
- 3.25.3 ctrl+D
- 3.26關機
- 3.27擴展命令
- 3.28file指令
- 4.指令的選擇和比較
- 4.1 cat vs (more and less)
- 4.2find vs which
- 4.3文本過濾
- 5.Linux權限的概念
- 5.1 Linux權限管理
- 5.1.1檔案訪問者的分類(人)
- 5.1.2檔案型別和訪問權限(事物屬性)
- 5.1.3檔案權限值的表示方法
- 5.1.4檔案訪問權限的相關設定
- 5.1.5檔案擁有者及檔案所屬組的改變
- 5.1.6目錄粘滯位
- 5.1.7 檔案和目錄創建的初始權限(掩碼)
- 6.shell命令及運行原理
- 7.常見面試題
1.linux系統及計算機背景
- linux:開源(免費)–>更穩定和高效
- OS:“管理”的軟體,主要管理:軟體+硬體
- 普通用戶和root用戶(只有一個):普通用戶不能叫做root,普通用戶的密碼不要和root一樣
- 命令列方式vs圖形界面方式
- 歷史上為了計算導彈彈道軌道,發明了計算機,埃尼阿克
- 計算機->人->( 人(資料),計算機,內部運算,運算結果給人 )[人->計算機->人:互動的程序]
- 鍵盤 vs 滑鼠 :鍵盤和滑鼠哪個先有?打字機->(早期鍵盤)->鍵盤:只能用鍵盤互動,所以只能通過輸入命令的方式進行計算機資料互動,時間久了,就有了命令列的互動方式,
- 為什么滑鼠會存在?相比較鍵盤,更符合人性,所見既所得(在商業上,注定需要的),圖形化界面的產生,
- 命令列(以鍵盤為代表) vs 圖形化界面(以滑鼠為代表)->手指->語音->意識,因為鍵盤更前期,因此命令列越靠近底層,越后期封裝得越厲害,
2.使用XShell遠程登錄linux
2.1XShell下的復制粘貼
復制:ctrl+insert(有些需要配合fn)
粘貼:shift+insert
3.linux下的指令
centos和ubuntu的安裝命令
yum install -y xxx
sudo apt-get install xxx
3.1 pwd指令與whoami指令
語法:pwd
功能:顯示用戶當前所在的目錄
剛登陸時用戶進入作業目錄
[root@VM-12-8-centos ~]# pwd
/root
普通用戶:/home/username
root用戶:/root
語法:whoami
功能:顯示當前用戶
3.2 ls指令
- ls指令
語法: ls [選項] [目錄或檔案]
功能:對于目錄,該命令列出該目錄下的所有子目錄與檔案,對于檔案,將列出檔案名以及其他資訊
常用選項:
- -a 列出目錄下的所有檔案,包括以 . 開頭的隱含檔案(以.開頭一般稱為隱藏檔案),
- -d 將目錄象檔案一樣顯示,而不是顯示其下的檔案, 如:ls –d 指定目錄
- -i 輸出檔案的 i 節點的索引資訊, 如 ls –ai 指定檔案
- -k 以 k 位元組的形式表示檔案的大小,
- ls –alk 指定檔案 -l 列出檔案的詳細資訊,
- -n 用數字的 UID,GID 代替名稱, (介紹 UID, GID)
- -F 在每個檔案名后附上一個字符以說明該檔案的型別,“*”表示可執行的普通檔案;“/”表示目錄;“@”表 示符號鏈接;“|”表示FIFOs;“=”表示套接字(sockets),(目錄型別識別)
- -r 對目錄反向排序,
- -t 以時間排序,
- -s 在l檔案名后輸出該檔案的大小,(大小排序,如何找到目錄下最大的檔案)
- -R 列出所有子目錄下的檔案,(遞回)
- -1 一行只輸出一個檔案,
常見的選項 -l,-a,
注意選項是可以組合的,可以-al,也可以-a -l,推薦前者,方便,



-
在linux中,以 . 開頭的檔案叫做隱藏檔案
- 空檔案夾中也有.和…兩個
-
. 是當前目錄
cd .
./a.out # ./:執行當前目錄下的a.out
-
… 是上級目錄
-
pwd cd .. # cd..:回退到上級目錄 pwd -

-
-
/是根目錄(根目錄是樹形結構)

- 所有的葉子節點是普通檔案

-
執行一個檔案的方式
-
絕對路徑
-
/home/ycb/test/a.out #從/開始,絕對路徑 -
只有一個,不容易失效
-
從葉子到根只有一條路徑,反過來從根到該葉子也只有這一條路徑,
-
-
相對路徑
-
../test/a.out #相對路徑 -
相對路徑可以有多種,容易失效
-
-
- 基本上,所有的作業系統檔案管理,都采用的是,樹狀結構
- 一般絕對路徑,我們在組態檔中使用的最多(因為不論組態檔在哪里,都是有效的)
3.3cd指令

Linux系統中,磁盤上的檔案和目錄被組成一棵目錄樹,每個節點都是目錄或檔案,
語法:cd 目錄名
功能:改變作業目錄,將當前作業目錄改變到指定的目錄下,
舉例:
cd .. #: 回傳上級目錄
cd /home/litao/linux/ #: 絕對路徑
cd ../day02/ #: 相對路徑
cd ~ #:進入用戶家目
cd - #:回傳最近訪問目錄
-
cd的快捷方式
-
~主作業目錄
cd ~ #:等價 cd /home/ycb, ~保存的是當前用戶的主作業目錄 -
cd - 回到最近(上次)在的路徑
- 進行多檔案操作切換的時候常用


-
3.4touch指令
語法:touch [選項]… 檔案…
功能:touch命令引數可更改檔案或目錄的日期時間,包括存取時間和更改時間,或者新建一個不存在的檔案,
touch只用來創建普通檔案,常用來創建文本檔案
常用選項:
- -a 或–time=atime或–time=access或–time=use只更改存取時間,
- -c 或–no-create 不建立任何檔案,
- -d 使用指定的日期時間,而非現在的時間,
- -f 此引數將忽略不予處理,僅負責解決BSD版本touch指令的兼容性問題,
- -m 或–time=mtime或–time=modify 只更改變動時間,
- -r 把指定檔案或目錄的日期時間,統統設成和參考檔案或目錄的日期時間相同,
- -t 使用指定的日期時間,而非現在的時間,
- 修改檔案創建時間
- 調研Access,Modify,Change三個時間

-
Access time表示檔案最后一次被訪問的時間,
-
Modify time表示檔案最后一次被修改的時間,
-
Change time表示對檔案權限的最后一次修改的時間,
使用cat進行檔案的訪問,我們發現只有Access time發生了改變,
對檔案內容進行更改會對Modify time 改變,
對檔案的權限進行修改,我們會發現只有change time發生了改變,
3.5mkdir指令(重要)
語法:mkdir [選項] dirname…
功能:在當前目錄下創建一個名為 “dirname”的目錄
常用選項:
- -p, --parents 可以是一個路徑名稱,此時若路徑中的某些目錄尚不存在,加上此選項后,系統將自動建立 好那些尚不存在的目錄,即一次可以建立多個目錄
舉例:
mkdir –p test/test1 #: 遞回建立多個目錄
- 問題:如果在win下創建一個空檔案,這個檔案占不占磁盤空間
占用,
檔案=檔案的內容+屬性(是資料嗎?是)
-
ls -l (ll)
- 顯示的是檔案屬性
-
cat xxx
- 顯示的是檔案內容
-
問題:檔案的類別是檔案的屬性嗎?是,要被保存,
win vs linux 保存檔案類別的方式有差別 :
-
win:通過檔案后綴區分檔案型別
-
linux:檔案型別和檔案后綴沒有直接關系,但是我們依舊保留這種做法,為了照顧人的習慣,有一些特殊情況,寫C的gcc只識別.c
-
那么linux以什么區分檔案型別呢?
-
ls -al d #: 目錄 - #:檔案 -

-
-
一次創建一串目錄
-
mkdir -p test2/test3/test4/file.c -

-
-
顯示目錄結構
-
tree . -

-
3.6 rmdir指令 && rm 指令(重要)
rmdir是一個與mkdir相對應的命令,
mkdir是建立目錄,而rmdir是洗掉命令,
- mkdir
語法:rmdir [-p] [dirName]
適用物件:具有當前目錄操作權限的所有使用者
功能:洗掉空目錄
常用選項:
- -p 當子目錄被洗掉后如果父目錄也變成空目錄的話,就連帶父目錄一起洗掉
rm命令可以同時洗掉檔案或目錄
- mkdir
語法:rm [-f-i-r-v] [dirName/dir]
適用物件:所有使用者
功能:洗掉檔案或目錄
注意:Linux下是沒有回收站的
常用選項:
- -f 即使檔案屬性為只讀(即寫保護),亦直接洗掉 (f-force)
- -i 洗掉前逐一詢問確認
- -r 洗掉目錄及其下所有檔案 (-r是遞回)
經典操作:刪庫到跑路
- rm -rf / #從目錄開始洗掉所有檔案

3.7man指令(重要)
Linux的命令有很多引數,我們不可能全記住,我們可以通過查看聯機手冊獲取幫助,訪問Linux手冊頁的命令是 man 語法: man [選項] 命令
常用選項:
- -k 根據關鍵字搜索聯機幫助
- num 只在第num章節找
- -a 將所有章節的都顯示出來,比如 man printf 它預設從第一章開始搜索,知道就停止,用a選項,當按 下q退出,他會繼續往后面搜索,直到所有章節都搜索完畢, 解釋一下man手冊分為8章
- 1 是普通的命令
- 2 是系統呼叫,如open,write之類的(通過這個,至少可以很方便的查到呼叫這個函式,需要加什么頭檔案)
- 3 是庫函式,如printf,fread
- 4是特殊檔案,也就是/dev下的各種設備檔案
- 5 是指檔案的格式,比如passwd, 就會說明這個檔案中各個欄位的含義
- 6 是給游戲留的,由各個游戲自己定義
- 7 是附件還有一些變數,比如向environ這種全域變數在這里就有說明
- 8 是系統管理用的命令,這些命令只能由root使用,如ifconfig
- 特別的,man man 詢問man這個命令
3.8 echo指令與cat指令
- echo
語法: echo xxxx/“xxxxx”
功能:默認將字串輸出到stdout,可以重定向,
echo hello linux # 將后續字串,顯示到顯示幕中
echo "hello linux"
echo "hello linux" > test.txt# 輸出重定向,本來應該顯示到顯示幕的內容,寫入到檔案中
cat test.txt # 把檔案的內容顯示出來

-
那么cat和echo有什么區別呢?
-
同時echo作為寫入存在覆寫和追加的區別
-
[ycb@VM-12-8-centos ~]$ echo "hello linux" >test.c [ycb@VM-12-8-centos ~]$ echo "hello linux" >test.c [ycb@VM-12-8-centos ~]$ echo "hello linux" >test.c [ycb@VM-12-8-centos ~]$ echo "hello linux" >test.c [ycb@VM-12-8-centos ~]$ cat test.c -

-
[ycb@VM-12-8-centos ~]$ echo "hello linux" >> test.c #追加重定向 [ycb@VM-12-8-centos ~]$ echo "hello linux" >> test.c [ycb@VM-12-8-centos ~]$ echo "hello linux" >> test.c -

-
3.9 cp指令(重要)
含義:copy and paste
語法:cp [選項] 源檔案或目錄 目標檔案或目錄
功能: 復制檔案或目錄
說明: cp指令用于復制檔案或目錄,如同時指定兩個以上的檔案或目錄,且最后的目的地是一個已經存在的目錄, 則它會把前面指定的所有檔案或目錄復制到此目錄中,若同時指定多個檔案或目錄,而最后的目的地并非一個已存在的目錄,則會出現錯誤信
常用選項:
- -f 或 --force 強行復制檔案或目錄, 不論目的檔案或目錄是否已經存在
- -i 或 --interactive 覆寫檔案之前先詢問用戶
- -r遞回處理,將指定目錄下的檔案與子目錄一并處理,若源檔案或目錄的形態,不屬于目錄或符號鏈接,則一律視為普通檔案處理
- -R 或 --recursive遞回處理,將指定目錄下的檔案及子目錄一并處理
- 拷貝到當前目錄,同一個目錄不能有兩個同名檔案
cp test.c .

cp test.c my.test.c


- 將檔案拷貝到其他目錄(可以絕對路徑|可以相對路徑)
cp test.c ../

-
cp指令默認是拷貝普通檔案,拷貝目錄如何處理呢
-
由于linux存盤是樹形結構,所以可以遞回
-
cp -r ycb ycb2 cp -rf ycb ycb2 # -f 是為了防止詢問 -

-
3.10 mv 指令(重要)
mv命令是move的縮寫,可以用來移動檔案或者將檔案改名(move (rename) files),是Linux系統下常用的命令,經常用來備份檔案或者目錄,
語法: mv [選項] 源檔案或目錄 目標檔案或目錄
功能:
- 視mv命令中第二個引數型別的不同(是目標檔案還是目標目錄),mv命令將檔案重命名或將其移至一個新的 目錄中,
- 當第二個引數型別是檔案時,mv命令完成檔案重命名,此時,源檔案只能有一個(也可以是源目錄名),它將所給的源檔案或目錄重命名為給定的目標檔案名,
- 當第二個引數是已存在的目錄名稱時,源檔案或目錄引數可以有多個,mv命令將各引數指定的源檔案均移至目標目錄中
常用選項:
- f :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆寫
- -i :若目標檔案 (destination) 已經存在時,就會詢問是否覆寫!
- 對檔案進行重命名
mv my.c zzz.c

-
對檔案或目錄進行移動(類似win下的剪切)
-
mv test.c ycb2 -

-

-
-
shell腳本將rm修改為mv創建垃圾桶
-
#將rm改造成mv vim ~/.bashrc #修改這個檔案 mkdir -p ~/.trash alias rm=trash alias ur=undelfile undelfile() { mv -i ~/.trash/\$@ ./ } trash() { mv $@ ~/.trash/ }
-
3.11 cat指令
- cat
語法:cat [選項] [檔案]
功能: 查看目標檔案的內容
常用選項:
- -b 對非空輸出行編號
- -n 對輸出的所有行編號
- -s 不輸出多行空行
- 檔案正序輸出

- 檔案反序輸出

count=0; while [ $count -le 10 ]; do echo "hello $count"; let count++;done >file.txt


3.12 more指令
語法:more [選項] [檔案]
功能:more命令,功能類似 cat
常用選項:
- -n 對輸出的所有行編號
- q 退出more
實際中我們想看一個檔案中的一些內容,使用cat會刷屏,所以需要more指令一行行看,
count=0; while [ $count -le 1000 ]; do echo "hello $count"; let count++;done >file.txt
- 只能按回車到下一行
- 直接到某一行輸入 / x 行

/200


3.13less指令(重要)
less和more的功能相似,但是less的功能更強大,
- less 工具也是對檔案或其它輸出進行分頁顯示的工具,應該說是linux正統查看檔案內容的工具,功能極其強大,
- less 的用法比起 more 更加的有彈性,在 more 的時候,我們并沒有辦法向前面翻, 只能往后面看
- 但若使用了 less 時,就可以使用 [pageup] [pagedown] 等按鍵的功能來往前往后翻看檔案,更容易用來查看一個檔案的內容!
- 除此之外,在 less 里頭可以擁有更多的搜索功能,不止可以向下搜,也可以向上搜,
語法: less [引數] 檔案 功能:
less與more類似,但使用less可以隨意瀏覽檔案,而more僅能向前移動,卻不能向后移動,而且less在查看之前 不會加載整個檔案,
選項:
- -i 忽略搜索時的大小寫
- -N 顯示每行的行號
- /字串:向下搜索“字串”的功能
- ?字串:向上搜索“字串”的功能
- n:重復前一個搜索(與 / 或 ? 有關)
- N:反向重復前一個搜索(與 / 或 ? 有關)
- q:quit
3.14head指令
head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的 開頭至標準輸出中,而 tail 想當然就是看檔案的結尾,
語法: head [引數]… [檔案]…
功能: head 用來顯示檔案的開頭至標準輸出中,默認head命令列印其相應檔案的開頭10行,
選項:
- -n<行數> 顯示的天數
實體:
[root@VM-12-8-centos ~]# head -20 file.txt

3.15tail指令
tail 命令從指定點開始將檔案寫到標準輸出.使用tail命令的-f選項可以方便的查閱正在改變的日志檔案,tail - f filename會把filename里最尾部的內容顯示在螢屏上,并且不但重繪,使你看到最新的檔案內容.
語法: tail[必要引數] [選擇引數] [檔案]
功能: 用于顯示指定檔案末尾內容,不指定檔案時,作為輸入資訊進行處理,常用查看日志檔案,
選項:
- -f 回圈讀取
- -n<行數> 顯示行數
舉例(簡單講解重定向和管道):
[root@VM-12-8-centos ~]# tail -20 file.txt

-
如何拿一段檔案中的中間的某10行呢?
-
做法一
-
head -5010 file.txt > tmp.txt tail -10 tmp.txt -
缺陷:形成臨時檔案且需要多個命令
-
-
做法二
-
head -5010 file.txt | tail -10 -
"|"叫做管道,它的作用是把前面命令的輸出當作下一個命令的輸入
-

-
-
3.16時間相關的命令
-
date顯示
-
date 指定格式顯示時間: date +%Y:%m:%d date 用法:date [OPTION]… [+FORMAT]
-
如果默認的話顯示:
-
-
1.在顯示方面,使用者可以設定欲顯示的格式,格式設定為一個加號后接數個標記,其中常用的標記串列如下:
| 引數 | 顯示格式 |
|---|---|
| %H | 小時(00…23) |
| %M | 分鐘(00…59) |
| %S | 秒(00…61) |
| %X | 相當于%H:%M:%S |
| %d | 日(01…31) |
| %m | 月份(01…12) |
| %Y | 完整年份(0000…9999) |
| %F | 相當于%Y-%m-%d |
2.在設定時間方面
- date -s //設定當前時間,只有root權限才能設定,其他只能查看,
- date -s 20080523 //設定成20080523,這樣會把具體時間設定成空00:00:00
- date -s 01:01:01 //設定具體時間,不會對日期做更改
- date -s “01:01:01 2008-05-23″ //這樣可以設定全部時間
- date -s “01:01:01 20080523″ //這樣可以設定全部時間
- date -s “2008-05-23 01:01:01″ //這樣可以設定全部時間
3.時間戳
-
時間->時間戳:date +%s
- 從1970年1月1日到現在的秒數
- 時間戳通常在日志中使用
-
時間戳->時間:date -d @1635166510
- 將時間戳轉化成時間
- 將時間戳轉化成時間
-
Unix時間戳(英文為Unix epoch, Unix time, POSIX time 或 Unix timestamp)是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒,
3.17cal(日歷指令)
cal命令可以用來顯示公歷(陽歷)日歷,公歷是現在國際通用的歷法,又稱格列歷,通稱陽歷,“陽歷”又名“太陽歷”,系以地球繞行太陽一周為一年,為西方各國所通用,故又名“西歷”,
命令格式: cal [引數] [月份] [年份]
功能: 用于查看日歷等時間資訊,如只有一個引數,則表示年份(1-9999),如有兩個引數,則表示月份和年份,
常用選項:
- -3 顯示系統前一個月,當前月,下一個月的月歷
- -j 顯示在當年中的第幾天(一年日期按天算,從1月1號算起,默認顯示當前月在一年中的天數)
- -y 顯示當前年份的日歷
舉例:
Cal -y 2021



3.18find指令:(非常重要)
- Linux下find命令在目錄結構中搜索檔案,并執行指定的操作,
- Linux下find命令提供了相當多的查找條件,功能很強大,由于find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來了解一下,
- 即使系統中含有網路檔案系統( NFS),find命令在該檔案系統中同樣有效,只你具有相應的權限,
- 在運行一個非常消耗資源的find命令時,很多人都傾向于把它放在后臺執行,因為遍歷一個大的檔案系統可能會花費很長的時間(這里是指30G位元組以上的檔案系統),
語法: find pathname -options
功能: 用于在檔案樹種查找檔案,并作出相應的處理(可能訪問磁盤)
常用選項:
- -name 按照檔案名查找檔案
舉例:
- 默認從當前目錄下去查找
[root@VM-12-8-centos ~]# find -name test.txt

-
選定特定目錄下去找
-
[root@VM-12-8-centos ~]# find test2 -name test.txt -

-
-
按目錄找
-
[root@VM-12-8-centos ~]# find ./ -type d -

-
目前先掌握根據名字找,后面碰到按什么找就積累在這里,
推薦appstore上的一個Commands 軟體
3.19which指令與whereis及(alias)
其實linux下的命令幾乎是用C,或者py寫的,
其原理和我們自己用vim寫好的gcc編譯好生成的可執行程式運行是一個道理,
linux下的命令也是個可執行程式,
which指令是查找任何運行的命令所在的目錄,



- 這里的alias是別名,使用ls的時候就是使用后面單引號內的指令,
alias myls='ls -al';
# 這樣我們用myls就是后面的指令了,
-
whereis找系統中包含要找的關鍵字的路徑
-
[root@VM-12-8-centos ~]# whereis ls -

-
應用:以后裝軟體完裝的位置在哪里
-
3.20.grep指令
3.20.1grep的介紹
grep參考檔案
語法: grep [選項] 搜尋字串 檔案
功能: 在檔案中搜索字串,將找到的行列印出來
- 過濾的時候以行為基本單位
常用選項:
- -i:忽略大小寫的不同,所以大小寫視為相同
- -n:順便輸出行號
- -v:反向選擇,也即顯示出沒有‘搜尋字串’內容的那一行
舉例:
搜索檔案中包含999的行
[root@VM-12-8-centos ~]# grep '99' file.txt

日志中搜索Error的行
[root@VM-12-8-centos ~]# grep 'Error' file.txt


選項功能的演示:
[root@VM-12-8-centos ~]# grep -n 'main' mycmd.c

[root@VM-12-8-centos ~]# grep -v -n 'main' mycmd.c

3.20.2grep的應用場景
過濾日志,一般性的文本處理

3.21 zip/unzip指令
語法: zip 壓縮檔案.zip 目錄或檔案
功能: 將目錄或檔案壓縮成zip格式
常用選項:
-r #遞回處理,將指定目錄下的所有檔案和子目錄一并處理
舉例:
將test2目錄壓縮:zip test2.zip test2/* # 這個*是通配符,不用的話只打包目錄,
解壓到tmp目錄:unzip test2.zip -d ./tmp # -d 是directory的意思

3.22 tar指令(重要):打包/解包,,不打開它,直接看內容
tar [-cxtzjvf] 檔案與目錄 … 引數:
- -c :建立一個壓縮檔案的引數指令(create 的意思);
- -x :解開一個壓縮檔案的引數指令!
- -t :查看 tarfile 里面的檔案!
- -z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?
- -j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
- -v :壓縮的程序中顯示檔案!這個常用,但不建議用在背景執行程序!
- -f :使用檔案名,請留意,在 f 之后要立即接檔案名!不要再加引數!
- -C : 解壓到指定目錄
[root@VM-12-8-centos ~]# tar -czf ycb2.tgz ycb2

[root@VM-12-8-centos ~]# tar -xzf ycb2.tgz (-C test)

案例:
范例一:將整個 /etc 目錄下的檔案全部打包成為 `/tmp/etc.tar`
[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==僅打包,不壓縮!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 壓縮
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 壓縮
特別注意,在引數 f 之后的檔案檔名是自己取的,我們習慣上都用 .tar 來作為辨識,
如果加 z 引數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file ~
如果加 j 引數,則以 .tar.bz2 來作為附檔名啊~
上述指令在執行的時候,會顯示一個警告訊息:
『`tar: Removing leading `/" from member names`』那是關於絕對路徑的特殊設定,
范例二:查閱上述 /tmp/etc.tar.gz 檔案內有哪些檔案?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
由於我們使用 gzip 壓縮,所以要查閱該 tar file 內的檔案時,就得要加上 z 這個引數了!這很重要的!
范例三:將 /tmp/etc.tar.gz 檔案解壓縮在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個范例來說,
我先將作業目錄變換到 /usr/local/src 底下,并且解開 /tmp/etc.tar.gz ,
則解開的目錄會在 /usr/local/src/etc 呢!另外,如果您進入 /usr/local/src/etc
則會發現,該目錄下的檔案屬性與 /etc/ 可能會有所不同喔!
范例四:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
我可以透過 tar -ztvf 來查閱 tarfile 內的檔案名稱,如果單只要一個檔案,
就可以透過這個方式來下達!注意到! etc.tar.gz 內的根目錄 / 是被拿掉了!
范例五:將 /etc/ 內的所有檔案備份下來,并且保存其權限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
這個 -p 的屬性是很重要的,尤其是當您要保留原本檔案的屬性時!
范例六:在 /home 當中,比 2005/06/01 新的檔案才備份
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home
范例七:我要備份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:將 /etc/ 打包后直接解開在 /tmp 底下,而不產生檔案!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的!
要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~
這分別代表 standard output, standard input 與管線命令啦!
3.23bc指令(計算器)
bc命令可以很方便的進行浮點運算
用例:
[root@VM-12-8-centos ~]# bc

[root@VM-12-8-centos ~]# echo "1+2+4+6+8" | bc

3.24.uname –r指令
語法:uname [選項]
功能: uname用來獲取電腦和作業系統的相關資訊,
補充說明:uname可顯示linux主機所用的作業系統的版本、硬體的名稱等基本資訊
常用選項:
- -a或–all 詳細輸出所有資訊,依次為內核名稱,主機名,內核版本號,內核版本,硬體名,處理器型別,硬體平臺型別,作業系統名稱
- -r 內核版本(面試問的最多)

3.25常見的熱鍵
3.25.1 ctrl+C
讓當前的程式停掉
3.25.2 tab
具有命令補全和檔案補齊的功能
3.25.3 ctrl+D
切換用戶;另外它也可以用來取代exit
3.26關機
語法:shutdown [選項] ** 常見選項:**
- -h :將系統的服務停掉后,立即關機
- -r : 在將系統的服務停掉之后就重新啟動
- -t sec: -t 后面加秒數,即幾秒之后關機
云服務器沒事別關機,
3.27擴展命令
◆ 安裝和登錄命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;
◆ 檔案處理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
◆ 系統管理相關命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
◆ 網路操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup;
◆ 系統安全相關命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;
◆ 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode,
3.28file指令
功能說明:辨識檔案型別,
語法:file [選項] 檔案或目錄…
常用選項:
- -c 詳細顯示指令執行程序,便于排錯或分析程式執行的情形,
- -z 嘗試去解讀壓縮檔案的內容,
舉例:

4.指令的選擇和比較
4.1 cat vs (more and less)
- 如果檔案內容有多行,建議使用less,如果檔案內容較少,可以直接使用cat(more)
- 常見的會用來查看代碼,或者日志
4.2find vs which
- find是能真正做到在任何一個路徑下做真實的查找
- which最常用的是去找特定一條命令在哪里,
4.3文本過濾
前面的學習中有文本過濾的兩種方式:
分別是直接grep和管道方式,
grep '99' file.txt
cat file.txt | grep '99'
一般情況下使用命令少的方式就行,特殊情況下使用第二種方式,
5.Linux權限的概念
linux下有兩種用戶:超級用戶(root)、普通用戶
- 超級用戶:可以再linux系統下做任何事情,不受限制
- 普通用戶:在linux下做有限的事情,
- 超級用戶的命令提示符是“#”,普通用戶的命令提示符是“$”,
命令:su [用戶名]
功能:切換用戶,
例如,要從root用戶切換到普通用戶user,則使用 su user,
要從普通用戶user切換到root用戶則使用 su root(root可以省略),此時系統會提示輸入root用戶的口令,
5.1 Linux權限管理
權限:一個事情是否能被特定的人做(執行,完成,擁有…)
人:自然人
事物屬性:檔案(rwx),vip電影(看,不能看)
5.1.1檔案訪問者的分類(人)
這里先聚焦在檔案:
人:擁有者(user),所屬組(group),其他人(other)
事物屬性:檔案:讀(w),寫?,執行(x)
other只要不是擁有者和所屬組都是other,所屬組是為了團隊的協作和不同團隊之間的隔離,
一般情況新建一個用戶該用戶自成一組,
5.1.2檔案型別和訪問權限(事物屬性)
-
檔案型別
-
d:檔案夾 -:普通檔案(源代碼,圖片,動靜態庫,可執行程式) l:軟鏈接(類似Windows的快捷方式) b:塊設備檔案(例如硬碟、光驅等) p:管道檔案 c:字符設備檔案(例如螢屏等串口設備) s:套介面檔案
-

中間的數字是連接數
-
基本權限
-
.讀(r/4):Read對檔案而言,具有讀取檔案內容的權限;對目錄來說,具有瀏覽該目錄資訊的權限 ii.寫(w/2):Write對檔案而言,具有修改檔案內容的權限;對目錄來說具有創建洗掉移動目錄內檔案的權限 iii.執行(x/1):execute對檔案而言,具有執行檔案的權限;對目錄來說,具有進入目錄的權限 iv.“—”表示不具有該項權限
-
-
所屬組

-
兩種用戶和擁有者(u),所屬組(g),其他用戶并不沖突
-
group權限設定是為了組內協作,組間進行權限控制,
-
檔案權限三個為一組,第一組對應的是擁有者,第二組對應的是所屬組,第三組對應的其他人,
5.1.3檔案權限值的表示方法
- 字符表示方法
| linux表示 | 說明 | linxu表示 | 說明 |
|---|---|---|---|
| r– | 只讀 | -w- | 只寫 |
| –x | 僅可執行 | rw- | 可讀可寫 |
| r-x | 可讀可執行 | -wx | 可寫可執行 |
| rwx | 可讀可寫可執行 | — | 不可讀不可寫不可執行 |
- 8進制表示方法
| 權限符號(讀寫執行) | 八進制 | 二進制 |
|---|---|---|
| r | 4 | 100 |
| w | 2 | 010 |
| x | 1 | 001 |
| rw | 6 | 110 |
| rx | 5 | 101 |
| wx | 3 | 011 |
| rwx | 7 | 111 |
| — | 0 | 000 |
5.1.4檔案訪問權限的相關設定
-
chmod
-
功能:設定檔案的訪問權限
-
格式:chmod [引數] 權限 檔案名
常用選項:
- R -> 遞回修改目錄檔案的權限
- 說明:只有檔案的擁有者和root才可以改變檔案的權限
chmod命令權限值的格式
①用戶表示符+/-=權限字符
- +:向權限范圍增加權限代號所表示的權限
- -:向權限范圍取消權限代號所表示的權限
- =:向權限范圍賦予權限代號所表示的權限
- 用戶符號:
- u:擁有者
- g:擁有者同組用
- o:其它用戶
- a:所有用戶
②三位八進制數字
# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt
實體:
- 去除用戶讀權限

[ycb@VM-12-8-centos ~]$ chmod u-r test.c #給user去掉某個權限


對去除讀權限的檔案進行寫要通過重定向的方式,

-
加上用戶讀權限
[ycb@VM-12-8-centos ~]$ chmod u+r test.c

因此類似地給所屬組(g),其他人(o)的做法都是類似的,
[ycb@VM-12-8-centos ~]$ chmod u+rw,g-w,o+r test.c
-
關于root用戶

root用戶在這里屬于other只有讀的權限,但是!超級權限用戶是不受約束的,權限是約束普通人的,

-
對于目錄的權限
-
.讀(r/4):Read對檔案而言,具有讀取檔案內容的權限;對目錄來說,具有瀏覽該目錄資訊的權限(和目錄里的file的內容有關系嗎?沒有) ii.寫(w/2):Write對檔案而言,具有修改檔案內容的權限;對目錄來說具有創建洗掉移動目錄內檔案的權限(和目錄里的file的內容有關系嗎?沒有) iii.執行(x/1):execute對檔案而言,具有執行檔案的權限;對目錄來說,具有進入目錄的權限 【面試題】 iv.“—”表示不具有該項權限 -
特別注意,查看目錄里的檔案操作是受檔案的權限約束,不是受目錄的權限約束
-
常考面試題
- 對目錄的ls和touch都r需要目錄的-x權限,也就是先進去目錄,如果沒有其他命令也無法實行,
-

- 以進制為方式改變權限


第幾個數字表示第幾組,每個組以八進制表示權限分配情況,
5.1.5檔案擁有者及檔案所屬組的改變
改變檔案的擁有者需要有權限,因為不要的東西不能隨隨便便給別人,要征得別人同意,所以需要sudo
- chown
功能:修改檔案的擁有者
格式:chown [引數] 用戶名 檔案名
實體:
[ycb@VM-12-8-centos ~]$ sudo chown root B

- chgrp
功能:修改檔案或目錄的所屬組
格式:chgrp [引數] 用戶組名 檔案名
常用選項:-R 遞回修改檔案或目錄的所屬組
實體:
[ycb@VM-12-8-centos ~]$ sudo chgrp root B

用戶和用戶組一起改變的實體:
[ycb@VM-12-8-centos ~]$ sudo chown ycb:ycb B

5.1.6目錄粘滯位
在這樣的一種情況下,他人目錄里存在只讀的其他用戶的檔案,該用戶可以直接洗掉該檔案
對于這個情況,針對這個情況,需要對該目錄加粘滯位
[ycb@VM-12-8-centos ~]$ sudo chmod +t T

總結:
- 現象:在特定目錄下,普通用戶會受普通權限的約束,但是竟然可以刪掉別人的檔案,甚至是root
- 給特定目錄設定粘滯位,chmod +t dir,自己只能刪自己的,【root不受限制】
- 注意粘滯位是給目錄設定的
- 在系統中的/tmp中臨時檔案保存用戶行為記錄的log,該目錄設定了粘滯位
- 設定粘滯位后,該目錄下的檔案只能被root,該目錄的所有者以及該檔案的所有者洗掉,
5.1.7 檔案和目錄創建的初始權限(掩碼)
檔案(普通+目錄)權限默認狀態
普通檔案的權限是666,創建目錄默認權限是777

凡是在umask中出現的權限的二進制1,就要在默認權限中去掉,
umask:000 000 010
普通檔案:111 111 101
目錄:111 111 101
umask也是可以修改的,
- umask
功能: 查看或修改檔案掩碼
新建檔案夾默認權限=0666
新建目錄默認權限=0777
但實際上你所創建的檔案和目錄,看到的權限往往不是上面這個值,
原因就是創建檔案或目錄的時候還要受到 umask的影響,
假設默認權限是mask,則實際創建的出來的檔案權限是: **mask & ~umask **
格式:umask 權限值
說明:將現有的存取權限減去權限掩碼后,即可產生建立檔案時預設權限,超級用戶默認掩碼值為0022,普通用 戶默認為0002,
實體:
# umask 755
# umask //查看
# umask 044//設定
6.shell命令及運行原理
Linux嚴格意義上說的是一個作業系統,我們稱之為“核心(kernel)”,但我們一般用戶,不能直接使用kernel,
Linux 內核(kernel):
- 廣義上的作業系統:shell+kernel+配套的軟體(應用+驅動等)
- 狹義上的作業系統:指的就是內核,純的作業系統部分
而是通過kernel的“外殼”程式,也就是所謂的shell,來與kernel溝通,如何理解?
為什么不能直接使用kernel?
shell理解:
shell -外殼
從技術角度,Shell的最簡單定義:命令列解釋器(command Interpreter)主要包含:
- 將使用者的命令翻譯給核心(kernel)處理,
- 同時,將核心的處理結果翻譯給使用者,

前兩者是一樣的,都是為了解決用戶使用計算機的成本!只不過解決的程度不同罷了,
對比windows GUI,我們操作windows 不是直接操作windows內核,而是通過圖形介面,點擊,從而完成我們的操作(比如進入D盤的操作,我們通常是雙擊D盤盤符.或者運行起來一個應用程式),
shell 對于Linux,有相同的作用,主要是對我們的指令進行決議,決議指令給Linux內核,反饋結果在通過內核運 行出結果,通過shell決議給用戶,
幫助理解:如果說你是一個悶騷且害羞的程式員,那shell就像媒婆,作業系統內核就是你們村頭漂亮的且有讓你心動的小花,你看上了小花,但是有不好意思直接表白,那就讓你家人找媒婆幫你提親,所有的事情你都直接跟媒婆溝通,由媒婆轉達你的意思給小花,而我們找到媒婆姓王,所以我們叫它王婆,它對應我們常使用的bash,如果小花不同意了,王婆也不會繼續幫忙找她了,

- 總結:
- 什么是shell外殼
- 包裹在作業系統外層的軟體層,方便用戶和OS溝通
- shell:接受用戶的輸入,交給OS執行,得到結果,回傳給用戶
- shell作用:
- 互動
- 保護作業系統
- 比如錯誤的指令先由shell確定正確性,再交給作業系統
- shell vs bash
- shell(媒婆)
- bash(王婆)
- shell是所有外殼的總稱,bash是一款特定的shell,
以上為感性的理解,之后會深入理解,
7.常見面試題
- 進入目錄對應的是哪個權限
- 如何處理其他用戶洗掉該用戶的檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/339149.html
標籤:其他
上一篇:【LeetCode.鏈表.141+142】環形鏈表,附詳細證明程序+多圖分析
下一篇:堆 的基本知識










