MBR :主引导记录
磁盘分区表
主分区
扩展分区
EBR:扩展分区引导记录
可动态加载验证模块:
在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等
在Linux中进行身份或是状态的验证程序是由PAM来进行的,因为可以按需要动态的对验证的内容进行变更,所以可以大大提高验证的灵活性。PAM本身不会执行验证,而是借助策略和模块来验证
Linux各个发行版中,PAM使用的验证模块一般存放在/lib64/security/目录下,可以使用ls命令进行查看本计算机支持哪些验证控制方式,一般的PAM模块名字例如pam_unix.so,模块可以随时在这个目录下添加和删除,这不会直接影响程序运行,具体的影响在PAM的配置目录下。
PAM的配置文件位于/etc/pam.d/目录下面。ls命令可以看到所有支持PAM模块的服务以及这些服务使用PAM的配置。(注:/etc/pam.d/other 为服务PAM配置文件没有匹配的PAM时使用的默认配置文件)
查看服务是否支持PAM验证模块:
ldd service_dir(服务所在目录) | grep libpam
如:ldd /usr/sbin/vsftpd | grep libpam
PAM配置文件的格式:
type control modules [modules_args]
第一列代表模块类型, 第二列代表控制标记, 第三列代表模块路径:要调用模块的位置。一般是在/lib64/security文件中, 第四列是模块参数。
type:
auth: 用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root
account:对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等
session:这个模块用来定义用户登录前的及用户退出后所要进行的操作.如:登录连接信息,用户数据的打开与关闭,挂载文件系统等.
passwd:使用用户信息来更新.如:修改用户密码
control:
required: 表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕后,PAM 才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝。如果对用户验证成功,所有的模块都会返回成功信息
requisite: 与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败.不再进行同类型后面的操作.
sufficient:表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证成功信息(即使前面有模块fail了,也会把 fail结果忽略掉),把控制权交回应用程序。后面的层叠模块即使使用requisite或者required 控制标志,也不再执行。如果验证失败,sufficient 的作用和 optional 相同
optional:表示即使本行指定的模块验证失败,也允许用户接受应用程序提供的服务,一般返回PAM_IGNORE(忽略).
include:引用其他的配置文件,把匹配权交给其他配置文件(如果其他配置跳出,则整个匹配结束)
substack:引用其他的配置,把匹配权交给其他配置文件(如果其他配置跳出,则仅仅跳出子匹配)
modules:匹配认证模块
/etc/pam.d/*:每一个应用程序PAM配置文件
/usr/lib64/security/*:PAM认证模块文件的实际存放位置
/etc/security/*:其他PAM环境的配置文件,比如 access.conf
/usr/share/doc/pam-x:存放详细的PAM的说明文件
常用模块:
PAM模块 |
结合管理类型 |
说明 |
pam_unix.so |
auth |
提示用户输入密码,并与/etc/shadow文件相比对.匹配返回0 |
account |
检查用户的账号信息(包括是否过期等).帐号可用时,返回0. |
|
password |
修改用户的密码. 将用户输入的密码,作为用户的新密码更新shadow文件 |
|
pam_shells.so |
auth account |
如果用户想登录系统,那么它的shell必须是在/etc/shells文件中之一的shell |
pam_deny.so |
account auth password session |
该模块可用于拒绝访问 |
pam_permit.so |
auth account password session |
模块任何时候都返回成功. |
pam_securetty.so |
auth |
如果用户要以root登录时,则登录的tty必须在/etc/securetty之中. |
pam_listfile.so |
auth account password session |
访问应用程的控制开关 |
pam_cracklib.so |
password |
这个模块可以插入到一个程序的密码栈中,用于检查密码的强度. |
pam_limits.so |
session |
定义使用系统资源的上限,root用户也会受此限制,可以通过/etc/security/limits.conf或/etc/security/limits.d/*.conf来设定 |
可动态加载验证模块:
在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等
在Linux中进行身份或是状态的验证程序是由PAM来进行的,因为可以按需要动态的对验证的内容进行变更,所以可以大大提高验证的灵活性。PAM本身不会执行验证,而是借助策略和模块来验证
Linux各个发行版中,PAM使用的验证模块一般存放在/lib64/security/目录下,可以使用ls命令进行查看本计算机支持哪些验证控制方式,一般的PAM模块名字例如pam_unix.so,模块可以随时在这个目录下添加和删除,这不会直接影响程序运行,具体的影响在PAM的配置目录下。
PAM的配置文件位于/etc/pam.d/目录下面。ls命令可以看到所有支持PAM模块的服务以及这些服务使用PAM的配置。(注:/etc/pam.d/other 为服务PAM配置文件没有匹配的PAM时使用的默认配置文件)
查看服务是否支持PAM验证模块:
ldd service_dir(服务所在目录) | grep libpam
如:ldd /usr/sbin/vsftpd | grep libpam
PAM配置文件的格式:
type control modules [modules_args]
第一列代表模块类型, 第二列代表控制标记, 第三列代表模块路径:要调用模块的位置。一般是在/lib/security文件中, 第四列是模块参数。
type:
auth: 用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root
account:对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等
session:这个模块用来定义用户登录前的及用户退出后所要进行的操作.如:登录连接信息,用户数据的打开与关闭,挂载文件系统等.
passwd:使用用户信息来更新.如:修改用户密码
control:
required: 表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕后,PAM 才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝。如果对用户验证成功,所有的模块都会返回成功信息
requisite: 与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败.不再进行同类型后面的操作.
sufficient:表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证成功信息(即使前面有模块fail了,也会把 fail结果忽略掉),把控制权交回应用程序。后面的层叠模块即使使用requisite或者required 控制标志,也不再执行。如果验证失败,sufficient 的作用和 optional 相同
optional:表示即使本行指定的模块验证失败,也允许用户接受应用程序提供的服务,一般返回PAM_IGNORE(忽略).
include:引用其他的配置文件,把匹配权交给其他配置文件(如果其他配置跳出,则整个匹配结束)
substack:引用其他的配置,把匹配权交给其他配置文件(如果其他配置跳出,则仅仅跳出子匹配)
modules:匹配认证模块
一、什么是nsswithch.conf(服务搜索顺序)文件呢?
nsswitch.conf(name service switch configuration,名字服务切换配置)文件位于/etc目录下,由它规定通过哪些途径以及按照什么顺序以及通过这些途径来查找特定类型的信息,还可以指定某个方法奏效或失效时系统将采取什么动作。
Nsswitch.conf中的每一行配置都指明了如何搜索信息,每行配置的格式如下:
Info: method[[action]] [method[[action]]...]
其中,info指定该行所描述的信息的类型,method为用来查找该信息的方法,action是对前面的method返回状态的响应。action要放在方括号里。
二、nsswitch.conf的工作原理
当需要提供nsswitch.conf文件所描述的信息的时候,系统将检查含有适当info字段的配置行。它按照从左向右的顺序开始执行配置行中指定的方法。在默认情况下,如果找到期望的信息,系统将停止搜索。如果没有指定action,那么当某个方法未能返回结果时,系统就会尝试下一个动作。有可能搜索结束都没有找到想要的信息。
1、信息(Info)
Nsswitch.conf文件通常控制着用户(在passwd中)、口令(在shadow中)、主机IP和组信息(在group中)的搜索。下面的列表描述了nsswitch.conf文件控制搜索的大多数信息(Info项)的类型。
automount: |
自动挂载(/etc/auto.master和/etc/auto.misc) |
bootparams: |
无盘引导选项和其他引导选项(参见bootparam的手册页) |
ethers: |
MAC地址 |
group: |
用户所在组(/etc/group),getgrent()函数使用该文件 |
hosts: |
主机名和主机号(/etc/hosts),gethostbyname()以及类似的函数使用该文件 |
networks: |
网络名及网络号(/etc/networks),getnetent()函数使用该文件 |
passwd: |
用户口令(/etc/passwd),getpwent()函数使用该文件 |
protocols: |
网络协议(/etc/protocols),getprotoent()函数使用该文件 |
publickey: |
NIS+及NFS所使用的secure_rpc的公开密钥 |
rpc: |
远程过程调用名及调用号(/etc/rpc),getrpcbyname()及类似函数使用该文件 |
services: |
网络服务(/etc/services),getservent()函数使用该文件 |
shadow: |
映射口令信息(/etc/shadow),getspnam()函数使用该文件 |
aiases: |
邮件别名,sendmail()函数使用该文件 |
2、方法(method)
下面列出了nsswich.conf文件控制搜索信息类型的方法,对于每一种信息类型,都可以指定下面的一种或多种方法:
files: |
搜索本地文件,如/etc/passwd和/etc/hosts |
nis: |
搜索NIS数据库,nis还有一个别名,即yp |
dns: |
查询DNS(只查询主机) |
compat: |
passwd、group和shadow文件中的±语法(参见本节后面的相关内容) |
3、搜索顺序(从左至右)
两个或者更多方法所提供的信息可能会重叠。举例来说,files和nis可能都提供同一个用户的口令信息。如果出现信息重叠现象,就需要考虑将哪一种方法作为权威方法(优先考虑),并将该方法放在方法列表中靠左的位置上。
默认nsswitch.conf文件列出的方法并没有动作项,并假设没有信息重叠(正常情况)。在这种情况下,搜索顺序无关紧要:当一种方法失败之后,系统就会尝试下一种方法,只是时间上受到一点损失。如果在方法之间设置了动作,或者重叠的项的内容不同,那么搜索顺序就变得重要起来。
例如下面两行nsswitch.conf文件配置行:
passwd files nis
host nis files dns
第一行让系统在/etc/passwd文件中搜索口令信息,如果失败的话,就使用NIS来查找信息。如果正在查找的用户同时出现在这两个地方,就会使用本地文件中的信息,因此它就是权威信息。第二行先使用NIS搜索;如果失败的话,就搜索/etc/hosts文件;如果再次失败的话,核对DNS以找出主机信息。
4、动作项([action])
在每个方法后面都可以选择跟一个动作项,用来指定如果由于某种原因该方法成功抑或失败需要做些什么。动作项的格式如下:
[[!]STATUS =action]
其中,开头和末尾的方括号属于格式的一部分,并不是用来指出括号中的内容是可选的。STATUS(按照约定使用大写字母,但本身并不区分大小写)是待测试的状态,action是如果STATUS匹配前面的方法所返回的状态将要执行的动作。开头的感叹号(!)是可选的,其作用是将状态取反。
STATUS: |
STATUS的取值如下: NOTFOUND:方法已经执行,但是并没有找到待搜索的值。 默认的动作是continue。 SUCCESS:方法已经执行,并且已经找到待搜索的值,没有返回错误。默认动作是return。 UNAVAIL:方法失败,原因是永久不可用。举例来说,所需的文件不可访问或者所需的服务器可能停机。默认的动作是continue。 TRYAGAIN:方法失败,原因是临时不可用。举例来说,某个文件被锁定,或者某台服务器超载。默认动作是continue。 |
action: |
action的取值如下: return:返回到调用例程,带有返回值,或者不带返回值。 continue:继续执行下一个方法。任何返回值都会被下一个方法找到的值覆盖。 |
示例: |
举例来说,下面这行取自nsswitch.conf文件,它的作用是让系统首先使用DNS来搜索给定主机的IP地址。DNS方法后面的动作项是测试该方法所返回的状态是否为“非(!)UNAVAIL”。 hosts dns [!UNAVAIL=return] files 如果DNS方法没有返回UNAVAIL(!UNAVAIL),也就是说DNS返回SUCCESS、NOTFOUND或者TRYAGAIN,那么系统就会执行与该STATUS相关的动作(return)。其结果就是,只有在DNS服务器不可用的情况下才会使用后面的方法(files)。 如果DNS服务器并不是不可用(两次否定之后就是“可用”),那么搜索返回域名或者报告未找到域名。只有当服务器不可用的时候,搜索才会使用files方法(检查本地的/etc/hosts文件)。 |
5、compat方法:passwd、group和shadow文件中的"±"
可以在/etc/passwd、/etc/group和/etc/shadow文件中放入一些特殊的代码,(如果在nsswitch.conf文件中指定compat方法的话)让系统将本地文件和NIS映射表中的项进行合并和修改。
在这些文件中,如果在行首出现加号'+',就表示添加NIS信息;如果出现减号'-',就表示删除信息。举例来说,要想使用passwd文件中的这些代码,可以在nsswitch.conf文件中指定passwd: compat。然后系统就会按照顺序搜寻passwd文件,当它遇到以+或者 开头的行时,就会添加或者删除适当的NIS项。
虽然可以在passwd文件的末尾放置加号,在nsswitch.conf文件中指定passwd: compat,以搜索本地的passwd文件,然后再搜寻NIS映射表,但是更高效的一种方法是在nsswitch.conf文件中添加passwd: file nis而不修改passwd文件。
组管理:groupadd, groupdel, groupmod, gpasswd, newgrp, groupmems
FILES
/etc/group
Group account information.
/etc/gshadow
Secure group account information.
组分类:
管理员组:root
普通用户组:
系统用户组:
按照用户分类:
管理员组:root
基本组:初始化的组
附加组:有效组
关于组的配置文件:
/etc/group:
第一列:组的名字
第二列:组的密码区域
第三列:组的ID号(GID)
第四列:组中的成员
/etc/gshadow:
第一列:组的名字
第二列:组的密码
第三列:组的管理员
第四列:组成员列表
groupadd:创建一个新的组,并设置组的一些信息
语法:groupadd [options] group
-d:创建组时指定组的ID
-r:添加一个系统组
groupdel:删除一个组
默认情况下,不能删除一个用户的基本组,可以通过修改用户的基本组后删除该组,可以删除用户的同时,系统会删除同名基本组(且该组只能是该用户的基本组的时候才能删除)
groupmod:修改组属性
-g:修改组的GID号
-n:为组重命名
gpasswd:为组设置密码,设置组的管理员,添加组成员
语法:gpasswd [option] group
-A:为组设置管理员
-M:把一些用户添加组中,用逗号隔开(普通用户)
-r:为组移除密码
-R:让组的密码失效
-a:为组添加成员(组的管理员操作命令)
-d:删除组成员(组的管理员操作命令)
group_name:修改组的密码
newgrp:为shell设置有效组(只在当前shell中生效)
exit:退出newgrp
groupmems:为组添加成员,显示组成员列表
针对新的Centos7系统进行如下配置
# yum -y install vim make cmake man man-pages mlocate sysstat net-tools
# yum -y groupinstall "Development tools"
# mandb //生成whatis数据库
# updatedb //生成locate数据库
# vim /etc/selinux/config
SELINUX=disabled
用户管理:useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
useradd:
useradd [options] LOGIN
useradd -D
useradd -D [options]
-c:为用户添加描述信息
-d:指定用户的宿主目录(默认宿主目录在/home目录)
-D:查看和改变默认的值(修改/etc/default/useradd文件中的值)
-g:修改组
-b:修改宿主目录
-f:修改过期是否停用
-e:修改过期 时间
-s:修改默认shell
-e:新建用户时,设置用户默认的过期时间,时间格式为:YYYY-MM-DD
-g:指定用户的基本组(没有该选项,Linux新建用户时,会新建一个同名组作为用户的基本组)
-G:新建用户时指定用户的附加组,附加组可以有多个,用逗号隔开
-m:创建宿主目录,和-k一起使用
-M:创建用户时,不为用户创建宿主目录
-p:创建用户时,为用户设置加密的密码(不推荐使用)
-r:创建系统用户(不创建宿主目录,UID和GID使用系统用户ID)
-s:指定默认的shell(系统支持的shell)
-u:指定用户的UID
passwd:为用户设置密码/锁定解锁用户/查看状态
语法:passwd [options] user_name
root用户可以为普通用户设置密码
-l:锁定用户(暂时无法登陆系统)
-u:解锁用户
-S:查看用户状态,显示/etc/shadow文件中各个字段的内容,按/etc/shadow文件中列的含义显示
--stdin:标准输入,经常用在shell脚本编程中为用户自动设置密码
-d:删除用户密码,允许普通用户以空密码登录(不建议使用)
-e:设置用户密码过期,用户再次登录时,需要修改密码
-n:设置密码最小使用期限,修改/etc/shadow中第四列
-x:设置密码最大使用期限,修改/etc/shadow中第五列
-w:设置密码过期前的警告时间,修改/etc/shadow第六列
-i:修改过期后的宽限时间,修改/etc/shadow第七列
普通用户设置密码时,先验证当前密码,符合密码策略
root用户设置密码时,不需要验证当前密码,并且也可以不要求符合密码策略
userdel:删除用户(修改/etc/passwd /etc/shadow /etc/group文件)
语法:userdel [options] user_name
-r:删除用户时,连同删除用户的宿主目录
usermod:修改用户属性(修改/etc/passwd中内容)
语法:usermod [options] user_name
-c:更改用户的描述信息
-d:更改用户的宿主目录
-e:更改用户的过期时间,格式YYYY-MM-DD
-f:修改/etc/shadow第七列内容
-g:修改用户的基本组
-G:修改用户的附加组
-l:修改用户的登录名
-s:修改用户的shell(系统支持的shell程序)
-L(大写):锁定用户
-U(大写):解锁用户
chsh:修改用户的shell
语法:chsh [options] user_name
-s:后面跟shell,更改用户的shell
-l:显示当前系统支持的shell(/etc/shells)
finger:显示用户的基本信息
finger [options] user_name
chfn:修改用户的基本信息,change finger
语法:chfn [options] user_name
-o:修改办公室
-p:修改办公室电话号码
-h:修改家庭电话号码
-f:修改用户名
id:显示用户和组的ID
语法:id [options] user_name,不指定user_name,默认为当前登录用为
-a:忽略其他版本区别
-Z(大写):显示安全上下文内容(selinux),--context (-Z) works only on an SELinux-enabled kernel
-g:显示有效组的ID
-G:显示所有组的ID
-n:不显示组号,显示名字
-r:显示用户实际ID
-u:仅显示有效用户ID
chage:修改用户密码的时间信息(/etc/shadow)
语法:chage [options] user_name
-l(L):列出用户的详细的密码参数
-d:修改/etc/shadow第三列内容,后面跟日期,格式YYYY-MM-DD
-E:修改/etc/shadow第八列内容,后面跟日期,格式YYYY-MM-DD
-I:修改/etc/shadow第七列内容,后面跟天数
-m:修改/etc/shadow第四列内容,后面跟天数
-M:修改/etc/shadow第五列内容,后面跟天数
-W:修改/etc/shadow第六列内容,后面跟天数
针对新的Centos7系统进行如下配置
# yum -y install vim make cmake man man-pages mlocate sysstat net-tools
# yum -y groupinstall "Development tools"
# mandb //生成whatis数据库
# updatedb //生成locate数据库
# vim /etc/selinux/config
SELINUX=disabled
用户管理:useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
useradd:
useradd [options] LOGIN
useradd -D
useradd -D [options]
-c:为用户添加描述信息
-d:指定用户的宿主目录(默认宿主目录在/home目录)
-D:查看和改变默认的值(修改/etc/default/useradd文件中的值)
-g:修改组
-b:修改宿主目录
-f:修改过期是否停用
-e:修改过期 时间
-s:修改默认shell
-e:新建用户时,设置用户默认的过期时间,时间格式为:YYYY-MM-DD
-g:指定用户的基本组(没有该选项,Linux新建用户时,会新建一个同名组作为用户的基本组)
-G:新建用户时指定用户的附加组,附加组可以有多个,用逗号隔开
-m:创建宿主目录,和-k一起使用
-M:创建用户时,不为用户创建宿主目录
-p:创建用户时,为用户设置加密的密码(不推荐使用)
-r:创建系统用户(不创建宿主目录,UID和GID使用系统用户ID)
-s:指定默认的shell(系统支持的shell)
-u:指定用户的UID
Linux实现权限隔离机制(多用户)
操作系统识别用户:
用户:UID
组:GID(逻辑容器:包含用户;实现多个用户对于某个文件或应用程序分配相同的权限)
用户分类:
管理员用户:root UID:0
普通用户:1000-65535
程序(系统)用户:1-999
组分类:
管理员组/普通组
基本组:Linux中,新建用户时,没有指定隶属于的组,系统会为该用户建立一个同名组,作为该用户基本组
附加组:方便以后为用户分配权限
解析:
/etc/passwd:存储用户基本信息
/etc/shadow:存储用户的影子口令
/etc/group:存放组的基本信息
/etc/passwd解释:用冒号隔开
第一列:用户的登录名
第二列:加密密码(x表示密码占位符,密码保存在/etc/shadow中)
第三列:用户的ID号
第四列:组的ID号
第五列:用户的描述信息
第六列:用户宿主目录
第七列:用户默认使用的shell(操作系统支持的shell:/etc/shells)
/etc/shadow解释:用冒号隔开(man 5 shadow)
第一列:用户的登录名
第二列:用户加密后的密码
第三列:最后一次更改密码时间(从1970年1月1号)
第四列:密码最小使用时间
第五列:密码最长使用时间
/etc/shadow密码区域解释(格式:$id$salt$encrypted):
三部分组成:用$隔开
第一部分加密算法:
1:MD5加密
5:SHA-256加密
6:SHA-512加密
第二部分:随机序列号
第三部分:随机序列号和密码共同加密后的字符串
加密算法:
对称加密:加密和解密使用相同的密码(效率高)
非对称加密:加密和解密使用不同的秘钥,公钥和私钥
单向加密,散列加密:提取数据的特征码,常用于数据完整性校验
1:不可逆
2:定长输出
md5: 128位定长输出
sha: 160位 224位 256 位 384位 512位
3:雪崩效应:输入数据一小点儿的变化,会引起结果的巨大变化
file:查看文件类型(windows是用扩展名识别文件类型)
语法:file [options] [args]
-b:显示结果时,不显示文件名
-c:显示执行file命令的执行过程(file是如何去判断文件类型),便于排错或分析file命令执行过程
-i:输出MIME类型的字符串
-z:显示压缩文件的内容
-L:查看软链接对应文件的类型
-f:查看文件中文件名的类型
cat:一次性查看整个文件
语法:cat [options] [args]
从键盘输入创建一个新文件或向现有文件中添加新数据:
新建新文件:cat >new_file_name <<EOF //EOF:end of file
向现有文件中追加数据:
cat >> file_name << EOF
把多个文件内容合并到一个文件输出:
cat file1 file2 > file3
-n:显示文件内容时同时显示行号,包括空行
-b:和-n功能相同,但不包括空行
-S:当文件中有多个空行时,合并为一个空行
-E:在显示内容时,结尾添加$符号
cp:复制文件或目录(copy简写)
语法:cp [options] [src_file] [des_file]
-f:force,强制复制文件或目录不进行提示
-r:递归复制目录
-s:为某个文件创建符号链接(软链接),而不是复制文件
-b:覆盖已有的文件前,对目标文件进行备份
-l:为文件创建硬链接,而不是复制文件
-p:复制文件时保留文件的原有属性
-d:当复制软链接文件时,把目标文件或目录也会创建为软链接,并指向最原始的文件
-i:覆盖目标文件前询问(cp = cp -i)
mv:move,移动或从命名文件和目录(当原位置和目标位置是同一目录时,是重命名;当原位置和目标位置不是同一目录时,是移动)
-b:移动前先对源文件进行备份
-f:强制覆盖
-i:覆盖目标文件前询问
-t:将多个文件移动同一个目录(目标目录在前面,后面跟文件 mv -t [directory] file1 file2 ...)
rm:remove,删除文件或目录
-d:删除可能存在数据的目录
-f:强制删除
-i:删除前进行询问
-r:递归删除整个目录
-v:显示命令执行过程
mkdir:make directory,创建空目录
-m:创建目录时同时设置权限
-p:递归创建新目录
-v:显示创建目录的过程
touch:创建新文件或者修改文件时间戳
-a:只改变访问时间
-c:不创建文件
-d:使用指定时间戳创建新文件,而不是使用系统时间
-t:使用指定格式时间戳创建新文件,而不是使用系统时间
-f:解决与BSD系列Unix系统兼容性
-m:只更改变动时间
tree:查看目录树(tree = ls -R)
which:查找命令所在的路径
whereis:查看命令所在的路径,源代码文件,帮助信息文件所在的文件
-b:只查看文件所在的位置(等同于which命令)
-m:只查看帮助信息所在的位置
-s:支持看源代码所在的位置
查找文件命令:locate
非实时性,根据自己的数据库查找文件,CentOS每天更新一次数据库,安装完locate后,生成/var/lib/mlocate目录,存放数据库
模糊匹配
/var/lib/mlocate/mlocate.db //locate工具的数据库
# yum -y install mlocate //安装locate工具
# locate file_name
# updatedb //更新locate数据库
查看文本文件内容命令:cat more less head tail
Linux和Windows中文件内容行尾标记是不同的:
Linux中是以$为结尾
Windows中是以ENTER键结尾
cat:一次性查看文件内容
more:可以翻页查看文本文件内容
enter键:向下翻一行
空格键:向下翻一屏
ctrl+b:向上翻一屏
ctrl+f:向下翻一屏
=:显示当前的行号
v:调用vi编辑器
!command:调用shell执行命令
q:退出more命令
# more +num file_name //从num行开始查看文件内容
less:可以翻页查看文本文件内容
enter键:向下翻一行
空格键:向下翻一屏
pagedown:向下翻一屏
pageup:向上翻一屏
上下方向键:向上/向下翻一行
/word:在该文件中查找word关键字
n:查找下一个
N:查找上一个
管道:连接多条命令,前一条命令输出结果作为后一条命令的输入条件, 管道符 |
head:默认查看文件文件的前十行
-n:查看文件文件前n行
tail:默认查看文本文件的后十行
-n:查看文本文件的后n行
-f:动态查看文本文件内容,如动态查看日志: tail -f /var/log/messages
FHS标准:
FHS定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如/etc应该要放置设置文件,/bin与/sbin则应该要放置可执行文件等等。因为Linux的开发人员实在太多了,如果每个人都使用自己的目录配置方法,那么将可能会带来很多管理问题。你能想象,你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗?很难想象。所以,后来就有所谓的文件系统层次标准(Filesystem Hierarchy Standard,FHS)出台。
第二层则是针对/usr及/var这两个目录的子目录来定义。例如/var/log放置系统登录文件、/usr/share放置共享数据等等。
根文件文件系统(/):rootfs:root filesystem
/bin:二进制,存放命令
/boot:存放启动和内核相关文件
/dev:存放设备文件
/etc:存放应用程序的配置文件
/home:普通用户的家目录,默认为/home/USERNAME
/lib和/lib64:存放系统开机时需要用的函数库及/bin和/sbin命令调用函数库
/lib/modules:存放内核相关的模块(驱动程序等)
/media和/mnt:挂载点,/media挂载移动设备 /mnt挂载临时设备
/opt:第三方软件存放目录(用户自行安装的软件存放处),现在一般安装到/usr/local下
/proc:伪文件系统,数据存放在内存中,存放关于进程的相关信息
/root:管理员的家目录
/sbin:存放管理员使用的命令
/srv:service缩写,存放服务数据目录,如可以把www服务的网页存放到该目录
/tmp:存放临时文件,所有用户都可以访问创建文件,但是每个用户只能删除自己的文件
/sys:伪文件系统,存放在内存中,记录内核相关的信息,包括目前加载内核模块和内核检测到的硬件设备等
/usr:UNIX software resource:存放安装的应用程序
/usr/bin:普通用户使用的命令(和/bin区别是否与开机有关)
/usr/sbin:网络服务器命令
/usr/lib和/usr/lib64:包含各种应用程序函数库
/usr/share:存放共享文件目录(在线帮助文件,杂项,时区文件等)
/usr/include:存放头文件
/usr/src:释放源代码目录
/var:vary缩写,存放经常变动的文件,比如日志,mail等
/var/cache:存放应用程序运行时产生的缓存文件
/var/lib:程序运行时,需要使用的数据文件的存放目录
/var/lock:设备或资源一次只能被一个应用程序使用,如果多应用程序会产生错误,因为要为设备或资源上锁(存放锁文件)
/var/log:存放日志目录(系统,用户登录,服务日志等)
/var/mail:存放个人电子邮件(系统报警产生邮件信息等)
/var/run:存放应用程序运行时PID文件(进程号.pid结尾)
/var/spool:存放队列数据,排队等待其他用户程序使用的数据,数据通常使用完成后会被删除
man目录说明
1:User Commands:普通用户命令(/bin;/usr/bin ;/usr/local/bin):binary二进制
2:System Calls:系统调用库
3:C Library Functions:库调用
4:Devices and Special Files:设备或特殊文件(硬件设备)(硬件设备存放在/dev)
5:File Formats and Conventions:查看配置文件格式
6:Games et. Al.:游戏
7:Miscellanea:杂项
8:System Administration tools and Deamons:管理命令(/sbin;/usr/sbin ;/usr/local/sbin)sbin:secret binary
man手册页目录:/usr/share/doc(工作中主要是查看内核信息)
<>:必须使用的选项或参数,不可以省略
[]:可是省略的选项或参数
...:可以使用多个选项或参数
|:代表多选一
{}:分组,没有特殊意义
which:查看命令所在的路径
whatis:查看命令所属帮助信息目录,该命令在系统启动大约70分钟后会生成whatis的数据库,如果时间太短,该命令不会执行,我们可以使用makewhatis(CentOS 6)初始化该命令,在CentOS 7中使用mandb命令
cd:change directory(切换目录)
cd:不加选项,返回到当前用户的宿主目录
-:返回到上一次的工作路径
~username:切换到username的宿主目录
Linux命令分类:
内部命令:shell自带的命令
外部命令:在Linux文件系统中存在一个应用程序
查看Linux命令类型:
type 命令
buildin关键字说明该命令是内部命令
/bin/mkdir:有路径显示(外部命令)
ls -l:
-l(--long):以长格式显示
-rw-------. 1 root root 1207 Nov 6 18:51 anaconda-ks.cfg
第一位:文件类型
-:代表普通文件(file)
d:代表目录(directory)
b:块设备(block):如硬盘,U盘等
c:字符设备(char):如键盘等
s:套接字文件(socket)
p:命名管道(pipe)
l:符号链接文件(symbolic link file )
第二到十位:权限位(rwx:读写执行)
234位:文件属主权限(owner)
567位:文件属组权限(group)
8910位:其他用户权限(other)
1:代表文件硬链接的次数
第一个root:代表文件属主(owner)
第二个root:代表文件属组(group)
1207:文件的大小
Nov 6 18:51:文件最后被访问的时间戳(stat命令查看文件时间戳)
文件的时间戳:
access:访问的时间戳
Modify:文件被修改时间戳(修改文件数据:添加删除数据等)
change:文件被更改时间戳(更改文件属性)
查看时间戳等信息:
stat 文件名
环境变量:内存中的命名空间
PATH变量:存放系统命令路径,以冒号隔开
查看PATH变量:echo $PATH(Linux命令严格区分大小写)
如果在以$PATH的路径中(命令为外部命令)没有找到相关命令,提示用户command not found
如果一个命令在以上多个路径中存在,系统会按照从前往后的顺序查找,查找到该命令后,后面的路径的不再查找
hash:查看命令缓存及命中率
分布式服务器远程连接工具:Xshell、CRT
Shell的作用:
Shell字面理解就是个“壳”,是操作系统(内核)与用户之间的桥梁,充当命令解释器的作用,将用户输入的命令翻译给系统执行。Linux中的shell与Windows下的DOS一样,提供一些内建命令(shell命令)供用户使用,可以用这些命令编写shell脚本来完成复杂重复性的工作。shell中输入命令,shell把命令传递给内核,内核把命令结果反馈给shell,人从shell中读取命令执行结果
内核:图形界面/字符界面
linux图形界面:
GNOME:linux默认图形界面,C语言开发
KDE:C++开发
xface:简化的、轻量级的图形界面
linux支持的shell:(具体介绍见文末)
bash:linux默认支持的shell
ksh: Korn shell是Bourne shell 的超集(superset)
csh: C shell 是柏克莱大学(Berkeley)所开发的,且加入了一些新特性
内核的作用:
进程管理
内存管理
文件系统
网络功能
硬件驱动
安全功能
linux设计思想:
1:有很多的小程序组成,每个小程序完成单一的功能,实现复杂的任务(http服务需要安装很多小组件)
2:一切皆文件:所有的外围设备(硬件)或者其他程序
3:尽量避免捕获用户接口,中间通过shell为桥梁
4:配置文件保存为纯文本格式(可以用文本编辑器编辑 vim)
Linux终端:适应多用户多任务系统
6个终端切换:ctrl+alt+F1-F6
退出当前终端:exit
Linux界面:
GUI:graphical user interface,图形用户接口(图形界面),切换图形界面:ctrl+alt+F7
CLI: command line interface,命令行接口(字符界面)
切换用户:
su(switch user)
su命令:当root用户切换到普通用户时,不需要普通用户的密码;而当普通用户切换到root用户时,需要提供root用户密码
# su user_name
$ exit 退出当前用户
Linux命令格式:
命令字 [选项] [参数]:中括号表示可以省略
命令字:唯一的,实现某一项功能
选项:修改命令的执行方式(实现特定功能)
长选项:--引导,是一个单词(多个长选项不能组合)
短选项:-引导,是一个字符(多个短选项可以组合)
参数:命令作用的对象
3A认证:
authentication:认证机制
authorization:授权机制
audition:审计机制
三种主要的shell:
在大部份的UNIX系统,三种著名且广被支持的shell 是Bourne shell(AT&T shell,在 Linux 下是BASH)、C shell(Berkeley shell,在 Linux 下是TCSH)和 Korn shell(Bourne shell的超集)。这三种 shell 在交谈(interactive)模式下的表现相当类似,但作为命令文件语言时,在语法和执行效率上就有些不同了。
除了执行效率稍差外,Korn shell 在许多方面都比 Bourne shell 为佳;但是,若将 Korn shell 与 C shell 相比就很困难,因为二者在许多方面都各有所长,就效率和容易使用上看,Korn shell 是优于 C shell,相信许多使用者对于 C Shell 的执行效率都有负面的印象。
在shell 的语法方面,Korn shell 是比较接近一般程序语言,而且它具有子程序的功能及提供较多的资料型态。至于 Bourne shell,它所拥有的资料型态是三种 shell 中最少的,仅提供字符串变量和布尔型态。在整体考量下 Korn shell 是三者中表现最佳者,其次为 C shell,最后才是 Bourne shell,但是在实际使用中仍有其它应列入考虑的因素,如速度是最重要的选择时,很可能应该采用 Bourne shell,因它是最基本的 shell,执行的速度最快。