第二单元 文件和用户管理
2.1 文件管理
2.1.1 Linux目录结构
从展现形式上,Linux与Windows进行对比说明:
windos展现形式:
a. 以多根的方式组织文件,比如C:\ D:\ E:\
b. 以\进行路径分割
Linux展现形式:
a. 以单根的方式组织文件
b. 以/进行路径分割
思考:
linux中\代表什么?
2.1.2 Linux目录结构视图
/bin:
bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/media:
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt:
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/tmp:
这个目录是用来存放一些临时文件的。
/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/var:
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
2.1.3 绝对路径和相对路径
什么是绝对路径?
示例:
# cd /etc/sysconfig/network-scripts/
# pwd
/etc/sysconfig/network-scripts
什么是相对路径?
示例:
# ls -al
2.1.4 创建目录命令-mkdir
语法:mkdir [选项]... 目录...
选项:-p, --parents no error if existing, make parent directories as needed
示例:
# mkdir -p /tmp/linux/day01
创建多级目录
# mkdir -p /tmp/linux/{day02,day03,day04}
2.1.5 创建文件命令-touch
语法:touch [选项]... 文件...
示例:
# touch day01.txt
创建多级文件
# touch {day02.txt,day03.txt,day04.txt}
2.1.6 复制命令-cp
复制命令既可以复制目录也可以复制文件,原理与windows复制相同。
语法:cp [选项]... 源文件... 目录
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpr参数组合。
-d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
示例:
复制文件:
# cp day01.txt /opt/
复制目录:
# cp -a day01 /opt/
2.1.7 移动目录、文件、或文件重命名命令-mv
语法:mv [选项]... 源文件... 目录
-f(force强制):当覆盖文件时,不询问直接覆盖
-i :当覆盖文件之前,会询问是否覆盖
-u :只有当源文件是最新更新时,才可以覆盖目标文件
示例:
移动文件
# mv day01.txt /tmp/ #移动后之前目录此文件将不存在
移动目录
# mv day01 /tmp/ #移动后之前目录将不存在
文件重命名
# mv day01.txt day02.txt
2.1.8 删除命令-rm
rm Linux系统下的文件删除指令,可以删除一个目录中的一个或多个文件或目录
语法:rm [选项]... 文件...
-f: (force) 无提示强制删除;
-i: (interactive) 交互式删除,删除前会询问;
-r: (recursive) 递归地处理文件;
-v: (verbose) 详细显示进行的步骤;
示例:
rm -rf: 无提示地强制递归删除文件;
rm -rvf: 无提示地强制递归删除文件,并显示详细步骤。
2.1.9 查看文件内容-cat、more、less、head、tail
cat命令查看文件内容:
用法:cat [选项]...[文件]...
选项:
-n 显示行号,包括空白行
-b 显示行号,空白行不显示行号
more命令查看文件内容:
more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。
语法:more [选项] 文件...
常见用法:
Enter键:向下n行,需要定义。默认为1行
空格键:向下滚动一屏
Ctrl+B:返回上一屏
= 输出当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
less命令查看文件内容:
less命令分页查看文件内容
常见用法:
空格(下一页)
方向键(上下回翻)
q键(退出查看)
head命令查看文件内容:
查看文件头部内容,默认显示前10行。
语法:head [选项]...[文件]...
选项:
-c nK 显示文件前nKB的内容。
-n 显示文件前n行的内容(一般使用-n选项)
示例:
# head -c 2k /var/log/messages #查看文件的前2KB的内容
# head -n 15 /var/log/messages #查看文件的前15行的内容
tail命令查看文件内容:
查看文件的尾部内容,默认显示末尾10行。
语法:tail [选项]...[文件]...
选项:
-c nK 显示文件末尾nKB的内容。
-n 显示文件末尾n行的内容。
-f 动态显示文件内容,常用于查看日志,按 Ctrl+C 组合键退出。
示例:
# tail -c 2KB /var/log/messages #查看文件末尾2KB的内容
# tail -n 15 /var/log/messages #查看文件末尾15行的内容
# tail -f /var/log/messages #实时动态查看文件内容
总结:
1、cat、more、less、命令特点:
cat命令特点:一次性加载全部,只会显示最后一屏内容,遇到数据几十G的会加载很久,适用小文件
more命令特点:不支持回退上一行,适合读大文件,退出时屏幕会显示查看的内容。
less命令特点:支持方向键上下移动,适合读大文件,退出时屏幕不会显示查看的内容。
2、head、tail命令特点
head查看文件头,默认前十行
tail查看文件尾,默认后十行
2.1.10 输出命令-echo
语法:echo [OPTION]... [STRING]...
选项:
-n:不输出行尾换行符,不自动换行
-e:允许对反斜杠\转义的内容进行解释
示例;
echo "红色字"
echo -e "\033[31m 红色字 \033[0m"
2.2 用户管理
2.2.1 在Linux系统中,一共有三种类型的用户组。
-
root用户
root用户时UID和GID都等于0的用户,是Linux系统中的“上帝”,拥有最大的权限。如果深入了解Linux系统,会发现root用户真的拥有很多特权,比如:无视Linux对权限的设置而强行读、写、执行文件,切换其他用户登录不需要密码,可以强行切换到已经所用的用户,只有root可以为普通用户修改密码等等。
-
系统用户
系统用户通常用于运行服务,但是此用户无家目录,也不能用于登录系统。例如,在yum安装apache、nginx等服务后,就会自动创建apache和nginx的用户和同名用户组。在CentOS6系统中,系统用户的UID范围是1-499,在CentOS7系统中,系统用户的ID是1-999。
-
普通用户
普通用户只能由root用户创建,该用户拥有家目录,并且可以登录,该用户的权限由root分配。普通用户拥有指定的shell环境
2.2.2 Linux管理用户和用户组相关命令
创建用户命令-useradd
语法:useradd [选项] 用户名
选项:
-d, --home-dir HOME_DIR 新账户的家目录
-u, --uid UID 新账户的用户 ID
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-r, --system 创建一个系统账户
示例:
创建一个用户名称叫test
# useradd test
创建一个系统用户名称叫test_admin
# useradd -r test_admin
新用户创建密码-passwd
语法: passwd [选项...] <帐号名称>
选项;
-d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
-l, --lock 锁定指名帐户的密码(仅限 root 用户)
-u, --unlock 解锁指名账户的密码(仅限 root 用户)
--stdin 从标准输入读取令牌(只有根用户才能进行此操作)
示例:
# passwd test
更改用户 test 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
# echo "NIHAO123\!"|passwd --stdin test_admin
更改用户 test_admin 的密码 。
passwd:所有的身份验证令牌已经成功更新。
passwd文件讲解
# tail -1 /etc/passwd
test_admin:x:996:993::/home/test_admin:/bin/bash
test_admin:用户名
x:密码站位符
996:用户uid
993:用户gid
空:用户注释信息
/home/test_admin:用户家目录
/bin/bash:默认shll环境
删除用户命令-userdel
语法:userdel [选项] 用户名
选项:-r 表示在删除用户的同时删除用户的家目录
创建用户组命令-groupadd
语法:groupadd [选项] 组名
选项:
-g GID:指定组 ID;
-r:创建系统群组;
查看用户组命令-groups
语法:groups [选项]... [组名]...
示例:
# cat /etc/group|grep hhh
修改用户组命令-groupmod
语法:groupmod [选项] 组
选项:
-n, --new-name NEW_GROUP 改名为 NEW_GROUP
删除用户组命令:groupdel
语法: groupdel 组名
2.2.3 su命令
用法: su [选项]... [-] [用户 [参数]... ]
-c = command使用-c向shell传递单个命令,并且不要创建新的会话;
示例:
# su - test
# su -c “tail -3 /etc/passwd” root
2.3 文件类型与文件属性
2.3.1 文件属性
inode 索引节点编号:16777667
文件类型 :文件类型是’-',表示这是一个普通文件
文件权限:rw-r–r-- 表示文件可读、可写、可执行,文件所归属的用户组可读可写,其他用户可读
硬链接个数 表示a.txt这个文件没有其他的硬链接,因为连接数是1,就是他本身
文件属主 表示这个文件所属的用户,这里的意思是test1.txt文件被root用户拥有,是第一个root
文件属组 表示这个文件所属的用户组,这里表示test1.txt文件属于root用户组,是第二个root
文件大小 文件大小是9个字节
文件修改时间 这里的时间是该文件最后被更新(包括文件创建、内容更新、文件名更新等)的时间可用如下命令查看文件的修改、访问、创建时间
2.3.2 文件类型
普通文件类型
Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-]
目录文件
就是目录, 能用 # cd 命令进入的。第一个属性为 [d],例如 [drwxrwxrwx]
块设备文件
块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]
字符设备
字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]
套接字文件
这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型
管道文件
FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]
链接文件
类似Windows的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]
2.3.3 Linux文件链接
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接,即符号链接(Symbolic Link)。
在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,这个编号被称之为索引节点号(Inode Index),也就是常说的inode号。
硬链接
硬链接指文件名与索引节点号(即inode号)的链接(所以创建一个新的文件,该文件使用stat命令查看时,links显示的是1),索引节点号(inode号)可以对应一个或多个文件名,并且这些文件名可以在同一或不同目录。
由于硬链接是直接将文件名与索引节点号(即inode号)链接,因此硬链接存在以下几个特点:
1、文件有相同的inode号及data block,这使得修改其中一个硬链接文件属性或文件数据时,其他硬链接文件都会发生相应修改;
2、只能对已存在的文件进行创建;
3、不能跨文件系统(即分区)进行创建;因为文件需要指向相同的Inode号;
4、不能对目录文件进行创建;
5、删除其中一个硬链接文件时,不会对其他硬链接文件产生影响。
软链接
软链接类似于Windows的快捷方式。它实际上是一个特殊的文件,有着自己的索引节点号(即inode号)以及用户数据块(data block),但用户数据块(data block)中包含的是另一个文件的位置信息。
软链接的特性如下:
1、软链接有自己的文件属性、inode号和data block,但是编辑文件其实就是编辑源文件;
2、不会增加被链接文件的链接次数;
3、可以跨文件系统(即分区)进行创建,使用ln命令跨文件系统创建时,源文件必须是绝对路径,否则为死链接;
4、可以对文件或目录文件进行创建;
5、删除软链接并不影响源文件,但源文件被删除,则相关软链接文件变为死链接(dangling link),若源文件(原地址原文件名)重新被创建,则死链接恢复为正常软链接。
语法:ln [选项] 源文件 目标文件
选项:
-s:创建软链接
-v:显示创建结果
2.3.4 文件权限
每个Linux文件具有四种访问权限:可读(r)、可写(w)、可执行(x)和无权限(-)
2-4位表示文件所有者的权限,u权限
5-7位表示文件所有者所属组成员的权限,g权限
8-10位表示所有者所属组之外的用户的权限,o权限
2-10位的权限总和有时称为a权限
文件权限修改-chmod
方法一:所谓数字表示法,是指将r、w和x分别用4、2、1来代表,没有授予权限的则为0,
然后把权限相加。
#chmod 777 test
方法二:
文本表示法用4个字母表示不同的用户:
u:所有者
g:组成员
o:其他成员
a:所有人
和数字表示法不同,文本表示法不仅可以重新指定权限,也可以在原来权限的基础上增加或减少权限,如下:
=:重新制定权限
-:对目前的设置减少权限
+:对目前的设置增加权限
# chmod u+x,g+w,o=w test.sh
文件属主、属组修改-chown
语法:chown [参数] user[:group] 文件
参数:
-R: 处理指定目录以及其子目录下的所有文件
2.4 数据流重定向
2.4.1 输出重定向
相较于输入重定向,我们使用输出重定向的频率更高。并且,和输入重定向不同的是,输出重定向还可以细分为标准输出重定向和错误输出重定向两种技术。
什么是标准输出?什么是错误输出?
[root@localhost ~]# touch demo1.txt
[root@localhost ~]# ls -l demo1.txt
-rw-rw-r--. 1 root root 0 Oct 12 15:02 demo1.txt
[root@localhost ~]# ls -l demo2.txt <-- 不存在的文件
ls: cannot access demo2.txt: No such file or directory
相关命令
命令 > 文件
将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。
命令 2> 文件
将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,会清空原有数据,再写入新数据。
命令 >> 文件
将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。
命令 2>> 文件
将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。
命令 >> 文件 2>&1 或者 命令 &>> 文件
将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法。
2.4.2 输入重定向
指的是重新指定设备来代替键盘作为新的输入设备
命令 < 文件
将指定文件作为命令的输入设备
命令 << 分界符
表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符),这里的分界符其实就是自定义的字符串
命令 < 文件1 > 文件2
将文件1作为命令的输入设备,该命令的执行结果输出到文件2中。
示例:
[root@localhost ~]# cat /etc/passwd
#这里省略输出信息,读者可自行查看
[root@localhost ~]# cat < /etc/passwd
#输出结果同上面命令相同
[root@localhost ~]# cat << 0
>c.biancheng.net
>Linux
>0
c.biancheng.net
Linux
可以看到,当指定了 0 作为分界符之后,只要不输入 0,就可以一直输入数据。
#首先,新建文本文件 a.tx,然后执行如下命令:
[root@localhost ~]# cat a.txt
[root@localhost ~]# cat < /etc/passwd > a.txt
[root@localhost ~]# cat a.txt
#输出了和 /etc/passwd 文件内容相同的数据,如上命令和shell什么命令功能相同?
作业
1、列举常用目录,以及功能
2、列举创建目录、文件、移动、复制、删除、查看、echo命令以及常用选项功能
3、创建、删除用户以及用户组命令及选项说明
4、说明/etc/passwd文件内容
5、文件类型与文件属性
6、数据流重定向,包括标准输出、错误输出、标准输出重定向、错误输出重定向、标准输入,标准输入重定向