1、设置主机名 hostname

1.1 entos6下修改hostname
[root@centos610S ~]#hostname
centos610S
#持久生效,重启生效
[root@centos610S ~]#vim /etc/sysconfig/network
1.2、centos7下修改hostname
[root@centos7s ~]#hostname
centos7s
#持久生效
[root@centos7s ~]#hostnamectl set-hostname centosdou
#临时生效
[root@centos7s ~]#hostname centosdou
1.3、centos8下修改hostname
[root@centos8s ~]$hostname
centos8s
#永久生效
[root@centos8s ~]$hostnamectl set-hostname centosdou
#临时生效
[root@centos8s ~]$hostname centosdou

2、设置提示符 PS1

2.1、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.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、执行命令

3.1、区别命令类型 type
3.2、enable管理内部命令

​ enable cmd 启用内部命令

​ enable -n cmd 禁用内部命令

​ enable 查看所有内部命令

​ enable -n 查看所有禁用内部命令

3.3、外部命令

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

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

4、Hash缓存表

​ 1、系统初始hash缓存表是空的

​ 2、在外部命令执行后,会从PATH路径下寻找该命令,找到该命令的路径并执行后添加到hash缓存表,以后执行该命令shell解释器会先从hash缓存表中查询并执行,如果没有则会从PATH路径下寻找该命令执行后添加到hash缓存表中,使用hash缓存表大大提高了命令的调用速率

​ hash 命令常见用法

​ ♦ 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、命令别名

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、常见命令

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         切换到指定编号的窗口,为状态栏的编号
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 硬链接和软链接区别

​ 1、本质

​ 硬链接:本质是同一个文件

​ 软链接:本质不是同一个文件

​ 2、跨设备

​ 硬链接:不支持

​ 软链接:支持

​ 3、inode

​ 硬链接:相同

​ 软链接:不同

​ 4、链接数

​ 硬链接:创建新的链接,链接数递增,删除递减

​ 软链接:创建或删除,链接数不变

​ 5、文件夹

​ 硬链接:不支持

​ 软链接:支持

​ 6、相对路径

​ 硬链接:原始文件相对路径是相对于当前工作目录

​ 软链接:原始文件的相对路径是相对于链接文件的相对路径

​ 7、删除源文件

​ 硬链接:只是链接数减1,访问不受影响

​ 软连接:链接文件将无法访问

​ 8、文件类型

​ 硬链接:和源文件相同

​ 软链接:链接文件,和源文件无关

​ 9、文件大小

​ 硬链接:和源文件相同

​ 软链接:源文件的路径长度

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::---