这个实验虽然非常简单,只是一些最基本的linux文件与权限的操作,里面也有一些实用的技巧和容易忽视的细节,这个报告对此做了详细的记录和说明,对运维和管理应该稍有帮助,方便日后自己查阅,各位小伙伴也看一眼,或许有你平常不注意的地方。
1 文件管理
创建、显示、移动、删除、重命名文件和目录是我们运维人员经常需要做的操作,涉及到了几个linux系统中的最基本的命令,正确使用这些命令是系统运维人员的最基本的要求。
1.1 文件和目录显示
一个最基本的操作时显示当前所在的目录,命令时pwd
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# pwd
/root
这个命令应该时系统运维人员经常用的命令,做每个操作之前最好运行一下这个命令,看一在当前目录,然后再执行其它操作,尤其时使用相对路径删除文件或目录时,相对路径只以用户当前工作路径为起点的,如果当前路径不对,可能误删文件或目录,导致不可预料的后果。
显示文件的命令时ls,这个命令有几个实用的选项,简单运行ls命令显示当前目录下的所有文件,不包含隐藏文件
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls
当前目录下没有任何文件,加上-a选项,就可以显示当前目录下的隐藏文件了。
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc .cshrc .pip .pydistutils.cfg .ssh .tcshrc
. 表示当前目录,.. 表示上一级目录,.bash_progfile 是bash shell下当前用户的配置文件,我们可以在里面设置用户常用的环境变量。ls加-l选项可以显示文件或目录的详细信息
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -l
total 0
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -la
total 44
dr-xr-x---. 4 root root 4096 Jul 11 08:56 .
dr-xr-xr-x. 18 root root 4096 Jul 11 08:55 ..
-rw------- 1 root root 95 Jul 11 08:56 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwxr-xr-x 2 root root 4096 Apr 26 2020 .pip
-rw-r--r-- 1 root root 206 Jul 11 08:55 .pydistutils.cfg
drwx------ 2 root root 4096 Apr 26 2020 .ssh
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
ls 的-t选项可以按照时间顺序排列文件
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -at
. .bash_history .. .pydistutils.cfg .pip .ssh .bash_logout .bash_profile .bashrc .cshrc .tcshrc
可以看出不是字母顺序,加l选项查看一下详细信息
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -alt
total 44
dr-xr-x---. 4 root root 4096 Jul 11 08:56 .
-rw------- 1 root root 95 Jul 11 08:56 .bash_history
dr-xr-xr-x. 18 root root 4096 Jul 11 08:55 ..
-rw-r--r-- 1 root root 206 Jul 11 08:55 .pydistutils.cfg
drwxr-xr-x 2 root root 4096 Apr 26 2020 .pip
drwx------ 2 root root 4096 Apr 26 2020 .ssh
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-r选项可以反向显示
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -ra
.tcshrc .ssh .pydistutils.cfg .pip .cshrc .bashrc .bash_profile .bash_logout .bash_history .. .
从上面的输出可以看出,显示的顺序是按照字母顺序反向显示的。
-R选项是递归显示当前目录,即显示每一级子目录的信息
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -Ral
.:
total 44
dr-xr-x---. 4 root root 4096 Jul 11 08:56 .
dr-xr-xr-x. 18 root root 4096 Jul 11 08:55 ..
-rw------- 1 root root 95 Jul 11 08:56 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwxr-xr-x 2 root root 4096 Apr 26 2020 .pip
-rw-r--r-- 1 root root 206 Jul 11 08:55 .pydistutils.cfg
drwx------ 2 root root 4096 Apr 26 2020 .ssh
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
./.pip:
total 12
drwxr-xr-x 2 root root 4096 Apr 26 2020 .
dr-xr-x---. 4 root root 4096 Jul 11 08:56 ..
-rw-r--r-- 1 root root 252 Jul 11 08:55 pip.conf
./.ssh:
total 8
drwx------ 2 root root 4096 Apr 26 2020 .
dr-xr-x---. 4 root root 4096 Jul 11 08:56 ..
-rw------- 1 root root 0 Jul 11 08:55 authorized_keys
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll -a
total 44
dr-xr-x---. 4 root root 4096 Jul 11 08:56 .
dr-xr-xr-x. 18 root root 4096 Jul 11 08:55 ..
-rw------- 1 root root 95 Jul 11 08:56 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwxr-xr-x 2 root root 4096 Apr 26 2020 .pip
-rw-r--r-- 1 root root 206 Jul 11 08:55 .pydistutils.cfg
drwx------ 2 root root 4096 Apr 26 2020 .ssh
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
1.2 改变当前目录
用cd命令改变用户的当前路径
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# cd /usr/local/etc
[root@iZuf6jb1biwnrz7sk87e7sZ etc]# pwd
/usr/local/etc
已经进入到/usr/local/etc 路径下
cd ..可以进入到上级目录,cd ~ 可以进入到当前用户的home目录下,直接键入cd 也可以转到用户的home目录下
[root@iZuf6jb1biwnrz7sk87e7sZ etc]# cd
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# pwd
/root
可以看到当前目录变为root用户的home目录
1.3 文件的创建和调整
用touch命令创建空文件
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# touch demo1.txt demo2.txt
ll是系统定义的别名,运行的命令是ls -l
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 11 09:02 demo1.txt
-rw-r--r-- 1 root root 0 Jul 11 09:02 demo2.txt
也可用touch命令更给文件的调整时间,后面直接跟上要调整的文件名即可,
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# touch demo1.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 11 09:03 demo1.txt
-rw-r--r-- 1 root root 0 Jul 11 09:02 demo2.txt
可以看到,demo1.txt的时间变为当前的时间,-r选项可以依据一个文件改变另一个文件的时间,比如要根据demo1.txt时间更改demo2.txt的时间,命令应该这样写
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# touch -r demo2.txt demo1.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 11 09:02 demo1.txt
-rw-r--r-- 1 root root 0 Jul 11 09:02 demo2.txt
可以看到demo2.txt的时间已经改成了demo1.txt的时间。
1.4 目录操作
用mkdir命令创建目录,-p选项创建不存在的父目录
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# mkdir -p a/b/c/d
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -lR
.:
total 4
drwxr-xr-x 3 root root 4096 Jul 11 09:04 a
-rw-r--r-- 1 root root 0 Jul 11 09:02 demo1.txt
-rw-r--r-- 1 root root 0 Jul 11 09:02 demo2.txt
./a:
total 4
drwxr-xr-x 3 root root 4096 Jul 11 09:04 b
./a/b:
total 4
drwxr-xr-x 3 root root 4096 Jul 11 09:04 c
./a/b/c:
total 4
drwxr-xr-x 2 root root 4096 Jul 11 09:04 d
./a/b/c/d:
total 0
可以看到创建a,b,c,d目录,a,b,c是d的各级父目录,也可以用tree命令查看,更直观一些,这个命令在有的linux系统上需要单独安装。
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# tree
.
├── a
│ └── b
│ └── c
│ └── d
├── demo1.txt
└── demo2.txt
4 directories, 2 files
删除文件和目录一般实用rm 命令,-r选项可以删除目录及其各级子目录,以及目录级各级子目录下的文件,这个选项应该慎用,运行命令之前应该对要执行的操作有准确的认知,按下回车之前应该检查屏幕上的命令是否是自己要执行的,多余的空格可能造成不可挽回的后果,尤其是rm -rf * 之前,一定要确认当前的工作目录,不可键入命令后随手回车。
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# rm -rf demo*
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 4
drwxr-xr-x 3 root root 4096 Jul 11 09:04 a
drwxr-xr-x 3 root root 4096 Jul 11 09:04 a
这个命令删除了所有名字以demo开头的文件和目录
要删除目录a下面b子目录,命令应该这样写
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# rm -rf a/b
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# tree
.
└── a
1 directory, 0 files
可以看到已经删除了b目录下的文件及子目录。用cp命令拷贝文件及目录,-r选项拷贝文件及各个级别的子目录及文件。
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# cp -r c a/b/
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# tree
.
├── a
│ └── b
│ └── c
│ └── d
└── c
└── d
6 directories, 0 files
用mv命令移动文件和目录
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# touch a.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# mv a.txt b.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 8
drwxr-xr-x 3 root root 4096 Jul 11 09:07 a
-rw-r--r-- 1 root root 0 Jul 11 09:09 b.txt
drwxr-xr-x 3 root root 4096 Jul 11 09:07 c
a.txt被移动到了b.txt,a.txt文件已经被删除。也可以移动目录
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# mv c a/b/c/d
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# tree
.
├── a
│ └── b
│ └── c
│ └── d
│ └── c
│ └── d
└── b.txt
6 directories, 1 file
将当前目录下所有内容移动到/tmp目录下
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# mv ./* /tmp
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -l /tmp
total 27804
drwxr-xr-x 3 root root 4096 Jul 11 09:07 a
drwxr-xr-x 3 root root 4096 Jul 11 08:55 aliyun_assist_6E9FF212AC6DEC9207A0959101945F57
-rw-r--r-- 1 root root 28453387 Jul 11 08:55 aliyun_assist_6E9FF212AC6DEC9207A0959101945F57.zip
-rw------- 1 root root 0 Jul 11 08:55 AliyunAssistClientSingleLock.lock
srwxrwxrwx 1 root root 0 Jul 11 08:55 argus.sock
-rw-r--r-- 1 root root 0 Jul 11 09:09 b.txt
drwx------ 3 root root 4096 Jul 11 08:55 systemd-private-16b1a8d8373a49e29d79467dc5322268-chronyd.service-SGpg13
drwx------ 2 root root 4096 Jul 11 08:55 tmp.I0uHH4StYu
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# tree /tmp/a
/tmp/a
└── b
└── c
└── d
└── c
└── d
5 directories, 0 files
1.5 文件重命名
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# touch demo1.txt demo2.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls
demo1.txt demo2.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# rename demo DEMO *
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls
DEMO1.txt DEMO2.txt
可以看到,当前目录下所有以demo开头的文件名字被改为以DEMO开头。
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# rename .txt .text *
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls
DEMO1.text DEMO2.text
文件的后缀由txt改成了text。
2 文件权限管理
2.1 显示文件的权限信息
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -l /boot/
total 140804
-rw-r--r-- 1 root root 153187 Mar 18 2020 config-3.10.0-1062.18.1.el7.x86_64
-rw-r--r--. 1 root root 152976 Aug 8 2019 config-3.10.0-1062.el7.x86_64
drwxr-xr-x. 3 root root 4096 Apr 26 2020 efi
drwxr-xr-x. 2 root root 4096 Apr 26 2020 grub
drwx------. 5 root root 4096 Apr 26 2020 grub2
-rw-------. 1 root root 57931787 Apr 26 2020 initramfs-0-rescue-20200426154603174201708213343640.img
-rw------- 1 root root 18197454 Apr 26 2020 initramfs-3.10.0-1062.18.1.el7.x86_64.img
-rw------- 1 root root 10734218 Apr 26 2020 initramfs-3.10.0-1062.18.1.el7.x86_64kdump.img
上面的显示信息中,
第1位表示存档类型,d表示目录,-表示一般文件。
第2~4位表示当前用户的权限(属主权限)。
第5~7位表示同用户组的用户权限(属组权限)。
第8~10位表示不同用户组的用户权限(其他用户权限)。
第11位是一个半角句号.,表示SELinux安全标签。
2.2 文件权限更改
创建一个hello.sh 脚本文件
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# echo "echo 'Hello World'" > hello.sh
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO1.text
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO2.text
-rw-r--r-- 1 root root 19 Jul 11 09:15 hello.sh
用chmod命令给脚本加上可执行权限
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# chmod u+x hello.sh
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO1.text
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO2.text
-rwxr--r-- 1 root root 19 Jul 11 09:15 hello.sh
撤销可执行权限
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# chmod u-x hello.sh
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO1.text
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO2.text
-rw-r--r-- 1 root root 19 Jul 11 09:15 hello.sh
也可以实用数字方式改变文件权限,4读,2为写,1为执行,744表示owner用于读、写、执行权限,组内其它成员和组外成员用于写权限
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# chmod 744 hello.sh
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO1.text
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO2.text
-rwxr--r-- 1 root root 19 Jul 11 09:15 hello.sh
用户拥有文件的执行权限才能执行文件
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# bash hello.sh
Hello World
2.2 更改文件属主及属组
查看当前用户
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# whoami
root
这个命令应该也是系统运维经常运行的命令,做任何操作之前先确认当前用户是必要的审慎行为,可以避免很多不必要的麻烦。
创建一个文件
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# touch test.txt
创建test用户
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# adduser test
为test用户创建密码
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.
创建admin用户
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# adduser admin
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# passwd admin
Changing password for user admin.
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.
用chown命令更改文件的属主
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# chown test test.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ls -l
total 4
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO1.text
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO2.text
-rwxr--r-- 1 root root 19 Jul 11 09:15 hello.sh
-rw-r--r-- 1 test root 0 Jul 11 09:18 test.txt
文件的属主已经被改为test,属组仍然是root
同时更改属组和属主,仍然用chown命令,像下面这样写
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# chown admin:admin test.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO1.text
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO2.text
-rwxr--r-- 1 root root 19 Jul 11 09:15 hello.sh
-rw-r--r-- 1 admin admin 0 Jul 11 09:18 test.txt
只改文件的属组可以用chgrp
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# chgrp root test.txt
[root@iZuf6jb1biwnrz7sk87e7sZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO1.text
-rw-r--r-- 1 root root 0 Jul 11 09:11 DEMO2.text
-rwxr--r-- 1 root root 19 Jul 11 09:15 hello.sh
-rw-r--r-- 1 admin root 0 Jul 11 09:18 test.txt