學習Linux第一週

一、設置主機名 hostname

1.1 entos6下修改hostname
[root@centos610S ~]#hostname
centos610S
#持久生效,重啓生效
[root@centos610S ~]#vim /etc/sysconfig/network
1.二、centos7下修改hostname
[root@centos7s ~]#hostname
centos7s
#持久生效
[root@centos7s ~]#hostnamectl set-hostname centosdou
#臨時生效
[root@centos7s ~]#hostname centosdou
1.三、centos8下修改hostname
[root@centos8s ~]$hostname
centos8s
#永久生效
[root@centos8s ~]$hostnamectl set-hostname centosdou
#臨時生效
[root@centos8s ~]$hostname centosdou

二、設置提示符 PS1

2.一、centos設置提示符
[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\]"
2.二、ubuntu設置提示符
[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\]"

三、執行命令

3.一、區別命令類型 type
3.二、enable管理內部命令

​ enable cmd 啓用內部命令node

​ enable -n cmd 禁用內部命令linux

​ enable 查看全部內部命令git

​ enable -n 查看全部禁用內部命令shell

3.三、外部命令

​ which cmd 、which -a cmd 查看外部命令apache

​ whereis cmd、which -a cmd查看外部命令路徑ubuntu

四、Hash緩存表

​ 一、系統初始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

五、命令別名

