Linux基本流程1

Linux系统的启动过程:

Linux启动时可以看到很多启动文件,其过程可以分为5个阶段:

1.内核的引导;->2.运行init文件;->3.系统的初始化;->4.建立终端;->5.用户登录系统。

init程序的类型:

• SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
• Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
• Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。

内核的引导:

当计算机打开电源后,首先是BIOS系统开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动相应的程序。操作系统接管硬件以后,首先读入 /boot 目录下的内核文件开始进行引导。

运行init文件:

init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动,init 程序首先是需要读取配置文件 /etc/inittab。

运行级别:

许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。

init进程的一大任务,就是去运行这些开机启动的程序,但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要;Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。

Linux系统有7个运行级别(runlevel):

• 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

• 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

• 运行级别2:多用户状态(没有NFS)

• 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式

• 运行级别4:系统未使用,保留

• 运行级别5:X11控制台,登陆后进入图形GUI模式

• 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

系统的初始化:

在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本;它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

l5:5:wait:/etc/rc.d/rc 5这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。

而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。

/etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以 S 开头的启动脚本,将以start参数来运行。

而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。

这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。

至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。

建立终端

rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。

init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。

同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。

用户登录系统

一般来说,用户的登录方式有三种:

• (1)命令行登录

• (2)ssh登录

• (3)图形界面登录

对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。

而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。

Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。

然后 login 会对用户名进行分析:如果用户名不是 root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出。

这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。

/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

Linux 关机

在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

正确的关机流程为:sync > shutdown > reboot > halt

关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档。

例如你可以运行如下命令关机:

sync 将数据由内存同步到硬盘中。

shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

shutdown –h 10

‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。

shutdown –h now 立马关机

shutdown –h 20:25 系统会在今天20:25关机

shutdown –h +10 十分钟后关机

shutdown –r now 系统立马重启

shutdown –r +10 系统十分钟后重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff最后总结一下,不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。

关机的命令有:shutdown –h now 、halt、 poweroff 和 init 0 , 重启系统的命令有 shutdown –r now 、reboot 、init 6。

shutdown -p now ### 关闭机器

远程链接管理

打开终端

输入命令ip addr show 或者 ipconfig

关注以太网接口(不是lo),查找地址,地址是inet 和/24之间的数字,点分隔开一共四段

在学校用桥接或者是NAT模式都会有地址

在家需要用NAT模式才会有地址,此时有无网线都可

远程管理需要使用到以太网接口的地址

远程利用XShell连接Linux命令

ssh 用户名@ip

  1. 如:ssh root@192.168.1.110
  2. 默认ssh端口是22
  3. 确保Linux服务器,开启了sshd服务,且防火墙允许访问

GNUBash

什么是bash

简单来说bash就是用来解释linux终端输入命令的解释器,有时候也叫做Linux的终端; bash是borne again shell的缩写,它是shell的一种,Linux上默认采用的是bash。

什么又是shell呢?

shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。

1、bash shell提示符:

[root@xiaochen 桌面]# cd                            //切换目录
[root@xiaochen ~]# pwd                              //查看当前用户所在的工作目录
[root@xiaochen ~]# ls                                 // 用于显示当前目录中的文件信息
[root@xiaochen ~]# poweroff 			// 关机
[root@xiaochen ~]# reboot                        //  重启

2、shell 语法

命令 选项 参数

[root@xiaochen ~]# ls -a /home

命令:整条shell命令的主体

选项:会影响会微调命令的行为 //通常以 -, –

参数:命令作用的对象,是可选的

命令选项和参数之间必须要加空格、 bash的基本特性:按键自动补全

关于字节单位之间的换算问题:

1bytes=8bits、1K=1024bytes、1M=1024K、1G=1024M、1T=1024G、1P=1024T、1E=1024P

Linux命令获得帮助:

某个命令怎么用? 使用哪个参数实现需要的功能?

某个文件如何配置?该文件支持哪些命令?

某个函数的语法格式?

  1. 命令 --help

    #ls --help

对于文档中的a|b表示二选一、[ ]表示可选项、{}表示必选项

ls 常见选项

-a    all,查看目录下的所有文件,包括隐藏文件

-l     长列表显示

-h    human 以人性化方式显示出来   

-d    只列出目录名,不列出其他内容

. :在linux系统中是当前文件夹的意思

..:在linux系统中是上一级文件夹的意思
  1. man 手册名 (针对命令帮助,针对配置文件帮助 ,针对函数帮助)

    搜索:/string n向下找 N向上找
    [root@xiaochen ~]# man man
    查看时需要翻屏:
    向后翻一屏:space(空格键)   向前翻一屏:b
    向后翻一行:Enter(回车键)    向前翻一行:k
    查看时需要查找:
    /关键词 向后查找 n:下一个
    ?关键词 向前查找 N:前一个

    NAME              命令名称及功能简要说明
    SYNOPSIS        用法说明,包括可用的选项
    DESCRIPTION     命令功能的详细说明,可能包括每一个选项的意义
    OPTIONS             说明每一项的意义
    FILES                   此命令相关的配置文件     
    BUGS      
    EXAMPLES          使用示例
    SEE ALSO           另外参照

对于man手册结构如下:

命令帮助: 章节1,章节8

文件帮助: 章节5

函数帮助: 章节2,章节3(开发)

常用的是:1(命令用法),5(文本规范),8(系统管理命令)

一般情况是不需要使用章节号

man setfacl                           (/example)
如有需要按章节查询
man 1 passwd                passwd命令的帮助
man 5 passwd                用户配置文件的帮助

给命令起别名:

学习如何创建别名:你可以将太长或难以记忆的命令打包成你自己构建的命令。

命令别名Alias在 Linux shell 中指的是将一些太长或者太难记的多个命令组合起来,成为一个由用户自己构建的命令。

可以通过 alias 命令来创建命令别名。在 alias 后面跟上想要创建的别名名称、一个等号(=),以及希望使用这个别名来执行的命令,这样一个命令别名就创建好了。举个例子,ls 命令在默认情况下是不会对输出的内容进行着色的,这样就不能让用户一眼分辨出目录、文件和连接了。对此,可以创建这样一个命令别名,在输出目录内容的时候为输出内容着色:

#alias lc='ls --color=auto'

