[root@centos610S ~]#hostname centos610S #持久生效,重啓生效 [root@centos610S ~]#vim /etc/sysconfig/network
[root@centos7s ~]#hostname centos7s #持久生效 [root@centos7s ~]#hostnamectl set-hostname centosdou #臨時生效 [root@centos7s ~]#hostname centosdou
[root@centos8s ~]$hostname centos8s #永久生效 [root@centos8s ~]$hostnamectl set-hostname centosdou #臨時生效 [root@centos8s ~]$hostname centosdou
[root@centos82s ~]$echo $PS1 \[\e[1;33m\][\u@\h \W]$\[\e[0m\] #永久生效 [root@centos82s ~]$echo 'PS1="\[\e[1;33m\][\u@\h \W]$\[\e[0m\]"' >> /etc/profile.d/env.sh #臨時生效 [root@centos82s ~]$PS1="\[\e[1;34m\][\u@\h \W]$\[\e[0m\]"
[root@ubuntu1804 ~]$echo $PS1 \[\e[1;34m\][\u@\h \W]$\[\e[0m\] #永久生效 [root@ubuntu1804 ~]$echo 'PS1="\[\e[1;34m\][\u@\h \W]\$\[\e[0m\]"' >> .bashrc #臨時生效 [root@ubuntu1804 ~]$PS1="\[\e[1;35m\][\u@\h \W]$\[\e[0m\]"
enable cmd 啓用內部命令node
enable -n cmd 禁用內部命令linux
enable 查看全部內部命令git
enable -n 查看全部禁用內部命令shell
which cmd 、which -a cmd 查看外部命令apache
whereis cmd、which -a cmd查看外部命令路徑ubuntu
一、系統初始hash緩存表是空的vim
二、在外部命令執行後,會從PATH路徑下尋找該命令,找到該命令的路徑並執行後添加到hash緩存表,之後執行該命令shell解釋器會先從hash緩存表中查詢並執行,若是沒有則會從PATH路徑下尋找該命令執行後添加到hash緩存表中,使用hash緩存表大大提升了命令的調用速率windows
hash 命令常見用法centos
♦ hash 顯示hash緩存緩存
[root@centos82s ~]$hash hits command 1 /usr/bin/whereis 1 /usr/bin/ls
♦ hash -l 顯示hash緩存,可做爲輸入使用
[root@centos82s ~]$hash -l builtin hash -p /usr/bin/whereis whereis builtin hash -p /usr/bin/ls ls
♦ hash -p path name 將命令全路徑起別名爲name(臨時別名)
[root@centos82s ~]$hash -p /usr/bin/ls llss [root@centos82s ~]$llss anaconda-ks.cfg [root@centos82s ~]$ls anaconda-ks.cfg
♦ hash -t name 打印緩存中的別名name
[root@centos82s ~]$hash -p /usr/bin/ls llss [root@centos82s ~]$hash -t llss /usr/bin/ls
♦ hash -d name 清除別名name緩存
[root@centos82s ~]$hash -d llss [root@centos82s ~]$llss -bash: llss: command not found
♦ hash -r 清除緩存
[root@centos82s ~]$hash -p /usr/bin/hostname hostn [root@centos82s ~]$hash -p /usr/bin/whereis wi [root@centos82s ~]$hostn centos82s [root@centos82s ~]$wi echo echo: /usr/bin/echo /usr/share/man/man1/echo.1.gz [root@centos82s ~]$hash -r [root@centos82s ~]$hash hash: hash table empty
#臨時別名 [root@centos82s ~]$alias h='hostname' [root@centos82s ~]$h centos82s #永久別名 [root@centos82s ~]$echo "alias h='hostname'" >> .bashrc [root@centos82s ~]$h centos82s
#單個取消 [root@centos82s ~]$unalias h [root@centos82s ~]$h -bash: h: command not found #所有取消 [root@centos82s ~]$unalias -a [root@centos82s ~]$h -bash: h: command not found
[root@centos82s ~]$cat .bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi alias h='hostname' #新別名不會當即生效,需從新讀取配置文件 source /etc/bashrc; . /etc/bashrc; source .bashrc #在命令行中定義的別名,僅對當前shell進程有效,若是要永久有效須要定義在配置文件中 #僅對當前用戶有效:~/.bashrc;對全部用戶有效:/etc/bashrc
[root@centos82s ~]$alias hash='hash -l' #定義別名 [root@centos82s ~]$hash #新別名 builtin hash -p /usr/bin/hostname hostname builtin hash -p /usr/bin/cat cat builtin hash -p /usr/bin/free free builtin hash -p /usr/sbin/ip ip builtin hash -p /usr/bin/su su [root@centos82s ~]$\hash hits command 2 /usr/bin/hostname 2 /usr/bin/cat 4 /usr/bin/free 1 /usr/sbin/ip 1 /usr/bin/su [root@centos82s ~]$"hash" hits command 2 /usr/bin/hostname 2 /usr/bin/cat 4 /usr/bin/free 1 /usr/sbin/ip 1 /usr/bin/su [root@centos82s ~]$'hash' hits command 2 /usr/bin/hostname 2 /usr/bin/cat 4 /usr/bin/free 1 /usr/sbin/ip 1 /usr/bin/su [root@centos82s ~]$command hash hits command 2 /usr/bin/hostname 2 /usr/bin/cat 4 /usr/bin/free 1 /usr/sbin/ip 1 /usr/bin/su
lscpu和cat /proc/cpuinfo命令
free 和cat /proc/meminfo
lsblk和cat /proc/partitions
6.2.1 查看內核版本
uname -r
6.2.2 查看操做系統發行版本
centos6: cat /etc/redhat-release
centos7: cat /etc/redhat-release; cat /etc/os-release
centos8: cat /etc/redhat-release; cat /etc/os-release
ubuntu: cat /etc/os-release; cat /etc/issue; lsb_release -a
Linux的兩種時鐘
系統時鐘:由Linux內核經過CPU的工做頻率進行的
硬件時鐘:主板
#clock, hwclock:顯示硬件時鐘 #-s,--hctosys以硬件時鐘爲準,校訂系統時鐘 #-w,--systohc以系統時鐘爲準,校訂硬件時鐘 [root@centos82s ~]$echo `date +%F_%T` 2020-08-02_01:47:22 #設置軟件時間日後一年 [root@centos82s ~]$date -s '1 year' Mon Aug 2 16:48:09 CST 2021 #以硬件時間恢復軟件時間 [root@centos82s ~]$clock -s [root@centos82s ~]$date Sun Aug 2 16:48:46 CST 2020 #設置硬件時間日後一年 [root@centos82s ~]$date -s '1 year' Mon Aug 2 16:54:35 CST 2021 [root@centos82s ~]$clock 2020-08-02 16:54:44.212292+08:00 [root@centos82s ~]$clock -w [root@centos82s ~]$clock 2021-08-02 16:54:56.758402+08:00 [root@centos82s ~]$date -s '-1 year' Sun Aug 2 16:55:17 CST 2020 [root@centos82s ~]$clock -w [root@centos82s ~]$clock 2020-08-02 16:55:27.900077+08:00
#centos8 #列出全部時區 [root@centos82s ~]$timedatectl list-timezones Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Bamako Africa/Bangui ... #查看如今時區 [root@centos82s ~]$timedatectl [status] Local time: Sun 2020-08-02 17:09:38 CST Universal time: Sun 2020-08-02 09:09:38 UTC RTC time: Sun 2020-08-02 09:09:38 Time zone: Asia/Shanghai (CST, +0800) System clock synchronized: no NTP service: n/a RTC in local TZ: no #更改時區 [root@centos82s ~]$timedatectl set-timezone Asia/Shanghai
#查詢當前日曆 [root@centos82s ~]$cal August 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #查詢全年日曆 [root@centos82s ~]$cal 2019 2019 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 1 2 1 2 6 7 8 9 10 11 12 3 4 5 6 7 8 9 3 4 5 6 7 8 9 13 14 15 16 17 18 19 10 11 12 13 14 15 16 10 11 12 13 14 15 16 20 21 22 23 24 25 26 17 18 19 20 21 22 23 17 18 19 20 21 22 23 27 28 29 30 31 24 25 26 27 28 24 25 26 27 28 29 30 #查詢某年某月日曆 [root@centos82s ~]$cal 7 2020 July 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
關機:halt; poweroff 重啓:reboot -f:強制,不調用shutdown; -p:切斷電源 關機或重啓:shutdown -r:reboot -h:halt -c:cancel(表示取消) TIME:無指定,默認至關於+1(centos7) now:馬上,至關於+0 +#:相對時間表示法,幾分鐘以後;例如+3 hh:mm:絕對時間表示,指明具體時間 [root@centos82s ~]$shutdown -r now #當即重啓 [root@centos82s ~]$shutdown -r +3 #三分鐘後重啓
#顯示當前登陸用戶 [root@centos82s ~]$whoami root #顯示當前系統全部登陸會話 [root@centos82s ~]$who dou tty1 2020-08-02 17:44 root pts/0 2020-08-02 17:44 (10.0.0.1) #顯示當前全部登陸會話及其當前所作的操做 [root@centos82s ~]$w 17:50:22 up 5 min, 2 users, load average: 0.00, 0.08, 0.06 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT dou tty1 - 17:44 1:55 0.18s 0.00s ping 10.0.0.7 root pts/0 10.0.0.1 17:44 3.00s 0.01s 0.00s w
#安裝screen #centos6,centos7 [root@centos610 ~]#yum -y install screen [root@centos7s ~]#yum -y install screen #centos8,若是報以下錯誤,應該是沒有配置yum源,請先安裝epel源 [root@centos82s ~]$yum -y install screen CentOS-8 - AppStream 2.3 kB/s | 4.3 kB 00:01 CentOS-8 - AppStream 302 kB/s | 5.8 MB 00:19 CentOS-8 - Base 5.1 kB/s | 3.9 kB 00:00 CentOS-8 - Base 926 kB/s | 2.2 MB 00:02 CentOS-8 - Extras 1.3 kB/s | 1.5 kB 00:01 No match for argument: screen Error: Unable to find a match: screen [root@centos82s ~]$dnf -y install screen Last metadata expiration check: 0:00:51 ago on Sun 02 Aug 2020 06:08:11 PM CST. No match for argument: screen Error: Unable to find a match: screen #安裝epel源 [root@centos82s ~]$yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm #安裝screen [root@centos82s ~]$yum -y install screen [root@centos82s ~]$dnf -y install screen
6.5.2 screen命令常見用法
#建立screen會話 [root@centos82s ~]$screen -S dou #加入screen會話 [root@centos82s ~]$screen -x dou #退出並關閉screen會話 [root@centos82s ~]$exit #顯示全部打開的screen會話 [root@centos82s ~]$screen -ls There is a screen on: 9655.dou (Detached) 1 Socket in /run/screen/S-root. #恢復screen會話 [root@centos82s ~]$screen -r dou #剝離當前screen會話 Ctrl +a,d 按住Ctrl,依次按住a和d鍵,剝離當前會話
#安裝tmux #centos6,若是報以下錯誤,可能缺乏源,請先安裝epel源 [root@centos610 ~]#yum -y install tmux Loaded plugins: fastestmirror Setting up Install Process Loading mirror speeds from cached hostfile * base: mirrors.nju.edu.cn * extras: mirrors.nju.edu.cn * updates: mirrors.nju.edu.cn No package tmux available. Error: Nothing to do #安裝epel [root@centos610 ~]#yum install epel-release #安裝tmux [root@centos610 ~]#yum -y install tmux #輸入tmux回車進入tmux界面, #按Ctrl+b鍵,再按shift+",進入上下分屏, #按Ctrl+b鍵,再按shift+%,進入左右分屏 #按Ctrl+b鍵,再按上下左右方向鍵,可進行窗格切換
#新建會話 [root@centos82s ~]$tmux new -s tmux01 #查看全部會話或快捷鍵Ctrl+b鍵,再按s鍵 [root@centos82s ~]$tmux ls tmux01: 1 windows (created Sun Aug 2 19:24:44 2020) [102x33] (attached) tmux02: 1 windows (created Sun Aug 2 19:25:16 2020) [102x33] (attached) [root@centos82s ~]$tmux list-session tmux01: 1 windows (created Sun Aug 2 19:24:44 2020) [102x33] (attached) tmux02: 1 windows (created Sun Aug 2 19:25:16 2020) [102x33] (attached) #分離會話或快捷鍵Ctrl+b鍵,再按d鍵 [root@centos82s ~]$tmux detach #接入會話 [root@centos82s ~]$tmux attach -t tmux02 [detached (from session tmux02)] #結束會話 root@centos82s ~]$tmux ls tmux01: 1 windows (created Sun Aug 2 19:24:44 2020) [102x33] tmux02: 1 windows (created Sun Aug 2 19:25:16 2020) [102x33] (attached) [root@centos82s ~]$tmux kill-session -t tmux02 #結束會話tmux02 [root@centos82s ~]$tmux ls tmux01: 1 windows (created Sun Aug 2 19:24:44 2020) [102x33] #切換會話 [root@centos82s ~]$tmux switch -t tmux02 #好比tmux01切換到tmux02會話
Ctrl+b %=tmux split-window -h 分左右窗格 Ctrl+b "=tmux split-window 分上下窗格 Ctrl+b ↑↓←→ 切換窗格 Ctrl+b ; 切換上一個窗格(按窗格上下左右順序) Ctrl+b o 切換下一個窗格 Ctrl+b { 當前窗格左移換位 Ctrl+b } 當前窗格右移換位 Ctrl+b Ctrl+o 當前窗格上移(最前窗格移到末尾) Ctrl+b Alt+o 當前窗格下移(最後窗格移到行首) Ctrl+b x 關閉當前窗格 Ctrl+b ! 將當前窗格拆分爲一個獨立窗格 Ctrl+b z 當前窗格全屏顯示,再使用一次恢復原來大小 Ctrl+b q 顯示窗格編號
#新建窗口 [root@centos82s ~]$tmux new-window -n tmux101 #切換到指定編號窗口 [root@centos82s ~]$tmux select-window -t 0 #切換都指定名稱窗口 [root@centos82s ~]$tmux select-window -t tmux1 #窗口快捷鍵 Ctrl+b c 建立新窗口,狀態欄會顯示多個窗口信息 Ctrl+b p 切換到上一個窗口(按狀態欄的順序) Ctrl+b n 切換到下一個窗口 Ctrl+b <num> 切換到指定編號的窗口,<num>爲狀態欄的編號 Ctrl+b w 從列表中選擇窗口 Ctrl+b , 窗口重命名
#列出tmux全部快捷鍵和對應命令 [root@centos82s ~]$tmux list-keys bind-key -T copy-mode C-Space send-keys -X begin-selection bind-key -T copy-mode C-a send-keys -X start-of-line bind-key -T copy-mode C-b send-keys -X cursor-left .... #列出全部tmux命令及其參數 [root@centos82s ~]$tmux list-commands attach-session (attach) [-dEr] [-c working-directory] [-t target-session] bind-key (bind) [-cnr] [-T key-table] key command [arguments] break-pane (breakp) [-dP] [-F format] [-n window-name] [-s src-pane] [-t dst-window] ....
#把一個命令的輸出打印給另外一個命令作爲參數 [root@centos82s ~]$echo "echo $HOSTNAME" echo centos82s #比較"",``,''三者的區別 [root@centos82s ~]$echo "echo $HOSTNAME" echo centos82s [root@centos82s ~]$echo `echo $HOSTNAME` centos82s [root@centos82s ~]$echo 'echo $HOSTNAME' echo $HOSTNAME 結論: 雙引號:不能識別命令,能夠識別變量 反向單引號:變量和命令均可以識別,而且會將反向單引號的內容當成命令進行執行後的值,再交給調用反向單引號的命令繼續執行 單引號:變量和命令都不識別,都當成了普通的字符串
[root@centos82s ~]$echo `echo $(who)` dou tty1 2020-08-02 18:28 root pts/0 2020-08-02 20:31 (10.0.0.1) root pts/1 2020-08-02 20:50 (10.0.0.1) [root@centos82s ~]$echo $(echo $(who)) dou tty1 2020-08-02 18:28 root pts/0 2020-08-02 20:31 (10.0.0.1) root pts/1 2020-08-02 20:50 (10.0.0.1) [root@centos82s ~]$echo $(echo `who`) dou tty1 2020-08-02 18:28 root pts/0 2020-08-02 20:31 (10.0.0.1) root pts/1 2020-08-02 20:50 (10.0.0.1) [root@centos82s ~]$echo `echo `who`` who 結論: $():能夠和$()和``嵌套使用 ``:不能嵌套本身使用
[root@centos82s ~]$echo f{1..5} f1 f2 f3 f4 f5 [root@centos82s ~]$echo f{1,3,5} f1 f3 f5 [root@centos82s ~]$echo {1..10} 1 2 3 4 5 6 7 8 9 10 [root@centos82s ~]$echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y z [root@centos82s ~]$echo {000..20..2} 000 002 004 006 008 010 012 014 016 018 020
/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相關的安全策略等信息的存儲位置
- 普通文件 d 目錄文件directory b 塊設備block c 字符設備character l 符號連接文件link p 管道文件pipe s 套接字文件socket
♦ -p 顯示真實物理路徑
♦ -L顯示連接路徑(默認)
[root@centos82s ~]$cd /bin [root@centos82s bin]$ll total 61872 -rwxr-xr-x. 1 root root 112512 Apr 10 02:53 '[' -rwxr-xr-x. 1 root root 29 Nov 9 2019 alias lrwxrwxrwx. 1 root root 6 May 11 2019 apropos -> whatis -rwxr-xr-x. 1 root root 81352 Apr 10 02:53 arch [root@centos82s bin]$pwd -P /usr/bin [root@centos82s bin]$pwd -L /bin
命令cd: change directory改變目錄
選項: -P切換至物理路徑,而非軟鏈接目錄
可使用絕對或相對路徑
♦ 切換至父目錄: cd..
♦ 切換至當前用戶主目錄: cd
♦ 切換至之前的工做目錄: cd-
相關的環境變量:
♦ PWD: 當前目錄路徑
♦ OLDPWD: 上次目錄路徑
[root@centos82s /]$cd /bin [root@centos82s bin]$cd .. #切換到父目錄 [root@centos82s /]$cd - #切換到之前目錄 /bin [root@centos82s bin]$ [root@centos82s bin]$cd #切換到主目錄 [root@centos82s ~]$ [root@centos82s ~]$pwd #當前目錄路徑 /root [root@centos82s ~]$echo $OLDPWD #上次目錄路徑 /bin
命令常見選項:
♦ -a 包含隱藏文件
♦ -l 顯示額外信息
♦ -R 目錄遞歸
♦ -ld 目錄和符號連接信息
♦ -S 按從大到小排序
♦ -t 按mtime排序
♦ -u 配合-t選項,顯示並按atime重新到舊排序
♦ -U 按目錄存放順序顯示
♦ -X 按文件後綴排序
♦ -F 對不一樣類型文件顯示時附加不一樣的符號:*/=>@|
♦ -C 文件多時,以多列的方式顯示文件,默認是一列(標準輸出)
[root@centos82s ~]$ls anaconda-ks.cfg
查看文件後綴顏色配置
[root@centos82s ~]$cat /etc/DIR_COLORS [root@centos82s ~]$echo $LS_COLORS
文件相關信息:metadata,data
每一個文件有三個時間戳:
♦ access time 訪問時間,atime,讀取文件內容
♦ modify time 修改時間,mtime,改變文件內容
♦ change time 改變時間,ctime,元數據發生變化
[root@centos82s ~]$touch f1.txt [root@centos82s ~]$stat f1.txt File: f1.txt Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 201328514 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2020-08-02 23:22:54.927942389 +0800 Modify: 2020-08-02 23:22:54.927942389 +0800bash Change: 2020-08-02 23:22:54.927942389 +0800 Birth: -
文件能夠包含多種類型的數據,使用fiel命令檢查文件的類型,而後肯定適當的打開命令或應用程序使用
♦-b 列出文件辨識結果時,不顯示文件名稱
♦-f filelist 列出文件filelist中文件名的文件類型
♦-F 使用指定分隔符號替換輸出文件名後默認的「:」分隔符
♦--help 顯示命令在線幫助
#下載windows和Linux之間的文件傳輸工具 yum -y install lrzsz [root@centos82s ~]$yum -y install lrzsz #Windows的文本格式和Linux的文本格式的區別 [root@centos82s ~]$file wabc.txt labc.txt wabc.txt: ASCII text, with CRLF line terminators labc.txt: ASCII text [root@centos82s ~]$hexdump -C wabc.txt 00000000 61 0d 0a 62 0d 0a 63 |a..b..c| 00000007 [root@centos82s ~]$hexdump -C labc.txt 00000000 61 0a 62 0a 63 0a |a.b.c.| 00000006 [root@centos82s ~]$ #安裝轉換工具 [root@centos82s ~]$yum -y install dos2unix #將Windows的文本格式轉換成Linux的文本格式 [root@centos82s ~]$dos2unix wabc.txt dos2unix: converting file wabc.txt to Unix format... [root@centos82s ~]$file wabc.txt wabc.txt: ASCII text #將linux的文本格式轉換成Windows的文本格式 [root@centos82s ~]$unix2dos wabc.txt unix2dos: converting file wabc.txt to DOS format... [root@centos82s ~]$file wabc.txt wabc.txt: ASCII text, with CRLF line terminators
轉換文件字符集編碼
#顯示支持字符集編碼列表 [root@centos82s ~]$iconv -l #將windows上文本默認的編碼ANSI(GB2312)轉換成UTF-8 [root@centos82s ~]$iconv -f gb2312 win.txt -o lwin.txt [root@centos82s ~]$cat lwin.txt 馬 哥 教 育[root@centos82s ~]$ #將utf-8轉換成Windows上 文本默認格式的編碼ANSI(GB2312) [root@centos82s ~]$iconv -f utf-8 -t gb2312 lwin.txt -o win1.txt [root@centos82s ~]$file win1.txt win1.txt: ISO-8859 text, with CRLF line terminators
文件通配符能夠用來匹配符合條件的多個文件,方便批量管理文件
通配符采用特定的符號,表示特定的含義,此符號稱爲元meta字符
常見通配符以下:
* 匹配零個或多個字符,但不匹配「.」開頭的文件,即隱藏文件 ? 匹配任何單個字符 ~ 當前用戶家目錄 ~dou 用戶dou家目錄 ~+和. 當前工做目錄 ~— 前一個工做目錄 [0-9] 匹配數字範圍 [a-z] 匹配小寫字母範圍 [A-Z] 匹配大寫字母範圍 [dou] 匹配列表中的任何一個字符 [^dou] 匹配除列表中之外的任何字符 [^a-z] 匹配除列表中之外的任何字符
Linux系統中預約義的字符類:man 7 glob
[:digit:] 任意數字,0-9 [:lower:] 任意小寫字母,a-z [:upper:] 任意大寫字符,A-Z [:alpha:] 任意大小寫字母,a-z,A-Z [: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 若是文件不存在,則不建立
#建立文件 [root@centos82s data]$touch f1.txt [root@centos82s data]$ll total 0 -rw-r--r-- 1 root root 0 Aug 3 22:04 f1.txt [root@centos82s data]$touch `data -d "-1 day" +%F_%T`.log -bash: data: command not found [root@centos82s data]$touch `date -d "-1 day" +%F_%T`.log [root@centos82s data]$ls 2020-08-02_22:12:15.log f1.txt [root@centos82s data]$touch $(date -d "1 year" +%F_%T).log [root@centos82s data]$ls 2020-08-02_22:12:15.log 2021-08-03_22:13:13.log f1.txt [root@centos82s data]$ #刷新時間 [root@centos82s data]$ll /etc/issue -rw-r--r--. 1 root root 23 Jun 3 09:02 /etc/issue [root@centos82s data]$touch /etc/issue [root@centos82s data]$ll /etc/issue -rw-r--r--. 1 root root 23 Aug 3 22:09 /etc/issue
cp命令經常使用選項
♦ -i 若是目標已存在,覆蓋前提示是否覆蓋
♦ -n 不覆蓋,注意二者順序
♦ -r,-R 遞歸複製目錄及內部的全部內容
♦ -a 歸檔,至關於-dR --preserv=all,經常使用於備份功能
♦ --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 目標存在,覆蓋前先備份加數字後綴,形式爲 filename.~#~,能夠保留 多個版本
#-i提示是否覆蓋 [root@centos82s ~]$cp -i f1.txt /data/ cp: overwrite '/data/f1.txt'? #-n不覆蓋 [root@centos82s ~]$cp -n f1.txt /data/ [root@centos82s ~]$cat /data/f1.txt 你好呀 #-r,-R複製文件夾及其裏面的文件 [root@centos82s ~]$cp -r /etc/sysconfig /data/ [root@centos82s ~]$cd /data [root@centos82s data]$ls sysconfig anaconda crond grub irqbalance man-db network-scripts rsyslog sshd console ebtables-config ip6tables-config kdump modules nftables.conf run-parts cpupower firewalld iptables-config kernel network rhn selinux #-a歸檔備份 [root@centos82s data]$cp -a ../etc/sysconfig/ /data/`date +%F_%T` [root@centos82s data]$ls 2020-08-02_22:12:15.log 2020-08-03_22:52:19 dir1 sysconfig1 2020-08-03_22:51:34 2020-08-03_T f1.txt sysconfig1.bak 2020-08-03_22:51:42 2021-08-03_22:13:13.log sysconfig #-b覆蓋前自動備份一份,只可一份,以~結尾 [root@centos82s ~]$cp -b f1.txt /data/f1.txt cp: overwrite '/data/f1.txt'? y [root@centos82s ~]$ls /data f1.txt f1.txt~ sysconfig #--backup=numbered ,覆蓋前先備份,可備份多份,以~number~結尾 [root@centos82s ~]$cp --backup=numbered f1.txt /data/f1.txt cp: overwrite '/data/f1.txt'? y [root@centos82s ~]$cp --backup=numbered f1.txt /data/f1.txt cp: overwrite '/data/f1.txt'? y [root@centos82s ~]$cp --backup=numbered f1.txt /data/f1.txt cp: overwrite '/data/f1.txt'? y [root@centos82s ~]$ls /data f1.txt f1.txt~ f1.txt.~1~ f1.txt.~2~ f1.txt.~3~ sysconfig [root@centos82s ~]$cp -r /etc/sysconfig /data/sysconfig1.bak [root@centos82s ~]$cd /data/ [root@centos82s data]$ls 2020-08-02_22:12:15.log 2021-08-03_22:13:13.log dir1 f1.txt sysconfig1.bak
mv命令能夠實現文件或目錄的移動和更名
同一分區移動數據,速度很快,數據位置沒有變化
不一樣分區移動數據,速度相對慢,數據位置發生變化
♦ -i 交互式
♦ -f 強制
♦ -b 目標存在,覆蓋前先備份
#-b [root@centos82s ~]$ls /data/ f1.txt f1.txt~ f1.txt.~1~ f1.txt.~2~ f1.txt.~3~ f2 sysconfig [root@centos82s ~]$mv -b f1.txt /data/f2 mv: overwrite '/data/f2'?
#批量修改文件後綴 [root@centos82s ~]$cd /data [root@centos82s data]$ls f1.txt f1.txt~ f1.txt.~1~ f1.txt.~2~ f1.txt.~3~ f2 sysconfig [root@centos82s data]$rename 'txt' 'conf' rename: not enough arguments Try 'rename --help' for more information. [root@centos82s data]$rename 'txt' 'conf' f* [root@centos82s data]$ls f1.conf f1.conf~ f1.conf.~1~ f1.conf.~2~ f1.conf.~3~ f2 sysconfig #去掉全部後綴 [root@centos82s data]$ls f1 f1.conf~ f1.conf.~1~ f1.conf.~2~ f1.conf.~3~ f2 sysconfig [root@centos82s data]$rename '.conf' '' *.conf* [root@centos82s data]$ls f1 f1~ f1.~1~ f1.~2~ f1.~3~ f2 sysconfig
使用rm命令能夠刪除文件
注意:此命令很是危險,謹慎使用,建議使用mv替代rm
命令經常使用選項:
♦ -i 交互式
♦ -f 強制刪除
♦ -r 遞歸刪除
♦ --no-preserve-root 刪除/
#刪除 [root@centos82s data]$rm -rf f* [root@centos82s data]$ls sysconfig
rm雖然刪除了文件,可是被刪除的文件仍然可能被恢復,在安全要求較高的場景下,可使用 shred安全刪除文件
命令常見選項:
♦ -z 最後一次覆蓋添加0,以隱藏覆蓋操做
♦ -v 可以顯示操做進度
♦ -u 覆蓋後截斷並刪除文件
♦ -n # 指定覆蓋文件內容的次數(默認值是3次)
[root@centos82s data]$shred -zvun 5 f1.txt shred: f1.txt: pass 1/6 (random)... shred: f1.txt: pass 2/6 (ffffff)... shred: f1.txt: pass 3/6 (random)... shred: f1.txt: pass 4/6 (000000)... shred: f1.txt: pass 5/6 (random)... shred: f1.txt: pass 6/6 (000000)... shred: f1.txt: removing shred: f1.txt: renamed to 000000 shred: 000000: renamed to 00000 shred: 00000: renamed to 0000 shred: 0000: renamed to 000 shred: 000: renamed to 00 shred: 00: renamed to 0 shred: f1.txt: removed [root@centos82s data]$ls f1.txt ls: cannot access 'f1.txt': No such file or directory
命令常見選項:
♦ -d 只顯示目錄
♦ -L 指定顯示的層級數目
♦ -P 只顯示由指定wild-card 匹配到的路徑
#顯示目錄 [root@centos82s data]$tree -d . └── sysconfig ├── console ├── modules ├── network-scripts ├── rhn │ ├── allowed-actions │ │ ├── configfiles │ │ └── script │ └── clientCaps.d └── sysconfig ├── console ├── modules ├── network-scripts └── rhn ├── allowed-actions │ ├── configfiles │ └── script └── clientCaps.d 18 directories #顯示3級目錄 [root@centos82s data]$tree -L 3 . └── sysconfig ├── anaconda ├── console ├── cpupower ├── crond ├── ebtables-config ├── firewalld ├── grub -> ../default/grub
命令常見選項:
♦ -p 存在於不報錯,且可自動建立所需的各目錄
♦ -v 顯示建立時詳細信息
♦ -m 建立目錄時直接指定權限
[root@centos82s data]$mkdir -p dir1/dir2/dir3 [root@centos82s data]$mkdir -p dir1 [root@centos82s data]$ls dir1 f1.txt sysconfig [root@centos82s data]$mkdir -pv dir1/dir2/dir3 mkdir: created directory 'dir1' mkdir: created directory 'dir1/dir2' mkdir: created directory 'dir1/dir2/dir3' [root@centos82s data]$mkdir -m 777 test1 [root@centos82s data]$ll total 4 drwxr-xr-x 3 root root 18 Aug 4 00:31 dir1 drwxr-xr-x 2 root root 6 Aug 4 00:28 f1.txt drwxr-xr-x 7 root root 4096 Aug 3 23:01 sysconfig drwxrwxrwx 2 root root 6 Aug 4 00:33 test1
命令常見選項:
♦ -p 遞歸刪除父空目錄
♦ -v 顯示刪除時詳細信息
注意:rmdir只能刪除空目錄,若是想刪除非空目錄,可使用rm -r命令
[root@centos82s data]$rmdir -p dir1 rmdir: failed to remove 'dir1': Directory not empty [root@centos82s data]$rmdir -v dir1 rmdir: removing directory, 'dir1' rmdir: failed to remove 'dir1': Directory not empty
才件起一個新的名稱,實質是同一個文件
硬連接特性
♦ 建立硬連接會在對應的目錄中增長額外的記錄項以引用文件
♦ 對應同一文件系統上的物理文件
♦ 每一個目錄引用相同的inode號
♦ 建立時連接數遞增
♦ 刪除文件時:連接數遞減,文件若是存在至少有一個連接數,連接數爲0時,該文件被刪除
♦ 不能跨越驅動器或分區
♦ 不支持對目錄建立硬連接
一個符號連接指向另外一個文件,軟連接文件和源文件本質上不是同一個文件
軟連接特性
♦ 一個符號連接的內容是它引用文件的名稱
♦ 能夠對目錄建立軟連接
♦ 能夠跨分區
♦ 指向的是另外一個文件的路徑;其大小爲指向路徑字符串的長度;不增長或減小目標文件inode 的引用計數
♦ 軟連接若是使用相對路徑,是相對於原文件的路徑,而不是相對於當前目錄
一、本質
硬連接:本質是同一個文件
軟連接:本質不是同一個文件
二、跨設備
硬連接:不支持
軟連接:支持
三、inode
硬連接:相同
軟連接:不一樣
四、連接數
硬連接:建立新的連接,連接數遞增,刪除遞減
軟連接:建立或刪除,連接數不變
五、文件夾
硬連接:不支持
軟連接:支持
六、相對路徑
硬連接:原始文件相對路徑是相對於當前工做目錄
軟連接:原始文件的相對路徑是相對於連接文件的相對路徑
七、刪除源文件
硬連接:只是連接數減1,訪問不受影響
軟鏈接:連接文件將沒法訪問
八、文件類型
硬連接:和源文件相同
軟連接:連接文件,和源文件無關
九、文件大小
硬連接:和源文件相同
軟連接:源文件的路徑長度
♦ /etc/passwd: 用戶及其屬性信息
♦ /etc/shadow: 用戶密碼及其相關屬性
♦ /etc/group: 組及其屬性信息
♦ /etc/gshadow: 組密碼及其相關屬性
用戶管理命令
♦ useradd
♦ usermod
♦ userdel
用戶添加
useradd:命令經常使用選項
♦ -u UID
♦ -o 配合-u選項,不檢查UID的惟一性
♦ -g GID,指明用戶所屬基本組,可爲組名,也可爲GID
♦ -c 用戶的註釋信息
♦ -d 以指定的路徑(不存在)爲家目錄
♦ -s 指明用戶的默認shell程序,可用列表在/etc/shells文件中
♦ -G 爲用戶指明附加組,附加組必須事先存在
♦ -N 不建立私用組作爲主組,使用users組作主組
♦ -r 建立系統用戶
♦ -m 建立家目錄,用於系統用戶
♦ -M 不建立家目錄,用於非系統用戶
♦ -p 指定加密的密碼
#建立用戶apache,指定UID,所屬組和家目錄 [root@centos82s ~]$useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache #在/etc/passwd查看添加用戶信息 apache:x:48:48:Apache:/var/www:/sbin/nologin
#useradd命令默認值設定在/etc/default/useradd定義 [root@centos82s ~]$cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
用戶屬性修改 usermod
命令經常使用選項
♦ -u 新UID
♦ -g GID,新主組
♦ -G 新附加組,原來的附加組將被覆蓋;若保留原有,則要同時使用-a選項
♦ -s 新的默認SHELL
♦ -c 新的註釋信息
♦ -d 以指定的路徑(不存在)爲家目錄
♦ -m 新家目錄不會自動建立;若要建立新家目錄並移動原家數據,同時使用-m選項
♦ -l 新的名稱
♦ -L lock指定用戶,在/etc/shadow 密碼欄的增長"!"
♦ -U unlock指定用戶,將/etc/shadow 密碼欄的"!"拿掉
♦ -e YYYY-MM-DD 指明用戶帳號過時日期
♦ -f INACTIVE 設定非活動期限,即寬限期
刪除用戶
命令經常使用選項
♦ -f,--force 強制
♦ -r,--remove 刪除用戶家目錄和郵箱
查看用戶相關的ID信息 id
♦ -u 顯示UID
♦ -g 顯示GID
♦ -G 顯示用戶所屬組的ID
♦ -n 顯示名稱,需配合ugG使用
切換用戶
♦ su USERNAME: 非登陸式切換,即不會讀取目標用戶的配置文件,不改變當前工做目錄,即 不徹底切換
♦ su - USERNAME: 登陸式切換,會讀取目標用戶的配置文件,切換至本身的家目錄,即徹底 切換
[root@centos82s ~]$su dou [dou@centos82s root]$exit exit [root@centos82s ~]$su - dou Last login: Tue Aug 4 10:45:24 CST 2020 on pts/1 [dou@centos82s ~]$
設置密碼
passwd能夠修改用戶密碼
命令經常使用選項
♦-d 刪除指定用戶密碼
♦-l 鎖定指定用戶
♦-u 解鎖指定用戶
♦-e 強制用戶下次登陸修改密碼
♦-f 強制操做
♦-n mindays 最短使用期限
♦-x maxdays 最大使用期限
♦-w warndays 提早多少天開始警告
♦-i inactivedays 非活動期限
--stdin: 從標準輸入接收用戶密碼,Ubuntu無此選項
修改用戶密碼策略
chage能夠修改用戶密碼策略
命令經常使用選項
♦-d LAST_DAY 更改密碼的時間
♦-m MIN_DAYS
♦-M MAX_DAYS
♦-W WARN_DAYS
♦-I INACTIVE 密碼過時後的寬限期限
♦-E EXPIRE_DATE 用戶的有效期
♦-l 顯示密碼策略
組管理命令
♦ groupadd
♦ groupmod
♦ groupdel
命令經常使用選項
♦ -a user 將user添加至指定組中
♦ -d user 從指定附加組中刪除用戶user
♦ -A user1,user2,... 設置有管理權限的用戶列表
♦ -g GID,指明GID號
♦ -r 建立系統組
#建立組,組ID爲48,組名稱爲apache [root@centos82s ~]$groupadd -g 48 -r apache #去/etc/group配置文件查看新加組 apache:x:48: #刪除組 [root@centos82s ~]$groupdel -f apache #添加組成員 [root@centos82s ~]$gpasswd -a dou admins Adding user dou to group admins [root@centos82s ~]$id dou uid=1000(dou) gid=1000(dou) groups=1000(dou),1001(admins) [root@centos82s ~]$groups dou dou : dou admins [root@centos82s ~]$getent group admins admins:x:1001:dou #刪除組成員 [root@centos82s ~]$gpasswd -d dou admins Removing user dou from group admins [root@centos82s ~]$groups dou dou : dou [root@centos82s ~]$getent group admins admins:x:1001:
臨時切換主組
#臨時切換主組 [root@centos82s ~]$su - dou Last login: Tue Aug 4 10:45:34 CST 2020 on pts/1 [dou@centos82s ~]$id dou uid=1000(dou) gid=1000(dou) groups=1000(dou),1001(admins) [dou@centos82s ~]$newgrp root Password: [dou@centos82s ~]$id uid=1000(dou) gid=0(root) groups=0(root),1000(dou),1001(admins) [dou@centos82s ~]$getent passwd dou dou:x:1000:1000:dou:/home/dou:/bin/bash [dou@centos82s ~]$touch dou.txt [dou@centos82s ~]$ll total 0 -rw-r--r-- 1 dou root 0 Aug 4 11:27 dou.txt
更改和查看組成員
groupsmems能夠管理附加組的成員關係
命令經常使用選項
♦ -g 更改成指定組(只有root)
♦ -a 指定用戶加入組
♦ -d 從組中刪除用戶
♦ -p 從組中清除全部成員
♦-l 顯示組成員列表
#添加用戶到附加組 [root@centos82s ~]$groupmems -a honghong -g admins [root@centos82s ~]$id honghong uid=1002(honghong) gid=1002(honghong) groups=1002(honghong),1001(admins) #查看附加組成員 [root@centos82s ~]$groupmems -l -g admins dou honghong #刪除附加組成員 [root@centos82s ~]$groupmems -d dou -g admins [root@centos82s ~]$groups dou dou : dou [root@centos82s ~]$groupmems -l -g admins honghong #清空附加組成員 [root@centos82s ~]$groupmems -p -g admins [root@centos82s ~]$groupmems -l -g admins
經常使用命令
♦ OWNER 只修改全部者
♦ OWNER:GROUP 同時修改全部者和屬組
♦ :GROUP 只修改屬組,冒號也可用"."替換
--reference=RFILE 參考指定的屬性,來修改
-R 遞歸,此選項慎用
#修改文件全部者 [root@centos82s ~]$ll total 8 -rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg -rw-r--r-- 1 root root 19 Aug 3 22:40 f1.txt [root@centos82s ~]$chown dou f1.txt [root@centos82s ~]$ll total 8 -rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg -rw-r--r-- 1 dou root 19 Aug 3 22:40 f1.txt #修改文件所屬組 [root@centos82s ~]$chown :admins f1.txt [root@centos82s ~]$ll total 8 -rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg -rw-r--r-- 1 dou admins 19 Aug 3 22:40 f1.txt #同時修改文件全部者和所屬組 [root@centos82s ~]$chown root.bin f1.txt [root@centos82s ~]$ll total 8 -rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg -rw-r--r-- 1 root bin 19 Aug 3 22:40 f1.txt [root@centos82s ~]$chown dou:admins f1.txt [root@centos82s ~]$ll total 8 -rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg -rw-r--r-- 1 dou admins 19 Aug 3 22:40 f1.txt #以一個文件的全部者和屬組屬性爲基礎爲另外一個文件賦值相同的屬性 [root@centos82s ~]$ll total 12 -rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg -rw-r--r-- 1 dou admins 19 Aug 3 22:40 f1.txt -rw-r--r-- 1 root root 23 Aug 4 11:53 f2.txt [root@centos82s ~]$chown --reference=f1.txt f2.txt [root@centos82s ~]$ll total 12 -rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg -rw-r--r-- 1 dou admins 19 Aug 3 22:40 f1.txt -rw-r--r-- 1 dou admins 23 Aug 4 11:53 f2.txt [root@centos82s ~]$ #迭代賦值屬性到文件和文件夾裏面的全部 [root@centos82s data]$ll total 4 drwxr-xr-x 3 root root 18 Aug 4 00:31 dir1 [root@centos82s data]$ll dir1 total 0 drwxr-xr-x 3 root root 31 Aug 4 00:36 dir2 [root@centos82s data]$chown -R dou.admins dir1/ [root@centos82s data]$ll dir1 total 0 drwxr-xr-x 3 dou admins 31 Aug 4 00:36 dir2 [root@centos82s data]$ll dir1/ total 0 drwxr-xr-x 3 dou admins 31 Aug 4 00:36 dir2 [root@centos82s data]$ll total 4 drwxr-xr-x 3 dou admins 18 Aug 4 00:31 dir1 [root@centos82s data]$ll dir1/dir2 total 0 drwxr-xr-x 2 dou admins 6 Aug 4 00:31 dir3 -rw-r--r-- 1 dou admins 0 Aug 4 00:36 f.txt
chgrp命令只修改文件的屬組
#修改文件屬組 [root@centos82s dir2]$ll total 0 drwxr-xr-x 2 dou admins 6 Aug 4 00:31 dir3 -rw-r--r-- 1 dou admins 0 Aug 4 00:36 f.txt [root@centos82s dir2]$chgrp root f.txt [root@centos82s dir2]$ll total 0 drwxr-xr-x 2 dou admins 6 Aug 4 00:31 dir3 -rw-r--r-- 1 dou root 0 Aug 4 00:36 f.txt [root@centos82s dir2]$chgrp --reference=dir3 f.txt [root@centos82s dir2]$ll total 0 drwxr-xr-x 2 dou admins 6 Aug 4 00:31 dir3 -rw-r--r-- 1 dou admins 0 Aug 4 00:36 f.txt #遞歸修改屬組 [root@centos82s dir2]$chgrp -R root . [root@centos82s dir2]$ll total 0 drwxr-xr-x 2 dou root 6 Aug 4 00:31 dir3 -rw-r--r-- 1 dou root 0 Aug 4 00:36 f.txt
9.3 文件權限
文件的權限主要針對三類對象進行定義
♦ owner 屬主,u
♦ group 屬組,g
♦ other 其餘,o
注意:用戶的最終權限,是從左向右進行順序匹配,全部者,所屬組,其餘,一旦匹配權限當即生效,再也不向右查看其餘權限
每一個文件針對每類訪問者都定義了三種經常使用權限
♦ r Readable
♦ writable
♦ excutable
修改指定一類用戶的全部權限
u= g= o= ug= a= u=,g=
修改指定一類用戶某個權限
u+ u- g+ g- o+ o- a+ a-
-R:遞歸修改權限
#遞歸添加權限 [root@centos82s ~]$chmod -R a+X /data/dir1/ [root@centos82s ~]$ll /data/dir1/ total 0 drwxr-x--x 3 dou root 45 Aug 4 14:33 dir2 [root@centos82s ~]$cd /data/dir1/dir2 [root@centos82s dir2]$ll total 0 drwxr-x--x 2 dou root 6 Aug 4 00:31 dir3 -rw-r--r-- 1 root root 0 Aug 4 14:33 f1.txt -rw-r--r-- 1 dou root 0 Aug 4 00:36 f.txt #給文件指定權限 [root@centos82s dir2]$chmod a='' dir3 [root@centos82s dir2]$ll total 0 d--------- 2 dou root 6 Aug 4 00:31 dir3 -rw-r--r-- 1 root root 0 Aug 4 14:33 f1.txt -rw-r--r-- 1 dou root 0 Aug 4 00:36 f.txt [root@centos82s dir2]$chmod u+rwx,g+rw,o=rx dir3 [root@centos82s dir2]$ll total 0 drwxrw-r-x 2 dou root 6 Aug 4 00:31 dir3 -rw-r--r-- 1 root root 0 Aug 4 14:33 f1.txt -rw-r--r-- 1 dou root 0 Aug 4 00:36 f.txt
umask的值能夠用來保留建立文件權限
[root@centos82s ~]$umask 0022 [root@centos82s ~]$umask -S u=rwx,g=rx,o=rx [root@centos82s ~]$umask -p umask 0022
持久保存umask
♦全局變量 /etc/bashrc
♦用戶設置 ~/.bashrc
設置文件的特殊屬性,能夠訪問root用戶誤操做刪除或修改文件
不能刪除,更名,更改 chattr +i
只能追加內容,不能刪除,更名 chattr +a
顯示特定屬性 lsattr
#i [root@centos82s dir2]$lsattr -------------------- ./dir3 -------------------- ./f.txt -------------------- ./f1.txt [root@centos82s dir2]$chattr +i dir3 [root@centos82s dir2]$lsattr ----i--------------- ./dir3 -------------------- ./f.txt -------------------- ./f1.txt [root@centos82s dir2]$rm -rf dir3 rm: cannot remove 'dir3': Operation not permitted [root@centos82s dir1]$rm -rf dir2 rm: cannot remove 'dir2/dir3': Operation not permitted rm: cannot remove 'dir2/f1.txt': Operation not permitted [root@centos82s dir1]$chattr -i dir2 [root@centos82s dir1]$lsattr -------------------- ./dir2 #a [root@centos82s dir2]$lsattr -------------------- ./dir3 -------------------- ./f.txt -------------------- ./f1.txt -----a-------------- ./f2.txt [root@centos82s dir2]$rename "txt" "conf" f2.txt rename: f2.txt: rename to f2.conf failed: Operation not permitted
ACL生效順序:全部者,自定義用戶,所屬組|自定義組,其餘人
setfacl 能夠設置ACL權限
getfacl 可查看設置的ACL權限
[root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- group::r-- other::r-- [root@centos82s dir2]$setfacl -m u:dou:- f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- user:dou:--- group::r-- mask::r-- other::r-- #切換到dou用戶,dou用戶沒有讀寫執行權限 [root@centos82s dir2]$su dou [dou@centos82s dir2]$cat f1.txt cat: f1.txt: Permission denied [dou@centos82s dir2]$echo xxx >> f1.txt bash: f1.txt: Permission denied #給組admins添加讀寫權限 [root@centos82s dir2]$setfacl -m g:admins:rw f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- user:dou:--- group::r-- group:admins:rw- mask::rw- other::r-- #給用戶honghong添加到admins組 [root@centos82s dir2]$gpasswd -a honghong admins Adding user honghong to group admins \[root@centos82s dir2]$groups admins admins : admins [root@centos82s dir2]$groups honghong honghong : honghong admins #admins組具備讀寫權限,因此honghong可讀寫f1.txt文件 [root@centos82s dir2]$su honghong [honghong@centos82s dir2]$cat f1.txt [honghong@centos82s dir2]$vim f1.txt [honghong@centos82s dir2]$cat f1.txt a b c哈嘍 #消除全部權限(除使用--set指定的權限不能消除) [root@centos82s dir2]$setfacl -m u:dou:rwx f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- user:dou:rwx group::rw- mask::rwx other::rw- [root@centos82s dir2]$setfacl -b f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- group::rw- other::rw- #使用--set-file=-,把目標文件的ACL指定給另外一個文件 [root@centos82s dir2]$ll total 12 drwxrw-r-x 2 dou root 6 Aug 4 00:31 dir3 -rw-r--r-- 1 root root 76 Aug 4 17:22 f1acl.txt -rw-rwxrw-+ 1 root root 25 Aug 4 17:16 f1.txt -rw-r--r-- 1 root root 12 Aug 4 15:29 f2.txt -rw-r--r-- 1 dou root 0 Aug 4 00:36 f.txt [root@centos82s dir2]$getfacl f1.txt | setfacl --set-file=- f2.txt [root@centos82s dir2]$ll total 12 drwxrw-r-x 2 dou root 6 Aug 4 00:31 dir3 -rw-r--r-- 1 root root 76 Aug 4 17:22 f1acl.txt -rw-rwxrw-+ 1 root root 25 Aug 4 17:16 f1.txt -rw-rwxrw-+ 1 root root 12 Aug 4 15:29 f2.txt -rw-r--r-- 1 dou root 0 Aug 4 00:36 f.txt
♦ mask隻影響除全部者和other以外的人和組的最大權限
♦ mask須要與用戶的權限進行邏輯與運算後,才能變成有限的權限(Effective Permission)
♦ 用戶或組的設置必須存在於mask權限設定範圍內纔會生效
#給用戶dou讀寫執行的權限 [root@centos82s dir2]$setfacl -m u:dou:rwx f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- user:dou:rwx user:lanlan:-w- group::r-- group:admins:-w- mask::rwx other::r-- #指定mask讀寫權限 [root@centos82s dir2]$setfacl -m mask::rw f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- user:dou:rwx #effective:rw- ,提示最高權限以mask爲準,沒有執行權限 user:lanlan:-w- group::r-- group:admins:-w- mask::rw- other::r-- #切換dou用戶驗證權限 [root@centos82s dir2]$su dou [dou@centos82s dir2]$cat f1.txt a b c哈嘍 good [dou@centos82s dir2]$echo xxx >> f1.txt [dou@centos82s dir2]$cat f1.txt a b c哈嘍 good xxx #沒有刪除執行權限 [dou@centos82s dir2]$rm -rf f1.txt rm: cannot remove 'f1.txt': Operation not permitted
--set選項會把原有的ACL項都刪除,用新的替代,須要注意的必定要包含u,g,o三項設置,不能少 一個
#對比--set和ACL原設置 [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- user:dou:rwx #effective:rw- user:lanlan:-w- group::r-- group:admins:-w- mask::rw- other::r-- #缺乏一項設置,設置不能成功,必須設置u,g,o三項 [root@centos82s dir2]$setfacl --set u::rw,g::rw f1.txt setfacl: f1.txt: Malformed access ACL `user::rw-,group::rw-': Missing or wrong entry at entry 3 [root@centos82s dir2]$setfacl --set u::rw,g::rw,o::rw f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- group::rw- other::rw-
主要的文件操做命令cp和mv都支持ACL,只是cp命令須要加上-p參數。可是tar等常見的備份工 具是不會保留目錄和文件的ACL信息
#備份ACL [root@centos82s dir2]$getfacl -R f1.txt > f1acl.txt [root@centos82s dir2]$getfacl f1acl.txt # file: f1acl.txt # owner: root # group: root user::rw- group::r-- other::r-- #消除ACL權限 [root@centos82s dir2]$cat f1acl.txt # file: f1.txt # owner: root # group: root user::rwx user:dou:rw- group::r-- mask::rw- other::--- [root@centos82s dir2]$setfacl -R -b f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rwx group::r-- other::--- #消除權限 [root@centos82s dir2]$setfacl -R -b f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rwx group::r-- other::--- #第一種方法恢復權限 [root@centos82s dir2]$setfacl -R --set-file=f1acl.txt f1.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rwx user:dou:rw- group::r-- mask::rw- other::--- #第二種方法恢復權限 [root@centos82s dir2]$setfacl --restore f1acl.txt [root@centos82s dir2]$getfacl f1.txt # file: f1.txt # owner: root # group: root user::rwx user:dou:rw- group::r-- mask::rw- other::---