Linux指令筆記
chmod 變更檔案權限
權限則是依照User(Owner), Group, Other的讀取,寫入和來排列
- rwx rwx rwx 是權限全開,可用chmod 0777 filename來設定
- rwx rwx r-x 是Other無法寫入,可用chmod 0775 filename來設定
- rw- rw- rw- 是開啟讀寫權限,但不可執行,可用chmod 0666 filename來設定
- rwx --- --- 是User本身權限全開,可用chmod 0700 filename來設定
目錄的r是可以查看目錄中有哪些檔案
目錄的w是建立,移除目錄下的檔案
目錄的x是可以cd 切換到該目錄中
如果想要開啟某個script的執行權限可以用chmod +x filename設定
chmod u+x 是賦予擁有者執行權限
chmod a=rw 表示所有人都賦予讀寫權限
- SUID
chmod o+s file
-rwsr-xr-x 1 root root 47032 May 17 2017 /usr/bin/passwd
然後擁有者是root,所以passwd執行時,可以存取root可存取的密碼檔案/etc/passwd
-rw-r--r-- 1 root root 1207 Feb 12 2017 /etc/passwd
只不過有些執行檔千萬這麼設置,例如是vim,不然所有的使用者都可以使用vim,編輯系統上所有的檔案,包含重要的系統檔。 - SGID
chmod g+s file
對執行檔的差異只在是給予Group的權限而不是擁有者權限,當然,如果你設定root group,那就還是root。
對目錄的話,是該目錄下的新增檔案的Group會是跟目錄Group相同,而不是建立者的Group。 - Sticky bit 黏滯
chmod +t file
對執行檔設置是為了讓它保留在記憶體中,下次載入就直接使用該區段記憶體,對於會反覆執行的程式的載入有加速的效果,不過這是以前的作法,現在比較少用了。
對於檔案來說,設置這個就是只有owner和root可以刪除或變更檔名。
對於目錄來說,設置這個就只有owner和root可以刪除/變更旗下的檔案/目錄。(/tmp就是有帶Sticky屬性的目錄)
drwxrwxrwt 0 root root 4096 Jan 18 23:45 tmp
ls 列出檔案
會顯示檔案類型、使用者、群組、其他使用者的權限以及修改日期和大小
ls -l
# 檔案詳細訊息
檔案類型有5種:
- d表示目錄
- - 表示檔案
- l表示連結
- b表示可儲存的週邊裝置
- c序列埠裝置,例如鍵盤,滑鼠
- p msg pipe檔
- s socket
ls -a # 所有檔案(含隱藏檔,本層目錄,上層目錄..), ls -A則是不包含上層和本層目錄
ls -al # 所有檔案詳細訊息
ls -d # 僅列出目錄
ls -R # 遞迴列印目錄與子目錄所有檔案
ls -il # 列印檔案的inode號碼
遞迴列出~/test內的所有檔案/每個檔案名稱印一行
ls -R ~/test
ls -1 ~/test
cd 切換目錄
cd ~ # 當前使用者的家目錄
cd - #
回到上一個工作目錄(
取用環境變數OLDPWD
), 跟上一層cd .. 不一定相同
解tar/tar.gz/tar.bz2
我們常常會誤會tar解壓縮的指令,不是打 tar xf {要解的檔案} {要解到哪個目錄},而是先進去目錄;或是使用-C指定輸出到目錄。cd extact_to_dir
tar xf tarfile_path.tar
tar xf tarfile_path.tar -C {output_dir}
另外,加上v可以顯示詳細訊息
將目錄打包成tar檔案
打包成tar檔案並壓縮成bz2或gz
Ref: http://www.linfo.org/tar.html
tar zxf ~/hd2/tarballs.tar.gz
tar jxf ~/hd2/tarballs.tar.bz2
tar jxf ~/hd2/tarballs.tar.bz2 -C /mnt/sdcard/ # output directory
tar cf tarname.tar dirname
tar cvjf tarname.tar.bz2 dirname
tar cvzf
tarname
.tar.gz
dirname
mkdir 建立/刪除目錄
建立檔案目錄,如果路徑上的目錄不存在也會一起建立
touch 建立檔案建立檔案目錄,如果路徑上的目錄不存在也會一起建立
mkdir -p /aa/bb/cc/
rmdir -p /aa/bb/cc/ #連同路徑上的目錄一起刪除
建立空檔案/修改檔案時間
touch
touch -a #改變存取時間為當前時間
touch -m #改變修該時間為當前時間
touch -t 201104161410.01 #設定時間為2011年4月16日14時10分1秒
file 查看檔案類型
用在文字檔上,還會寫出辨認該檔為DOS的行結尾符號(CRLF)或是Unix行結尾符號(LF)
用在核心上,會列出版本與一些訊息
ln 建立連結(捷徑)
Hard link的限制是必須再同一個file system,因為是透過寫入file system的紀錄來存取同一個檔案,如果不是同一個file system就無法這樣設置。硬連結因為是在filesystem上面紀錄成同一個inode,所以各種屬性會跟原本的檔案一模一樣(屬性、大小、修改時間等等)
file
file -f # 從檔案中讀入要查看的檔案路徑
file -i # 顯示MIME type
用在核心上,會列出版本與一些訊息
ln -s <真實目錄或檔案> <連結的目錄或檔案> # symbolic link, like shortcut
ln <真實目錄或檔案> <連結的目錄或檔案> # hard link,
如果你建立了一個hard link再把原始檔案刪除,並不會真的把硬碟上的資料刪除,而是從filesystem上移除你指定的檔案紀錄,並把link數減少,除非減少到0才會刪除資料,這就是symbolic link最大的不同
stat
File: `12'
Size: 0
Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d
Inode: 137365 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ yhchiu) Gid: ( 1000/ yhchiu)
Access: 2015-05-14 08:33:15.231398466 +0800
Modify: 2015-05-14 08:33:15.231398466 +0800
Change: 2015-05-15 07:36:57.598178321 +0800
Birth: -
man
man -k #搜尋所在的說明檔
man -a # 顯示所有的說明檔內容
man #顯示某類別的說明檔
一般來說,type為1是指令; 2 是系統呼叫;3是函數庫;5是檔案格式;8是系統管理
yhchiu@yhchiu-HPC:~$ man -k ls
_llseek (2) - reposition read/write file offset
aconnect (1) - ALSA sequencer connection manager
add-shell (8) - add shells to the list of valid login shells
afs_syscall (2) - unimplemented system calls
alsactl (1) - advanced controls for ALSA soundcard driver
alsactl_init (7) - alsa control management - initialization
alsaloop (1) - command-line PCM loopback
alsamixer (1) - soundcard mixer for ALSA soundcard driver, with ncurses interface
amidi (1) - read from and write to ALSA RawMIDI ports
amixer (1) - command-line mixer for ALSA soundcard driver
aplay (1) - command-line sound recorder and player for ALSA soundcard driver
arecord (1) - command-line sound recorder and player for ALSA soundcard driver
aseqdump (1) - show the events received at an ALSA sequencer port
aseqnet (1) - ALSA sequencer connectors over network
assert (3) - abort the program if assertion is false
auth_destroy (3) - library routines for remo
察看BASH內建指令說明
help
help {bash-builtin-command}
有些指令不是man提供的而是bash提供的內建功能,你可能在man裏面只會搜尋到相關的系統函數資訊,但是卻找不到指令的用法,例如: declare, local, readonly, eval, exec, ulimit等等,這時候就會需要用help來察看指令用法
which 查看某個指令的所在位置which
另外發現 readlink -f 可以直接印出該指令的檔案位置
留言