Linux基礎入門 文件管理 vim文本編輯工具 標準IO和管道 用戶組合權限管理
正文:
root用戶 html
一個特殊的管理帳戶
也被稱爲超級用戶
root已接近完整的系統控制
對系統損害幾乎有無限的能力
除非必要,不要登陸爲root java普通(非特權)用戶
權限有限
形成損害的能力比較有限 node
終端: python
設備終端
鍵盤、鼠標、顯示器mysql物理終端( /dev/console )
控制檯consolelinux串行終端( /dev/ttyS# )
ttySnginx虛擬終端(tty:teletypewriters, /dev/tty#
tty 可有n個,Ctrl+Alt+F#git圖形終端( /dev/tty7 ) startx, xwindows
CentOS 6: Ctrl + Alt + F7
CentOS 7: 在哪一個終端啓動,即位於哪一個虛擬終端 sql僞終端( pty:pseudo-tty , /dev/pts/# ) shell
pty, SSH遠程鏈接
查看當前的終端設備:
tty
交互式接口:
交互式接口:啓動終端後,在終端設備附加一個交互式應用程序
GUI:Graphic User Interface
X protocol, window manager, desktop
Desktop:
GNOME (C, 圖形庫gtk),
KDE (C++,圖形庫qt)
XFCE (輕量級桌面)
CLI:Command Line Interface
shell程序
什麼是shell:
Shell 是Linux系統的用戶界面,提供了用戶與內核進行交互操做的一種接口。它接收用戶輸入的命令並把它送入內核去執行
shell也被稱爲LINUX的命令解釋器(commandinterpreter)
shell是一種高級程序設計語言各類Shell:
sh (Steve Bourne ),csh,tcsh,ksh (korn),bash (bourn again shell)GPL,zsh 等
bash shell:GNU Bourne-Again Shell(bash)是GNU計劃中重要的工具軟件之一,目前也是 Linux標準的shell,與sh兼容
CentOS默認使用顯示當前使用的shell
echo ${SHELL}顯示當前系統使用的全部shell
cat /etc/shells主機名示例
bj-yz-k8s-node1-100-10.magedu.com
命令提示符:
命令提示符:prompt
[root@localhost ~]#
# 管理員
$ 普通用戶
[root@localhost ~]#echo $PS1
修改提示符格式
PS1="[\e[1;5;41;33m][\u@\h \W]\$[\e[0m]"
PS1="[\e[1;32m][[\e[0m]\t [\e[1;33m]\u[\e[36m]@\h[\e[1;31m] \W[\e[1;32m]][\e[0m]\$"\e 控制符\033
\u 當前用戶
\h 主機名簡稱
\H 主機名
\w 當前工做目錄
\W 當前工做目錄基名
\t 24小時時間格式
\T 12小時時間格式
! 命令歷史數 # 開機後命令歷史數
執行命令 :
輸入命令後回車
提請shell程序找到鍵入命令所對應的可執行程序或代碼,並由其分析後提交
給內核分配資源將其運行起來在shell中可執行的命令有兩類
內部命令:由shell自帶的,並且經過某命令形式提供
help 內部命令列表
enable cmd 啓用內部命令
enable –n cmd 禁用內部命令
enable –n 查看全部禁用的內部命令
外部命令:在文件系統路徑下有對應的可執行程序文件
查看路徑:which -a |--skip-alias ; whereis
區別指定的命令是內部或外部命令
type COMMAND
執行外部命令:
Hash緩存表
系統初始hash表爲空,當外部命令執行時,默認會從PATH路徑下尋找該命令,找到後會將這條命令的路徑記錄到hash表中,當再次使用該命令時,shell解釋器首先會查看hash表,存在將執行之,若是不存在,將會去PATH路徑下尋找,
利用hash緩存表可大大提升命令的調用速率hash常見用法
hash 顯示hash緩存
hash -l 顯示hash緩存,可做爲輸入使用
hash -p path name 將命令全路徑path起別名爲name
hash -t name 打印緩存中name的路徑
hash -d name 清除name緩存
hash -r 清除緩存
查看hash緩存表
命令別名:
顯示當前shell進程全部可用的命令別名
alias定義別名NAME,其至關於執行命令VALUE
alias NAME='VALUE'在命令行中定義的別名,僅對當前shell進程有效
若是想永久有效,要定義在配置文件中
僅對當前用戶:~/.bashrc
對全部用戶有效:/etc/bashrc
命令別名:
編輯配置給出的新配置不會當即生效
bash進程從新讀取配置文件
source /path/to/config_file
. /path/to/config_file撤消別名:unalias
unalias [-a] name [name ...]
-a 取消全部別名若是別名同原命令同名,若是要執行原命令,可以使用
\ALIASNAME
\(命令)不使用別名
「ALIASNAME」
"命令"
‘ALIASNAME’
command ALIASNAME
/path/commmand
命令格式:
COMMAND [OPTIONS...] [ARGUMENTS...]
選項:用於啓用或關閉命令的某個或某些功能
短選項:UNIX 風格選項,-c 例如:-l, -h
長選項:GNU風格選項,--word 例如:--all --human
BSD風格選項: 一個字母,例如:a
參數:命令的做用對象,好比文件名,用戶名等
注意:
多個選項以及多參數和命令之間使用空白字符分隔
取消和結束命令執行:Ctrl+c,Ctrl+d
多個命令能夠用;符號分開
一個命令能夠用\分紅多行
日期和時間
Linux的兩種時鐘
系統時鐘:由Linux內核經過CPU的工做頻率進行的
硬件時鐘:主板
相關命令
date 顯示和設置系統時間
date +%s
date -d @1509536033hwclock,clock: 顯示硬件時鐘
-s, --hctosys 以硬件時鐘爲準,校訂系統時鐘
-w, --systohc 以系統時鐘爲準,校訂硬件時鐘
- 時區:/etc/localtime
- 顯示日曆:cal –y
簡單命令:
-E (默認)不支持 \ 解釋功能
-n 不自動換行
-e 啓用 \ 字符的解釋功能
顯示變量:
echo "$VAR_NAME」 變量會替換,弱引用
echo '$VAR_NAME’ 變量不會替換,強引用(把變量當字符串輸出,不會輸出變量的值)
簡單命令:
- >啓用命令選項-e,若字符串中出現如下字符,則特別加以處理,而不會將它當成通常文字輸出
\a 發出警告聲
\b 退格鍵
\c 最後不加上換行符號
\e escape,至關於\033
\n 換行且光標移至行首
\r 回車,即光標移至行首,但不換行
\t 插入tab
\ 插入\字符
\0nnn 插入nnn(八進制)所表明的ASCII字符
echo -e '\033[43;31;5mmagedu\e[0m'
\xHH插入HH(十六進制)所表明的ASCII數字(man 7 ascii)
字符集和編碼:- >ASCII碼:計算機內部,全部信息最終都是一個二進制值。上個世紀60年代,美國製定了一套字符編碼,對英語字符與二進制位之間的關係,作了統一規定。ASCII 碼一共規定了128個字符的編碼,佔用了一個字節的後面7位,最前面的一位統一規定爲0
- >Unicode:用於表示世界上全部語言中的全部字符。每個符號都給予一個獨一無二的編碼數字,Unicode 是一個很大的集合,如今的規模能夠容納100多萬個符號。Unicode 僅僅只是一個字符集,規定了每一個字符對應的二進制代碼,至於這個二進制代碼如何存儲則沒有規定
- >Unicode編碼方案:
UTF-8:變長,1到4個字節
UTF-16:變長,2或4個字節
UTF-32:固定長度,4個字節
字符集和編碼:- >UTF-8 是目前互聯網上使用最普遍的一種 Unicode 編碼方式,可變長存儲。使用 1 - 4 個字節表示一個字符,根據字符的不一樣變換長度。編碼規則以下:
- >對於單個字節的字符,第一位設爲 0,後面的 7 位對應這個字符的 Unicode 碼。所以,對於英文中的 0 - 127 號字符,與 ASCII 碼徹底相同。這意味着ASCII 碼的文檔可用 UTF-8 編碼打開
- >對於須要使用 N 個字節來表示的字符(N > 1),第一個字節的前 N 位都設爲 1,第 N + 1 位設爲0,剩餘的 N - 1 個字節的前兩位都設位 10,剩下的二進制位則使用這個字符的 Unicode 碼來填充
- >編碼轉換和查詢:
http://www.chi2ko.com/tool/CJK.htm
https://javawind.net/tools/native2ascii.jsp?action=transform
http://tool.oschina.net/encode- >命令行擴展:$( ) 或
` : <br/>把一個命令的輸出打印給另外一個命令的參數 <br/>echo "This system's name is $(hostname) "<br/>This system's name is server1.example.com<br/>echo "i am
whoami` "
i am root- >括號擴展:{ }
打印重複字符串的簡化形式
echo file{1,3,5} 結果爲:file1 file3 file5
rm -f file{1,3,5}
echo {1..10}打印1到10的數字
echo {a..z}打印26個小寫英文字母
echo {000..20..2}打印從001 到 020 每次增長兩個數
tab鍵:linux經常使用的按鍵 會節約時間 和精力來記一些很長的路徑和命令的英文通常知道英文開頭幾個字母都能用tab來補全- >命令補全
內部命令:
外部命令:bash根據PATH環境變量定義的路徑,自左而右在每一個路徑搜尋以給定命令名命名的文件,第一次找到的命令即爲要執行的命令
用戶給定的字符串只有一條唯一對應的命令,直接補全
不然,再次Tab會給出列表- >路徑補全
把用戶給出的字符串當作路徑開頭,並在其指定上級目錄下搜索以指定的字
符串開頭的文件名
若是唯一:則直接補全
不然:再次Tab給出列表
命令行歷史:- >保存你輸入的命令歷史。能夠用它來重複執行命令
- >登陸shell時,會讀取命令歷史文件中記錄下的命令~/.bash_history
- >登陸進shell後新執行的命令只會記錄在緩存中;這些命令會用戶退出時「追加」至命令歷史文件中
重複前一個命令,有4種方法
重複前一個命令使用上方向鍵,並回車執行
按 !! 並回車執行
輸入 !-1 並回車執行
按 Ctrl+p 並回車執行
!:0 執行前一條命令(去除參數)
Ctrl + n 顯示當前歷史中的下一條命令,但不執行
Ctrl + j 執行當前命令
!n 執行history命令輸出對應序號n的命令
!-n 執行history歷史中倒數第n個命令
命令行歷史
!string 重複前一個以「string」開頭的命令
!?string 重複前一個包含string的命令
!string:p 僅打印命令歷史,而不執行
!$:p 打印輸出 !$ (上一條命令的最後一個參數)的內容
!:p 打印輸出 !(上一條命令的全部參數)的內容
^string 刪除上一條命令中的第一個string
^string1^string2 將上一條命令中的第一個string1替換爲string2
!:gs/string1/string2 將上一條命令中全部的string1都替換爲 string2
使用up(向上)和down(向下)鍵來上下瀏覽從前輸入的命令
ctrl-r來在命令歷史中搜索命令
(reverse-i-search)`’:
Ctrl+g:從歷史搜索模式退出
要從新調用前一個命令中最後一個參數
!$ 表示
Esc, .(點擊Esc鍵後鬆開,而後點擊 . 鍵)
Alt+ .(按住Alt鍵的同時點擊 . 鍵)
命令history:
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
-c: 清空命令歷史
-d offset: 刪除歷史中指定的第offset個命令
n: 顯示最近的n條歷史
-a: 追加本次會話新執行的命令歷史列表至歷史文件
-r: 讀歷史文件附加到歷史列表
-w: 保存歷史列表到指定的歷史文件
-n: 讀歷史文件中未讀過的行到歷史列表
-p: 展開歷史參數成多行,但不存在歷史列表中
-s: 展開歷史參數成一行,附加在歷史列表後命令歷史
相關環境變量:
HISTSIZE:命令歷史記錄的條數
HISTFILE:指定歷史文件,默認爲~/.bash_history
HISTFILESIZE:命令歷史文件記錄歷史的條數
HISTTIMEFORMAT=「%F %T 「 顯示時間
HISTIGNORE=「str1:str2*:… 「 忽略str1命令, str2開頭的歷史
控制命令歷史的記錄方式:
環境變量:HISTCONTROL
ignoredups 默認,忽略重複的命令,連續且相同爲「重複」
ignorespace 忽略全部以空白開頭的命令
ignoreboth 至關於ignoredups, ignorespace的組合
erasedups 刪除重複命令
export 變量名="值「
存放在 /etc/profile 或 ~/.bash_profile
bash的快捷鍵:
Ctrl + a 光標移到命令行首,至關於Home
Ctrl + e 光標移到命令行尾,至關於End
Ctrl + f 光標向右移動一個字符
Ctrl + b 光標向左移動一個字符
Alt + f 光標向右移動一個單詞尾
Alt + b 光標向左移動一個單詞首
Ctrl + xx 光標在命令行首和光標之間移動
Ctrl + u 從光標處刪除至命令行首
Ctrl + k 從光標處刪除至命令行尾
Alt + r 刪除當前整行
Ctrl + w 從光標處向左刪除至單詞首
Alt + d 從光標處向右刪除至單詞尾
Ctrl + d 刪除光標處的一個字符
Ctrl + h 刪除光標前的一個字符
Ctrl + y 將刪除的字符粘貼至光標後
Alt + c 從光標處開始向右更改成首字母大寫的單詞
Alt + u 從光標處開始,將右邊一個單詞更改成大寫
Alt + l 從光標處開始,將右邊一個單詞更改成小寫
Ctrl + t 交換光標處和以前的字符位置
Alt + t 交換光標處和以前的單詞位置
Alt + N 提示輸入指定字符後,重複顯示該字符N次
注意:Alt組合快捷鍵常常和其它軟件衝突
得到幫助:
>獲取幫助的能力決定了技術的能力!
多層次的幫助
whatis
command --help
man and info
/usr/share/doc/
Red Hat documentation
其它網站和搜索
whatis:
顯示命令的簡短描述
使用數據庫
剛安裝後不可當即使用
makewhatis | mandb製做數據庫 centos6用makewhatis centos7用mandb
使用示例:
whatis cal 或 man –f cal內部命令:help COMMAND 或 man bash
外部命令: (1) COMMAND --help 或 COMMAND -h
(2) 使用手冊(manual)
man COMMAND
(3) 信息頁
info COMMAND
(4) 程序自身的幫助文檔
README
INSTALL
ChangeLog
(5) 程序官方文檔
官方站點:Documentation
(6) 發行版的官方文檔
(7) Google
--help或-h 選項
顯示用法總結和參數列表
使用的大多數,但並不是全部的
示例:
date --help
Usage: date [OPTION]... [+FORMAT] or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
[] 表示可選項
CAPS或 <> 表示變化的數據
... 表示一個列表
x |y| z 的意思是「 x 或 y 或 z 「
-abc的 意思是-a -b –c
{ } 表示分組
man命令:
提供命令幫助的文件
手冊頁存放在/usr/share/man
幾乎每一個命令都有man的「頁面」
man頁面分組爲不一樣的「章節」
統稱爲Linux手冊
man命令的配置文件:/etc/man.config | man_db.conf
MANPATH /PATH/TO/SOMEWHERE: 指明man文件搜索位置
man -M /PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索
COMMAND命令的手冊頁並顯示
中文man需安裝包man-pages-zh-CN (不推薦安裝中文版 最新出來的幫助或技術文檔都是英語版的 要養成看英文文檔的習慣)
man 章節
man 1 man
1:用戶命令
2:系統調用
3:C庫調用
4:設備文件及特殊文件
5:配置文件格式
6:遊戲
7:雜項
8:管理類的命令
9:Linux 內核API
man 幫助
查看man手冊頁
man [章節] keyword
列出全部幫助
man –a keyword
搜索man手冊
man -k keyword 列出全部匹配的頁面
使用 whatis 數據庫
至關於whatis
man –f keyword
打印man幫助文件的路徑
man –w [章節] keyword
man命令的操做方法:使用less命令實現
space, ^v, ^f, ^F: 向文件尾翻屏
b, ^b: 向文件首部翻屏
d, ^d: 向文件尾部翻半屏
u, ^u: 向文件首部翻半屏
RETURN, ^N, e, ^E or j or ^J: 向文件尾部翻一行
y or ^Y or ^P or k or ^K:向文件首部翻一行
q: 退出
#:跳轉至第#行
1G: 回到文件首部
G:翻至文件尾部
/usr/share/doc目錄
多數安裝了的軟件包的子目錄,包括了這些軟件的相關原理說明
常見文檔:README INSTALL CHANGES
不適合其它地方的文檔的位置
配置文件範例
HTML/PDF/PS 格式的文檔
受權書詳情
經過在線文檔獲取幫助:
http://httpd.apache.org
http://www.nginx.org
https://mariadb.com/kb/en
https://dev.mysql.com/doc/
http://tomcat.apache.org
http://www.python.org
經過發行版官方的文檔光盤或網站能夠得到
安裝指南、部署指南、虛擬化指南等
紅帽知識庫和官方在線文檔
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
https://help.ubuntu.com/lts/serverguide/index.html
網站和搜索:
http://tldp.org
http://www.slideshare.net
http://www.google.com
Openstack filetype:pdf
rhca site:redhat.com/docs
文件管理
===
文件系統
文件和目錄被組織成一個單根倒置樹結構
文件系統從根目錄下開始,用「/」表示
根文件系統(rootfs):root filesystem
文件名稱區分大小寫
以.開頭的文件爲隱藏文件
路徑分隔的 /
文件有兩類數據:元數據:metadata
數據:data
文件系統分層結構:LSB Linux Standard Base
FHS: (Filesystem Hierarchy Standard)
http://www.pathname.com/fhs/
文件名規則:
文件名最長255個字節
包括路徑在內文件名稱最長4095個字節
藍色-->目錄 綠色-->可執行文件 紅色-->壓縮文件 淺藍色-->連接文件 灰色-->其餘文件
除了斜槓和NUL,全部字符都有效.但使用特殊字符的目錄名和文件不推薦使用,
有些字符須要用引號來引用它們
標準Linux文件系統(如ext4),文件名稱大小寫敏感
例如:MAIL, Mail, mail, mAiL
文件系統結構:
/boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader, grub)
都存放於此目錄
/bin:全部用戶使用的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序
/sbin:管理類的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序
/lib:啓動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)
/lib64:專用於x86_64系統上的輔助共享庫文件存放位置
/etc:配置文件目錄
/home/USERNAME:普通用戶家目錄
/root:管理員的家目錄
/media:便攜式移動設備掛載點
/mnt:臨時文件系統掛載點
/dev:設備文件及特殊文件存儲位置
b: block device,隨機訪問
c: character device,線性訪問
/opt:第三方應用程序的安裝位置
/srv:系統上運行的服務用到的數據
/tmp:臨時文件存儲位置
/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/var: variable data files
cache: 應用程序緩存數據目錄
lib: 應用程序狀態信息數據
local:專用於爲/usr/local下的應用程序存儲可變數據
lock: 鎖文件
log: 日誌目錄及文件
opt: 專用於爲/opt下的應用程序存儲可變數據
run: 運行中的進程相關數據,一般用於存儲進程pid文件
spool: 應用程序數據池
tmp: 保存系統兩次重啓之間產生的臨時數據
/proc: 用於輸出內核與進程信息相關的虛擬文件系統
/sys:用於輸出當前系統上硬件設備相關信息虛擬文件系統
/selinux: security enhanced Linux,selinux相關的安全策略等信息的存儲位置
Linux下的文件類型:
- 普通文件
d 目錄文件
b 塊設備
c 字符設備
l 符號連接文件
p 管道文件pipe
s 套接字文件socket
CentOS 7目錄變化: 都是軟鏈接指向/usr下的
/bin 和 /usr/bin
/sbin 和 /usr/sbin
/lib 和/usr/lib
/lib64 和 /usr/lib64
顯示當前工做目錄:
pwd
-P 顯示真實物理路徑
-L 顯示連接路徑(默認)
顯示當前shell CWD的絕對路徑
絕對和相對路徑:
絕對路徑
以正斜槓開始
完整的文件的位置路徑
可用於任何想指定一個文件名的時候
相對路徑名
不以斜線開始
指定相對於當前工做目錄或某目錄的位置
能夠做爲一個簡短的形式指定一個文件名
基名:basename
目錄名:dirnamecd 改變目錄
使用絕對或相對路徑:
cd /home/wang/
cd home/wang
切換至父目錄: cd ..
切換至當前用戶主目錄: cd
切換至之前的工做目錄: cd -
選項:-P
相關的環境變量:PWD:當前目錄路徑
OLDPWD:上一次目錄路徑
列出目錄內容,列出當前目錄的內容或指定目錄用法: ls [options] [files_or_dirs]
示例ls -a 包含隱藏文件
ls -l 顯示額外的信息
ls -R 目錄遞歸
ls -ld 目錄和符號連接信息
ls -1 文件分行顯示
ls –S 按從大到小排序
ls –t 按mtime排序
ls –u 配合-t選項,顯示並按atime重新到舊排序
ls –U 按目錄存放順序顯示
ls –X 按文件後綴排序查看文件狀態
stat
文件:metadata, data
三個時間戳:
access time 訪問時間,atime,讀取文件內容
modify time 修改時間, mtime,改變文件內容(數據)
change time 改變時間, ctime,元數據發生
通配符模式 wild-card pattern:
* 匹配零個或多個字符
? 匹配任何單個字符
~ 當前用戶家目錄
~mage 用戶mage家目錄
~+ 當前工做目錄
~- 前一個工做目錄
[0-9] 匹配數字範圍
[a-z]:字母
[A-Z]:字母
[wang] 匹配列表中的任何的一個字符
[^wang] 匹配列表中的全部字符之外的字符
預約義的字符類:man 7 glob:
[:digit:]:任意數字,至關於0-9
[:lower:]:任意小寫字母[:alnum:]:任意數字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:標點符號
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:圖形字符
[:xdigit:]:十六進制字符
建立空文件和刷新時間:
touch命令:
格式:touch [OPTION]... FILE...
-a 僅改變 atime和ctime
-m 僅改變 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的時間戳
-c 若是文件不存在,則不予建立
複製文件和目錄cp:
cp經常使用選項:
-i 覆蓋前提示
-n 不覆蓋,注意二者順序
-r, -R 遞歸複製目錄及內部的全部內容
-a 歸檔,至關於-dR --preserv=all
-d --no-dereference --preserv=links 不復制原文件,只複製連接名
--preserv[=ATTR_LIST]
mode: 權限
ownership: 屬主屬組
timestamp:
links
xattr
context
all
-p 等同--preserv=mode,ownership,timestamp
-v --verbose
-f --force
-u --update 只複製源比目標更新文件或目標不存在的文件
-b 目標存在,覆蓋前先備份,形式爲 filename~
--backup=numbered 目標存在,覆蓋前先備份加數字後綴
移動和重命名文件
mv 經常使用選項:
-i 交互式
-f 強制
-b 目標存在,覆蓋前先備份
刪除
rm 經常使用選項:
-i 交互式
-f 強制刪除
-r 遞歸
--no-preserve-root 刪除/
示例:
rm -rf /*
目錄操做
tree 顯示目錄樹 (若是沒有找到這個命令則須要安裝 [root@ldap dev]# rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm )
-d: 只顯示目錄
-L level:指定顯示的層級數目
-P pattern: 只顯示由指定wild-card pattern匹配到的路徑
mkdir 建立目錄
-p: 存在於不報錯,且可自動建立所需的各目錄
-v: 顯示詳細信息
-m MODE: 建立目錄時直接指定權限
rmdir 刪除空目錄
-p: 遞歸刪除父空目錄
-v: 顯示詳細信息
rm -r 遞歸刪除目錄樹
索引節點:
inode(index node)表中包含文件系統全部文件列表
一個節點 (索引節點)是在一個表項,包含有關文件的信息( 元數據 ),包括:
文件類型,權限,UID,GID
連接數(指向這個文件名路徑名稱個數)
該文件的大小和不一樣的時間戳
指向磁盤上文件的數據塊指針
有關文件的其餘數據
文件引用一個是 inode號
人是經過文件名來引用一個文件
一個目錄是目錄下的文件名和文件inode號之間的映射
indoe表
cp和inode
cp 命令:
分配一個空閒的inode號,在inode表中生成新條目
在目錄中建立一個目錄項,將名稱與inode編號關聯
拷貝數據生成新的文件
rm和inode
rm 命令:
連接數遞減,從而釋放的inode號能夠被重用
把數據塊放在空閒列表中
刪除目錄項
數據實際上不會立刻被刪除,但當另外一個文件使用數據塊時將被覆蓋
mv和inode
若是mv命令的目標和源在相同的文件系統,做爲mv 命令
用新的文件名建立對應新的目錄項
刪除舊目錄條目對應的舊的文件名
不影響inode表(除時間戳)或磁盤上的數據位置:沒有數據被移動!
若是目標和源在一個不一樣的文件系統, mv至關於cp和rm
mv和inode
若是mv命令的目標和源在相同的文件系統,做爲mv 命令
用新的文件名建立對應新的目錄項
刪除舊目錄條目對應的舊的文件名
不影響inode表(除時間戳)或磁盤上的數據位置:沒有數據被移動!
若是目標和源在一個不一樣的文件系統, mv至關於cp和rm
硬連接
建立硬連接會增長額外的記錄項以引用文件
對應於同一文件系統上一個物理文件
每一個目錄引用相同的inode號
建立時連接數遞增
刪除文件時:
rm命令遞減計數的連接
文件要存在,至少有一個連接數
當連接數爲零時,該文件被刪除
不能跨越驅動器或分區
語法:
ln filename [linkname ]
符號(或軟)連接
一個符號連接指向另外一個文件
ls - l的 顯示連接的名稱和引用的文件
一個符號連接的內容是它引用文件的名稱
能夠對目錄進行
能夠跨分區
指向的是另外一個文件的路徑;其大小爲指向的路徑字符串的長度;不增長或減小目標文件inode的引用計數
語法:
ln -s filename [linkname]
肯定文件內容
文件能夠包含多種類型的數據
檢查文件的類型,而後肯定適當的打開命令或應用程序使用
file [options] <filename>...
經常使用選項:
-b 列出文件辨識結果時,不顯示文件名稱
-f filelist 列出文件filelist中文件名的文件類型
-F 使用指定分隔符號替換輸出文件名後默認的」:」分隔符
-L 查看對應軟連接對應文件的文件類型
--help 顯示命令在線幫助
vim簡介
===
官網:www.vim.org
打開文件:
# vim [OPTION]... FILE...
+# 打開文件後,讓光標處於第#行的行首,+默認行尾
+/PATTERN 讓光標處於第一個被PATTERN匹配到的行的行首
–b file 二進制方式打開文件
–d file1 file2… 比較多個文件
-m file 只讀打開文件
vim -e file 或 ex file 直接進入ex模式
若是該文件存在,文件被打開並顯示內容若是該文件不存在,當編輯後第一次存盤時建立它
vim:一個模式編輯器
擊鍵行爲是依賴於 vim的 的「模式」
三種主要模式:
命令(Normal)模式:默認模式,移動光標,剪切/粘貼文本
插入(Insert)或編輯模式:修改文本
擴展命令(extended command )模式:保存,退出等
Esc鍵 退出當前模式
Esc鍵 Esc鍵 老是返回到命令模式
模式轉換:
命令模式 --> 插入模式
i insert, 在光標所在處輸入
I 在當前光標所在行的行首輸入
a append, 在光標所在處後面輸入
A 在當前光標所在行的行尾輸入
o 在當前光標所在行的下方打開一個新行
O 在當前光標所在行的上方打開一個新行
插入模式 --------> 命令模式
ESC
命令模式 --------> 擴展命令模式
:
擴展命令模式 --------> 命令模式
ESC,enter
關閉文件:
擴展命令模式:
:q 退出
:q! 強制退出,丟棄作出的修改
:wq 保存退出
:x 保存退出命令模式
ZZ 保存退出
ZQ 不保存退出
擴展命令模式:
按「:」進入Ex模式
建立一個命令提示符: 處於底部的屏幕左側常見命令
w 寫(存)磁盤文件
wq 寫入並退出
x 寫入並退出
q 退出
q! 不存盤退出,即便更改都將丟失
r filename 讀文件內容到當前文件中
w filename 將當前文件內容寫入另外一個文件
!command 執行命令
r!command 讀入命令的輸出
命令模式光標跳轉:
字符間跳轉:
h: 左 l: 右 j: 下 k: 上
命令模式操做
字符編輯:
x 刪除光標處的字符
#x 刪除光標處起始的#個字符
xp 交換光標所在處的字符及其後面字符的位置
~ 轉換大小寫
J 刪除當前行後的換行符
替換命令(r, replace)
r 替換光標所在處的字符
R 切換成REPLACE模式
刪除命令:
d 刪除命令,可結合光標跳轉字符,實現範圍刪除
d$ 刪除到行尾
d^ 刪除到非空行首
d0 刪除到行首
dw
de
db
dd:刪除光標所在的行
#dd 多行刪除
D:從當前光標位置一直刪除到行尾,等同於d$
複製命令(y, yank):
y 複製,行爲類似於d命令
y$
y0
y^
ye
yw
yb
yy:複製行
#yy 複製多行
Y:複製整行
命令模式操做 :
粘貼命令(p, paste):
p 緩衝區存的若是爲整行,則粘貼當前光標所在行的下方;不然,則粘貼至當前光標所在處的後面
P 緩衝區存的若是爲整行,則粘貼當前光標所在行的上方;不然,則粘貼至當前光標所在處的前面
命令模式操做:
改變命令(c, change)
c: 修改後切換成插入模式
命令模式 --> 插入模式
c$
c^
c0
cb
ce
cw
cc:刪除當前行並輸入新內容,至關於S
#cc
C:刪除當前光標到行尾,並切換成插入模式
命令模式
100iwang [ESC] 粘貼「wang」100次
<start position><command><end position>
常見Command
y 複製、d 刪除、gU 變大寫、gu 變小寫
例如: 0y$ 命令
0 → 先到行頭
y → 從這裏開始拷貝
$ → 拷貝到本行最後一個字符
命令模式:
di" 光標在」「之間,則刪除」「之間的內容
yi( 光標在()之間,則複製()之間的內容
vi[ 光標在[]之間,則選中[]之間的內容
dtx 刪除字符直到碰見光標以後的第一個 x 字符
ytx 複製字符直到碰見光標以後的第一個 x 字符
擴展命令模式:地址定界
地址定界
:start_pos,end_pos
# 具體第#行,例如2表示第2行
#,# 從左側#表示起始行,到右側#表示結尾行
#,+# 從左側#表示的起始行,加上右側#表示的行數
示例:2,+3 表示2到5行
. 當前行
$ 最後一行
.,$-1 當前行到倒數第二行
% 全文, 至關於1,$
使用方式:後跟一個編輯命令
d
y
w file: 將範圍內的行另存至指定文件中
r file:在指定位置插入指定文件中的全部內容
命令模式:查找
查找
/PATTERN:從當前光標所在處向文件尾部查找
?PATTERN:從當前光標所在處向文件首部查找
n:與命令同方向
N:與命令反方向
命令模式:撤消更改
u 撤銷最近的更改
#u 撤銷以前屢次更改
U 撤消光標落在這行後全部此行的更改
Ctrl - r 重作最後的「撤消」更改
. 重複前一個操做
#. 重複前一個操做#次
有26個命名寄存器和1個無命名寄存器,常存放不一樣的剪貼版內容,能夠不一樣會話間共享
寄存器名稱a,b,…,z,格式:「寄存器 放在數字和命令之間
如:3"tyy 表示複製3行到t寄存器中
"tp 表示將t寄存器內容粘貼
未指定,將使用無命名寄存器
有10個數字寄存器,用0,1,…,9表示,0存放最近複製內容,1存放最近刪除內容。
當新的文本變動和刪除時,1轉存到2,2轉存到3,以此類推。數字寄存器不能在不
同會話間共享
vim的寄存器
標記和宏(macro)
ma 將當前位置標記爲a,26個字母都可作標記, mb 、 mc 等等
'a 跳轉到a標記的位置,實用的文檔內標記方法,文檔中跳躍編輯時頗有用
qa 錄製宏 a,a爲宏的名稱
q 中止錄製宏
@a 執行宏 a
@@ 從新執行上次執行的宏
擴展命令模式:查找並替換
在擴展命令模式下完成查找替換操做
格式:s/要查找的內容/替換爲的內容/修飾符
要查找的內容:可以使用模式
替換爲的內容:不能使用模式,但可使用\1, \2, ...等後向引用符號;還可
以使用「&」引用前面查找時查找到的整個內容
修飾符:
i 忽略大小寫
g 全局替換,默認狀況下,每一行只替換第一次出現
gc 全局替換,每次替換前詢問
查找替換中的分隔符/可替換爲其它字符
s@/etc@/var@g
s#/boot#/#i編輯二進制文件
以二進制方式打開文件
vim -b binaryfile
擴展命令模式下,利用xxd命令轉換爲可讀的十六進制
:%!xxd
插入模式下,編輯二進制文件
擴展命令模式下,利用xxd命令轉換回二進制
:%!xxd -r
保存退出
可視化模式
容許選擇的文本塊
v 面向字符
V 面向行
ctrl-v 面向塊
可視化鍵可用於與移動鍵結合使用w ) } 箭頭等
突出顯示的文字可被刪除,複製,變動,過濾,搜索,替換等
使用多個「窗口」
多文件分割
vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O: 垂直分割
在窗口間切換:Ctrl+w, Arrow
單文件窗口分割
Ctrl+w,s:split, 水平分割
Ctrl+w,v:vertical, 垂直分割
ctrl+w,q:取消相鄰窗口
ctrl+w,o:取消所有窗口
:wqall 退出
定製vim的工做特性
配置文件:永久有效
全局:/etc/vimrc
我的:~/.vimrc
擴展命令模式:當前vim進程有效
(1) 行號
顯示:set number,簡寫 set nu
取消顯示:set nonumber, 簡寫 set nonu
(2) 忽略字符的大小寫
啓用:set ignorecase,簡寫 set ic
不忽略:set noic
(3) 自動縮進
啓用:set autoindent,簡寫 set ai
禁用:set noai
定製vim的工做特性
(4) 複製保留格式
啓用:set paste
禁用:set nopaste
(5) 顯示Tab和換行符 ^I 和$顯示
啓用:set list
禁用:set nolist
(6) 高亮搜索
啓用:set hlsearch
禁用:set nohlsearch
(7) 語法高亮
啓用:syntax on
禁用:syntax off
定製vim的工做特性
(8) 文件格式
啓用windows格式:set fileformat=do s
啓用unix格式:set fileformat=unix
簡寫 set ff=dos|unix
(9) 設置文本寬度
set textwidth=65 (vim only)
set wrapmargin=15
(10) 設置光標所在行的標識線
啓用:set cursorline,簡寫 set cul
禁用:set nocursorline
標準I/O和管道
===
標準輸入和輸出
程序:指令+數據
讀入數據:Input
輸出數據:Output
打開的文件都有一個fd: file descriptor (文件描述符)Linux給程序提供三種 I/O 設備
標準輸入(STDIN)-0 默認接受來自鍵盤的輸入
標準輸出(STDOUT)-1 默認輸出到終端窗口
標準錯誤(STDERR)-2 默認輸出到終端窗口
I/O重定向:改變默認位置
把輸出和錯誤從新定向到文件:
STDOUT和STDERR能夠被重定向到文件
命令 操做符號 文件名
支持的操做符號包括:
\> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把全部輸出重定向到文件
\> 文件內容會被覆蓋set -C 禁止將內容覆蓋已有文件,但可追加
\>| file 強制覆蓋
set +C 容許覆蓋
\>> 原有內容基礎上,追加內容
把輸出和錯誤從新定向到文件:
2> 覆蓋重定向錯誤輸出數據流
2>> 追加劇定向錯誤輸出數據流
標準輸出和錯誤輸出各自定向至不一樣位置
COMMAND > /path/to/file.out 2> /path/to/error.out
合併標準輸出和錯誤輸出爲同一個數據流進行重定向
&> 覆蓋重定向
&>> 追加劇定向
COMMAND > /path/to/file.out 2>&1 (順序很重要)
COMMAND >> /path/to/file.out 2>&1
():合併多個程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt
tr命令
tr 轉換和刪除字符
tr [OPTION]... SET1 [SET2]
選項:-c –C --complement:取字符集的補集
-d --delete:刪除全部屬於第一字符集的字符
-s --squeeze-repeats:把連續重複的字符以單獨一個字符表示
-t --truncate-set1:將第一個字符集對應字符轉化爲第二字符集對應的字符
[:alnum:]:字母和數字
:alpha::字母
[:cntrl:]:控制(非打印)字符
[:digit:]:數字
[:graph:]:圖形字符
[:lower:]:小寫字母
[:print:]:可打印字符
[:punct:]:標點符號
[:space:]:空白字符
:upper::大寫字母
[:xdigit:]:十六進制字符
從文件中導入STDIN:
用 < 來重定向標準輸入
某些命令可以接受從文件中導入的STDINtr ‘a-z’ ‘A-Z’< /etc/issue
該命令會把/etc/issue中的小寫字符都轉換成大寫字符
tr –d abc < /etc/fstab
刪除fstab文件中的全部abc中任意字符cat > file
mage
wangxiaochun
按ctrl+d離開,可使用文件來代替鍵盤的輸入
cat < file1 > file2
cat < file1 >> file1
把多行發送給STDIN:
使用「<<終止詞」命令從鍵盤把多行重導向給STDIN
直到 終止詞 位置的全部文本都發送給STDIN
有時被稱爲就地文本(here documents)
mail -s "Please Call" admin@magedu.com <<END
\> Hi Wang
\>
\> Please give me a call when you get in. We may need
\> to do some maintenance on server1.
\>
\> Details when you're on-site
\> Zhang
\> END
管道:
管道(使用符號「|」表示)用來鏈接命令
命令1 | 命令2 | 命令3 | …
將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的
STDIN
STDERR默認不能經過管道轉發,可利用2>&1 或 |& 實現
最後一個命令會在當前shell進程的子shell進程中執行
組合多種工具的功能
ls | tr ‘a-z’ ‘A-Z’
管道
less :一頁一頁地查看輸入
ls -l /etc | less
mail: 經過電子郵件發送輸入
echo "test email" | mail -s "test" wang@example.com
bc:算術運算
echo "2^3" |bc
管道中 - 符號示例:
將 /home 裏面的文件打包,但打包的數據不是記錄到文件,而是傳送到 stdout,通過管道後,將 tar -cvf - /home 傳送給後面的 tar -xvf - , 後面的這個 - 則是取前一個命令的 stdout, 所以,就不須要使用臨時file了
tar -cvf - /home | tar -xvf -
重定向到多個目標(tee)
命令1 | tee [-a ] 文件名 | 命令2
把命令1的STDOUT保存在文件中,作爲命令2的輸入
-a 追加
使用:
保存不一樣階段的輸出
複雜管道的故障排除
同時查看和記錄輸出
用戶、組和權限管理
===
介紹安全3A
資源分派:
Authentication:認證
Authorization:受權
Accouting|Audition:審計用戶user :
令牌token,identity
Linux用戶:Username/UID
管理員:root, 0
普通用戶:1-60000 自動分配
系統用戶:1-499, 1-999 (CentOS7)
對守護進程獲取資源進行權限分配
登陸用戶:500+, 1000+(CentOS7)
交互式登陸
組group:
Linux組:Groupname/GID
管理員組:root, 0
普通組:
系統組:1-499, 1-999(CENTOS7)
普通組:500+, 1000+(CENTOS7)
安全上下文:
Linux安全上下文
運行中的程序:進程 (process)
以進程發起者的身份運行:
root: /bin/cat
mage: /bin/cat
進程所可以訪問資源的權限取決於進程的運行者的身份
組的類別:
Linux組的類別
用戶的主要組(primary group)
用戶必須屬於一個且只有一個主組
組名同用戶名,且僅包含一個用戶,私有組
用戶的附加組(supplementary group)
一個用戶能夠屬於零個或多個輔助組
用戶和組的配置文件:
Linux用戶和組的主要配置文件:
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬性
passwd文件格式:
login name:登陸用名(wang)
passwd:密碼 (x)
UID:用戶身份編號 (1000)
GID:登陸默認所在組編號 (1000)
GECOS:用戶全名或註釋
home directory:用戶主目錄 (/home/wang)
shell:用戶默認使用shell (/bin/bash)
shadow文件格式:
登陸用名
用戶密碼:通常用sha512加密
從1970年1月1日起到密碼最近一次被更改的時間
密碼再過幾天能夠被變動(0表示隨時可被變動)
密碼再過幾天必須被變動(99999表示永不過時)
密碼過時前幾天系統提醒用戶(默認爲一週)
密碼過時幾天後賬號會被鎖定
從1970年1月1日算起,多少天后賬號失效
group文件格式:
羣組名稱:就是羣組名稱
羣組密碼:一般不須要設定,密碼是被記錄在 /etc/gshadow
GID:就是羣組的 ID
以當前組爲附加組的用戶列表(分隔符爲逗號)
gshdow文件格式:
羣組名稱:就是羣的名稱
羣組密碼:
組管理員列表:組管理員的列表,更改組密碼和成員
以當前組爲附加組的用戶列表:多個用戶間用逗號分隔
用戶和組管理命令:
用戶管理命令
useradd
usermod
userdel組賬號維護命令
groupadd
groupmod
groupdel
用戶建立:useradd
useradd [options] LOGIN
-u UID
-o 配合-u 選項,不檢查UID的惟一性
-g GID 指明用戶所屬基本組,可爲組名,也能夠GID
-c "COMMENT「 用戶的註釋信息
-d HOME_DIR 以指定的路徑(不存在)爲家目錄
-s SHELL 指明用戶的默認shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 爲用戶指明附加組,組須事先存在
-N 不建立私用組作主組,使用users組作主組
-r 建立系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
-m 建立家目錄,用於系統用戶
-M 不建立家目錄,用於非系統用戶
建立用戶: useradd
默認值設定:/etc/default/useradd
顯示或更改默認設置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP新建用戶的相關文件和命令
/etc/default/useradd
/etc/skel/*
/etc/login.defs
newusers passwd格式文件 批量建立用戶
chpasswd 批量修改用戶口令
用戶屬性修改
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主組
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被
覆蓋;若保留原有,則要同時使用-a選項
-s SHELL:新的默認SHELL
-c 'COMMENT':新的註釋信息
-d HOME: 新家目錄不會自動建立;若要建立新家目錄並移動原家數據,
同時使用-m選項
-l login_name: 新的名字
-L: lock指定用戶,在/etc/shadow 密碼欄的增長 !
-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
-e YYYY-MM-DD: 指明用戶帳號過時日期
-f INACTIVE: 設定非活動期限
刪除用戶
userdel [OPTION]... login
-r: 刪除用戶家目錄
查看用戶相關的ID信息
id [OPTION]... [USER]
-u: 顯示UID
-g: 顯示GID
-G: 顯示用戶所屬的組的ID
-n: 顯示名稱,需配合ugG使用切換用戶或以其餘用戶身份執行命令
su [options...] [-] [user [args...]]
切換用戶的方式:
su UserName:非登陸式切換,即不會讀取目標用戶的配置文件,不改變
當前工做目錄
su - UserName:登陸式切換,會讀取目標用戶的配置文件,切換至家目
錄,徹底切換
root su至其餘用戶無須密碼;非root用戶切換時須要密碼
換個身份執行命令 :
su [-] UserName -c 'COMMAND'
選項:-l --login
su -l UserName 至關於 su - UserName
設置密碼
passwd [OPTIONS] UserName: 修改指定用戶的密碼
經常使用選項:
-d:刪除指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登陸修改密碼
-f:強制操做
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提早多少天開始警告
-i inactivedays:非活動期限
--stdin:從標準輸入接收用戶密碼
示例:echo "PASSWORD" | passwd --stdin USERNAME
修改用戶密碼策略
chage [OPTION]... LOGIN
-d LAST_DAY
-E --expiredate EXPIRE_DATE
-I --inactive INACTIVE
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-l 顯示密碼策略示例:
chage -d 0 tom 下一次登陸強制重設密碼
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom用戶相關的其它命令
chfn 指定我的信息
chsh 指定shell
finger
建立組:
groupadd [OPTION]... group_name
-g GID 指明GID號;[GID_MIN, GID_MAX]
-r 建立系統組
CentOS 6: ID<500
CentOS 7: ID<1000
修改和刪除組 :
組屬性修改:groupmod
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID組刪除:groupdel
groupdel GROUP
更改組密碼組密碼:gpasswd
gpasswd [OPTION] GROUP
-a user 將user添加至指定組中
-d user 從指定組中移除用戶user
-A user1,user2,... 設置有管理權限的用戶列表newgrp命令:臨時切換主組
若是用戶本不屬於此組,則須要組密碼更改和查看組成員
groupmems [options] [action]
options:
-g, --group groupname 更改成指定組 (只有root)
actions:
-a, --add username 指定用戶加入組
-d, --delete username 從組中刪除用戶
-p, --purge 從組中清除全部成員
-l, --list 顯示組成員列表
groups [OPTION].[USERNAME]... 查看用戶所屬組列表
文件屬性
修改文件的屬主和屬組
修改文件的屬主:chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...用法說明:
OWNER
OWNER:GROUP
:GROUP,冒號也可用 . 替換
-R: 遞歸
chown [OPTION]... --reference=RFILE FILE...修改文件的屬組:chgrp
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R 遞歸
文件權限
文件的權限主要針對三類對象進行定義
owner 屬主, u
group 屬組, g
other 其餘, o每一個文件針對每類訪問者都定義了三種權限
r Readable
w Writable
x eXcutable
文件權限
文件:
r 可以使用文件查看類工具獲取其內容
w 可修改其內容
x 能夠把此文件提請內核啓動爲一個進程
目錄:
r 可使用ls查看此目錄中文件列表
w 可在此目錄中建立文件,也可刪除此目錄中的文件
x 可使用ls -l查看此目錄中文件元數據(須配合r),能夠cd進入此目錄
X 只給目錄x權限,不給文件x權限
修改文件權限
chmod [OPTION]... OCTAL-MODE FILE...
-R: 遞歸修改權限
chmod [OPTION]... MODE[,MODE]... FILE...
MODE:
修改一類用戶的全部權限
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + -
chmod [OPTION]... --reference=RFILE FILE...
參考RFILE文件的權限,將FILE的修改成同RFILE
chgrp sales testfile
chown root:admins testfile
chmod u+wx,g-r,o=rx file
chmod -R g+rwX /testdir
chmod 600 file
chown mage testfile
權限設置示例
新建文件和目錄的默認權限
umask值 能夠用來保留在建立文件權限
新建文件的默認權限: 666-umask,若是所得結果某位存在執行(奇數)權
限,則將其權限+1
新建目錄的默認權限: 777-umask
非特權用戶umask是 002
root的umask 是 022
umask: 查看
umask # 設定
示例:umask 002
umask u=rw,g=r,o=
umask –S 模式方式顯示
umask –p 輸出可被調用
全局設置: /etc/bashrc 用戶設置:~/.bashrc
Linux文件系統上的特殊權限
SUID, SGID, Sticky
三種經常使用權限:r, w, x user, group, other
安全上下文
前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程序文件能不能啓動爲進程,取決發起者對程序文件是否擁有
執行權限
(2) 啓動爲進程以後,其進程的屬主爲發起者,進程的屬組爲發起者所屬的組
(3) 進程訪問文件時的權限,取決於進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主權限
(b) 進程的發起者,屬於文件屬組;則應用文件屬組權限
(c) 應用文件「其它」權限
SUID:
權限在擁有者上爲s=4
只能用在二進制可執行的文件上
能執行此文件的用戶在執行此文件時自動擁有全部者的權限
SGID:
權限在所屬組上爲s=2
做用在目錄上,在目錄中建立子文件時繼承目錄所屬組的權限
Stikcy:
做用在目錄上爲t=1
在目錄中,的用戶只能刪除本身建立的文件不能刪除別人的文件
權限位映射:
SUID: user,佔據屬主的執行權限位
s:屬主擁有x權限
S:屬主沒有x權限SGID: group,佔據屬組的執行權限位
s: group擁有x權限
S:group沒有x權限Sticky: other,佔據other的執行權限位
t:other擁有x權限
T:other沒有x權限
設定文件特定屬性:
chattr +i 不能刪除,更名,更改
chattr +a 只能追加內容
lsattr 顯示特定屬性
訪問控制列表
爲多用戶或者組的文件和目錄賦予訪問權限rwx
mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -m g:admins:rw file| directory
setfacl -x u:wang file |directory
setfacl -b file1 清除全部ACL權限
getfacl file1 | setfacl --set-file=- file2 複製file1的acl權限給file2mask隻影響除全部者和other的以外的人和組的最大權限 mask須要與用戶的權限進行邏輯與運算後,才能變成有限的權限(EEffective Permission)用戶或組的設置必須存在於mask權限設定範圍內纔會生效 setfacl -m mask::rx file --set選項會把原有的ACL項都刪除,用新的替代,須要注意的是必定要包含UGO的設置,不能象-m同樣只是添加ACL就能夠 示例: setfacl --set u::rw,u:wang:rw,g::r,o::- file1