防止走丢。
防止走丢。
▶ Linux 系统中一切都是文件,那么硬件设备肯定也不例外。既然是文件就必须有名称,系统内核的udev 设备管理器会自动把硬件名称规范起来,目的是让运维人员可以通过设备文件的名字猜出设备大致的属性以及分区信息等,对于陌生的设备这点特别的方便,另外udev 服务会一直以守护进程的形式运行并侦听来自内核发出的信号来管理/dev 目录下的设备文件。
▶ 现在的IDE 设备已经很少见,所以一般硬盘设备都会是以“/dev/sd”开头的,而一台主机上可以有多块硬盘,因此系统便会用a-p 来代表16 块不同的硬盘(默认从a 开始分配)。主分区或扩展分区的编号从1 开始至4 结束,逻辑分区编号从5 开始。
▶ 例如:
/dev/sda1
dev: 硬件设备文件所在的目录
hd:表示IDE 设备,sd:表示SCSI 设备
a、b、c⋯:表示硬盘的顺序号
1、2、3⋯:表示分区的顺序号
▶ FHS 文件系统层次结构标准协定(Filesystem HierarchyStandard)是工程师在Linux 系统中存储文件的时候需要遵守的规则,FHS 是根据以往无数Linux 系统用户和开发者的经验而总结出来的,指导用户应该把文件保存到什么位置,以及告诉运维人员应该在何处找到所需的文件。
▶ 硬盘设备则是由大量的扇区组成的,其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。单个扇区容量为512bytes 组成,主引导记录需要占用446bytes,分区表的为64bytes,结束符占用2bytes(存放55 AA),而其中每记录一个分区信息需要16bytes,这最多四个能被写到第一个扇区中的分区信息就叫做主分区。
df:列出文件系统的整体磁盘使用量;
1 | df 参数: |
du:评估文件系统的磁盘使用量(常用于评估目录所占
容量)
1 | du 参数: |
1 | sudo du -hs /home/wl |
ls –l /dev/sd*
发现新增磁盘sdb
fdisk /dev/sdb
1 | 输入:n,表示new 新增 |
ls –l /dev/sd*
注意:在没有执行w 命令确认分区之前,可以使用d 命令
删除指定分区。
1 | 1、parted 支持用户在大于2TB 的硬盘上创建硬盘分区,但fdisk 命令不支持。 |
1 | 1、新增一块10G 大小虚拟硬盘。 |
▶ parted 有两种方法创建分区,一种是交互式方法,另一种是命令。
分区前,应该先设置磁盘标签。
在磁盘sdb 上,创建一个5G 大小的分区
1 | sudo parted /dev/sdb // 对sdb进行分区 |
▶ 使用parted 删除分区:rm 分区编号
sudo parted /dev/sdc mkpart primary ext4 5GB 10GB
sudo parted -l
在新增分区上,创建文件系统,方可使用磁盘分区。
sudo mkfs.ext4 /dev/sdb1
或
sudo mkfs -t ext4 /dev/sdb2
1 | cd /mnt |
mount&umount: 挂载和卸载磁盘
1 | 挂载磁盘分区: mount |
新挂载分区,权限为:755。
更改分区权限:
sudo chmod 777 /mnt/sdb1
或者更改分区属主属组为当前使用者:
sudo chown wl:wl /mnt/sdb1
使用umount 命令:
sudo umount /mnt/sdb1
mount 挂载在重启服务器后会失效,所以,若要长久生效,必须修改/etc/fstab 配置文件。
使用下面的命令编辑 /etc/fstab:sudo vi /etc/fstab
在文件最后增加如下两行,wq 保存退出即可
1 | /dev/sdb1 /mnt/sdb1 ext4 defaults 0 0 |
1 | 1、df –h 查看磁盘 |
swap 分区,即交换区。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用,那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap 空间中,等到程序要运行时,再从swap 中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行swap交换。
通常情况下,swap 空间应大于或等于物理内存的大小,最小不应小于64M,通常swap 空间的大小应是物理内存的2-2.5 倍,swap 的调整对Linux 服务器,特别是Web 服务器的性能至关重要,通过调整swap,有时可以越过系统性能瓶颈,节省系统升级费用。
▶ 1、查看已有swap 空间
▶ 2、新增swap 分区空间
使用dd 创建swapfile,bs 单位bytes,也可以手动指定单位为M 或者G,count 为计数,例子为增加100M*2=200M空间。
dd if=/dev/zero of=/tmp/swapfile bs=100M count=2
▶ 3、格式化为swap 格式
mkswap –f /tmp/swapfile
▶ 4、启用该虚拟磁盘
sudo swapon /tmp/swapfile
▶ 5、实现开机自动挂载交换文件
vi /etc/fstab
增加条目/tmp/swapfile swap swap defaults 0 0
▶ 6、卸载swap 空间,删除文件
(1) swapoff 卸载增加的swap
swapoff /tmp/swapfile
(2) 删除文件
rm /tmp/newdisk
▶ 当Linux 根分区的磁盘空间耗尽时,Linux 系统将无法再建立新的文件(包括程序运行的临时文件),从而出现服务程序崩溃、系统无法启动等故障现象。为了避免在服务器中出现类似的磁盘空间不足的问题,可以设置启用磁盘配额功能,对用户在指定文件系统(分区)中使用的磁盘空间、文件数量进行设置,以防止个别用户恶意或无意间占用大量磁盘空间,从而保持系统存储空间的稳定性和持续可用性。
▶ 设置用户和组配额的分配量对磁盘配额的限制一般是从一个用户占用磁盘大小和所有文件的数量两个方面来进行的。设置磁盘配额时,“某用户在系统中共计只能使用50MB 磁盘空间”,这样的限制要求是无法实现的,只能设置“某用户在/home 分区能使用30MB,在/backup 分区能使用20MB”。
▶ 磁盘配额的设置单位是分区,针对分区启用配额限制功能后才可以对用户设置,而不理会用户文件放在该文件系统中的哪个目录中,其他系统,如Unix、Windows,原理与Linux相同。
▶ 在具体操作之前,先了解一下磁盘配额的两个基本概念:软限制和硬限制。
▶ 硬限制:一个用户可拥有的磁盘空间或文件的绝对数量,绝对不允许超过这个限制。
▶ 软限制:一个用户在一定时间范围内(默认为一周,可以使用命令“edquota –t”重新设置,时间单位可以为天、小时、分钟、秒)超过其限制的额度,在不超出硬限制的范围内可以继续使用空间,系统会发出警告(警告信息设置文件为“/etc/warnquota.conf”),但如果用户达到时间期限仍未释放空间到限制的额度下,系统将不再允许该用户使用更多的空间。
1、查看内核是否支持配额quota;
2、安装磁盘配额工具;
3、激活分区的配额功能;
4、建立配额数据库;
5、启动分区磁盘配额功能;
6、设置用户和组磁盘配额;
7、设置宽限期。
1、ubuntu 系统默认没有安装quota 命令,需要自行安装。
sudo apt-get install quota
2、指定空闲的磁盘、阵列或者lvm,激活空间的配额功能
(1) 在虚拟机中加入一块磁盘
(2) 格式化后,挂载
(3) 查看df -h
(4) 使用mount –o 命令加入参数后,重新挂载
A、临时生效:
sudo mount –o remount,usrquota,grpquota /mnt/sdb1
B、永久生效
sudo vi /etc/fstab 在文件系统中加入quota 支持,在文件最后一行加入:
/dev/sdb1 /mnt/sdb1 ext4 defaults,usrquota,grpquota 0 0
重启服务:
sudo /etc/init.d/quota start
(5) 创建配额文件系统
sudo quotackeck –cvug /mnt/sdb1
c: 创建v:显示详细信息
u:检查用户磁盘配额信息
g:检查群组磁盘配额信息
(6) 查看磁盘sdb1 配额情况
mount|grep sdb1
(7) quota 服务开启与关闭
i、开启:sudo quotaon -vug /mnt/sdb1
ii、关闭:sudo quotaoff -vug /mnt/sdb1
(8) 创建用户和用户组
sudo groupadd groupd
sudo useradd -g group1 user1
(9) 指定用户或用户组配额
sudo edquota -u user1
设置软限制为10M,硬限制为20M,硬限制要大于软限制
(10) 设置组配额
sudo edquota -g group1
(11) 查看用户和组配额
sudo quota -uvs user1
sudo quota -gvs group1
(12) 更改/mnt/sdb1 挂载点的所有者和所属组
(13) 切换至user1,切换到/mnt/sdb1 目录下
(14) 使用dd 命令,创建一个12M 大小的空洞文件
dd if=/dev/zero of=test bs=12M count=1
(15) 查看用户配额,发现用户超过软限制,配额计时器开始计时。当计时器过期时,如果用户的使用配额一直在软限制以上,则会将软限制强制作为硬限制。
▶ Linux 系统中一切都是文件,那么硬件设备肯定也不例外。既然是文件就必须有名称,系统内核的udev 设备管理器会自动把硬件名称规范起来,目的是让运维人员可以通过设备文件的名字猜出设备大致的属性以及分区信息等,对于陌生的设备这点特别的方便,另外udev 服务会一直以守护进程的形式运行并侦听来自内核发出的信号来管理/dev 目录下的设备文件。
▶ 现在的IDE 设备已经很少见,所以一般硬盘设备都会是以“/dev/sd”开头的,而一台主机上可以有多块硬盘,因此系统便会用a-p 来代表16 块不同的硬盘(默认从a 开始分配)。主分区或扩展分区的编号从1 开始至4 结束,逻辑分区编号从5 开始。
▶ 例如:
/dev/sda1
dev: 硬件设备文件所在的目录
hd:表示IDE 设备,sd:表示SCSI 设备
a、b、c⋯:表示硬盘的顺序号
1、2、3⋯:表示分区的顺序号
▶ FHS 文件系统层次结构标准协定(Filesystem HierarchyStandard)是工程师在Linux 系统中存储文件的时候需要遵守的规则,FHS 是根据以往无数Linux 系统用户和开发者的经验而总结出来的,指导用户应该把文件保存到什么位置,以及告诉运维人员应该在何处找到所需的文件。
▶ 硬盘设备则是由大量的扇区组成的,其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。单个扇区容量为512bytes 组成,主引导记录需要占用446bytes,分区表的为64bytes,结束符占用2bytes(存放55 AA),而其中每记录一个分区信息需要16bytes,这最多四个能被写到第一个扇区中的分区信息就叫做主分区。
df:列出文件系统的整体磁盘使用量;
1 | df 参数: |
du:评估文件系统的磁盘使用量(常用于评估目录所占
容量)
1 | du 参数: |
1 | sudo du -hs /home/wl |
ls –l /dev/sd*
发现新增磁盘sdb
fdisk /dev/sdb
1 | 输入:n,表示new 新增 |
ls –l /dev/sd*
注意:在没有执行w 命令确认分区之前,可以使用d 命令
删除指定分区。
1 | 1、parted 支持用户在大于2TB 的硬盘上创建硬盘分区,但fdisk 命令不支持。 |
1 | 1、新增一块10G 大小虚拟硬盘。 |
▶ parted 有两种方法创建分区,一种是交互式方法,另一种是命令。
分区前,应该先设置磁盘标签。
在磁盘sdb 上,创建一个5G 大小的分区
1 | sudo parted /dev/sdb // 对sdb进行分区 |
▶ 使用parted 删除分区:rm 分区编号
sudo parted /dev/sdc mkpart primary ext4 5GB 10GB
sudo parted -l
在新增分区上,创建文件系统,方可使用磁盘分区。
sudo mkfs.ext4 /dev/sdb1
或
sudo mkfs -t ext4 /dev/sdb2
1 | cd /mnt |
mount&umount: 挂载和卸载磁盘
1 | 挂载磁盘分区: mount |
新挂载分区,权限为:755。
更改分区权限:
sudo chmod 777 /mnt/sdb1
或者更改分区属主属组为当前使用者:
sudo chown wl:wl /mnt/sdb1
使用umount 命令:
sudo umount /mnt/sdb1
mount 挂载在重启服务器后会失效,所以,若要长久生效,必须修改/etc/fstab 配置文件。
使用下面的命令编辑 /etc/fstab:sudo vi /etc/fstab
在文件最后增加如下两行,wq 保存退出即可
1 | /dev/sdb1 /mnt/sdb1 ext4 defaults 0 0 |
1 | 1、df –h 查看磁盘 |
swap 分区,即交换区。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用,那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap 空间中,等到程序要运行时,再从swap 中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行swap交换。
通常情况下,swap 空间应大于或等于物理内存的大小,最小不应小于64M,通常swap 空间的大小应是物理内存的2-2.5 倍,swap 的调整对Linux 服务器,特别是Web 服务器的性能至关重要,通过调整swap,有时可以越过系统性能瓶颈,节省系统升级费用。
▶ 1、查看已有swap 空间
▶ 2、新增swap 分区空间
使用dd 创建swapfile,bs 单位bytes,也可以手动指定单位为M 或者G,count 为计数,例子为增加100M*2=200M空间。
dd if=/dev/zero of=/tmp/swapfile bs=100M count=2
▶ 3、格式化为swap 格式
mkswap –f /tmp/swapfile
▶ 4、启用该虚拟磁盘
sudo swapon /tmp/swapfile
▶ 5、实现开机自动挂载交换文件
vi /etc/fstab
增加条目/tmp/swapfile swap swap defaults 0 0
▶ 6、卸载swap 空间,删除文件
(1) swapoff 卸载增加的swap
swapoff /tmp/swapfile
(2) 删除文件
rm /tmp/newdisk
▶ 当Linux 根分区的磁盘空间耗尽时,Linux 系统将无法再建立新的文件(包括程序运行的临时文件),从而出现服务程序崩溃、系统无法启动等故障现象。为了避免在服务器中出现类似的磁盘空间不足的问题,可以设置启用磁盘配额功能,对用户在指定文件系统(分区)中使用的磁盘空间、文件数量进行设置,以防止个别用户恶意或无意间占用大量磁盘空间,从而保持系统存储空间的稳定性和持续可用性。
▶ 设置用户和组配额的分配量对磁盘配额的限制一般是从一个用户占用磁盘大小和所有文件的数量两个方面来进行的。设置磁盘配额时,“某用户在系统中共计只能使用50MB 磁盘空间”,这样的限制要求是无法实现的,只能设置“某用户在/home 分区能使用30MB,在/backup 分区能使用20MB”。
▶ 磁盘配额的设置单位是分区,针对分区启用配额限制功能后才可以对用户设置,而不理会用户文件放在该文件系统中的哪个目录中,其他系统,如Unix、Windows,原理与Linux相同。
▶ 在具体操作之前,先了解一下磁盘配额的两个基本概念:软限制和硬限制。
▶ 硬限制:一个用户可拥有的磁盘空间或文件的绝对数量,绝对不允许超过这个限制。
▶ 软限制:一个用户在一定时间范围内(默认为一周,可以使用命令“edquota –t”重新设置,时间单位可以为天、小时、分钟、秒)超过其限制的额度,在不超出硬限制的范围内可以继续使用空间,系统会发出警告(警告信息设置文件为“/etc/warnquota.conf”),但如果用户达到时间期限仍未释放空间到限制的额度下,系统将不再允许该用户使用更多的空间。
1、查看内核是否支持配额quota;
2、安装磁盘配额工具;
3、激活分区的配额功能;
4、建立配额数据库;
5、启动分区磁盘配额功能;
6、设置用户和组磁盘配额;
7、设置宽限期。
1、ubuntu 系统默认没有安装quota 命令,需要自行安装。
sudo apt-get install quota
2、指定空闲的磁盘、阵列或者lvm,激活空间的配额功能
(1) 在虚拟机中加入一块磁盘
(2) 格式化后,挂载
(3) 查看df -h
(4) 使用mount –o 命令加入参数后,重新挂载
A、临时生效:
sudo mount –o remount,usrquota,grpquota /mnt/sdb1
B、永久生效
sudo vi /etc/fstab 在文件系统中加入quota 支持,在文件最后一行加入:
/dev/sdb1 /mnt/sdb1 ext4 defaults,usrquota,grpquota 0 0
重启服务:
sudo /etc/init.d/quota start
(5) 创建配额文件系统
sudo quotackeck –cvug /mnt/sdb1
c: 创建v:显示详细信息
u:检查用户磁盘配额信息
g:检查群组磁盘配额信息
(6) 查看磁盘sdb1 配额情况
mount|grep sdb1
(7) quota 服务开启与关闭
i、开启:sudo quotaon -vug /mnt/sdb1
ii、关闭:sudo quotaoff -vug /mnt/sdb1
(8) 创建用户和用户组
sudo groupadd groupd
sudo useradd -g group1 user1
(9) 指定用户或用户组配额
sudo edquota -u user1
设置软限制为10M,硬限制为20M,硬限制要大于软限制
(10) 设置组配额
sudo edquota -g group1
(11) 查看用户和组配额
sudo quota -uvs user1
sudo quota -gvs group1
(12) 更改/mnt/sdb1 挂载点的所有者和所属组
(13) 切换至user1,切换到/mnt/sdb1 目录下
(14) 使用dd 命令,创建一个12M 大小的空洞文件
dd if=/dev/zero of=test bs=12M count=1
(15) 查看用户配额,发现用户超过软限制,配额计时器开始计时。当计时器过期时,如果用户的使用配额一直在软限制以上,则会将软限制强制作为硬限制。
虚拟终端:try1-tty7 ctrl+alt+f1 f2
▶ 文件管理是学习和使用Linux 的基础,也是Linux 系统管理与维护中最重要的部分之一。在Linux 系统上,任何软件和I/O 设备都被视为文件。Linux 中的文件名最大支持256 个字符,分别可以用A~Z、a~z、0~9 等字符来命名。
▶ 和Windows 不同,Linux 中文件名是区分大小写的,所有的UNIX 系列操作系统都遵循这个规则。在Windows 下,目录结构属于分区;Linux 下分区属于目录结构。Linux 下也没有盘符的概念(如Windows 下的C 盘、D 盘),而只有目录,不同的硬盘分区是被挂载在不同目录下的。
▶ Linux 文件的扩展名: 在windows 操作系统中根据文件的后缀就能判断文件的类型。比如file.txt、file.doc、file.sys、file.mp3、file.exe 等,而在linux 系统中,abc.exe 可以是文本文件,abc.txt 也可以是可执行文件。在Linux 中,带有扩展名的文件,只能代表程序的关联,并不能说明文件的类型,从这方面来说,Linux 的扩展名没有太大的意义。
▶ 压缩和归档文件扩展名及其含义如下。
Linux 中一个文件是否能被执行,和后缀名没有太大的关系,主要和文件的属性有关。了解Linux 文件的后缀名还是有必要的,特别是自己创建一些文件,最好加后缀名,这样做的目的是为了应用方便。使用file 命令查看该文件的类型。
1 | gz:使用gzip 压缩的文件 |
Linux 下的文件可以分为4 种不同的类型:普通文件、目录文件、链接文件、特殊文件。
▶ 1、普通文件 (-) :最常用的一种文件,其特点是不包含文件系统的结构信息。如,图形文件,文本文件、Shell 脚本、二进制可执行程序、各种类型数据文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文件工具、归档工具等。
▶ 2、目录文件(d) :用于存放文件名及其相关信息的文件。是内核组织文件系统的基本节点。目录文件下面可以包含下一级目录或者普通文件。Linux 下的目录文件和其他os 中的“目录”概念不同,它是linux 文件中的一种。
▶ 3、链接文件(l) :一种特殊的文件,实际上指向一个真实存在的文件连接,类似于windows 下的“快捷方式”,直接访问、不占用磁盘空间。
▶ 4、特殊文件
(1) 块设备文件(b) : 数据的读写以块为单位,比如硬盘,光驱等设备。目前在最新的Linux 发行版本中,一般不用自己来创建设备文件,因为这些文件是和内核相关联的。
(2) 字符设备文件(c) :串行接口的设备
(3) 套接字文件(s) :套接字文件是一个用户不可见的,高度简化的,用于汇集网络套接字的内存文件。
(4) 管道文件(p) :用于不同进程间的信息传递。一个进程将需要传递的信息或数据写入管道的一端,另一个进程则从管道另一端取得数据或信息。
文件和目录的访问权限
▶ 文件权限类型
read (r): 查看文件内容
write (w): 修改文件
execute (x): 如同命令一样执行文件
▶ 目录权限类型
read (r): 列出目录内容
write (w): 在目录中增删文件
execute (x): 访问目录中的文件
▶ 权限分组
文件拥有者(user)
文件拥有者所在用户组中的其它成员(group)
所有其它用户(other)
▶ 在linux 中,目录也是一种文件。系统在建立每一个目录时,都会自动生成两个目录文件,一个是“.”,代表目录本身,另一个是“..”,代表目录的父目录。对于根目录而言,由于不存在父目录,所以“.”和“..”都代表其自身。
▶ 1、路径,是指从树型目录中的某个目录层次到某个文件的一条道路。
绝对路径:从“根”开始的路径。
相对路径:从用户工作目录开始的路径。
▶ 2、根目录
Linux 的根目录(/)是Linux 系统中最特殊目录。
根目录是所有目录的起点,操作系统本身的驻留程序存放在以根目录开始的专用目录中。
▶ 用户家目录是系统管理员增加用户时建立起来的(以后也可以根据实际情况改变),每个用户都有自己的家目录,不同用户的家目录一般互不相同。用户登录到系统中时,其工作目录便是该用户的家目录,一般情况下,与用户的登录名相同,位于/home 下,但是root 用户比较特殊,其主目录为/root。用户可以通过一个~符号来引用自己的家目录。
▶ cd ~可以进入用户自己的家目录
▶ echo $HOME:显示用户家目录路径
FHS:文件系统层次化标准
▶ /: Linux 文件系统的入口,也是处于最高一级的目录。不要把根目录划分的过大。
▶ /bin: 放置一些系统的必备执行档,例如:cat、cp、chmod、df、dmesg(用于显示开机信息)、gzip、kill、ls、mkdir、more、mount、rm、su、tar 等。
▶ /usr/bin: 主要放置一些应用软件工具的必备执行档,例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome、zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、newaliases、nslookup passwd、quota、smb、wget 等。
▶ /boot: Linux 的内核及引导系统程序所需要的文件,系统Kernel 的配置文件,启动管理程序GRUB 的目录,vmlinuz是在启动过程中最重要的一个文件,因为这个文件就是实际系统所使用的kernel。
▶ /dev: 设备文件存储目录,比如声卡、磁盘…
▶ /etc: 统配置文件的所在地,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件。
▶ /home: 一般情况下,除root 外的普通用户主目录默认存放目录。
▶ /root: Linux 超级权限用户root 的主目录。
▶ /sbin: 大多是涉及系统管理的命令的存放,是超级权限用户root 的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin 目录是相似的;凡是目录sbin 中包含的都是root 权限才能执行的。
▶ /tmp: 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp 就用来存放临时文件的。/var/tmp 目录和这个目录相似。
▶ /proc: 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。(伪文件系统,自动装载内核的映象,可以获取系统的信息。)
这个目录在磁盘上其实是不存在的。
▶ /sys: 系统设备信息的虚拟目录,Sysfs 的根目录下包含了七个目录:block, bus, class, devices, firmware, ,module 和power(这些目录随内核的不同而有所不同 )
▶ /var: 这个目录的内容是经常变动的,存放被系统更改过的数据。
▶ /lib: 启动时所用到的库文件都放在这个目录下,那些非启动用的库文件放在/usr/lib 下。内核模块放在/lib/modules 下。
▶ /lost+found: 当系统意外崩溃或机器意外关机,产生一些文件碎片放在这里。当系统启动的过程中fsck 工具会检查这里,并修复已经损坏的文件系统。
▶ /media: 即插即用型存储设备的挂载点自动在这个目录下创建,如USB 盘系统自动挂载后,会在这个目录下产生一个目录;CDROM/DVD 自动挂载后,也会在这个目录中创建一个目录,类似cdrom 的目录。(挂载点目录,一般是光盘)
▶ /mnt: 这个目录下面放着一些用来安装其他设备的子目录。(挂载点目录)
▶ /opt: 表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包。
▶ /srv: 主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务)
▶ /cdrom: 光驱。
▶ /usr: Unix Software Resource 的缩写,也就是Unix 操作系统软件资源所放置的目录,而不是用户的数据;所有系统默认的软件都会放置到/usr 目录下,系统安装完毕后,这个目录会占用最多的硬盘容量。
1 | /bin 存放二进制可执行文件 |
掌握基本的文件与目录操作命令。
▶ 定位文件与目录命令:
cd pwd find locate
▶ 浏览文件命令:
ls head tail cat more less
▶ 目录操作命令:
mkdir rmdir
▶ 文件操作命令:
touch rm cp mv ln tar gzip gunzip whereis whatis
▶ 文件压缩和解压缩:
tar gzip
command [-options] [parameters]
[-options] 命令选项,-开始,多个选项可用一个-连起来
如ls -l -a 与ls -la 相同
单字符选项前使用一个减号-,单词(多字符)选项前使用两个减号- -
如
1 | ls --help |
parameters:参数是可选的或必须的
所有的命令从标准输入接受输入,输出结果显示在标准输出
▶ TAB,将命令补充完整
▶ 上下箭头键, 使用历史记录功能
pwd : 显示用户所在的位置。
cd : 用来改变工作目录。
1 | 在使用cd 进入某个目录时,用户必须具有对该目录的读权限。 |
find : 在硬盘上查找文件。
find 是Linux 功能最为强大,使用也是较为复杂的命令。
1 | find 命令格式:fing [<path>][option] |
1 | path : 要查找的目录路径 |
1 | find -name file |
查找名为filename的文件。
1 | (1) 从根目录开始查找文件名为passwd 的文件 |
(1) 在/etc 及其子目录中,查找host 开头的文件
find /etc -name ’host*’ -print
(2) 在当前目录除abc 之外的子目录内搜索txt 文件
find . -path ”./abc” -a -prune -o -name ”*.txt” -print
解释:如果目录/abc 存在(即-a 左边为真),则求-prune 的值,
-prune 返回真,‘与’逻辑表达式为真(即-path ’./abc’-a -prune 为真),
find 命令将在除这个目录以外的目录下查找txt 后缀文件并打印出来;
如果目录abc 不存在(即-a 左边为假),则不求值-prune ,
‘与’逻辑表达式为假,则在当前目录下查找所有txt 后缀文件。
因为使用了-prune 参数,所以末尾需要使用-print 参数。
-a 是条件与,-o 是条件或,所以-o 前面的满足之后,后面的就不会再执行。
-path xxx -prune:表示忽略某个目录-a 也可以不写。
1 | -perm 按执行权限进行查找 |
1 | 在当前目录及子目录中,查找符号链接文件 |
1 | -nogroup 查无有效属组的文件,即文件的属组在/etc/groups 中不存在 |
1 | (1)atime [+-] 时间: 按照文件访问时间搜索 |
1 | (1) 查找比abc.txt 新的文件 |
1 | (1) 查找超过1M 的文件 |
1 | 可以根据文件的inode 节点值,删除该文件。有些文件很特殊,用rm 难以直接删除时,可以使用该方式。 |
1 | 花括号代表前面find 查找出来的文件名, |
同find 命令相比较,locate 命令是从linux 文件数据库(/var/lib/mlocate/mlocate.db)中查找,而不是每次搜索文件系统。因为是从数据库中查找,locate 的速度远远快于find 命令。但是,使用locate 命令查找的结果仅仅是在当前数据库,结果可能会没有find 准确。
1 | 如果没有mlocate.db,则使用: |
浏览文件和目录。
显示用户当前或指定目录的内容
1 | ls 命令可以使用通配符*、?、[abc] [^abc]。这样可以使用户很方便地查找特定形式的文件和目录。如果不指定目录,将显示当前目录的内容。 |
1 | (1)ls: 显示当前或指定目录的内容 |
用来查看文件的开头部分。
按照默认设置,只能阅读文件的前十行。
Head –n 可以查看前n 行。
查看文件/etc/profile 前五行:
1 | head -5 etc/profile |
查看文件结尾部分
缺省状态tail 命令查看文件结尾十行,与head 命令相反。
这有助于查看日志文件的最后十行,阅读重要的系统消息;
还可以使用tail 来观察日志文件被更新的过程。
即时观察/var/log/messages 的变化:
1 | tail -f /var/log/messages |
合并文件或者显示文件的内容。
cat 是“concatenate”的缩写,即合并文件。该命令可以显示文件的内容,或者是将多个文件合并成一个文件。
1 | (1) 使用cat 阅读短文 |
more 命令是一般用于要显示的内容会超过一个画面长度的情况。为了避免画面显示时瞬间就闪过去,用户可以使用more 命令,让画面在显示满一页时暂停,此时可按空格健继续显示下一个画面,按b 键就会往回(back)一页显示或按Q 键停止显示。
1 | (1) 显示/etc/profile 文本文件的内容 |
搜索文件内容可以使用Global Regular Expression Print (grep)命令。
1 | grep [options] [pattern] [file] |
1 | (1) 直接输入要匹配的字符串,如要匹配hello.c 文件中 |
1、在某个文件里搜索error 字符串
grep “error”log.txt
grep -i “ErroR”log.txt -i 忽略大小写
2、grep 使用- -color=auto 将关键字部分使用颜色高亮显示。如果每次使用grep 都得要自行加上- -color=auto 比较麻烦,可以在~/.bashrc 内加上:alias grep=’grep - -color=auto’
source ̃/.bashrc 命令立即生效。
3、在passwd 中找带有sh 的行,并且显示行号。
grep –n ‘sh’/etc/passwd
4、在passwd 中找带有bash 的行,-o 标识只显示命中的字符串only
grep –o ‘bash’/etc/passwd
5、在passwd 中反向查找。不含有bash 的行
grep -v ‘bash’/etc/passwd
6、查找命中行的内容,以及上面两行内容。
grep -B2 –n ‘wl’/etc/passwd
7、查找命中行的内容,以及下面两行内容。
grep -A2 -n ‘wl’/etc/passwd
8、查找命中行的内容,以及上下各两行内容。
grep -C2 -n ‘wl’/etc/passwd
A:after , B:before , C: after and before
9、匹配数字0-9
grep ‘[0-9]’/etc/passwd
10、在某个配置文件中查找# 开头的注释行
grep ‘^#’/etc/profile
11、查找以h 结尾的行
grep -n ‘h$’/etc/passwd
12、查看文件时,去除所有的空行和以“#”开头的行。
grep -v ‘^$’/etc/profile | grep –v ‘^#’
13、查找字母o 出现两次的内容
grep ’o{2}’ /etc/passwd
14、在当前目录搜索带’user’ 行的文件
grep ‘user’*
awk 是一个强大的文本分析工具,相对于grep 的查找,sed 的编辑,awk 在其对数据分析并生成报告时,显得尤为强大。简单来说awk 就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
▶ 语法:
awk ’pattern + action’ filenames
pattern: 正则表达式,用//括起来
action: 找到匹配内容时,所执行的一系列命令
▶ awk 其实是一门编程语言,它支持条件判断、数组、循环等
功能。所以,我们也可以把awk 理解成一个脚本语言解释
器。
▶ grep 、sed、awk 被称为linux 中的” 三剑客”:
grep 更适合单纯的查找或匹配文本;
sed 更适合编辑匹配到的文本;
awk 更适合格式化文本,对文本进行较复杂格式处理。
1 | -F 指定分隔符, 默认为空格; |
硬链接是通过索引节点进行的链接。在Linux 中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的源文件,则硬链接文件仍然存在,而且保存了原有的内容,这样可以起到防止因为误操作而错误删除文件的作用。由于硬链接是有着相同inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同inode 号的文件。
硬链接可由命令link 或ln 创建。
link oldfile newfile
ln oldfile newfile
软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。
▶ 主要应用于两个方面:
▶ 一方面,方便管理,例如可以把一个复杂路径下的文件链接到一个简单路径下方便用户访问;
▶ 另一方面,解决文件系统磁盘空间不足的情况。
例如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中,这样就可以很好的解决空间不足问题。注意:删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接
touch f1 # 创建一个测试文件f1
ln f1 f2 # 创建f1 的一个硬连接文件f2
ln -s f1 f3 # 创建f1 的一个符号连接文件f3
ls -li # -i 参数显示文件的inode 节点信息
Figure 5: 软链接和硬链接文件
从上面的结果中可以看出,硬连接文件f2 与原文件f1 的
inode 节点相同,然而符号连接文件的inode 节点不同
复制文件或目录。
1 | cp [选项] 源文件目标文件 |
(1) 复制文件/etc/profile 到当前目录。
cp /etc/profile .
(2) 复制/etc/apt 目录下所有的内容,包括所有子目录到当
前目录。
cp –R /etc/apt .
(3) 使用通配符复制etc 目录下mail 开头的所有文件到当前目录。
cp /etc/mail* .
(4)cp 复制软连接文件
a、创建当前目录下user.txt 的软连接文件至/tmp/下,命名mylink。
ln –s ~/user.txt /tmp/mylink
b、复制/tmp/mylink 至~/下,命名为mylink2
cp /tmp/mylink ./mylink2
c、cat 查看mylink2 内容
cat ./mylink2
(5)cp 复制软连接文件,加参数-d
a、创建当前目录下user.txt 的软连接文件至/tmp/下,命名mylink。
ln –s ~ /user.txt /tmp/mylink
b、复制/tmp/mylink 至~/下,命名为mylink3
cp -d /tmp/mylink ̃/mylink3
c、ls 查看文件,cat 查看mylink3 内容
ls –l
cat ./mylink3
stat xxx 可以观察一个文件的详情。
touch 生成一个空文件或修改文件的存取/修改的时间记录值。
(1) 将当前目录下的文件时间修改为系统的当前时间。
touch *
(2)新建文件
root@Ubuntu: #touch test
若文件存在,则修改为系统的当前时间;若文件不存在,则生成一个为当前时间的空文件。
(3) 将test 文件的日期改为20180710。
touch –d 20180710 test
ls
-rw-r–r– 1 wl wl 0 2018-07-10 00:00 test
注意:文件的最后修改时间离现在不到6 个月的就会只显示月/日/小时/分钟,否在就会显示月/日/年
还可以使用:
touch -d “2 days ago”testfile1 “10 years ago”touch -d “next thursday”testfile2 “next year”
移动文件, 可以将文件及目录移到另一目录下,或更改文件及目录的名称。
1 | 1. 将test 文件移动上层目录。 |
rm 删除文件和目录。
1 | 1. 删除文件主目录下file1 文件。 |
创建目录。
1 | 1. 在当前目录下建立新目录dir1。 |
删除目录。与创建目录类似,加上-p 参数表示如果删除一个目录后,其父目录为空,则将其父目录一同删除。
1 | 1. 删除目录 dir1 |
▶ 什么是umask
当用户登录系统之后创建一个文件是会有一个默认权限的,这个权限是怎么来的呢?umask 用于设置用户创建文件或者目录的默认权限,umask 设置的是权限的“补码”。一般在/etc/profile 或和/etc/bashrc 中设置umask。
▶ umask 作用
umask 值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask 值决定的。对于root 用户,系统默认的umask值是0022;对于普通用户,系统默认的umask 值是0002。执行umask 命令可以查看当前用户的umask 值。
▶ umask 值一共有4 组数字,其中第1 组数字用于定义特殊权限,一般不予考虑,与一般权限有关的是后3 组数字。默认情况下,对于目录,用户所能拥有的最大权限是777;对于文件,用户所能拥有的最大权限是目录的最大权限去掉执行权限,即666。因为x 执行权限对于目录是必须的,没有执行权限就无法进入目录,而对于文件则不必默认赋予x 执行权限。
▶ 对于root 用户,他的umask 值是022。当root 用户创建目录时,默认的权限就是用最大权限777 去掉相应位置的umask 值权限,即对于所有者不必去掉任何权限,对于所属组要去掉w 权限,对于其他用户也要去掉w 权限,所以目录的默认权限就是755;当root 用户创建文件时,默认的权限则是用最大权限666 去掉相应位置的umask 值,即文件的默认权限是644。
1 | root : 文件: 666 - 022 = 644 rw-r--r-- |
▶ 对于目录,直接使用777-umask 即可,得到最终结果。
▶ 对于文件,先使用666-umask。
▶ 注意,如果对应位上为偶数:最终权限就是这个偶数值,如果上面的对应位上有奇数,就对应位+1。得到奇数,说明umask 有奇数,+1 变成偶数,表示去掉可执行权限,系统会最大程度保证安全性(尽可能不为文件赋予可执行权限)。
▶ 如何修改umask 值?
直接使用umask 命令只能临时修改umask 值,系统重启之后umask 将还原成默认值。如果要永久修改umask 值,需要修改/etc/profile 文件或是修改/etc/bashrc 文件,例如要将默认umask 值设置为027,那么可以在文件中增加一行“umask 027”。
▶ /etc/profile 和/etc/bashrc 都可以用于设置用户登录系统时自动执行某些操作,他们的区别是/etc/profile 只在用户第一次登录时被执行,而/etc/bashrc 则在用户每次登录加载Bash Shell 时都会被执行。因而,如果是修改/etc/profile 文件,将只对新创建的用户生效;而如果是修改/etc/bashrc文件,则对所有用户都生效。
chgrp 改变文件或目录的所属组。
1 | 语法:chgrp [选项] [组] [文件] |
1 | 例1 改变文件的群组属性并显示过程 |
指定文件或目录的所有者,还可以修改文件所属组。
1 | 语法:chown [选项] [用户] [: 群组] [文件或目录] |
1 | 例1 更改所属用户 |
改变文件或目录的访问权限。
1 | 语法:chmod [OPTION]... MODE[,MODE]... FILE... |
1 | 例1 将文件file1.txt 设为所有人皆可读取 |
1 | chmod 也可以用数字来表示权限 |
有时候发现用root 权限都不能修改某个文件,大部分原因是曾经用chattr 命令锁定了该文件。
chattr:锁定文件。
lsattr:查看chattr给某些文件锁定的mode。
1 | chattr 命令的用法: |
1 | 举例: |
setuid 是一种文件的拥有者具备的特殊属性,它使得被设置了setuid 位的程序无论被哪个用户启动,都会自动具有文件拥有者的权限。
setgid 与setuid 类似,只是setgid 是文件归属的组具备的特殊属性,具有setgid 的可执行文件运行时,自动获取文件对应的组权限,因为组权限不像用户权限那样精确,所以使用setgid 的程序很少。
1 | ▶ 用户存储用户信息的/etc/passwd 文件只有超级用户才能进行修改,而用于存储用户口令的文件/etc/shadow 甚至只有超级用户才可以访问。只有在普通用户执行passwd 命令的时候,能够读取和修改/etc/passwd 和/etc/shadow 文件,才能使普通用户修改自己的口令。为了解决在用户修改口令时,文件系统存取权限矛盾,Linux 给/usr/sbin/passwd 命令设置了setuid 属性。 |
1 | 【setuid】的使用 |
备份分区、文件或目录。
1 | dump 命令格式如下: |
1 | dump -0uj -f /root/boot.bak.bz2 /boot/ |
▶ 查看备份时间文件
cat /etc/dumpdates
/dev/sdal 0 Wed Sep 26 18:08:22 2020 +0800
# 备份的分区备份级别备份曰期
▶ 如果/boot 分区的内容发生了变化,则可以使用1 级别进行增量备份。当然,如果数据会继续发生变化,则可以继续使用2~9 级别增量备份。
dump -1uj -f /root/boot.bak1.bz2 /boot/
▶ 如果备份的是整个分区,那么是可以使用“dump -W”命令来查询分区的备份时间及备份级别的。不过要注意,如果备份时没有使用“-u”选项,那么“dump -W”命令是不会记录备份的时间和级别的。
▶ dump 命令可以非常方便地实现增量备份,但如果实现差异备份时,先使用0 级别完全备份一次,以后的每次备份都使用1 级别进行备份。
▶ 备份文件或目录
dump 命令也可以文件或目录,不过,只要不是备份分区,就只能使用0 级别进行完全备份,而不再支持增量备份。同时,不能使用“-u”选项更新分区的备份时间,当然也不能使用“dump -W”命令查询到文件或目录的备份。
dump -0j -f /root/etc.dump.bz2 /etc/
▶ 使用增量备份命令
dump -1j -f /root/etc.dump1.bz2 /etc/
DUMP:Only level 0 dumps are allowed on a subdirectory
DUMP:The ENTIRE dump is aborted.
# 备份失败,目录备份只能使用0 级别
还原dump 操作备份下的文件、目录或分区
dd 命令:数据备份,并在备份过程中进行格式转换
restore 命令:还原dump 操作备份下的文件、目录或分区
restore 命令是dump 命令的配套命令,dump 命令是用来备份分区和数据的,而restore 命令是用来恢复数据的。
1 | restore命令的格式如下: |
dd 命令:数据备份,并在备份过程中进行格式转换
zip 与 unzip: 压缩与解压
1 | zip 与 unzip |
使用gzip 来压缩文件,使用gunzip 来解压缩文件,gzip 其压缩命令与解压缩命令gunzip 实际上是同一个程序,文件的大小和参数完全一样,只是命令的名称不同。文件会被压缩,并被保存为filename.gz。当解压缩时,filename.gz 会被删除,同时filename 被还原。
对比zip,gzip 有以下特点:
(1)zip 命令具有将许多文件与目录压缩成一个文件的功能,
但gzip 却不能;
(2) 用gzip 命令压缩后源文件会被删除。
1 | (1) 压缩单个文件。 |
tar 是Linux 常用的归档命令,更多是用于硬盘数据备份。
tar 可以对文件和目录进行打包。
利用tar,用户可以对某一特定文件进行归档(一般用作备份文件),也可以在包中改变文件,或者向包中加入新的文件。
归档不同于压缩。归档文件是一个文件和目录的集合,而这个集合被贮存在一个文件中。归档文件没有经过压缩,它所使用的磁盘空间是其中所有文件和目录的总和。压缩文件也是一个文件和目录的集合,且这个集合也被贮存在一个文件中,但是,它的贮存方式使其所占用的磁盘空间比其中所有文件和目录的总和要少。归档文件不是压缩文件,但是压缩文件可以是归档文件。
1 | 格式:tar [选项] [文件目录列表] |
1 | tar 示例 |
虚拟终端:try1-tty7 ctrl+alt+f1 f2
▶ 文件管理是学习和使用Linux 的基础,也是Linux 系统管理与维护中最重要的部分之一。在Linux 系统上,任何软件和I/O 设备都被视为文件。Linux 中的文件名最大支持256 个字符,分别可以用A~Z、a~z、0~9 等字符来命名。
▶ 和Windows 不同,Linux 中文件名是区分大小写的,所有的UNIX 系列操作系统都遵循这个规则。在Windows 下,目录结构属于分区;Linux 下分区属于目录结构。Linux 下也没有盘符的概念(如Windows 下的C 盘、D 盘),而只有目录,不同的硬盘分区是被挂载在不同目录下的。
▶ Linux 文件的扩展名: 在windows 操作系统中根据文件的后缀就能判断文件的类型。比如file.txt、file.doc、file.sys、file.mp3、file.exe 等,而在linux 系统中,abc.exe 可以是文本文件,abc.txt 也可以是可执行文件。在Linux 中,带有扩展名的文件,只能代表程序的关联,并不能说明文件的类型,从这方面来说,Linux 的扩展名没有太大的意义。
▶ 压缩和归档文件扩展名及其含义如下。
Linux 中一个文件是否能被执行,和后缀名没有太大的关系,主要和文件的属性有关。了解Linux 文件的后缀名还是有必要的,特别是自己创建一些文件,最好加后缀名,这样做的目的是为了应用方便。使用file 命令查看该文件的类型。
1 | gz:使用gzip 压缩的文件 |
Linux 下的文件可以分为4 种不同的类型:普通文件、目录文件、链接文件、特殊文件。
▶ 1、普通文件 (-) :最常用的一种文件,其特点是不包含文件系统的结构信息。如,图形文件,文本文件、Shell 脚本、二进制可执行程序、各种类型数据文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文件工具、归档工具等。
▶ 2、目录文件(d) :用于存放文件名及其相关信息的文件。是内核组织文件系统的基本节点。目录文件下面可以包含下一级目录或者普通文件。Linux 下的目录文件和其他os 中的“目录”概念不同,它是linux 文件中的一种。
▶ 3、链接文件(l) :一种特殊的文件,实际上指向一个真实存在的文件连接,类似于windows 下的“快捷方式”,直接访问、不占用磁盘空间。
▶ 4、特殊文件
(1) 块设备文件(b) : 数据的读写以块为单位,比如硬盘,光驱等设备。目前在最新的Linux 发行版本中,一般不用自己来创建设备文件,因为这些文件是和内核相关联的。
(2) 字符设备文件(c) :串行接口的设备
(3) 套接字文件(s) :套接字文件是一个用户不可见的,高度简化的,用于汇集网络套接字的内存文件。
(4) 管道文件(p) :用于不同进程间的信息传递。一个进程将需要传递的信息或数据写入管道的一端,另一个进程则从管道另一端取得数据或信息。
文件和目录的访问权限
▶ 文件权限类型
read (r): 查看文件内容
write (w): 修改文件
execute (x): 如同命令一样执行文件
▶ 目录权限类型
read (r): 列出目录内容
write (w): 在目录中增删文件
execute (x): 访问目录中的文件
▶ 权限分组
文件拥有者(user)
文件拥有者所在用户组中的其它成员(group)
所有其它用户(other)
▶ 在linux 中,目录也是一种文件。系统在建立每一个目录时,都会自动生成两个目录文件,一个是“.”,代表目录本身,另一个是“..”,代表目录的父目录。对于根目录而言,由于不存在父目录,所以“.”和“..”都代表其自身。
▶ 1、路径,是指从树型目录中的某个目录层次到某个文件的一条道路。
绝对路径:从“根”开始的路径。
相对路径:从用户工作目录开始的路径。
▶ 2、根目录
Linux 的根目录(/)是Linux 系统中最特殊目录。
根目录是所有目录的起点,操作系统本身的驻留程序存放在以根目录开始的专用目录中。
▶ 用户家目录是系统管理员增加用户时建立起来的(以后也可以根据实际情况改变),每个用户都有自己的家目录,不同用户的家目录一般互不相同。用户登录到系统中时,其工作目录便是该用户的家目录,一般情况下,与用户的登录名相同,位于/home 下,但是root 用户比较特殊,其主目录为/root。用户可以通过一个~符号来引用自己的家目录。
▶ cd ~可以进入用户自己的家目录
▶ echo $HOME:显示用户家目录路径
FHS:文件系统层次化标准
▶ /: Linux 文件系统的入口,也是处于最高一级的目录。不要把根目录划分的过大。
▶ /bin: 放置一些系统的必备执行档,例如:cat、cp、chmod、df、dmesg(用于显示开机信息)、gzip、kill、ls、mkdir、more、mount、rm、su、tar 等。
▶ /usr/bin: 主要放置一些应用软件工具的必备执行档,例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome、zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、newaliases、nslookup passwd、quota、smb、wget 等。
▶ /boot: Linux 的内核及引导系统程序所需要的文件,系统Kernel 的配置文件,启动管理程序GRUB 的目录,vmlinuz是在启动过程中最重要的一个文件,因为这个文件就是实际系统所使用的kernel。
▶ /dev: 设备文件存储目录,比如声卡、磁盘…
▶ /etc: 统配置文件的所在地,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件。
▶ /home: 一般情况下,除root 外的普通用户主目录默认存放目录。
▶ /root: Linux 超级权限用户root 的主目录。
▶ /sbin: 大多是涉及系统管理的命令的存放,是超级权限用户root 的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin 目录是相似的;凡是目录sbin 中包含的都是root 权限才能执行的。
▶ /tmp: 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp 就用来存放临时文件的。/var/tmp 目录和这个目录相似。
▶ /proc: 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。(伪文件系统,自动装载内核的映象,可以获取系统的信息。)
这个目录在磁盘上其实是不存在的。
▶ /sys: 系统设备信息的虚拟目录,Sysfs 的根目录下包含了七个目录:block, bus, class, devices, firmware, ,module 和power(这些目录随内核的不同而有所不同 )
▶ /var: 这个目录的内容是经常变动的,存放被系统更改过的数据。
▶ /lib: 启动时所用到的库文件都放在这个目录下,那些非启动用的库文件放在/usr/lib 下。内核模块放在/lib/modules 下。
▶ /lost+found: 当系统意外崩溃或机器意外关机,产生一些文件碎片放在这里。当系统启动的过程中fsck 工具会检查这里,并修复已经损坏的文件系统。
▶ /media: 即插即用型存储设备的挂载点自动在这个目录下创建,如USB 盘系统自动挂载后,会在这个目录下产生一个目录;CDROM/DVD 自动挂载后,也会在这个目录中创建一个目录,类似cdrom 的目录。(挂载点目录,一般是光盘)
▶ /mnt: 这个目录下面放着一些用来安装其他设备的子目录。(挂载点目录)
▶ /opt: 表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包。
▶ /srv: 主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务)
▶ /cdrom: 光驱。
▶ /usr: Unix Software Resource 的缩写,也就是Unix 操作系统软件资源所放置的目录,而不是用户的数据;所有系统默认的软件都会放置到/usr 目录下,系统安装完毕后,这个目录会占用最多的硬盘容量。
1 | /bin 存放二进制可执行文件 |
掌握基本的文件与目录操作命令。
▶ 定位文件与目录命令:
cd pwd find locate
▶ 浏览文件命令:
ls head tail cat more less
▶ 目录操作命令:
mkdir rmdir
▶ 文件操作命令:
touch rm cp mv ln tar gzip gunzip whereis whatis
▶ 文件压缩和解压缩:
tar gzip
command [-options] [parameters]
[-options] 命令选项,-开始,多个选项可用一个-连起来
如ls -l -a 与ls -la 相同
单字符选项前使用一个减号-,单词(多字符)选项前使用两个减号- -
如
1 | ls --help |
parameters:参数是可选的或必须的
所有的命令从标准输入接受输入,输出结果显示在标准输出
▶ TAB,将命令补充完整
▶ 上下箭头键, 使用历史记录功能
pwd : 显示用户所在的位置。
cd : 用来改变工作目录。
1 | 在使用cd 进入某个目录时,用户必须具有对该目录的读权限。 |
find : 在硬盘上查找文件。
find 是Linux 功能最为强大,使用也是较为复杂的命令。
1 | find 命令格式:fing [<path>][option] |
1 | path : 要查找的目录路径 |
1 | find -name file |
查找名为filename的文件。
1 | (1) 从根目录开始查找文件名为passwd 的文件 |
(1) 在/etc 及其子目录中,查找host 开头的文件
find /etc -name ’host*’ -print
(2) 在当前目录除abc 之外的子目录内搜索txt 文件
find . -path ”./abc” -a -prune -o -name ”*.txt” -print
解释:如果目录/abc 存在(即-a 左边为真),则求-prune 的值,
-prune 返回真,‘与’逻辑表达式为真(即-path ’./abc’-a -prune 为真),
find 命令将在除这个目录以外的目录下查找txt 后缀文件并打印出来;
如果目录abc 不存在(即-a 左边为假),则不求值-prune ,
‘与’逻辑表达式为假,则在当前目录下查找所有txt 后缀文件。
因为使用了-prune 参数,所以末尾需要使用-print 参数。
-a 是条件与,-o 是条件或,所以-o 前面的满足之后,后面的就不会再执行。
-path xxx -prune:表示忽略某个目录-a 也可以不写。
1 | -perm 按执行权限进行查找 |
1 | 在当前目录及子目录中,查找符号链接文件 |
1 | -nogroup 查无有效属组的文件,即文件的属组在/etc/groups 中不存在 |
1 | (1)atime [+-] 时间: 按照文件访问时间搜索 |
1 | (1) 查找比abc.txt 新的文件 |
1 | (1) 查找超过1M 的文件 |
1 | 可以根据文件的inode 节点值,删除该文件。有些文件很特殊,用rm 难以直接删除时,可以使用该方式。 |
1 | 花括号代表前面find 查找出来的文件名, |
同find 命令相比较,locate 命令是从linux 文件数据库(/var/lib/mlocate/mlocate.db)中查找,而不是每次搜索文件系统。因为是从数据库中查找,locate 的速度远远快于find 命令。但是,使用locate 命令查找的结果仅仅是在当前数据库,结果可能会没有find 准确。
1 | 如果没有mlocate.db,则使用: |
浏览文件和目录。
显示用户当前或指定目录的内容
1 | ls 命令可以使用通配符*、?、[abc] [^abc]。这样可以使用户很方便地查找特定形式的文件和目录。如果不指定目录,将显示当前目录的内容。 |
1 | (1)ls: 显示当前或指定目录的内容 |
用来查看文件的开头部分。
按照默认设置,只能阅读文件的前十行。
Head –n 可以查看前n 行。
查看文件/etc/profile 前五行:
1 | head -5 etc/profile |
查看文件结尾部分
缺省状态tail 命令查看文件结尾十行,与head 命令相反。
这有助于查看日志文件的最后十行,阅读重要的系统消息;
还可以使用tail 来观察日志文件被更新的过程。
即时观察/var/log/messages 的变化:
1 | tail -f /var/log/messages |
合并文件或者显示文件的内容。
cat 是“concatenate”的缩写,即合并文件。该命令可以显示文件的内容,或者是将多个文件合并成一个文件。
1 | (1) 使用cat 阅读短文 |
more 命令是一般用于要显示的内容会超过一个画面长度的情况。为了避免画面显示时瞬间就闪过去,用户可以使用more 命令,让画面在显示满一页时暂停,此时可按空格健继续显示下一个画面,按b 键就会往回(back)一页显示或按Q 键停止显示。
1 | (1) 显示/etc/profile 文本文件的内容 |
搜索文件内容可以使用Global Regular Expression Print (grep)命令。
1 | grep [options] [pattern] [file] |
1 | (1) 直接输入要匹配的字符串,如要匹配hello.c 文件中 |
1、在某个文件里搜索error 字符串
grep “error”log.txt
grep -i “ErroR”log.txt -i 忽略大小写
2、grep 使用- -color=auto 将关键字部分使用颜色高亮显示。如果每次使用grep 都得要自行加上- -color=auto 比较麻烦,可以在~/.bashrc 内加上:alias grep=’grep - -color=auto’
source ̃/.bashrc 命令立即生效。
3、在passwd 中找带有sh 的行,并且显示行号。
grep –n ‘sh’/etc/passwd
4、在passwd 中找带有bash 的行,-o 标识只显示命中的字符串only
grep –o ‘bash’/etc/passwd
5、在passwd 中反向查找。不含有bash 的行
grep -v ‘bash’/etc/passwd
6、查找命中行的内容,以及上面两行内容。
grep -B2 –n ‘wl’/etc/passwd
7、查找命中行的内容,以及下面两行内容。
grep -A2 -n ‘wl’/etc/passwd
8、查找命中行的内容,以及上下各两行内容。
grep -C2 -n ‘wl’/etc/passwd
A:after , B:before , C: after and before
9、匹配数字0-9
grep ‘[0-9]’/etc/passwd
10、在某个配置文件中查找# 开头的注释行
grep ‘^#’/etc/profile
11、查找以h 结尾的行
grep -n ‘h$’/etc/passwd
12、查看文件时,去除所有的空行和以“#”开头的行。
grep -v ‘^$’/etc/profile | grep –v ‘^#’
13、查找字母o 出现两次的内容
grep ’o{2}’ /etc/passwd
14、在当前目录搜索带’user’ 行的文件
grep ‘user’*
awk 是一个强大的文本分析工具,相对于grep 的查找,sed 的编辑,awk 在其对数据分析并生成报告时,显得尤为强大。简单来说awk 就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
▶ 语法:
awk ’pattern + action’ filenames
pattern: 正则表达式,用//括起来
action: 找到匹配内容时,所执行的一系列命令
▶ awk 其实是一门编程语言,它支持条件判断、数组、循环等
功能。所以,我们也可以把awk 理解成一个脚本语言解释
器。
▶ grep 、sed、awk 被称为linux 中的” 三剑客”:
grep 更适合单纯的查找或匹配文本;
sed 更适合编辑匹配到的文本;
awk 更适合格式化文本,对文本进行较复杂格式处理。
1 | -F 指定分隔符, 默认为空格; |
硬链接是通过索引节点进行的链接。在Linux 中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的源文件,则硬链接文件仍然存在,而且保存了原有的内容,这样可以起到防止因为误操作而错误删除文件的作用。由于硬链接是有着相同inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同inode 号的文件。
硬链接可由命令link 或ln 创建。
link oldfile newfile
ln oldfile newfile
软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。
▶ 主要应用于两个方面:
▶ 一方面,方便管理,例如可以把一个复杂路径下的文件链接到一个简单路径下方便用户访问;
▶ 另一方面,解决文件系统磁盘空间不足的情况。
例如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中,这样就可以很好的解决空间不足问题。注意:删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接
touch f1 # 创建一个测试文件f1
ln f1 f2 # 创建f1 的一个硬连接文件f2
ln -s f1 f3 # 创建f1 的一个符号连接文件f3
ls -li # -i 参数显示文件的inode 节点信息
Figure 5: 软链接和硬链接文件
从上面的结果中可以看出,硬连接文件f2 与原文件f1 的
inode 节点相同,然而符号连接文件的inode 节点不同
复制文件或目录。
1 | cp [选项] 源文件目标文件 |
(1) 复制文件/etc/profile 到当前目录。
cp /etc/profile .
(2) 复制/etc/apt 目录下所有的内容,包括所有子目录到当
前目录。
cp –R /etc/apt .
(3) 使用通配符复制etc 目录下mail 开头的所有文件到当前目录。
cp /etc/mail* .
(4)cp 复制软连接文件
a、创建当前目录下user.txt 的软连接文件至/tmp/下,命名mylink。
ln –s ~/user.txt /tmp/mylink
b、复制/tmp/mylink 至~/下,命名为mylink2
cp /tmp/mylink ./mylink2
c、cat 查看mylink2 内容
cat ./mylink2
(5)cp 复制软连接文件,加参数-d
a、创建当前目录下user.txt 的软连接文件至/tmp/下,命名mylink。
ln –s ~ /user.txt /tmp/mylink
b、复制/tmp/mylink 至~/下,命名为mylink3
cp -d /tmp/mylink ̃/mylink3
c、ls 查看文件,cat 查看mylink3 内容
ls –l
cat ./mylink3
stat xxx 可以观察一个文件的详情。
touch 生成一个空文件或修改文件的存取/修改的时间记录值。
(1) 将当前目录下的文件时间修改为系统的当前时间。
touch *
(2)新建文件
root@Ubuntu: #touch test
若文件存在,则修改为系统的当前时间;若文件不存在,则生成一个为当前时间的空文件。
(3) 将test 文件的日期改为20180710。
touch –d 20180710 test
ls
-rw-r–r– 1 wl wl 0 2018-07-10 00:00 test
注意:文件的最后修改时间离现在不到6 个月的就会只显示月/日/小时/分钟,否在就会显示月/日/年
还可以使用:
touch -d “2 days ago”testfile1 “10 years ago”touch -d “next thursday”testfile2 “next year”
移动文件, 可以将文件及目录移到另一目录下,或更改文件及目录的名称。
1 | 1. 将test 文件移动上层目录。 |
rm 删除文件和目录。
1 | 1. 删除文件主目录下file1 文件。 |
创建目录。
1 | 1. 在当前目录下建立新目录dir1。 |
删除目录。与创建目录类似,加上-p 参数表示如果删除一个目录后,其父目录为空,则将其父目录一同删除。
1 | 1. 删除目录 dir1 |
▶ 什么是umask
当用户登录系统之后创建一个文件是会有一个默认权限的,这个权限是怎么来的呢?umask 用于设置用户创建文件或者目录的默认权限,umask 设置的是权限的“补码”。一般在/etc/profile 或和/etc/bashrc 中设置umask。
▶ umask 作用
umask 值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask 值决定的。对于root 用户,系统默认的umask值是0022;对于普通用户,系统默认的umask 值是0002。执行umask 命令可以查看当前用户的umask 值。
▶ umask 值一共有4 组数字,其中第1 组数字用于定义特殊权限,一般不予考虑,与一般权限有关的是后3 组数字。默认情况下,对于目录,用户所能拥有的最大权限是777;对于文件,用户所能拥有的最大权限是目录的最大权限去掉执行权限,即666。因为x 执行权限对于目录是必须的,没有执行权限就无法进入目录,而对于文件则不必默认赋予x 执行权限。
▶ 对于root 用户,他的umask 值是022。当root 用户创建目录时,默认的权限就是用最大权限777 去掉相应位置的umask 值权限,即对于所有者不必去掉任何权限,对于所属组要去掉w 权限,对于其他用户也要去掉w 权限,所以目录的默认权限就是755;当root 用户创建文件时,默认的权限则是用最大权限666 去掉相应位置的umask 值,即文件的默认权限是644。
1 | root : 文件: 666 - 022 = 644 rw-r--r-- |
▶ 对于目录,直接使用777-umask 即可,得到最终结果。
▶ 对于文件,先使用666-umask。
▶ 注意,如果对应位上为偶数:最终权限就是这个偶数值,如果上面的对应位上有奇数,就对应位+1。得到奇数,说明umask 有奇数,+1 变成偶数,表示去掉可执行权限,系统会最大程度保证安全性(尽可能不为文件赋予可执行权限)。
▶ 如何修改umask 值?
直接使用umask 命令只能临时修改umask 值,系统重启之后umask 将还原成默认值。如果要永久修改umask 值,需要修改/etc/profile 文件或是修改/etc/bashrc 文件,例如要将默认umask 值设置为027,那么可以在文件中增加一行“umask 027”。
▶ /etc/profile 和/etc/bashrc 都可以用于设置用户登录系统时自动执行某些操作,他们的区别是/etc/profile 只在用户第一次登录时被执行,而/etc/bashrc 则在用户每次登录加载Bash Shell 时都会被执行。因而,如果是修改/etc/profile 文件,将只对新创建的用户生效;而如果是修改/etc/bashrc文件,则对所有用户都生效。
chgrp 改变文件或目录的所属组。
1 | 语法:chgrp [选项] [组] [文件] |
1 | 例1 改变文件的群组属性并显示过程 |
指定文件或目录的所有者,还可以修改文件所属组。
1 | 语法:chown [选项] [用户] [: 群组] [文件或目录] |
1 | 例1 更改所属用户 |
改变文件或目录的访问权限。
1 | 语法:chmod [OPTION]... MODE[,MODE]... FILE... |
1 | 例1 将文件file1.txt 设为所有人皆可读取 |
1 | chmod 也可以用数字来表示权限 |
有时候发现用root 权限都不能修改某个文件,大部分原因是曾经用chattr 命令锁定了该文件。
chattr:锁定文件。
lsattr:查看chattr给某些文件锁定的mode。
1 | chattr 命令的用法: |
1 | 举例: |
setuid 是一种文件的拥有者具备的特殊属性,它使得被设置了setuid 位的程序无论被哪个用户启动,都会自动具有文件拥有者的权限。
setgid 与setuid 类似,只是setgid 是文件归属的组具备的特殊属性,具有setgid 的可执行文件运行时,自动获取文件对应的组权限,因为组权限不像用户权限那样精确,所以使用setgid 的程序很少。
1 | ▶ 用户存储用户信息的/etc/passwd 文件只有超级用户才能进行修改,而用于存储用户口令的文件/etc/shadow 甚至只有超级用户才可以访问。只有在普通用户执行passwd 命令的时候,能够读取和修改/etc/passwd 和/etc/shadow 文件,才能使普通用户修改自己的口令。为了解决在用户修改口令时,文件系统存取权限矛盾,Linux 给/usr/sbin/passwd 命令设置了setuid 属性。 |
1 | 【setuid】的使用 |
备份分区、文件或目录。
1 | dump 命令格式如下: |
1 | dump -0uj -f /root/boot.bak.bz2 /boot/ |
▶ 查看备份时间文件
cat /etc/dumpdates
/dev/sdal 0 Wed Sep 26 18:08:22 2020 +0800
# 备份的分区备份级别备份曰期
▶ 如果/boot 分区的内容发生了变化,则可以使用1 级别进行增量备份。当然,如果数据会继续发生变化,则可以继续使用2~9 级别增量备份。
dump -1uj -f /root/boot.bak1.bz2 /boot/
▶ 如果备份的是整个分区,那么是可以使用“dump -W”命令来查询分区的备份时间及备份级别的。不过要注意,如果备份时没有使用“-u”选项,那么“dump -W”命令是不会记录备份的时间和级别的。
▶ dump 命令可以非常方便地实现增量备份,但如果实现差异备份时,先使用0 级别完全备份一次,以后的每次备份都使用1 级别进行备份。
▶ 备份文件或目录
dump 命令也可以文件或目录,不过,只要不是备份分区,就只能使用0 级别进行完全备份,而不再支持增量备份。同时,不能使用“-u”选项更新分区的备份时间,当然也不能使用“dump -W”命令查询到文件或目录的备份。
dump -0j -f /root/etc.dump.bz2 /etc/
▶ 使用增量备份命令
dump -1j -f /root/etc.dump1.bz2 /etc/
DUMP:Only level 0 dumps are allowed on a subdirectory
DUMP:The ENTIRE dump is aborted.
# 备份失败,目录备份只能使用0 级别
还原dump 操作备份下的文件、目录或分区
dd 命令:数据备份,并在备份过程中进行格式转换
restore 命令:还原dump 操作备份下的文件、目录或分区
restore 命令是dump 命令的配套命令,dump 命令是用来备份分区和数据的,而restore 命令是用来恢复数据的。
1 | restore命令的格式如下: |
dd 命令:数据备份,并在备份过程中进行格式转换
zip 与 unzip: 压缩与解压
1 | zip 与 unzip |
使用gzip 来压缩文件,使用gunzip 来解压缩文件,gzip 其压缩命令与解压缩命令gunzip 实际上是同一个程序,文件的大小和参数完全一样,只是命令的名称不同。文件会被压缩,并被保存为filename.gz。当解压缩时,filename.gz 会被删除,同时filename 被还原。
对比zip,gzip 有以下特点:
(1)zip 命令具有将许多文件与目录压缩成一个文件的功能,
但gzip 却不能;
(2) 用gzip 命令压缩后源文件会被删除。
1 | (1) 压缩单个文件。 |
tar 是Linux 常用的归档命令,更多是用于硬盘数据备份。
tar 可以对文件和目录进行打包。
利用tar,用户可以对某一特定文件进行归档(一般用作备份文件),也可以在包中改变文件,或者向包中加入新的文件。
归档不同于压缩。归档文件是一个文件和目录的集合,而这个集合被贮存在一个文件中。归档文件没有经过压缩,它所使用的磁盘空间是其中所有文件和目录的总和。压缩文件也是一个文件和目录的集合,且这个集合也被贮存在一个文件中,但是,它的贮存方式使其所占用的磁盘空间比其中所有文件和目录的总和要少。归档文件不是压缩文件,但是压缩文件可以是归档文件。
1 | 格式:tar [选项] [文件目录列表] |
1 | tar 示例 |
tail -n 5 /etc/group 查看最后5个用户组
tail -n 5 /etc/passwd 查看最后5个用户
id user1 查看user1的uid与组与附加组
su - stu2 : 进入stu2的身份
sudo passwd stu2 : 为用户stu2创建密码
openssl passwd : 产生密码(加盐,重复,效果也不一样)
echo -n 34 : 回音,会返回34
echo -n 34 | openssl passwd -1 -stdin 产生密码(密码是34)(-1 代表加密方式)(加盐,重复,效果也不一样)
sudo useradd -N -g sudo -m -p ‘echo -n hadoop|openssl passwd -1 -stdin’ hadoop
sudo newusers < createUser.user : 重定向输入,将createUser.user输入到newusers
在Linux 中,每个用户必须有一个主组。当创建账号时,系统会自动创建一个同名组作为该账户的主组。用户必须属于一个且只有一个主组。用户可以属于零个或者多个附加组。
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group 文件的更新。
在Linux 中,万物皆文件,所以用户与组也以配置文件的形式保存在系统中,以下为用户和组的主要配置文件详解:
1 | /etc/passwd:用户及其属性信息(名称、UID、主组ID 等) |
用户账号文件。
该文件用于用户登录时校验用户的登录名、加密的口令数据项、用户ID(UID)、默认的用户分组ID(GID)、GECOS 字段、用户登录子目录。
1 | wl:x:1000:1000:wanglei„,:/home/wanglei:/bin/bash |
▶ 1、登录名唯一性,它的长度一般不超过32 个字符,它们可以包括冒号和换行之外的任何字符。登录名要区分大小写。放在etc/passwd 文件的开头部分的用户是系统定义的虚拟用户bin、daemon。
▶ 2、加密的口令当编辑/etc/passwd 文件来创建一个新账号时,在加密口令字段的位置用x 代替。表示是一个经过加密处理的口令,加密后的密码放置在/etc/shadow 文件中,且该文件只能被root 组的账号访问。如果该字段显示“*”则表示对应账号停用。
▶ 3、UID 每个账号唯一的识别号,最大值为65535。UID 在500 之前的账号是提供系统服务使用的,管理员新增的第一个普通用的UID 为500,然后依次是501、502⋯以此类推。
▶ 4、GID 组账号的唯一的识别号。用户组的信息被存放在/etc/group 文件中,root 组的GID 为0。管理员创建的第一个组的GID 为500,然后依次是501、502⋯以此类推。
▶ 5、GECOS 字段通常用来定义每个用户的个人信息。
▶ 6、用户的登录子目录用户登录后直接进入的目录,在默认的状态下,每个用户都有一个主目录。root 用户的主目录为/root,管理员创建的用户的主目录通常为/home/< 用户名>,如tom 用户主目录为/home/tom。
▶ 7、登录shell 用户登楼后运行的shell,此处出现的是默认的shell,大多数情况下是/bin/bash。如果用户只是系统通过该用户账号获取系统的某种服务,而不希望该用户能够登录Linux 工作站,可以将此登录shell 修改为/bin/false、/bin/true、/dev/null 和/sbin/nologin 等其中之一。
查看/etc/passwd 的内容: cat /etc/passwd
保存用户账号的密码。
每行记录了一个合法用户账号的数据。
▶ 在Linux 系统中通常使用影子口令机制(Shadow Password),用户的身份信息被存放在/etc/passwd 文件中,用户的口令信息加密后保存在另一个文件/etc/shadow 中,并只设置root 账号的可读属性,因而大大提高了系统的安全性能。
▶ Linux/Unix 采用了“shadow 文件”机制,将加密的口令转移到/etc/shadow 文件里,该文件为root 超级用户可读,同时/etc/passwd 文件的密文域显示一个x,从而最大限度地减少了密文泄漏的机会。
▶ 加密后的密码可以分为三段来看,被$ 分割。其中第一段就是表明散列算法的类型,第二段是系统为们密码添加的盐值(salt), 最后第三段才是映射完的散列值。
▶ 其中6 代表的是采用SHA-512 算法进行加密的。1 代表的是MD5 算法,5 代表的是SHA-256 算法等。
▶ sudo passwd root
Enter new UNIX password: (设置root 密码)
Retype new UNIX password: (重复密码)
▶ 在/etc/shadow 文件中有9 个字段,每个字段使用“:”分隔。
username:passwd:lastchg:min:max:warn:inactive:expire:flag
▶ 将原本/etc/passwd 文件中的密码移至/etc/shadow 文件中,而shadow 文件只允许管理员root 账户读取,可以提高系统的安全性。而且其中的密码是采用MD5 算法加密的,root账户也无法直接获得口令的内容,但是root 账户可以变更用户密码或停用每个账户。
▶ 可记录密码变更的时间。
▶ 可以设置密码使用的时间,以避免用户的密码变更过于频繁。
▶ 可以使用/etc/login.defs 文件来设置密码的安全性原则,例如密码的最小长度或密码最短的使用时间等。
添加用户组。
1 | -g 指定组ID号 |
sudo groupadd -g 2020 mygroup 新建用户组(指定gid)
sudo groupadd testgroup 新建用户组(没有指定gid) 会自动根据上一次组的编号加1
sudo groupadd -r group1 新建系统组账号 -r : 用来建立系统工作组,-r 创建的GID 会比定义在系统文件上/etc/login.defs 中的GID_MIN 小。
tail -n 5 /etc/group 查看最后5个用户组
tail -n 5 /etc/passwd 查看最后5个用户
groupdel 命令用于删除指定的工作组,命令要修改的系统文件包括/ect/group 和/ect/gshadow。若该组中包括某些用户,则必须先删除这些用户后,方能删除组。
命令更改群组识别码或名称。
1 | -g 指定GID |
groups 用户名 : 显示用户所属的用户组
newgrp 组名 : 切换用户所在用户组,登入另一个群组。使用newgrp 指令切换群组,必须是该群组的用户,否则将无法登入指定的群组。
用来管理组。
gpasswd 命令是Linux 下工作组文件/etc/group和/etc/gshadow 的管理工具,用于指定要管理的工作组。
1 | -a : 添加用户到组 |
创建新用户。一问一答式。
创建新用户。
useradd 命令的使用格式:useradd [参数] 新建用户账号
1 | -b, --base-dir BASE_DIR 新账户的主目录的基目录 |
sudo useradd -m -d /home/test -G student,sudo -c “hello” -s “/bin/bash” -e “2025-1-1” stu2
建立stu2 账号,其主目录为/home/stu2、归属于student组、账号信息为general user、用户shell 为/bin/bash、账号有效期到2025 年12 月1 日。
sudo passwd stu2 : 为用户stu2创建密码
openssl passwd : 产生密码(加盐,重复,效果也不一样)
echo -n 34 : 回音,会返回34
echo -n 34 |openssl passwd -1 -stdin 产生密码(密码是34)(-1 代表加密方式)(加盐,重复,效果也不一样)
sudo useradd -N -g sudo -m -p ‘echo -n hadoop|openssl passwd -1 -stdin’ hadoop
创建用户hadoop,设置密码为hadoop,同时加入sudo主组,同步创建家目录。要求创建用户的同时设立密码。
批量加入用户和密码:
新建createUser.user,
sudo newusers < createUser.user
创建密码文件myPasswd.pwd
sudo chpasswd < myPasswd.pwd
注:linux 中,文件后缀名不重要。养成文件加后缀名的习
惯,可以更好地让使用者区分文件类型。
userdel 用户名 : 删除用户
userdel -r 用户名 : 删除用户的同时,将用户家目录和邮件池一并删除
passwd 用户名 : 修改用户名密码的信息
passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码。
1 | -l 锁定指定的账户 |
1 | -salt |
Linux 系统中,用户可以利用openssl passwd 手动生成一个密码作为用户账号的密码。openssl passwd 用来计算密码hash 值。
▶ 语法格式:openssl passwd [option] passwd
▶ -1: 用MD5 加密算法
▶ -salt: 加盐,不使用随机产生的salt。-salt 不需要交互确认,
取盐的前两位,若盐相同,则加密密码相同。
▶ openssl passwd
▶ password:
▶ verifying -password:
▶ 生成:tTGWmli4MjAhM(每次都不一样)
▶ sudo usermod -p tTGWmli4MjAhM xx 用户名
▶ openssl passwd 12345
▶ openssl passwd 12345
▶ 没有使用参数,则表示使用默认的-crypt 加密。每次加密结
果均不同。
▶ openssl passwd -salt ’thisispasswd’ 123456
▶ openssl passwd -salt ’thisispasswd’ 123456
▶ salt:thisispasswd 要加密的密码:123456 则上面两条命令结
果相同。(只取盐值的前两位)
1 | su |
id 用户名
查看用户和用户组的信息
finger 用户名
查看用户信息
▶ w: 显示所有登录用户,在干什么
▶ who: 显示登录用户
▶ whoami: 显示当前用户名称
1 | usermod –L 用户名(同passwd –l 用户名锁定用户) |
gpasswd -a
gpasswd -d
usermod -aG
usermod -G
tail -n 5 /etc/group 查看最后5个用户组
tail -n 5 /etc/passwd 查看最后5个用户
id user1 查看user1的uid与组与附加组
su - stu2 : 进入stu2的身份
sudo passwd stu2 : 为用户stu2创建密码
openssl passwd : 产生密码(加盐,重复,效果也不一样)
echo -n 34 : 回音,会返回34
echo -n 34 | openssl passwd -1 -stdin 产生密码(密码是34)(-1 代表加密方式)(加盐,重复,效果也不一样)
sudo useradd -N -g sudo -m -p ‘echo -n hadoop|openssl passwd -1 -stdin’ hadoop
sudo newusers < createUser.user : 重定向输入,将createUser.user输入到newusers
在Linux 中,每个用户必须有一个主组。当创建账号时,系统会自动创建一个同名组作为该账户的主组。用户必须属于一个且只有一个主组。用户可以属于零个或者多个附加组。
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group 文件的更新。
在Linux 中,万物皆文件,所以用户与组也以配置文件的形式保存在系统中,以下为用户和组的主要配置文件详解:
1 | /etc/passwd:用户及其属性信息(名称、UID、主组ID 等) |
用户账号文件。
该文件用于用户登录时校验用户的登录名、加密的口令数据项、用户ID(UID)、默认的用户分组ID(GID)、GECOS 字段、用户登录子目录。
1 | wl:x:1000:1000:wanglei„,:/home/wanglei:/bin/bash |
▶ 1、登录名唯一性,它的长度一般不超过32 个字符,它们可以包括冒号和换行之外的任何字符。登录名要区分大小写。放在etc/passwd 文件的开头部分的用户是系统定义的虚拟用户bin、daemon。
▶ 2、加密的口令当编辑/etc/passwd 文件来创建一个新账号时,在加密口令字段的位置用x 代替。表示是一个经过加密处理的口令,加密后的密码放置在/etc/shadow 文件中,且该文件只能被root 组的账号访问。如果该字段显示“*”则表示对应账号停用。
▶ 3、UID 每个账号唯一的识别号,最大值为65535。UID 在500 之前的账号是提供系统服务使用的,管理员新增的第一个普通用的UID 为500,然后依次是501、502⋯以此类推。
▶ 4、GID 组账号的唯一的识别号。用户组的信息被存放在/etc/group 文件中,root 组的GID 为0。管理员创建的第一个组的GID 为500,然后依次是501、502⋯以此类推。
▶ 5、GECOS 字段通常用来定义每个用户的个人信息。
▶ 6、用户的登录子目录用户登录后直接进入的目录,在默认的状态下,每个用户都有一个主目录。root 用户的主目录为/root,管理员创建的用户的主目录通常为/home/< 用户名>,如tom 用户主目录为/home/tom。
▶ 7、登录shell 用户登楼后运行的shell,此处出现的是默认的shell,大多数情况下是/bin/bash。如果用户只是系统通过该用户账号获取系统的某种服务,而不希望该用户能够登录Linux 工作站,可以将此登录shell 修改为/bin/false、/bin/true、/dev/null 和/sbin/nologin 等其中之一。
查看/etc/passwd 的内容: cat /etc/passwd
保存用户账号的密码。
每行记录了一个合法用户账号的数据。
▶ 在Linux 系统中通常使用影子口令机制(Shadow Password),用户的身份信息被存放在/etc/passwd 文件中,用户的口令信息加密后保存在另一个文件/etc/shadow 中,并只设置root 账号的可读属性,因而大大提高了系统的安全性能。
▶ Linux/Unix 采用了“shadow 文件”机制,将加密的口令转移到/etc/shadow 文件里,该文件为root 超级用户可读,同时/etc/passwd 文件的密文域显示一个x,从而最大限度地减少了密文泄漏的机会。
▶ 加密后的密码可以分为三段来看,被$ 分割。其中第一段就是表明散列算法的类型,第二段是系统为们密码添加的盐值(salt), 最后第三段才是映射完的散列值。
▶ 其中6 代表的是采用SHA-512 算法进行加密的。1 代表的是MD5 算法,5 代表的是SHA-256 算法等。
▶ sudo passwd root
Enter new UNIX password: (设置root 密码)
Retype new UNIX password: (重复密码)
▶ 在/etc/shadow 文件中有9 个字段,每个字段使用“:”分隔。
username:passwd:lastchg:min:max:warn:inactive:expire:flag
▶ 将原本/etc/passwd 文件中的密码移至/etc/shadow 文件中,而shadow 文件只允许管理员root 账户读取,可以提高系统的安全性。而且其中的密码是采用MD5 算法加密的,root账户也无法直接获得口令的内容,但是root 账户可以变更用户密码或停用每个账户。
▶ 可记录密码变更的时间。
▶ 可以设置密码使用的时间,以避免用户的密码变更过于频繁。
▶ 可以使用/etc/login.defs 文件来设置密码的安全性原则,例如密码的最小长度或密码最短的使用时间等。
添加用户组。
1 | -g 指定组ID号 |
sudo groupadd -g 2020 mygroup 新建用户组(指定gid)
sudo groupadd testgroup 新建用户组(没有指定gid) 会自动根据上一次组的编号加1
sudo groupadd -r group1 新建系统组账号 -r : 用来建立系统工作组,-r 创建的GID 会比定义在系统文件上/etc/login.defs 中的GID_MIN 小。
tail -n 5 /etc/group 查看最后5个用户组
tail -n 5 /etc/passwd 查看最后5个用户
groupdel 命令用于删除指定的工作组,命令要修改的系统文件包括/ect/group 和/ect/gshadow。若该组中包括某些用户,则必须先删除这些用户后,方能删除组。
命令更改群组识别码或名称。
1 | -g 指定GID |
groups 用户名 : 显示用户所属的用户组
newgrp 组名 : 切换用户所在用户组,登入另一个群组。使用newgrp 指令切换群组,必须是该群组的用户,否则将无法登入指定的群组。
用来管理组。
gpasswd 命令是Linux 下工作组文件/etc/group和/etc/gshadow 的管理工具,用于指定要管理的工作组。
1 | -a : 添加用户到组 |
创建新用户。一问一答式。
创建新用户。
useradd 命令的使用格式:useradd [参数] 新建用户账号
1 | -b, --base-dir BASE_DIR 新账户的主目录的基目录 |
sudo useradd -m -d /home/test -G student,sudo -c “hello” -s “/bin/bash” -e “2025-1-1” stu2
建立stu2 账号,其主目录为/home/stu2、归属于student组、账号信息为general user、用户shell 为/bin/bash、账号有效期到2025 年12 月1 日。
sudo passwd stu2 : 为用户stu2创建密码
openssl passwd : 产生密码(加盐,重复,效果也不一样)
echo -n 34 : 回音,会返回34
echo -n 34 |openssl passwd -1 -stdin 产生密码(密码是34)(-1 代表加密方式)(加盐,重复,效果也不一样)
sudo useradd -N -g sudo -m -p ‘echo -n hadoop|openssl passwd -1 -stdin’ hadoop
创建用户hadoop,设置密码为hadoop,同时加入sudo主组,同步创建家目录。要求创建用户的同时设立密码。
批量加入用户和密码:
新建createUser.user,
sudo newusers < createUser.user
创建密码文件myPasswd.pwd
sudo chpasswd < myPasswd.pwd
注:linux 中,文件后缀名不重要。养成文件加后缀名的习
惯,可以更好地让使用者区分文件类型。
userdel 用户名 : 删除用户
userdel -r 用户名 : 删除用户的同时,将用户家目录和邮件池一并删除
passwd 用户名 : 修改用户名密码的信息
passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码。
1 | -l 锁定指定的账户 |
1 | -salt |
Linux 系统中,用户可以利用openssl passwd 手动生成一个密码作为用户账号的密码。openssl passwd 用来计算密码hash 值。
▶ 语法格式:openssl passwd [option] passwd
▶ -1: 用MD5 加密算法
▶ -salt: 加盐,不使用随机产生的salt。-salt 不需要交互确认,
取盐的前两位,若盐相同,则加密密码相同。
▶ openssl passwd
▶ password:
▶ verifying -password:
▶ 生成:tTGWmli4MjAhM(每次都不一样)
▶ sudo usermod -p tTGWmli4MjAhM xx 用户名
▶ openssl passwd 12345
▶ openssl passwd 12345
▶ 没有使用参数,则表示使用默认的-crypt 加密。每次加密结
果均不同。
▶ openssl passwd -salt ’thisispasswd’ 123456
▶ openssl passwd -salt ’thisispasswd’ 123456
▶ salt:thisispasswd 要加密的密码:123456 则上面两条命令结
果相同。(只取盐值的前两位)
1 | su |
id 用户名
查看用户和用户组的信息
finger 用户名
查看用户信息
▶ w: 显示所有登录用户,在干什么
▶ who: 显示登录用户
▶ whoami: 显示当前用户名称
1 | usermod –L 用户名(同passwd –l 用户名锁定用户) |
gpasswd -a
gpasswd -d
usermod -aG
usermod -G
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true