5.1 命名別名 alias
#臨時別名
[root@centos82s ~]$alias h='hostname'
[root@centos82s ~]$h
centos82s
#永久別名
[root@centos82s ~]$echo "alias h='hostname'" >> .bashrc
[root@centos82s ~]$h
centos82s
5.2 取消別名 unalias
#單個取消
[root@centos82s ~]$unalias h
[root@centos82s ~]$h
-bash: h: command not found
#所有取消
[root@centos82s ~]$unalias -a
[root@centos82s ~]$h
-bash: h: command not found
5.3 永久別名
[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
5.4 若是別名同原命令相同,想執行原命令需加(\,"",'',command),以下所示:
[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

六、常見命令

6.1 查看硬件信息
6.1.1 查看CPU

lscpu和cat /proc/cpuinfo命令

6.1.2 查看內存大小

free 和cat /proc/meminfo

6.1.3. 查看硬盤和分區狀況

lsblk和cat /proc/partitions

6.2 查看系統版本信息

​ 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

6.3 日期和時間

​ Linux的兩種時鐘

​ 系統時鐘:由Linux內核經過CPU的工做頻率進行的

​ 硬件時鐘:主板

6.3.1 date 顯示和設置系統時間
#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
6.3.2 設置時區
#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
6.3.3 日曆 cal
#查詢當前日曆
[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
6.4 關機和重啓
關機: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   #三分鐘後重啓
6.5 用戶登陸信息查看命令
#顯示當前登陸用戶
[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
6.5 會話管理
6.5.1 screen
#安裝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鍵,剝離當前會話
6.5.2 tmux
#安裝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鍵,再按上下左右方向鍵,可進行窗格切換

image-20200802190341792

#新建會話
[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會話
6.5.2.1 窗格快捷鍵
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    顯示窗格編號
6.5.2.2 窗口管理
#新建窗口
[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 ,    窗口重命名
6.5.2.3 tmux 快捷鍵
#列出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]
....
6.6 命令行擴展和被括起來的集合
6.6.1 命令行擴展:``和$()
#把一個命令的輸出打印給另外一個命令作爲參數
[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
結論:
雙引號:不能識別命令,能夠識別變量
反向單引號:變量和命令均可以識別,而且會將反向單引號的內容當成命令進行執行後的值,再交給調用反向單引號的命令繼續執行
單引號:變量和命令都不識別,都當成了普通的字符串
6.6.2 ``和$()
[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
結論:
$():能夠和$()和``嵌套使用
``:不能嵌套本身使用
6.6.3 {}
[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

7 文件管理和IO重定向

7.1 常見的文件系統目錄功能
/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相關的安全策略等信息的存儲位置
7.2 Linux下的文件類型
-   普通文件
d   目錄文件directory
b   塊設備block
c   字符設備character
l   符號連接文件link
p   管道文件pipe
s   套接字文件socket
7.3 文件操做命令
7.3.1 顯示當前工做目錄

​ ♦ -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
7.3.2 更改目錄

​ 命令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
7.3.2 列出目錄內容 ls

​ 命令常見選項:

​ ♦ -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
7.3.2 查看文件狀態 stat

​ 文件相關信息: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: -
7.3.3 肯定文件內容

​ 文件能夠包含多種類型的數據,使用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
7.3.4 文件通配符模式 wildcard pattern

​ 文件通配符能夠用來匹配符合條件的多個文件,方便批量管理文件

​ 通配符采用特定的符號,表示特定的含義,此符號稱爲元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:]      十六進制字符
7.3.5 建立空文件和刷新時間 touch

​ 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
7.3.6 複製文件和目錄 cp

​ 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
7.3.6 移動和重命名文件

​ 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'?
7.3.7 批量修改文件名 rename
#批量修改文件後綴
[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
7.3.8 刪除文件 rm

​ 使用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
7.3.9 目錄操做
顯示目錄樹 tree

​ 命令常見選項:

​ ♦ -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
建立目錄 mkdir

​ 命令常見選項:

​ ♦ -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
刪除空目錄 rmdir

​ 命令常見選項:

​ ♦ -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
7.4 文件元數據和節點表結構
7.4.1 硬連接 hard

才件起一個新的名稱,實質是同一個文件

​ 硬連接特性

​ ♦ 建立硬連接會在對應的目錄中增長額外的記錄項以引用文件

​ ♦ 對應同一文件系統上的物理文件

​ ♦ 每一個目錄引用相同的inode號

​ ♦ 建立時連接數遞增

​ ♦ 刪除文件時:連接數遞減,文件若是存在至少有一個連接數,連接數爲0時,該文件被刪除

​ ♦ 不能跨越驅動器或分區

​ ♦ 不支持對目錄建立硬連接

7.4.2 符號symbolic (或軟soft)連接

​ 一個符號連接指向另外一個文件,軟連接文件和源文件本質上不是同一個文件

​ 軟連接特性

​ ♦ 一個符號連接的內容是它引用文件的名稱

​ ♦ 能夠對目錄建立軟連接

​ ♦ 能夠跨分區

​ ♦ 指向的是另外一個文件的路徑;其大小爲指向路徑字符串的長度;不增長或減小目標文件inode 的引用計數

​ ♦ 軟連接若是使用相對路徑,是相對於原文件的路徑,而不是相對於當前目錄

7.4.3 硬連接和軟連接區別

​ 一、本質

​ 硬連接:本質是同一個文件

​ 軟連接:本質不是同一個文件

​ 二、跨設備

​ 硬連接:不支持

​ 軟連接:支持

​ 三、inode

​ 硬連接:相同

​ 軟連接:不一樣

​ 四、連接數

​ 硬連接:建立新的連接,連接數遞增,刪除遞減

​ 軟連接:建立或刪除,連接數不變

​ 五、文件夾

​ 硬連接:不支持

​ 軟連接:支持

​ 六、相對路徑

​ 硬連接:原始文件相對路徑是相對於當前工做目錄

​ 軟連接:原始文件的相對路徑是相對於連接文件的相對路徑

​ 七、刪除源文件

​ 硬連接:只是連接數減1,訪問不受影響

​ 軟鏈接:連接文件將沒法訪問

​ 八、文件類型

​ 硬連接:和源文件相同

​ 軟連接:連接文件,和源文件無關

​ 九、文件大小

​ 硬連接:和源文件相同

​ 軟連接:源文件的路徑長度

8 用戶、組和權限

8.1 用戶和組的配置文件
8.1.1 用戶和組的主要配置文件

​ ♦ /etc/passwd: 用戶及其屬性信息

​ ♦ /etc/shadow: 用戶密碼及其相關屬性

​ ♦ /etc/group: 組及其屬性信息

​ ♦ /etc/gshadow: 組密碼及其相關屬性

8.2 用戶和組管理命令
8.2.1 用戶管理

​ 用戶管理命令

​ ♦ 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 顯示密碼策略

8.2.2 組管理

​ 組管理命令

​ ♦ 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

9 文件權限管理

9.1 設置文件的全部者 chown

​ 經常使用命令

​ ♦ 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
9.2 設置文件的屬組信息 chgrp

​ 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

9.3.1 修改文件權限 chmod

​ 修改指定一類用戶的全部權限

​ 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
9.4 新建文件和目錄的默認權限

​ umask的值能夠用來保留建立文件權限

9.4.1 查看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

9.5 新建文件和目錄的默認權限

​ 設置文件的特殊屬性,能夠訪問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
9.5 訪問控制列表
9.5.1 ACL權限功能

​ 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
9.5.2 mask權限

​ ♦ 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
9.5.3 --set

​ --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-
9.5.4 備份和還原ACL

​ 主要的文件操做命令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::---
相關文章
相關標籤/搜索