其中 lc 是自定义的命令别名,代表 “list with color” 的意思。在创建命令别名的时候,需要先确认使用的别名是不是已经有对应的命令了,如果有的话,原本的命令就会被覆盖掉了。注意,定义命令别名的时候,= 两端是没有空格的。当运行 lc 的时候,就相当于执行了 ls --color 命令。

此后,执行 lc 列出目录内容的时候,就会输出带有着色的内容了。

你可能会发现你在执行 ls 的时候,本来就是输出带有着色的内容。那是因为大部分 Linux 发行版都已经将 ls 设定为带有着色的命令别名了。

Linux对文件进行管理:

BASH Shell对文件进行管理

内容提要:

目录树管理

文件管理——创建、复制、删除、移动、查看、编辑、压缩、查找Linux 文件与目录管理

我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。

其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。

在开始本教程前我们需要先知道什么是绝对路径与相对路径。

• 绝对路径:

路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。

• 相对路径:

路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd …/man 这就是相对路径的写法啦!

Linux处理目录的常用命令

接下来我们就来看几个常见的处理目录的命令吧:

• ls: 列出目录

• cd:切换目录

• pwd:显示目前的目录

• mkdir:创建一个新的目录

• rmdir:删除一个空的目录

• cp: 复制文件或目录

• rm: 移除文件或目录

• mv: 移动文件与目录,或修改文件与目录的名称

你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp。

ls (列出目录)

在Linux系统当中, ls 命令可能是最常被运行的。

语法:

[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称

[root@www ~]# ls [–color={never,auto,always}] 目录名称

[root@www ~]# ls [–full-time] 目录名称选项与参数:

• -a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)

• -d :仅列出目录本身,而不是列出目录内的文件数据(常用)

• -l :长数据串列出,包含文件的属性与权限等等数据;(常用)

将家目录下的所有文件列出来(含属性与隐藏档)

[root@www ~]# ls -al ~

cd (切换目录)

cd是Change Directory的缩写,这是用来变换工作目录的命令。

语法:

cd [相对路径或绝对路径]#使用 mkdir 命令创建 runoob 目录

[root@www ~]# mkdir runoob

使用绝对路径切换到 runoob 目录

[root@www ~]# cd /root/runoob/

使用相对路径切换到 runoob 目录

[root@www ~]# cd ./runoob/

表示回到自己的家目录,亦即是 /root 这个目录

[root@www runoob]# cd ~

表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思;

[root@www ~]# cd ..  接下来大家多操作几次应该就可以很好的理解 cd 命令的。

pwd (显示目前所在的目录)

pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。

[root@www ~]# pwd [-P]选项与参数:

• -P :显示出确实的路径,而非使用连结 (link) 路径。

实例:单纯显示出目前的工作目录:

[root@www ~]# pwd
/root   <== 显示出目录啦~实例显示出实际的工作目录,而非连结档本身的目录名而已。

[root@www ~]# cd /var/mail   <==注意,/var/mail是一个连结档

[root@www mail]# pwd
/var/mail         <==列出目前的工作目录

[root@www mail]# pwd -P
/var/spool/mail   <==怎么回事?有没有加 -P 差很多~

