实验报告:Linux指令入门-文件与权限

简介: 云起实验室:Linux指令入门-文件与权限的实验报告

    这个实验虽然非常简单,只是一些最基本的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

相关文章
|
6天前
|
Linux 开发工具 Perl
在Linux中,有一个文件,如何删除包含“www“字样的字符?
在Linux中,如果你想删除一个文件中包含特定字样(如“www”)的所有字符或行,你可以使用多种文本处理工具来实现。以下是一些常见的方法:
30 5
|
6天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
23 6
|
6天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
31 6
|
7天前
|
监控 Linux Perl
Linux 命令小技巧:显示文件指定行的内容
在 Linux 系统中,处理文本文件是一项常见任务。本文介绍了如何使用 head、tail、sed 和 awk 等命令快速显示文件中的指定行内容,帮助你高效处理文本文件。通过实际应用场景和案例分析,展示了这些命令在代码审查、日志分析和文本处理中的具体用途。同时,还提供了注意事项和技巧,帮助你更好地掌握这些命令。
21 4
|
12天前
|
缓存 监控 Linux
|
6月前
|
Linux
百度搜索:蓝易云【Linux中如何对文件进行压缩和解压缩?】
这些是在Linux中进行文件压缩和解压缩的常见方法。根据您的需求和具体情况,可能会使用其他压缩工具和选项。您可以通过查阅相应命令的帮助文档来获取更多详细信息。
87 1
|
6月前
|
NoSQL Java Linux
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
|
6月前
|
算法 Java Linux
Linux下文件增删改查定位压缩操作与权限所属用户
Linux下文件增删改查定位压缩操作与权限所属用户
71 0
26Linux - 文件管理(文件压缩解压:bzip2)
26Linux - 文件管理(文件压缩解压:bzip2)
60 0
|
6月前
|
Java Shell Linux
Linux【脚本 01】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)
Linux【脚本 01】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)
337 0