Linux 命令使用筆記 (來自於鳥哥 經自己整理哈!)(連載中。。。)
阿新 • • 發佈:2019-01-07
Linux使用筆記
1.改變檔案擁有者chgrp 使用者名稱 檔名
改變檔案群組 chgrp 群組名 檔名
chown -R 使用者名稱:群組名 檔名 使用者名稱群組名一起變
2.改變檔案許可權 chmod 數字(01347)檔名
3. .sh批處理檔案
.Z等 打包,壓縮檔案
4./bin執行程式的資料夾
/boot linux核心和啟動相關檔案的資料夾
/dev 裝置檔案
/etc 系統需要讀取的檔案的資料夾
/etc/rc.d 開關機用的指令碼
/etc/rc.d/init.c 所有服務預設的啟動指令碼檔案
/etc/xinetd.d 啟動服務檔案
/etc/X11 X-window有關的配置檔案
/home 使用者根目錄
/lib 編譯程式時的函式庫
/lost+found 系統產生異常時放置一些遺失片段
/mnt 軟碟機光碟機裝載點
/proc 放置系統核心與執行程式所需的資訊
/root 系統管理員的根目錄
/sbin 放置系統常用的程式(系統管理員常用的)
/tmp 放置使用者的臨時檔案
/usr 系統資訊
/usr/include 一些套件的標頭檔案
/usr/lib 函式庫
/usr/local 軟體及軟體升級
/usr/share/doc 放置一些系統說明檔案的地方
/usr/share/man 放置一些程式說明檔案的地方
/usr/src 放置核心程式碼的預設目錄
/usr/X11R6 X window system存放相關檔案的目錄
/var 所有服務的登入檔案或錯誤資訊檔案
5.路徑中的符號表示 . 代表當前層目錄 .. 代表上層目錄 ~ 代表自己的根目錄 ~user 代表到user這個人的根目錄
cd 變換目錄 pwd 顯示當前目錄 mkdir 建立一個新目錄 rmdir 刪除一個空目錄 rm -rf 目錄名 刪除目錄下的所有東西並且不提示
6.echo 顯示 列印
7.環境變數PATH echo $PATH 顯示當前的PATH路徑
加入路徑 PATH="$PATH":/root
8.ls 顯示檔名稱屬性 cp 複製檔案或目錄 rm 刪除檔案或目錄 mv 移動檔案或目錄
--color=never(always/auto)顏色
cp (- d原封不動的複製 不管是不是連結檔案 r目錄複製 s做成連結檔案 u新檔案或沒有目標檔案才進行復制『用於備份』) 原始檔 目標檔案
rm (- f強制刪除 i提供使用者確認 r迴圈刪除 直到沒有東西為止) 檔名
mv (- u比原始檔比目標檔案還新的時候才執行) 可用於改名
9.cat 檔名 -n 顯示時 同時顯示行號 正向輸出檔案內容
tac 檔名 反向輸出檔案內容
more 檔名 一頁一頁顯示檔案內容 (在別處也可以使用 然後一頁一頁看 例如:ls -al | more)
less 檔名 可以前翻後翻 (/『word』 可以輸入字串進行關鍵字查詢)
head -n 前幾行數 檔名
tail -n 後幾行數 檔名
nl 檔名 = cat -n
od 檔名 顯示二進位制檔案內容
10.ln 連結檔案
ln 檔名 目標檔案 硬連結
ln -s 檔名 目標檔案 軟連結(類似於快捷方式)
11.umask (+ 數字) 不加數字為顯示預設檔案屬性 加為修改
12.chattr [+-=] [ASacdistu] [檔名 或 目錄名]
+ 增加屬性 - 減少屬性 = 設定屬性
A 存取時間不能進行修改
S 將資料同步寫入磁碟
a 只能增加,不能刪除(root)
c 自動壓縮和解壓縮
d 當dump(備份)執行時,可使該檔案有備份功能
i 無法對檔案進行修改
(j 屬性寫入日誌)
s 完全移出這個硬碟
u 與s相反 取消刪除
lsattr -[aR] 檢視檔案attr的屬性
-a 顯示全部的檔案 包括隱藏檔案
-R 顯示子目錄的資料
13.which 檔名 檢視可執行檔案的位置(按照PATH路徑查詢)
whereis -[bmsu] 目錄名稱
-b 只找二進位制檔案
-m 只找在說明檔案manual路徑下的檔案
-s 只找source原始檔
-u 沒有說明文件的檔案
locate 目錄名稱 找所有帶目錄名稱的檔案
find 路徑 引數
時間: -atime n 將n*24小時內被存取過的檔案列出來
-ctime n 將n*24小時內被修改,新增的檔案或目錄列出來
-mtime n 將n*24小時內被修改過的檔案列出來
-newer file 把比file還新的檔案列出來
使用名稱: -gid n 尋找尋租ID為n的檔案
-group name 尋找群組名為name的檔案
-uid n 尋找擁有者ID為n的檔案
-user name 尋找檔名稱為name的檔案
-name file 尋找檔名為file的檔名稱(可以使用萬用字元)
-type type 尋找檔案屬性為type的檔案,type包含b,c,d,p,l,s
14.file 檔名 檢視文集屬性
15.SUID 的意思
# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 29104 2006-12-20 04:35 /usr/bin/passwd
在原來x的位置有一個s屬性,這個就是所謂的SUID當一個檔案具有SUID時,同時others和群組都具有可執行權,那麼當others和群組執行該程式時,others和群組將擁有該檔案的owner許可權
# ls -l /usr/bin/passwd /etc/shadow
-rw-r----- 1 root root 929 2007-12-14 21:56 /etc/shadow
-rwsr-xr-x 1 root root 29104 2006-12-20 04:35 /usr/bin/passwd
一般使用者可以修改自己的密碼,那麼修改密碼一定和/etc/shadow檔案有關(可是一般使用者對/etc/shadow檔案並沒有寫許可權),怎麼回事呢? 使用者是如何修改/etc/shadow這個檔案的呢?
/usr/bin/passwd檔案具有SUID屬性,當一般使用者執行/usr/bin/passwd時,將具有root許可權,所以他們可以更改/etc/shadow的內容
由此可知,由於Set UID(SUID)的主要功能是在某個檔案執行期間具有檔案擁有者的許可權,因此,s可以代替x可執行屬性
由此可知SUID和SGID的問題所在,沒錯,就是太不安全瞭如果您有一個檔案具有root許可權,那麼當開啟SUID時,後果不堪設想因此,在變更一個檔案使之具有SUID或SGID時,必須特別小心
16.硬碟:磁頭 磁軌 磁柱 扇區:512b
filesystem:
主引導扇區
塊
superblock
inode
17.df -[ikm] 檢視硬碟的總容量,已用容量和inode等
-i 使用inode顯示結果
-k 使用KBytes顯示結果
-m 使用Mbytes顯示結果
du -[abckms] (目錄名稱)-
-a 列出所有檔案和目錄,預設值是列出目錄的值
-b 列出的值以bytes輸出
-c 最後求總total
-k 列出的值以KB輸出
-m 列出的值以MB輸出
-s 只列出最後求的總值
18.fdisk 裝置名稱 硬碟分割槽工具
fdisk -l 裝置名稱 直接列出該裝置的分割槽表
mke2fs(make ext2 file system) 格式化
mke2fs -b (block size) -i (inode size) -b設定資料塊大小(1024 2048 4086) -i設定inode值
mke2fs -c 檢查磁碟錯誤
mke2fs -L 設定扇區的label(表頭)
mke2fs -j 建立ext3這個具有日誌管理系統功能的檔案格式
e2label 更改表頭資料
e2label 裝置名稱 表頭名
mknod [device] [bcp] [Major] [Minor]
b 設定節點為外部裝置文件
c 設定節點為介面裝置 如 滑鼠
p 建立FIFO管道
19.fsck -[Aar] 裝置名稱 檢查硬碟有沒有壞軌
-A 依據/etc/fstab的內容 將所有裝置掃描一遍
-a 自動修復檢查到問題扇區
-r 一定讓使用者決定是否需要修復
sync; sync 將記憶體中的資料回存在硬碟中
20.mkbootdisk --device /dev/fd0 'uname -r' 製作可引導軟盤
fdformat 裝置名稱 格式化低階軟盤 (與mke2fs一起用)
21.mount -[ahlV]
-a 依照/etc/fstab的內容裝載所有相關的硬碟
-h 之列出mount相關的引數,並不裝載任何裝置
-l 列出當前已經裝載的裝置,檔案系統名稱 與裝載點
-V 列出mount版本資訊
mount -t type /dev/hdxx /moutpoint將後面/dev/hdxx裝置以type的檔案格式裝載到/mountpoint這個點。(vfat msdos windows系統檔案格式 ext ext2 linux主要文式 iso9660 光碟機檔案格式)
mount -o (rw 可擦寫 suid 允許硬碟配置檔案為SUID狀態 exec 允許該硬碟執行二進位制可執行檔案 auto 允許該硬碟使用-a引數設定 nouser 禁止非root使用者使用裝載功能
async 允許該硬碟使用mount -a引數設定 defaults 同時有上面的屬性 nosuid 不許有SUID檔案屬性 ro 只讀屬性 remount 把系統已經裝載好的硬碟重新裝載)
umount [-f] [device | mount_point] 解除安裝裝載
-f 強制
22.hdparm -[cdmXTt] 裝置名稱 對硬碟效能測試與應用
-c 提供32位存取模式,支援的形式有 -c0:關閉32位存取模式 -c1:開啟 -c3:以較為特殊的sync模式開啟32位存取模式
-d 是否啟動硬碟的DMA模式, 0為關閉 1為開啟
-m 設定multiple sector I/O模式 通常為16
-X 設定IDE/ATA模式的項 支援設定(-X34:開啟DMA mode 2 [ATA] -x66:KAIQI ultra DMA mode 2 [ATA66])
-T 測試快取區cache的存取效能
-t 測試硬碟實際存取效能
23.Swap分割槽
fdisk /dev/.. 然後ID改為82 mkswap /dev/..[1-16] 格式化 用swapon /dev/..啟動 用swapoff 關閉
dd指令建立swapfile檔案 用mkswap把它格式化為swap檔案
24.alias 設定指令的別名 例子:alias la = 'ls -al'
查詢時直接alias
取消alias 用unalias
25.顯示變數 echo $變數名
顯示主要變數 env
顯示所有變數 set echo $? 顯示前一個指令是否有錯誤 無錯誤為0
export 變數 使變數動作
unset 變數 取消變數
單引號和雙引號的區別 :雙的裡面儲存特殊字元 單的變成一般字元
export 可以在子程式中使用
26.history 顯示歷史指令
!上一個指令 !number 第幾個指令 !command 指令開頭幾個字母(最近一次的)
history -c 清楚歷史記錄 history -r 檔名 將歷史指令存到指定的檔案中
27.萬用字元
* 萬用字元 代表任意字元
? 萬用字元 代表一個字元
# 註釋
\ 跳轉符號 將特殊字元或萬用字元還原成一般字元
| 分隔兩個管線命令的界定
; 連續性命令的界定(注意,與管線命令不同)
~ 使用者的根目錄
$ 變數前要加的變數值
& 將指令程式設計在背景下工作
! 非
/ 路徑分隔符號
> >> 輸出導向,分別為 取代 累加
' 單引號,不具有變數置換功能
" 雙引號,具有變數置換功能
‘ ’兩個 ‘ 中間為可以先執行的指令
() 中間為子shell的起始與結束
[] 中間為字元組合
{} 中間為命令區塊組合
組合鍵 執行結果
Ctrl + C 終止當前命令
Ctrl + D 輸入結束EOF
Ctrl + M = Enter
Ctrl + S 暫停螢幕的輸出
Ctrl + Q 恢復螢幕的輸出
Ctrl + U 在提示符下,整行命令刪除
Ctrl + Z 暫停當前命令
連續輸入命令 ; && ||
28. ./的意思是當前目錄下執行檔案 .為當前目錄 ..為上一層目錄
29. 重定向
> 標準輸出 ( >> 累加輸出 不刪除原來的資料)(1> 正確的 2>錯誤的資料)
< 標準輸入
30.cut -d "分隔字元" [-cf] fields
-d:後面接的是分隔字元,預設為空格符
-c:後面接的是第幾個字元
-f:後面接的是第幾個區塊
例子:cat /etc/passed | cut -d ";" -f 1
sort [-t 分隔符] [(+起始)(-結束)] [-nru]
-t 分隔符:使用分隔符隔開不同的區塊,預設是tab
+start -end:由第start區塊排序到end區塊
-n:使用純數字排序(否則會以字母方式排序)
-r:反向排序
-u:相同出現的一行,只列出一個
wc [-lmw]
-l:多少行
-m:多少字元
-w:多少子
tee 檔名 傳命令並且寫入檔案中
tr [-ds] SET1
-d :刪除SET1這個字串
-s :取代重複的字元
split -[bl] 輸入檔案 輸出檔案前導字元 用來分割檔案
-b:以檔案size來分
-l:以行數來分
31. *.Z compress程式壓縮的檔案
*.bz2 bzip2程式壓縮的檔案
*.gz gzip程式壓縮的檔案
*.tar tar程式打包的程式,沒有經過壓縮
*.tar.gz tar程式打包的檔案,且經過gzip壓縮
compress [-d] filename 壓縮或者解壓縮
-d:解壓縮引數 = umcompress
bzip2:壓縮解壓縮 bzcat讀取壓縮檔案內容
-d:解壓縮
-z:壓縮
[-d#] filename 壓縮解壓縮
zcat filename.gz 讀取解壓縮檔案
-d :解壓縮引數
-# :壓縮等級 1最不好 9最好 6預設
tar [-zxcvfpP] filename
tar 'yyyy/mm/dd' /path -zcvf target.tar.gz(壓縮檔案) source(原來的檔案)
-z:是否具有gzip
-x:揭開一個壓縮檔案
-t:檢視tarfile裡面的檔案
-c:建立一個壓縮檔案
-v:壓縮過程中顯示檔案
-f:使用檔名
-p:使用原檔案的原有屬性
-P:可以使用絕對路徑
-N:比後面接的日期(yyyy/mm/dd)還要新的檔案才會被打包
--exclude FILE:在壓縮過程中,不要將FILE打包
cpio -covB > [file | device] 備份
cpio -icduv < [file | device] 還原
-o:將資料複製輸出到檔案或裝置上
-i:將資料自檔案或裝置複製出到系統中
-t:檢視cpio建立的檔案或裝置的內容
-c:以一種較新的便攜格式儲存
-v:讓儲存過程中檔名稱可以顯示在螢幕上
-B:讓預設的Blocks可以增至5120bytes,預設是512bytes,預設是512bytes
-d:自動建立目錄,由於cpio的內容可能不在同一目錄內。
-u:自動用較新的檔案覆蓋較久的檔案
32 grep 正規表示法
grep “word” filename 在檔案中把有"word"一行的資訊顯示出來
grep "*[a-d]*" filename 輸出含有a-d的行
33. bash判斷執行的步驟:
1.如果取到一個Enter符號(CR),就嘗試開始執行該指令
2.指令間的空白被忽略
3.一行太多可用\延伸到下一行
4.#註釋
執行檔案方法:
1.改屬性 改成可執行檔案
2.用sh執行
declare [-afirx] 定義變數
-a:定義為陣列(array)
-f:定義為函式(function)
-i:定義為整數(integer)
-r:定義只讀
-x:定義為通過環境輸出變數
指令碼 $0:myscript 指令碼檔名
$1:opt1 第一個附加引數
$2......
$3......
指令碼邏輯判斷式與表示式
1. 關於檔案與目錄的邏輯卷標
-f 檢測檔案是否存在 (常用)
-d 檢測目錄是否存在 (常用)
-b 檢測是否為一個block檔案
-c 檢測是否為一個character檔案
-S 檢測是否為一個socket標籤檔案
-L 檢測是否為一個符號連結檔案
-e 檢測某個東西是否存在
2. 關於程式的邏輯卷標
-G 檢測是否由GID所執行的程式擁有
-O 檢測是否由UID所執行的程式擁有
-p檢測是否為程式間傳送資訊的name pipe或FIFO
3. 關於檔案屬性的檢測
-r檢測是否為可讀屬性
-w緝拿冊是否為可寫入屬性
-x檢測是否為執行屬性
-s檢測是否為非空白檔案
-u檢測是否具有SUID屬性
-g檢測是否具有SGID屬性
-k檢測是否具有sticky bit屬性
4. 兩個檔案之間的判斷與比較 例子:test file1 -nt file2
-nt 第一個檔案比第二個檔案新
-ot 第一個檔案比第二個檔案舊
-ef 第一個檔案與第二個檔案為同一個檔案
5. 邏輯與(and)和或(or)
&& 邏輯與
||邏輯或
6.運算子
-eq =
-ne !=
-lt <
-gt >
-le <=
-ge >=
-a and
-o or
-z 空字串
-n 非空字串
7.條件判斷
if [條件判斷1] && (||) [條件判斷2];then if是起始,後面可以接若干個判斷式,使用&&或||判斷
elif [條件判斷3] &&(||) [條件判斷4];then 第二段判斷,如果第一斷不符合要求就傳到此搜尋條件,執行第二段程式
else 都不符合執行這段
fi 結束
8.case...esac
case 種類方式(string) in 開始階段 通常使用$1這種直接輸入型別
種類方式1)
程式執行段
;; 種類方式結束符號
種類方式2)
程式執行段
;;
*)
echo "Usage:{種類方式一 | 種類方式二}" 列出可以利用的引數值
exit 1
esac
種類方式: 1 直接輸入:世界以“執行檔案 + string” string可以寫成$1
2 互動式:配合read
9.迴圈
for(;;)
for variable in variable1 variable2
while [ condition1 ] && { || } [ condition2 ]
until [condition1 ] && { || } [ condition2 ]
until:直到條件符合的時候才退出
do 。。。。done 相當於函式體的括號
34.帳號管理:
1 登入主機時 輸入帳號密碼後 linux會將該帳號對應的UID GID讀出來從etc/passwd 沒有則跳出
2 然後核對密碼錶 etc/shadow中 找到對應的帳號和UID 然後核對密碼
(備份時兩個一定要一起備份)
檔案如果不是使用者擁有的 擁有名則變成數字
etc/passwd檔案構造
帳號名: 密碼(早期): UID(0系統管理員 1~500系統預留帳號 500~65535一般使用者使用): GID(etc/group)
: 說明 : 根目錄(使用者預設的目錄 預設為 /home/yourIdName) : Shell (/bin/false 帳號無法登入)
etc/shadow檔案構造
帳號名: 密碼(加密後 密碼前面加個* 使用者無法登入) :上次改動日期(以1970年1月1日為1 且日期累加)
:密碼不可變更天數 : 密碼需要重新變更天數 :密碼變更期限前的警告期(n天內 系統會警告使用者) :帳號失效期限
:帳號取消日期(過改天就無法再用) :保留
(可用暴力計算密碼程式破解。。。。《聽說》)
etc/group檔案構造
群組名稱: 群組密碼(在etc/gshadow中) : 群組ID(GID): 支援的帳號名稱
3 增加使用者
groupadd [-g GID] groupname 新增群組
-g GID:自行設定GID的大小
groupdel groupname 刪除群組 (使用之前先將etc/passwd中GID設定為這個群組的GID的使用者 刪除)
useradd [-u UID] [-g GID] [-d HOME] [-mM] [-s shell] 增加使用者
-u 直接給出一個UID
-g 直接給出一個GID
-d 直接將其根目錄指向已存在目錄
-M 不建立根目錄
-s 定義其使用的shell
4 建立預設帳號 useradd username (屬性設定 etc/login.defs 和 etc/default/useradd 中)
5 userdel [-r] username 刪除帳號
-r:將該帳號的[home directory] 和 [/var/spool/mail/username] 一併刪除 (不加只刪除passwd和shadow中的內容)
6 chsh [-l] [-s shellname] 用工改變自己的shell的指令
-l:列出當前機器上能用的shell名稱
-s:將當前的shell變成shellname
7 chfn 更改個人屬性
35. 密碼管理:
passwd [username] (單獨輸入是自己改 加名字是人root改)(指令存放在bin/passwd)
36. 使用者身份轉換:
su (輸入密碼 程式設計root)
sudo [-u username] command
-u:將身份變成username的身份
(可用visudo來修改sudo的許可權 在/etc/sudoers中)
37. 使用者查詢:
id (使用者名稱) 檢視使用者資訊
groups (群組名) 檢視群組資訊
1.改變檔案擁有者chgrp 使用者名稱 檔名
改變檔案群組 chgrp 群組名 檔名
chown -R 使用者名稱:群組名 檔名 使用者名稱群組名一起變
2.改變檔案許可權 chmod 數字(01347)檔名
3. .sh批處理檔案
.Z等 打包,壓縮檔案
4./bin執行程式的資料夾
/boot linux核心和啟動相關檔案的資料夾
/dev 裝置檔案
/etc 系統需要讀取的檔案的資料夾
/etc/rc.d 開關機用的指令碼
/etc/rc.d/init.c 所有服務預設的啟動指令碼檔案
/etc/xinetd.d 啟動服務檔案
/etc/X11 X-window有關的配置檔案
/home 使用者根目錄
/lib 編譯程式時的函式庫
/lost+found 系統產生異常時放置一些遺失片段
/mnt 軟碟機光碟機裝載點
/proc 放置系統核心與執行程式所需的資訊
/root 系統管理員的根目錄
/sbin 放置系統常用的程式(系統管理員常用的)
/tmp 放置使用者的臨時檔案
/usr 系統資訊
/usr/include 一些套件的標頭檔案
/usr/lib 函式庫
/usr/local 軟體及軟體升級
/usr/share/doc 放置一些系統說明檔案的地方
/usr/share/man 放置一些程式說明檔案的地方
/usr/src 放置核心程式碼的預設目錄
/usr/X11R6 X window system存放相關檔案的目錄
/var 所有服務的登入檔案或錯誤資訊檔案
5.路徑中的符號表示 . 代表當前層目錄 .. 代表上層目錄 ~ 代表自己的根目錄 ~user 代表到user這個人的根目錄
cd 變換目錄 pwd 顯示當前目錄 mkdir 建立一個新目錄 rmdir 刪除一個空目錄 rm -rf 目錄名 刪除目錄下的所有東西並且不提示
6.echo 顯示 列印
7.環境變數PATH echo $PATH 顯示當前的PATH路徑
加入路徑 PATH="$PATH":/root
8.ls 顯示檔名稱屬性 cp 複製檔案或目錄 rm 刪除檔案或目錄 mv 移動檔案或目錄
--color=never(always/auto)顏色
cp (- d原封不動的複製 不管是不是連結檔案 r目錄複製 s做成連結檔案 u新檔案或沒有目標檔案才進行復制『用於備份』) 原始檔 目標檔案
rm (- f強制刪除 i提供使用者確認 r迴圈刪除 直到沒有東西為止) 檔名
mv (- u比原始檔比目標檔案還新的時候才執行) 可用於改名
9.cat 檔名 -n 顯示時 同時顯示行號 正向輸出檔案內容
tac 檔名 反向輸出檔案內容
more 檔名 一頁一頁顯示檔案內容 (在別處也可以使用 然後一頁一頁看 例如:ls -al | more)
less 檔名 可以前翻後翻 (/『word』 可以輸入字串進行關鍵字查詢)
head -n 前幾行數 檔名
tail -n 後幾行數 檔名
nl 檔名 = cat -n
od 檔名 顯示二進位制檔案內容
10.ln 連結檔案
ln 檔名 目標檔案 硬連結
ln -s 檔名 目標檔案 軟連結(類似於快捷方式)
11.umask (+ 數字) 不加數字為顯示預設檔案屬性 加為修改
12.chattr [+-=] [ASacdistu] [檔名 或 目錄名]
+ 增加屬性 - 減少屬性 = 設定屬性
A 存取時間不能進行修改
S 將資料同步寫入磁碟
a 只能增加,不能刪除(root)
c 自動壓縮和解壓縮
d 當dump(備份)執行時,可使該檔案有備份功能
i 無法對檔案進行修改
(j 屬性寫入日誌)
s 完全移出這個硬碟
u 與s相反 取消刪除
lsattr -[aR] 檢視檔案attr的屬性
-a 顯示全部的檔案 包括隱藏檔案
-R 顯示子目錄的資料
13.which 檔名 檢視可執行檔案的位置(按照PATH路徑查詢)
whereis -[bmsu] 目錄名稱
-b 只找二進位制檔案
-m 只找在說明檔案manual路徑下的檔案
-s 只找source原始檔
-u 沒有說明文件的檔案
locate 目錄名稱 找所有帶目錄名稱的檔案
find 路徑 引數
時間: -atime n 將n*24小時內被存取過的檔案列出來
-ctime n 將n*24小時內被修改,新增的檔案或目錄列出來
-mtime n 將n*24小時內被修改過的檔案列出來
-newer file 把比file還新的檔案列出來
使用名稱: -gid n 尋找尋租ID為n的檔案
-group name 尋找群組名為name的檔案
-uid n 尋找擁有者ID為n的檔案
-user name 尋找檔名稱為name的檔案
-name file 尋找檔名為file的檔名稱(可以使用萬用字元)
-type type 尋找檔案屬性為type的檔案,type包含b,c,d,p,l,s
14.file 檔名 檢視文集屬性
15.SUID 的意思
# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 29104 2006-12-20 04:35 /usr/bin/passwd
在原來x的位置有一個s屬性,這個就是所謂的SUID當一個檔案具有SUID時,同時others和群組都具有可執行權,那麼當others和群組執行該程式時,others和群組將擁有該檔案的owner許可權
# ls -l /usr/bin/passwd /etc/shadow
-rw-r----- 1 root root 929 2007-12-14 21:56 /etc/shadow
-rwsr-xr-x 1 root root 29104 2006-12-20 04:35 /usr/bin/passwd
一般使用者可以修改自己的密碼,那麼修改密碼一定和/etc/shadow檔案有關(可是一般使用者對/etc/shadow檔案並沒有寫許可權),怎麼回事呢? 使用者是如何修改/etc/shadow這個檔案的呢?
/usr/bin/passwd檔案具有SUID屬性,當一般使用者執行/usr/bin/passwd時,將具有root許可權,所以他們可以更改/etc/shadow的內容
由此可知,由於Set UID(SUID)的主要功能是在某個檔案執行期間具有檔案擁有者的許可權,因此,s可以代替x可執行屬性
由此可知SUID和SGID的問題所在,沒錯,就是太不安全瞭如果您有一個檔案具有root許可權,那麼當開啟SUID時,後果不堪設想因此,在變更一個檔案使之具有SUID或SGID時,必須特別小心
16.硬碟:磁頭 磁軌 磁柱 扇區:512b
filesystem:
主引導扇區
塊
superblock
inode
17.df -[ikm] 檢視硬碟的總容量,已用容量和inode等
-i 使用inode顯示結果
-k 使用KBytes顯示結果
-m 使用Mbytes顯示結果
du -[abckms] (目錄名稱)-
-a 列出所有檔案和目錄,預設值是列出目錄的值
-b 列出的值以bytes輸出
-c 最後求總total
-k 列出的值以KB輸出
-m 列出的值以MB輸出
-s 只列出最後求的總值
18.fdisk 裝置名稱 硬碟分割槽工具
fdisk -l 裝置名稱 直接列出該裝置的分割槽表
mke2fs(make ext2 file system) 格式化
mke2fs -b (block size) -i (inode size) -b設定資料塊大小(1024 2048 4086) -i設定inode值
mke2fs -c 檢查磁碟錯誤
mke2fs -L 設定扇區的label(表頭)
mke2fs -j 建立ext3這個具有日誌管理系統功能的檔案格式
e2label 更改表頭資料
e2label 裝置名稱 表頭名
mknod [device] [bcp] [Major] [Minor]
b 設定節點為外部裝置文件
c 設定節點為介面裝置 如 滑鼠
p 建立FIFO管道
19.fsck -[Aar] 裝置名稱 檢查硬碟有沒有壞軌
-A 依據/etc/fstab的內容 將所有裝置掃描一遍
-a 自動修復檢查到問題扇區
-r 一定讓使用者決定是否需要修復
sync; sync 將記憶體中的資料回存在硬碟中
20.mkbootdisk --device /dev/fd0 'uname -r' 製作可引導軟盤
fdformat 裝置名稱 格式化低階軟盤 (與mke2fs一起用)
21.mount -[ahlV]
-a 依照/etc/fstab的內容裝載所有相關的硬碟
-h 之列出mount相關的引數,並不裝載任何裝置
-l 列出當前已經裝載的裝置,檔案系統名稱 與裝載點
-V 列出mount版本資訊
mount -t type /dev/hdxx /moutpoint將後面/dev/hdxx裝置以type的檔案格式裝載到/mountpoint這個點。(vfat msdos windows系統檔案格式 ext ext2 linux主要文式 iso9660 光碟機檔案格式)
mount -o (rw 可擦寫 suid 允許硬碟配置檔案為SUID狀態 exec 允許該硬碟執行二進位制可執行檔案 auto 允許該硬碟使用-a引數設定 nouser 禁止非root使用者使用裝載功能
async 允許該硬碟使用mount -a引數設定 defaults 同時有上面的屬性 nosuid 不許有SUID檔案屬性 ro 只讀屬性 remount 把系統已經裝載好的硬碟重新裝載)
umount [-f] [device | mount_point] 解除安裝裝載
-f 強制
22.hdparm -[cdmXTt] 裝置名稱 對硬碟效能測試與應用
-c 提供32位存取模式,支援的形式有 -c0:關閉32位存取模式 -c1:開啟 -c3:以較為特殊的sync模式開啟32位存取模式
-d 是否啟動硬碟的DMA模式, 0為關閉 1為開啟
-m 設定multiple sector I/O模式 通常為16
-X 設定IDE/ATA模式的項 支援設定(-X34:開啟DMA mode 2 [ATA] -x66:KAIQI ultra DMA mode 2 [ATA66])
-T 測試快取區cache的存取效能
-t 測試硬碟實際存取效能
23.Swap分割槽
fdisk /dev/.. 然後ID改為82 mkswap /dev/..[1-16] 格式化 用swapon /dev/..啟動 用swapoff 關閉
dd指令建立swapfile檔案 用mkswap把它格式化為swap檔案
24.alias 設定指令的別名 例子:alias la = 'ls -al'
查詢時直接alias
取消alias 用unalias
25.顯示變數 echo $變數名
顯示主要變數 env
顯示所有變數 set echo $? 顯示前一個指令是否有錯誤 無錯誤為0
export 變數 使變數動作
unset 變數 取消變數
單引號和雙引號的區別 :雙的裡面儲存特殊字元 單的變成一般字元
export 可以在子程式中使用
26.history 顯示歷史指令
!上一個指令 !number 第幾個指令 !command 指令開頭幾個字母(最近一次的)
history -c 清楚歷史記錄 history -r 檔名 將歷史指令存到指定的檔案中
27.萬用字元
* 萬用字元 代表任意字元
? 萬用字元 代表一個字元
# 註釋
\ 跳轉符號 將特殊字元或萬用字元還原成一般字元
| 分隔兩個管線命令的界定
; 連續性命令的界定(注意,與管線命令不同)
~ 使用者的根目錄
$ 變數前要加的變數值
& 將指令程式設計在背景下工作
! 非
/ 路徑分隔符號
> >> 輸出導向,分別為 取代 累加
' 單引號,不具有變數置換功能
" 雙引號,具有變數置換功能
‘ ’兩個 ‘ 中間為可以先執行的指令
() 中間為子shell的起始與結束
[] 中間為字元組合
{} 中間為命令區塊組合
組合鍵 執行結果
Ctrl + C 終止當前命令
Ctrl + D 輸入結束EOF
Ctrl + M = Enter
Ctrl + S 暫停螢幕的輸出
Ctrl + Q 恢復螢幕的輸出
Ctrl + U 在提示符下,整行命令刪除
Ctrl + Z 暫停當前命令
連續輸入命令 ; && ||
28. ./的意思是當前目錄下執行檔案 .為當前目錄 ..為上一層目錄
29. 重定向
> 標準輸出 ( >> 累加輸出 不刪除原來的資料)(1> 正確的 2>錯誤的資料)
< 標準輸入
30.cut -d "分隔字元" [-cf] fields
-d:後面接的是分隔字元,預設為空格符
-c:後面接的是第幾個字元
-f:後面接的是第幾個區塊
例子:cat /etc/passed | cut -d ";" -f 1
sort [-t 分隔符] [(+起始)(-結束)] [-nru]
-t 分隔符:使用分隔符隔開不同的區塊,預設是tab
+start -end:由第start區塊排序到end區塊
-n:使用純數字排序(否則會以字母方式排序)
-r:反向排序
-u:相同出現的一行,只列出一個
wc [-lmw]
-l:多少行
-m:多少字元
-w:多少子
uniq 刪除重複
tr [-ds] SET1
-d :刪除SET1這個字串
-s :取代重複的字元
split -[bl] 輸入檔案 輸出檔案前導字元 用來分割檔案
-b:以檔案size來分
-l:以行數來分
31. *.Z compress程式壓縮的檔案
*.bz2 bzip2程式壓縮的檔案
*.gz gzip程式壓縮的檔案
*.tar tar程式打包的程式,沒有經過壓縮
*.tar.gz tar程式打包的檔案,且經過gzip壓縮
compress [-d] filename 壓縮或者解壓縮
-d:解壓縮引數 = umcompress
bzip2:壓縮解壓縮 bzcat讀取壓縮檔案內容
-d:解壓縮
-z:壓縮
[-d#] filename 壓縮解壓縮
zcat filename.gz 讀取解壓縮檔案
-d :解壓縮引數
-# :壓縮等級 1最不好 9最好 6預設
tar [-zxcvfpP] filename
tar 'yyyy/mm/dd' /path -zcvf target.tar.gz(壓縮檔案) source(原來的檔案)
-z:是否具有gzip
-x:揭開一個壓縮檔案
-t:檢視tarfile裡面的檔案
-c:建立一個壓縮檔案
-v:壓縮過程中顯示檔案
-f:使用檔名
-p:使用原檔案的原有屬性
-P:可以使用絕對路徑
-N:比後面接的日期(yyyy/mm/dd)還要新的檔案才會被打包
--exclude FILE:在壓縮過程中,不要將FILE打包
cpio -covB > [file | device] 備份
cpio -icduv < [file | device] 還原
-o:將資料複製輸出到檔案或裝置上
-i:將資料自檔案或裝置複製出到系統中
-t:檢視cpio建立的檔案或裝置的內容
-c:以一種較新的便攜格式儲存
-v:讓儲存過程中檔名稱可以顯示在螢幕上
-B:讓預設的Blocks可以增至5120bytes,預設是512bytes,預設是512bytes
-d:自動建立目錄,由於cpio的內容可能不在同一目錄內。
-u:自動用較新的檔案覆蓋較久的檔案
32 grep 正規表示法
grep “word” filename 在檔案中把有"word"一行的資訊顯示出來
grep "*[a-d]*" filename 輸出含有a-d的行
33. bash判斷執行的步驟:
1.如果取到一個Enter符號(CR),就嘗試開始執行該指令
2.指令間的空白被忽略
3.一行太多可用\延伸到下一行
4.#註釋
執行檔案方法:
1.改屬性 改成可執行檔案
2.用sh執行
declare [-afirx] 定義變數
-a:定義為陣列(array)
-f:定義為函式(function)
-i:定義為整數(integer)
-r:定義只讀
-x:定義為通過環境輸出變數
指令碼 $0:myscript 指令碼檔名
$1:opt1 第一個附加引數
$2......
$3......
指令碼邏輯判斷式與表示式
1. 關於檔案與目錄的邏輯卷標
-f 檢測檔案是否存在 (常用)
-d 檢測目錄是否存在 (常用)
-b 檢測是否為一個block檔案
-c 檢測是否為一個character檔案
-S 檢測是否為一個socket標籤檔案
-L 檢測是否為一個符號連結檔案
-e 檢測某個東西是否存在
2. 關於程式的邏輯卷標
-G 檢測是否由GID所執行的程式擁有
-O 檢測是否由UID所執行的程式擁有
-p檢測是否為程式間傳送資訊的name pipe或FIFO
3. 關於檔案屬性的檢測
-r檢測是否為可讀屬性
-w緝拿冊是否為可寫入屬性
-x檢測是否為執行屬性
-s檢測是否為非空白檔案
-u檢測是否具有SUID屬性
-g檢測是否具有SGID屬性
-k檢測是否具有sticky bit屬性
4. 兩個檔案之間的判斷與比較 例子:test file1 -nt file2
-nt 第一個檔案比第二個檔案新
-ot 第一個檔案比第二個檔案舊
-ef 第一個檔案與第二個檔案為同一個檔案
5. 邏輯與(and)和或(or)
&& 邏輯與
||邏輯或
6.運算子
-eq =
-ne !=
-lt <
-gt >
-le <=
-ge >=
-a and
-o or
-z 空字串
-n 非空字串
7.條件判斷
if [條件判斷1] && (||) [條件判斷2];then if是起始,後面可以接若干個判斷式,使用&&或||判斷
elif [條件判斷3] &&(||) [條件判斷4];then 第二段判斷,如果第一斷不符合要求就傳到此搜尋條件,執行第二段程式
else 都不符合執行這段
fi 結束
8.case...esac
case 種類方式(string) in 開始階段 通常使用$1這種直接輸入型別
種類方式1)
程式執行段
;; 種類方式結束符號
種類方式2)
程式執行段
;;
*)
echo "Usage:{種類方式一 | 種類方式二}" 列出可以利用的引數值
exit 1
esac
種類方式: 1 直接輸入:世界以“執行檔案 + string” string可以寫成$1
2 互動式:配合read
9.迴圈
for(;;)
for variable in variable1 variable2
while [ condition1 ] && { || } [ condition2 ]
until [condition1 ] && { || } [ condition2 ]
until:直到條件符合的時候才退出
while:當條件符合時,繼續
34.帳號管理:
1 登入主機時 輸入帳號密碼後 linux會將該帳號對應的UID GID讀出來從etc/passwd 沒有則跳出
2 然後核對密碼錶 etc/shadow中 找到對應的帳號和UID 然後核對密碼
(備份時兩個一定要一起備份)
檔案如果不是使用者擁有的 擁有名則變成數字
etc/passwd檔案構造
帳號名: 密碼(早期): UID(0系統管理員 1~500系統預留帳號 500~65535一般使用者使用): GID(etc/group)
: 說明 : 根目錄(使用者預設的目錄 預設為 /home/yourIdName) : Shell (/bin/false 帳號無法登入)
etc/shadow檔案構造
帳號名: 密碼(加密後 密碼前面加個* 使用者無法登入) :上次改動日期(以1970年1月1日為1 且日期累加)
:密碼不可變更天數 : 密碼需要重新變更天數 :密碼變更期限前的警告期(n天內 系統會警告使用者) :帳號失效期限
:帳號取消日期(過改天就無法再用) :保留
(可用暴力計算密碼程式破解。。。。《聽說》)
etc/group檔案構造
群組名稱: 群組密碼(在etc/gshadow中) : 群組ID(GID): 支援的帳號名稱
3 增加使用者
groupadd [-g GID] groupname 新增群組
-g GID:自行設定GID的大小
groupdel groupname 刪除群組 (使用之前先將etc/passwd中GID設定為這個群組的GID的使用者 刪除)
useradd [-u UID] [-g GID] [-d HOME] [-mM] [-s shell] 增加使用者
-u 直接給出一個UID
-g 直接給出一個GID
-d 直接將其根目錄指向已存在目錄
-M 不建立根目錄
-s 定義其使用的shell
4 建立預設帳號 useradd username (屬性設定 etc/login.defs 和 etc/default/useradd 中)
5 userdel [-r] username 刪除帳號
-r:將該帳號的[home directory] 和 [/var/spool/mail/username] 一併刪除 (不加只刪除passwd和shadow中的內容)
6 chsh [-l] [-s shellname] 用工改變自己的shell的指令
-l:列出當前機器上能用的shell名稱
-s:將當前的shell變成shellname
7 chfn 更改個人屬性
35. 密碼管理:
passwd [username] (單獨輸入是自己改 加名字是人root改)(指令存放在bin/passwd)
36. 使用者身份轉換:
su (輸入密碼 程式設計root)
sudo [-u username] command
-u:將身份變成username的身份
(可用visudo來修改sudo的許可權 在/etc/sudoers中)
37. 使用者查詢:
id (使用者名稱) 檢視使用者資訊
groups (群組名) 檢視群組資訊