[root@www mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep  4 17:54 /var/mail -> spool/mail

看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail

所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!

mkdir (创建新目录)

如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。

语法:

mkdir [-mp] 目录名称选项与参数:

• -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~

• -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!

实例:请到/tmp底下尝试创建数个新目录看看:

[root@www ~]# cd /tmp

[root@www tmp]# mkdir test    <==创建一名为 test 的新目录

[root@www tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4': No such file or directory       <== 没办法直接创建此目录啊!

[root@www tmp]# mkdir -p test1/test2/test3/test4 加了这个 -p 的选项,可以自行帮你创建多层目录!

实例:创建权限为 rwx–x--x 的目录。

[root@www tmp]# mkdir -m 711 test2

[root@www tmp]# ls -l
drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test
drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。
如果我们使用 -m ,如上例我们给予 -m 711 来给予新的目录 drwx--x--x 的权限。

rmdir (删除空的目录)

语法:

rmdir [-p] 目录名称选项与参数:

• -p :连同上一级『空的』目录也一起删除

删除 runoob 目录
[root@www tmp]# rmdir runoob/将 mkdir 实例中创建的目录(/tmp 底下)删除掉!
[root@www tmp]# ls -l   <==看看有多少目录存在?
drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test
drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2
[root@www tmp]# rmdir test   <==可直接删除掉,没问题
[root@www tmp]# rmdir test1  <==因为尚有内容,所以无法删除!
rmdir: `test1': Directory not empty
[root@www tmp]# rmdir -p test1/test2/test3/test4
[root@www tmp]# ls -l        <==您看看,底下的输出中test与test1不见了!
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除。
不过要注意的是,这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录。

cp (复制文件或目录)

cp 即拷贝文件和目录。

语法:

[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)

[root@www ~]# cp [options] source1 source2 source3 … directory选项与参数:

• -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)

• -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;

• -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

• -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

• -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;

• -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);

• -r:递归持续复制,用於目录的复制行为;(常用)

• -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;

• -u:若 destination 比 source 旧才升级 destination !

用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y为覆盖

rm (移除文件或目录)

语法:

rm [-fir] 文件或目录选项与参数:

• -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;

• -i :互动模式,在删除前会询问使用者是否动作

• -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!

将刚刚在 cp 的实例中创建的 bashrc 删除掉!
[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!

mv (移动文件与目录,或修改名称)

语法:

[root@www ~]# mv [-fiu] source destination

[root@www ~]# mv [options] source1 source2 source3 … directory选项与参数:

• -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

• -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

• -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

复制一文件,创建一目录,将文件移动到目录中
[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest将某个文件移动到某个目录去,就是这样做!
将刚刚的目录名称更名为 mvtest2
[root@www tmp]# mv mvtest mvtest2

Linux 文件内容查看

Linux系统中使用以下命令来查看文件的内容:

• cat  由第一行开始显示文件内容

• tac  从最后一行开始显示,可以看出 tac 是 cat 的倒著写!

• nl   显示的时候,顺道输出行号!

• more 一页一页的显示文件内容

• less 与 more 类似,但是比 more 更好的是,他可以往前翻页!

• head 只看头几行

• tail 只看尾巴几行

你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。

cat

由第一行开始显示文件内容

语法:

cat [-AbEnTv]选项与参数:

• -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;

• -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!

• -E :将结尾的断行字节 $ 显示出来;

• -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;

• -T :将 [tab] 按键以 ^I 显示出来;

• -v :列出一些看不出来的特殊字符

检看 /etc/issue 这个文件的内容:
[root@www ~]# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m

tac

tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:

[root@www ~]# tac /etc/issue
Kernel \r on an \m
CentOS release 6.4 (Final)

nl

显示行号

语法:

nl [-bnw] 文件选项与参数:

• -b :指定行号指定的方式,主要有两种:

	-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);

	-b t :如果有空行,空的那一行不要列出行号(默认值);

• -n :列出行号表示的方法,主要有三种:

	-n ln :行号在荧幕的最左方显示;

	-n rn :行号在自己栏位的最右方显示,且不加 0 ;

	-n rz :行号在自己栏位的最右方显示,且加 0 ;

• -w :行号栏位的占用的位数。

实例一:用 nl 列出 /etc/issue 的内容
[root@www ~]# nl /etc/issue
     1  CentOS release 6.4 (Final)
     2  Kernel \r on an \m

more

一页一页翻动

[root@www ~]# more /etc/man_db.config

在 more 这个程序的运行过程中,你有几个按键可以按的:

• 空白键 (space):代表向下翻一页;

• Enter         :代表向下翻『一行』;

• /字串         :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;

• :f            :立刻显示出档名以及目前显示的行数;

• q             :代表立刻离开 more ,不再显示该文件内容。

• b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

less

一页一页翻动,以下实例输出/etc/man.config文件的内容:

[root@www ~]# less /etc/man.config

less运行时可以输入的命令有:

• 空白键    :向下翻动一页;

• [pagedown]:向下翻动一页;

• [pageup]  :向上翻动一页;

• /字串     :向下搜寻『字串』的功能;

• ?字串     :向上搜寻『字串』的功能;

• n         :重复前一个搜寻 (与 / 或 ? 有关!)

• N         :反向的重复前一个搜寻 (与 / 或 ? 有关!)

• q         :离开 less 这个程序;

head

取出文件前面几行

语法:

head [-n number] 文件 选项与参数:

• -n :后面接数字,代表显示几行的意思

[root@www ~]# head /etc/man.config默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:
[root@www ~]# head -n 20 /etc/man.config

tail

取出文件后面几行

语法:

tail [-n number] 文件 选项与参数:

• -n :后面接数字,代表显示几行的意思

• -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测

[root@www ~]# tail /etc/man.config
默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config

笔记:

1.Linux 链接概念

Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。

硬连接

硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软连接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

2.通过实验加深理解

[oracle@Linux]$ touch f1          #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2          #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3       #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li            # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1从上面的结果中可以看出,硬连接文件 f2 与原文件 f1 的 inode 节点相同,均为 9797648,然而符号连接文件的 inode 节点不同。
[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file
[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory通过上面的测试可以看出:当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号连接 f1 文件无效

Linux用户和组的管理:

Linux 用户和用户组管理

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

每个用户账号都拥有一个惟一的用户名和各自的口令。

用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

实现用户账号的管理,要完成的工作主要有如下几个方面:
	• 用户账号的添加、删除与修改。
	• 用户口令的管理。
	• 用户组的管理。

用户/组的意义

Users and groups:
	. Every process (running program) on the system runs as a particular user.
	. Every file is owned by a particular user. 
	. Access to files and directories are restricted by user. 
	. The user associated with a running process determines the files and directories accessible to that process.
	. 系统中每一个运行的进程都需要一个特别的用户
	. 每一个文件都有一个特别的拥有者
	. 设置文件的访问权限需要针对于用户来设置
	. 进程所关联的用户将决定它对文件的访问权限

用户/组的信息

查看当前登录的用户信息:

[root@xiaochen ~]# id
uid=0(root) gid=0(root) groups=0(root)

查看文件的owner:

命令:ll=ls -l

[root@xiaochen ~]# ll /home/          
drwx------. 4 alice  alice   4096 Jun  2 15:59 alice
drwx------. 2 root   root   16384 Jun  1 23:09 lost+found
drwxr-xr-x 2 root   root    4096 Jun  2 15:33 xiaochen

查看运行进程的用户:

[root@xiaochen ~]# ps aux 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  19356  1536 ?        Ss   03:53   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    03:53   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    03:53 0:00[migration/0]

用户/组的配置文件

与用户账号有关的系统文件/etc/passwd文件

完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改,与用户和用户组相关的信息都存放在一些系统文件中,这些文件包括/etc/passwd, /etc/shadow, /etc/group等。

下面分别介绍这些文件的内容。

1、/etc/passwd文件是用户管理工作涉及的最重要的一个文件。

Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。

这个文件对所有用户都是可读的。它的内容类似下面的例子:

#cat /etc/passwd

1 root:x:0:0:root:/root:/bin/bash
  2 bin:x:1:1:bin:/bin:/sbin/nologin
  3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
  4 adm:x:3:4:adm:/var/adm:/sbin/nologin
  5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  6 sync:x:5:0:sync:/sbin:/bin/sync
  7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
  8 halt:x:7:0:halt:/sbin:/sbin/halt
  9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
 10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
 11 operator:x:11:0:operator:/root:/sbin/nologin
 12 games:x:12:100:games:/usr/games:/sbin/nologin
 13 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
 14 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
 15 nobody:x:99:99:Nobody:/:/sbin/nologin
 16 vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
 17 saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nolog    in
 18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
 19 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nolog    in
 20 dbus:x:81:81:System message bus:/:/sbin/nologin
 21 hsf:x:500:500::/home/hsf:/bin/bash
 22 www:x:501:501::/home/www:/bin/bash
 23 mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false

从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

1)"用户名"是代表用户账号的字符串。

通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符;为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。

2)“口令”一些系统中,存放着加密后的用户口令字。

虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。

3)“用户标识号”是一个整数,系统内部用它来标识用户。

一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。

通常用户标识号的取值范围是0~65 535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。

4)“组标识号”字段记录的是用户所属的用户组。

它对应着/etc/group文件中的一条记录。

5)“注释性描述”字段记录着用户的一些个人情况。

例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux 系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。

6)“主目录”,也就是用户的起始工作目录。

它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。

7)登录Shell,用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。

Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。

系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。

用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。

利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。

8)系统中有一类用户称为   伪用户(pseudo users)。

这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。

常见的伪用户如下所示:

伪 用 户 含 义 

bin 拥有可执行的用户命令文件 

sys 拥有系统文件 

adm 拥有帐户文件 

uucp UUCP使用 

lp lp或lpd子系统使用 

nobody NFS使用

2.拥有帐户文件/etc/shadow

1、除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit, cron, mail, usenet等,它们也都各自为相关的进程和文件所需要。

由于/etc/passwd文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是/etc/shadow文件。 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。

2、/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生的,它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开。这些字段是:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

"登录名"是与/etc/passwd文件中的登录名相一致的用户账号

"口令"字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。

"最后一次修改时间"表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCO Linux 中,这个时间起点是1970年1月1日。

"最小时间间隔"指的是两次修改口令之间所需的最小天数。

"最大时间间隔"指的是口令保持有效的最大天数。

"警告时间"字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。

"不活动时间"表示的是用户没有登录活动但账号仍能保持有效的最大天数。

"失效时间"字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

下面是/etc/shadow的一个例子:

#cat /etc/shadow

root:$6$gajC9tX0$BhzuWE5LgLYHAsiXf.ADK2x4nOsnYHq05Nwmk8Uy4tilmyrD/oPtVccHatzTlusktSp8Cux9dNs5GELZgbqL81:17984:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
uucp:*:15980:0:99999:7:::
operator:*:15980:0:99999:7:::
games:*:15980:0:99999:7:::
gopher:*:15980:0:99999:7:::
ftp:*:15980:0:99999:7:::
nobody:*:15980:0:99999:7:::
vcsa:!!:17965::::::
saslauth:!!:17965::::::
postfix:!!:17965::::::
sshd:!!:17965::::::
dbus:!!:17979::::::
hsf:!!:17979:0:99999:7:::
www:!!:17984:0:99999:7:::
mysql:!!:17988::::::

3、用户组的所有信息都存放在/etc/group文件中。

将用户分组是Linux 系统中对用户进行管理及控制用户访问权限的一种手段。

每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。

当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。

用户组的所有信息都存放在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:

组名:口令:组标识号:组内用户列表

	1."组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。

	2."口令"字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。

	3."组标识号"与用户标识号类似,也是一个整数,被系统内部用来标识组。

	4."组内用户列表"是属于这个组的所有用户的列表/b],不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。

/etc/group文件的一个例子如下:

#cat /etc/group

root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
tty:x:5:
disk:x:6:
lp:x:7:daemon
mem:x:8:
kmem:x:9:
wheel:x:10:
mail:x:12:mail,postfix
uucp:x:14:
man:x:15:
games:x:20:
gopher:x:30:
video:x:39:
dip:x:40:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
floppy:x:19:
vcsa:x:69:
utmp:x:22:
utempter:x:35:
cdrom:x:11:
tape:x:33:
dialout:x:18:
saslauth:x:76:
postdrop:x:90:
postfix:x:89:
fuse:x:499:
sshd:x:74:
dbus:x:81:
hsf:x:500:
www:x:501:
mysql:x:27:

4、添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户的方法。Linux系统提供了创建大量用户的工具,可以让您立即创建大量用户,方法如下:

(1)先编辑一个文本用户文件。

每一列按照/etc/passwd密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号。一个范例文件user.txt内容如下:

user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash

(2)以root身份执行命令 /usr/sbin/newusers,从刚创建的用户文件user.txt中导入数据,创建用户:

# newusers < user.txt然后可以执行命令 vipw 或 vi /etc/passwd 检查 /etc/passwd 文件是否已经出现这些用户的数据,并且用户的宿主目录是否已经创建。

3)执行命令/usr/sbin/pwunconv。

将 /etc/shadow 产生的 shadow 密码解码,然后回写到 /etc/passwd 中,并将/etc/shadow的shadow密码栏删掉。这是为了方便下一步的密码转换工作,即先取消 shadow password 功能。

# pwunconv

(4)编辑每个用户的密码对照文件。

范例文件 passwd.txt 内容如下:

user001:密码

user002:密码

user003:密码

user004:密码

user005:密码

user006:密码

5)以root身份执行命令 /usr/sbin/chpasswd。

创建用户密码,chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏。

#chpasswd < passwd.txt

(6)确定密码经编码写入/etc/passwd的密码栏后。

执行命令 /usr/sbin/pwconv 将密码编码为 shadow password,并将结果写入 /etc/shadow。

#pwconv

这样就完成了大量用户的创建了,之后您可以到/home下检查这些用户宿主目录的权限设置是否都正确,并登录验证用户密码是否正确。

用户/组的配置文件

[root@xiaochen ~]# man 5 passwd
[root@xiaochen ~]# man 5 shadow
[root@xiaochen ~]# man 5 group

#/etc/passwd 	    root:x:0:0:root:/root:/bin/bash

第一段:用户名、第二段:密码占位符、第三段:uid、第四段:gid、第五段:描述、第六段:家目录、第七段:用户shell类型

#/etc/shadow    
root:1MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7:: :
第一列:用户名、
第二列:密码位 (有密码 无密码 !帐号锁定 !!密码锁定 *该用户永久不能登录系统)、
第三列:最后一次修改密码时间、
第四列:密码最短有效天数(即密码至少使用的天数,0无限制) 、
第五列:密码最长有效天数(99999 永久生效) 
第六列:密码过期前警告时间(默认是7天,在这期间可使用就旧密码) 
第七列:密码过期后的宽限时间(密码过期后预留给账户修改密码的时间) 
第八列:帐号失效期
第九列:保留列                    

#/etc/group	        root:x:0:
第一列:组名
第二列:组密码占位符
第三列:gid
第四列:[用户列表]                   

系统约定: RHEL7

uid: 0 特权用户

uid: 1~999 系统用户

uid: 1000~60000 普通用户

[root@xiaochen ~]# vim /etc/login.defs

用户管理篇

  1. 现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源。
  2. 普通用户在所分配到的资源内进行各自的操作,相互之间不受影响。但是这些普通用户的权限是有限制的,且用户太多的话,管理就不便,从而引入root用户。
  3. 此用户是唯一的,且拥有系统的所有权限。root用户所在的组称为root组。“组”是具有相似权限的多个用户的集合。
    root的权利
  4. Linux系统的特性就是可以满足多个用户,同时工作,因此Linux系统必须具备很好的安全性。
  5. 在安装RHEL7时设置的root管理员密码,这个root管理员就是所有UNIX系统中的超级用户,它拥有最高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等等。
  6. 因此“能力越大,责任越大”,root权限必须很好的掌握,否则一个错误的命令可能会摧毁整个系统。
    root为什么叫root?
  7. 在Linux系统中,用户也有自己的UID身份账号且唯一
  8. 系统管理员UID为0
  9. 系统用户UID为1~999 Linux安装的服务程序都会创建独有的用户负责运行。
  10. 普通用户UID从1000开始:由管理员创建
    用户组GID
  11. 为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。通过使用用户组号码(GID,Group IDentification),我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
  12. 假设有一个公司中有多个部门,每个部门中又有很多员工。如果只想让员工访问本部门内的资源,则可以针对部门而非具体的员工来设置权限。
  13. 例如可以通过对技术部门设置权限,使得只有技术部门的员工可以访问公司的 数据库信息等。
  14. Linux管理员在创建用户时,将自动创建一个与其同名的用户组,这个用户组只有该用户一个人

Linux系统用户账号的管理命令

用户账号的管理工作主要涉及到用户账号的添加、修改和删除。

添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。

1、添加新的用户账号使用useradd命令,其语法如下:

useradd 选项 用户名

参数说明:

• 选项:

• -c comment 指定一段注释性描述。

• -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。

• -g 用户组 指定用户所属的用户组。

• -G 用户组,用户组 指定用户所属的附加组。

• -s Shell文件 指定用户的登录Shell。

• -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

• 用户名:

指定新账号的登录名。

实例1s

#useradd –d /usr/sam -m sam

此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录)。

实例2

#useradd -s /bin/sh -g group –G adm,root gem

此命令新建了一个用户gem,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。

这里可能新建组:#groupadd group及groupadd adm

增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。

Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。

2、删除帐号

如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

删除一个已有的用户账号使用userdel命令,其格式如下:

userdel 选项 用户名

常用的选项是 -r,它的作用是把用户的主目录一起删除。

例如:

#userdel -r sam

此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

3、修改帐号

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

修改已有用户的信息使用usermod命令,其格式如下:

usermod 选项 用户名

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。

另外,有些系统可以使用选项:-l 新用户名

这个选项指定一个新的账号,即将原来的用户名改为新的用户名。

例如:

#usermod -s /bin/ksh -d /home/z –g developer sam

此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。

4、用户口令的管理

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

passwd 选项 用户名

可使用的选项:

• -l 锁定口令,即禁用账号。

• -u 口令解锁。

• -d 使账号无口令。

• -f 强迫用户下次登录时修改口令。

如果默认用户名,则修改当前用户的口令。

例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:

$passwd 
Old password:** 
New password:*** 

Re-enter new password:***如果是超级用户,可以用下列形式指定任何用户的口令:

#passwd sam

New password:***

Re-enter new password:***普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。

为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。

为用户指定空口令时,执行下列形式的命令:

#passwd -d sam

此命令将用户sam的口令删除,这样用户sam下一次登录时,系统就不再询问口令。

passwd命令还可以用-l(lock)选项锁定某一用户,使其不能登录,例如:

#passwd -l sam

Linux系统用户组的管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

1、增加一个新的用户组使用groupadd命令。其格式如下:

groupadd 选项 用户组

可以使用的选项有:

• -g GID 指定新用户组的组标识号(GID)。

• -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

实例1:

#groupadd group1

此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。

实例2:

#groupadd -g 101 group2

此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。

2、如果要删除一个已有的用户组,使用groupdel命令,其格式如下:

groupdel 用户组

例如:

#groupdel group1

此命令从系统中删除组group1。

3、修改用户组的属性使用groupmod命令。其语法如下:

groupmod 选项 用户组

常用的选项有:

• -g GID 为用户组指定新的组标识号。

• -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。

• -n新用户组 将用户组的名字改为新名字

实例1:

#groupmod -g 102 group2

此命令将组group2的组标识号修改为102。

实例2:

#groupmod –g 10000 -n group3 group2

此命令将组group2的标识号改为10000,组名修改为group3。

4、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。

用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:

$newgrp root

这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

用户/组管理

用户组管理:

[root@xiaochen ~]# groupadd op
[root@xiaochen ~]# groupadd hr -g 2000		        //添加组hr,并指定gid 2000
[root@xiaochen ~]# grep 'net01' /etc/group		        //查看/etc/group中组net01信息
[root@xiaochen ~]# groupdel hr					  //删除组net01

用户管理:

==创建用户 未指定选项==

[root@xiaochen ~]# useradd tom		
[root@xiaochen ~]# grep 'user01' /etc/passwd /etc/shadow /etc/group
/etc/passwd:user01:x:507:512::/home/user01:/bin/bash
/etc/shadow:user01:!!:16589:0:99999:7:::
/etc/group:user01:x:512:

==删除用户==

userdel deletes users
[root@xiaochen ~]# userdel -r tom     //删除用户的同时删除用户家目录和mail spool

==创建用户 指定选项==

[root@xiaochen ~]# useradd user02 -u 503				    //创建用户usr02,指定uid
[root@xiaochen ~]# useradd user05 -s /sbin/nologin 	          //创建用户并指定shell
[root@xiaochen ~]# useradd user10 -d /tmp/user10            //创建用户并指定家目录在/tmp/user10
[root@xiaochen ~]# useradd user04 -g hr                              //创建用户并指定主组 
[root@xiaochen ~]# useradd user07 -G hr,it,fd				    //创建用户,指定附加组
[root@xiaochen ~]# useradd user10 -u 4000 -s /sbin/nologin
[root@xiaochen ~]# useradd user04 -M					    //创建用户user04,不创建家目录

对于一个用户来说,主组有且只有一个,故又称之为唯一组

对于一个用户来说,附加组可以有多个,故又称之为公共组

创建用户时会生成和用户同名的一个组,这个组是该用户的主组

一个组作为了一个用户的主组,那么这个用户不会出现在该组成员列表中

注意:

想要知道一个用户有多少个附件组,最好的办法是使用id 用户名

想要知道一个组内有多少个用户,最好的办法是使用grep 组名 /etc/group

==用户密码==

[root@xiaochen ~]# passwd alice
[root@xiaochen ~]# echo 123 |passwd alice --stdin

修改用户的信息 usermod

usermod modifies existing users

==修改UID,SHELL==

[root@xiaochen ~]# useradd user10
[root@xiaochen ~]# grep 'user10' /etc/passwd
user10:x:509:509::/home/user10:/bin/bash
[root@xiaochen ~]# usermod -u 2000 user10				//修改用户uid
[root@xiaochen ~]# usermod -s /sbin/nologin user10		//修改用户shell
[root@xiaochen ~]# usermod -G hr,it,fd user10               //直接覆盖用户原有附加组
[root@xiaochen ~]# usermod -aG yw,kf user10            //在原有基础上添加附加组

sudo普通用户提权

给普通用户提权

以下两种方式都可以将普通用户提升为root

1、Switching users with su         //使用su切换用户
[alice@xiaochen ~]$ useradd u1
-bash: /usr/sbin/useradd: 权限不够
[alice@xiaochen ~]$ su - root
password:
[root@xiaochen ~]# 

2、Running commands as root with sudo,以root身份授权普通用户

打开文件,G来到文件最后一行,o在文件的最后一行的下一行进入到插入模式,添加下面一行
[root@xiaochen ~]# vim /etc/sudoers
%wheel  ALL=(ALL)       NOPASSWD: ALL:
注释:
%wheel表示组,用户需要添加到这个组,作为附加组
alice,没有%表示用户,用户可以直接使用sudo工具

[root@xiaochen ~]# useradd yangyang -G wheel        //创建用户添加到wheel组
[root@xiaochen ~]# id yangyang
uid=504(yangyang) gid=504(yangyang) 组=504(yangyang),10(wheel)
[root@xiaochen ~]# su - yangyang        //切换到用户
[yangyang@xiaochen ~]$ useradd gougou10
-bash: /usr/sbin/useradd: 权限不够
[yangyang@xiaochen ~]$ sudo useradd gougou10        //使用sudo工具创建用户
[yangyang@xiaochen ~]$ id gougou10
uid=505(gougou10) gid=505(gougou10) 组=505(gougou10)

文件权限:

文件基本权限UGO:

Linux 文件基本属性

在Linux中我们可以使用     ll或者 ls –l命令来显示一个文件的属性以及文件所属的用户和组,如:

[root@www /]# ls -l
total 64
dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot

……实例中,bin文件的第一个属性用"d"表示。"d"在Linux中代表该文件是一个目录文件。

在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。

• 当为[ d ]则是目录

• 当为[ - ]则是文件;

• 若是[ l ]则表示为链接文档(link file);

• 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);

• 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

每个文件的属性由左边第一部分的10个字符来确定(如下图)。

这些数字来表示。

第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。

第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。

其中,第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限;

第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用"-“字符表示没有写权限;第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用”-"字符表示,则没有执行权限。

Linux文件属主和属组
[root@www /]# ls -l
total 64
drwxr-xr-x 2 root  root  4096 Feb 15 14:46 cron
drwxr-xr-x 3 mysql mysql 4096 Apr 21  2014 mysql

……对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。

同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。

文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

在以上实例中,mysql 文件是一个目录文件,属主和属组都为 mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限。

对于 root 用户来说,一般情况下,文件的权限对其不起作用。

更改文件属性

1、chgrp:更改文件属组

语法:

chgrp [-R] 属组名 文件名参数选项

• -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

2、chown:更改文件属主,也可以同时更改文件属组

语法:

chown [–R] 属主名 文件名

chown [-R] 属主名:属组名 文件名进入 /root 目录(~)将install.log的拥有者改为bin这个账号:

[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log将install.log的拥有者与群组改回为root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

3、chmod:更改文件9个属性

Linux文件属性有两种设置方法,一种是数字,一种是符号。

Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。

其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

• r:4

• w:2

• x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:

• owner = rwx = 4+2+1 = 7

• group = rwx = 4+2+1 = 7

• others= --- = 0+0+0 = 0

所以等一下我们设定权限的变更时,该文件的权限数字就是770啦!变更权限的指令chmod的语法是这样的:

chmod [-R] xyz 文件或目录选项与参数:

• xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。

• -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

举例来说,如果要将.bashrc这个文件所有的权限都设定启用,那么命令如下:

[root@www ~]# ls -al .bashrc
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc那如果要将权限变成 -rwxr-xr-- 呢?那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754。

chmod符号类型改变文件权限

还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:

• (1)user

• (2)group

• (3)others

那么我们就可以使用 u, g, o 来代表三种身份的权限!

此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:

点击这里 点击这里 点击这里 点击这里 点击这里
chmod u +(加入)-(除去)=(设定) rwx 文件或目录
chmod g +(加入)-(除去)=(设定) rwx 文件或目录
chmod o +(加入)-(除去)=(设定) rwx 文件或目录
chmod a +(加入)-(除去)=(设定) rwx 文件或目录

如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:

#touch test1    // 创建 test1 文件
#ls -al test1    // 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
#chmod u=rwx,g=rx,o=r  test1    // 修改 test1 权限
#ls -al test1

-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:

#chmod  a-x test1
#ls -al test1

-rw-r–r-- 1 root root 0 Nov 15 10:32 test1

===管理文件基本权限

  1. 更改文件的属主、属组
    =chown:
    [root@xiaochen ~]# chown alice.hr file1 //改属主、属组
    [root@xiaochen ~]# chown alice file1 //只改属主
    [root@xiaochen ~]# chown .hr file1 //只改属组
    [root@xiaochen ~]# chown -R alice.hr dir1
    =chgrp:
    [root@xiaochen ~]# chgrp it file1 //改文件属组
    [root@xiaochen ~]# chgrp -R it dir1 //递归改属组

  2. 更改权限
    =a. 使用符号
    对象 赋值符 权限类型
    u + r
    chmod g - w file1
    o = x

    root@xiaochen ~]# chmod u+x file1		//属主增加执行
    root@xiaochen ~]# chmod a=rwx file1	//所有人等于读写执行
    root@xiaochen ~]# chmod a=- file1	//所有人没有权限
    [root@xiaochen ~]# chmod ug=rw,o=r file1   //属主属组等于读写,其他人只读
    root@xiaochen ~]# ll file1 		//以长模式方式查看文件权限
    rw-rw-r-- 1 alice it 17 10-25 16:45 file1	//显示的结果
    

    =b. 使用数字
    [root@xiaochen ~]# chmod 644 file1
    [root@xiaochen ~]# ll file1
    -rw-r–r-- 1 alice it 17 10-25 16:45 file1

针对hr部门的访问目录设置权限,要求如下:

  1. boss用户和hr组的员工可以读、写、执行
  2. 其他用户没有任何权限
    [root@localhost ftp]# mkdir /mulu
    [root@localhost ftp]# ll -d /mulu/
    drwxr-xr-x 2 root root 6 Feb 22 16:15 /mulu/
    [root@localhost ftp]# useradd boss
    [root@localhost ftp]# groupadd hr
    [root@localhost ftp]# chown boss.hr /mulu/
    [root@localhost ftp]# chmod 770 /mulu/
    [root@localhost ftp]# ll -d /mulu/
    drwxrwx— 2 boss hr 6 Feb 22 16:15 /mulu/

基本权限ACL

ACL的使用

ACL即Access Control List 主要的目的是提供传统owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。

如,某一个文件,不让单一的某个用户访问。

ACL使用两个命令来对其进行控制

getfacl:取得某个文件/目录的ACL设置项目

setfacl:设置某个文件/目录的ACL设置项目

setfacl 参数

-m:设置后续acl参数

-x:删除后续acl参数

-b:删除全部的acl参数

-k:删除默认的acl参数

-R:递归设置acl,包括子目录

-d:设置默认acl

例:创建一文件test,将其权限修改为777,并查看其默认ACL权限配置

getfacl

[root@ www.linuxidc.com ~]# touch /test
[root@ www.linuxidc.com ~]# chmod 777 /test
[root@ www.linuxidc.com ~]# getfacl /test  //获得文件的ACL权限
getfacl: Removing leading '/' from absolute path names
file: test                                //文件名
owner: root                            //文件所属者
group: root                            //文件所属组
user::rwx                                //文件所属者权限
group::rwx                              //同组用户权限
other::rwx                              //其它者权限

setfacl

[root@ www.linuxidc.com ~]#
可以看到其它者的权限也是可读可写可执行,可以自行测试,现在我们修改其ACL策略,使code用户只有读取的权限
[root@ www.linuxidc.com ~]# setfacl -m u:code:r /test
[root@ www.linuxidc.com ~]# ll /test
-rwxrwxrwx+ 1 root root 1 Apr 11 07:25 /test            //可以看到权限的最后多了一个”+”号
[root@ www.linuxidc.com ~]# 
现在再次查看一下此文件的ACL属性
[root@ www.linuxidc.com ~]# getfacl /test
getfacl: Removing leading '/' from absolute path names
file: test
owner: root
group: root
user::rwx
user:code:r--                          //可以看到code单独的权限为r--
group::rwx
mask::rwx
other::rwx

[root@ www.linuxidc.com ~]# 
注:code的权限并不是只根据ACL配置来决定的,它是由code用户基本权限与配置的ACL权限的“与”运算决定的,即other:rwx 与 code:r--  = code:r--
现在使用code用户,测试是否可写
 在写文件时,会出现-- INSERT -- W10: Warning: Changing a readonly file提示。
除了对单个用户进行设置外,还可以对用户组、有效权限(mask)进行设置如对用户组设置:    g:[用户组]:[rwx] 
注:有效权限(mask) 即用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效
 如上面的/test文件,已经有了可读权限,如果我们把它的有效权限修改为只有写权限,则设置的acl权限不在有效权限之内,则用户code就不可能再查看/test文件中的内容了
[root@ www.linuxidc.com ~]# setfacl -m m:w /test              //设置有效权限为只写
可以查看/test acl属性
[root@ www.linuxidc.com ~]# getfacl /test
getfacl: Removing leading '/' from absolute path names
file: test
owner: root
group: root
user::rwx
user:code:r-- #effective:---
group::rwx #effective:-w-
mask::-w-                      //可以看到有效权限已经修改成功
other::rwx
[root@ www.linuxidc.com ~]#
使用code用户查看文件内容,首先使用root用户写入一些内容,会使测试更加直观
[root@ www.linuxidc.com ~]# echo "this is a test getfacl " >/test
[code@ www.linuxidc.com ~]$ vim /test 
 "/test" [Permission Denied]                    //可以在最下面看到不允许访问的提示,并且看不到任何内容
取消acl权限
[root@ www.linuxidc.com ~]# setfacl -x u:code /test            //取消/test对用户code的权限
[root@ www.linuxidc.com ~]# setfacl -x m /test                //恢复有效权限
[root@ www.linuxidc.com ~]# getfacl /test              
getfacl: Removing leading '/' from absolute path names
file: test
owner: root
group: root
user::rwx
group::rwx
other::rwx
[root@ www.linuxidc.com ~]# ll /test
    -rwxrwxrwx 1 root root 24 Apr 11 08:01 /test              //已经可以正常使用
[root@ www.linuxidc.com ~]#

文件的基本权限详解:

重要: r、w、x权限对文件和目录的意义

对于文件:

r----------读  cat  grep head tail less more  (root用户不受r权限的限制)

w----------写  vim  > >>     (root用户不受w权限的限制)

x----------执行 ./ 绝对路径    普通执行(rx) 管理员(x)

对于目录: (root用户均不受权限的限制)

r----------ls    r 只能读文件名    r-x 文件详细信息

w----------touch rm  -wx 新建文件,也能删除文件,但是前提是知道文件名   rwx 能删除所有文件,支持使用*  

x----------cd过去

示例1: 对文件的影响

[root@xiaochen ~]# mkdir /dir10
[root@xiaochen ~]# touch /dir10/file1
[root@xiaochen ~]# chmod 777 /dir10/file1 
[root@xiaochen ~]# ll -d /dir10/
drwxr-xr-x. 2 root root 4096 3月  11 18:37 /dir10/
[root@xiaochen ~]# ll /dir10/file1 
-rwxrwxrwx. 1 777 root 0 3月  11 18:37 /dir10/file1
[alice@xiaochen ~]$ cat /dir10/file1 
[alice@xiaochen ~]$ rm -rf /dir10/file1 
rm: 无法删除"/dir10/file1": 权限不够
想要删除目录下的文件就必须要对文件所在的目录有写的权限。

示例2: 对目录有w权限

[root@xiaochen ~]# chmod 777 /dir10/
[root@xiaochen ~]# chmod 000 /dir10/file1 
[root@xiaochen ~]# ll -d /dir10/
drwxrwxrwx. 2 root root 4096 3月  11 18:37 /dir10/
[root@xiaochen ~]# ll /dir10/file1 
----------. 1 root root 0 3月  11 18:37 /dir10/file1
[alice@xiaochen ~]$ cat /dir10/file1 
cat: /dir10/file1: 权限不够
[alice@xiaochen ~]$ rm -rf /dir10/file1 
[alice@xiaochen ~]$ touch /dir10/file2

    如果对上一级目录有写和执行的权限,那么是可以在目录下新建和删除文件的,但是,如果对文件本身没有什么权限,那么就没有办法看这个文件,也不能写这个文件,也不能执行这个文件。

高级权限suid、sgid、sticky:

文件权限管理之:高级权限

高级权限的类型

suid 4

sgid 2

sticky 1 粘滞位

示例1:suid 普通用户通过suid提权

作用:任何用户在执行拥有suid权限的命令时,都以该命令的拥有者的身份执行(必须作用于二进制的可执行文件)

[root@xiaochen ~]# chmod u+s /bin/cat
[root@xiaochen ~]# chmod u+s /bin/rm
[alice@xiaochen ~]$ cat /root/install.log

示例2:sgid 新建文件继承目录属组 <针对目录>

作用:任何用户在拥有sgid的目录下新建的文件,都要继承该目录的属组

[root@xiaochen ~]# mkdir /home/hr
[root@xiaochen ~]# chgrp -R hr /home/hr/
[root@xiaochen ~]# chmod g+s /home/hr
[root@xiaochen ~]# ll -d /home/hr/
drwxr-sr-x. 2 root hr 4096 Dec  5 16:03 /home/hr/
[root@xiaochen ~]# touch /home/hr/file9
[root@xiaochen ~]# ll /home/hr/
-rw-r--r--. 1 root hr   0 Dec  5 16:03 file9

示例3:sticky 用户只能删除自己的文件 <针对目录>[了解]

作用:任何用户在拥有t权限的目录下,只能删除自己的文件

[root@xiaochen ~]# mkdir /home/dir1
[root@xiaochen ~]# chmod 777 /home/dir1
测试:user1在/home/dir1建立文件, user2尝试删除!
[root@xiaochen ~]# chmod o+t /home/dir1
测试:user1在/home/dir1建立文件, user2再尝试删除!
[root@xiaochen ~]# ll -d /home/dir1
rwxrwxrwt 2 root root 4096 09-02 02:26 /home/dir1

以下两种情况o+t的权限不生效:

1.root用户和文件夹的拥有者不受sticky权限的限制

2.针对与rm命令设置过u+s的权限

3.sudo工具

权限掩码umask:

权限掩码umask

shell (vim,touch) =umask> 新文件或目录权限

useradd =umask> 用户HOME

示例1: 在shell进程中创建文件

[root@xiaochen ~]# umask     //查看当前用户的umask权限
0022
[root@xiaochen ~]# touch file800
[root@xiaochen ~]# mkdir dir800
[root@xiaochen ~]# ll -d dir800 file800 
drwxr-xr-x. 2 root root 4096 3月  11 19:40 dir800
-rw-r--r--. 1 root root    0 3月  11 19:40 file800

示例2:修改shell umask值(临时)

[root@xiaochen ~]# umask 000
[root@xiaochen ~]# mkdir dir900
[root@xiaochen ~]# touch file900
[root@xiaochen ~]# ll -d dir900 file900 
drwxrwxrwx. 2 root root 4096 3月  11 19:44 dir900
-rw-rw-rw-. 1 root root    0 3月  11 19:44 file900

示例3:通过umask决定新建用户HOME目录的权限

[root@xiaochen ~]# grep -i umask /etc/login.defs 
UMASK           077
[root@xiaochen ~]# vim /etc/login.defs
UMASK           000
[root@xiaochen ~]# useradd yangyang
[root@xiaochen ~]# ll -d /home/yangyang/
drwxrwxrwx. 4 yangyang yangyang 4096 3月  11 19:53 /home/yangyang/

文件属性chattr:

文件权限管理之: 文件属性

注:设置文件属性,针对所有用户,包括root,属性凌驾于权限之上

[root@xiaochen ~]# touch file100 file200
[root@xiaochen ~]# lsattr file100 file200 
--------------- file100
--------------- file200
[root@xiaochen ~]# man chattr
[root@xiaochen ~]# chattr +a file100        //仅仅允许追加内容
[root@xiaochen ~]# chattr +i file200         //不可变的,不允许追加,覆盖和删除,包括移动
[root@xiaochen ~]# lsattr file100 file200 file300
-----a--------- file100
----i---------- file200

a属性测试

[root@xiaochen ~]# echo 111 > file100       //以覆盖的方式写入
bash: file100: Operation not permitted
[root@xiaochen ~]# rm -rf file100 
rm: cannot remove `file100': Operation not permitted
[root@xiaochen ~]# echo 111 >> file100			    //以追加的方式写入,例如日志文件

i 属性测试

[root@xiaochen ~]# echo 111 > file200
bash: file200: Permission denied
[root@instructor ~]# echo 111 >> file200
bash: file200: Permission denied
[root@xiaochen ~]# rm -rf file200 
rm: cannot remove `file200': Operation not permitted 

/tmp权限:

/tmp目录的权限必须正确,否则会导致程序不能正常运行

[root@wangcy ~]# ll -d /tmp /var/tmp/
drwxrwxrwt 14 root root 4096 07-26 10:15 /tmp
drwxrwxrwt  2 root root 4096 07-24 19:02 /var/tmp/

    /tmp目录是全局可写的,这就意味这每个进程都可以写,所以需要加限制,否则进程之间会受到影响,一个进程产生的文件可能被另外一个进程删掉。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值