命令格式与目录处理命令ls
命令格式
命令格式:命令 [-选项][参数] 例:ls -la /etc 说明:1) 个别命令使用不遵循此格式 2) 当有多个选项时,可以写在一起 3) 简化选项与完整选项 -a 等于 --all
目录处理命令ls
命令名称:ls 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 功能描述:显示目录文件 语法:ls 选项[-ald][文件或目录] -a 显示所有文件,包括隐藏文件 -l 详细信息显示 -d 查看目录属性 文件权限标志 -rw-r--r-- --> 文件类型(-文件 d目录 l软链接文件) --> rw-- r-- r-- u g o u所有者 g所属组 o其他人 r读 w写 x执行
目录处理命令:mkdir
命令名称:mkdir 命令英文原意:make directories 命令所在路径:/bin/mkdir 执行权限:所有用户 语法:mkdir -p [目录名] 功能描述:创建新目录 -p 递归创建 示例: #递归增加文件夹 [root@localhost ~]# mkdir -p /tmp/Japan/boduo #一次创建多个文件夹 [root@localhost ~]# mkdir /tmp/Japan/longze /tmp/Japan/cangjing
目录处理命令:cd
命令名称:cd 命令英文原意:change directory 命令所在路径:shell内置命令 执行权限:所有用户 语法:cd [目录] 功能描述:切换目录 #示例: [root@localhost ~]#cd /tmp/Japan/boduo 切换到指定目录 [root@localhost ~]#cd .. 回到上一级目录
目录处理命令:pwd
命令名称:pwd 命令英文原意:print working directory 命令所在路径:/bin/pwd 执行权限:所有用户 语法:pwd 功能描述:显示当前目录 #示例: [root@localhost Japan]#pwd /tmp/Japan
文件处理命令:rmdir
命令名称:rmdir 命令英文原意:remove empty directories 命令所在路径:/bin/rmdir 执行权限:所有用户 语法:rmdir [目录名] 功能描述: 删除空目录(注意是空目录,里面什么都木有) #示例: [root@localhost Japan]#rmdir /tmp/Japan/boduo
目录处理命令:cp
命令名称:cp 命令英文原意:copy 命令所在路径:/bin/cp 执行权限:所有用户 语法:cp -rp [原文件或目录] [目标目录] -r 复制目录 -p 保留文件属性 功能描述:复制文件或目录 #示例: #将目录/tmp/Japan/cangjing复制到目录/root下 [root@localhost Japan]#cp -r /tmp/Japan/cangjing /root #将/tmp/Japan目录下的boduo和longze目录复制到/root下,保持目录属性 [root@localhost Japan]# cp -rp /tmp/Japan/boduo /tmp/Japan/longze /root
目录处理命令:mv
命令名称:mv 命令英文原意:move 命令所在路径:/bin/mv 执行权限:所有用户 语法:mv [原文件或目录] [目标目录] 功能描述:剪切文件、改名 #示例: #将Japan目录下的子目录boduo改名为canglaoshi [root@localhost Japan]# mv boduo canglaoshi #将Japan目录下的子目录canglaoshi移动到/temp目录下 [root@localhost Japan]# mv canglaoshi /temp
目录处理命令:rm
命令名称:rm 命令英文原意:remove 命令所在路径:/bin/rm 执行权限:所有用户 语法:rm -rf [文件或目录] -r 删除目录(递归删除) -f 强制执行 功能描述:删除文件(不询问,直接删除) #注意 #自杀 (绝对不能使用!!!) [root@localhost ~]# rm -r /* #删除当前目录下所有文件 [root@localhost temp]# rm -r * #示例: #删除文件/tmp/yum.log [root@localhost ~]# rm /tmp/yum.log rm: remove regular empty file `/tmp/yum.log'? 输入y(yes删除) or n(no取消删除) #删除目录/tmp/Japan/longze(不询问,直接删除) [root@localhost ~]# rm -rf /tmp/Japan/longze
权限管理命令
权限管理命令:chmod
命令名称:chmod 命令英文原意:change the permissions mode of a file 命令所在路径:/bin/chmod 执行权限:所有用户 语法:chmod [{ugoa}{+-=}{rwx}] [文件或目录] [mode=421 ] [文件或目录] -R 递归修改 功能描述:改变文件或目录权限 权限的数字表示 r 4 w 2 x 1 rwxrw-r-- 7 6 4 #示例: [root@localhost ~]# chmod g+w testfile 赋予文件testfile所属组写权限 [root@localhost ~]# chmod -R 777 testdir 修改目录testfile及其目录下文件为所有用户具有全部权限
文件目录权限总结
代表字符 权限 对文件的含义 对目录的含义 r 读权限 可以查看文件内容 可以列出目录中 的内容 w 写权限 可以修改文件内容 可以在目录中创建、删除文件 x 执行权限 可以执行文件 可以进入目录
权限管理命令:chown
命令名称:chown 命令英文原意:change file ownership 命令所在路径:/bin/chown 执行权限:所有用户 语法:chown [用户] [文件或目录] 功能描述:改变文件或目录的所有者 #示例: #改变文件demo的所有者为zhangsan [root@localhost ~]# chown zhangsan demo
权限管理命令:chgrp
命令名称:chgrp 命令英文原意:change file group ownership 命令所在路径:/bin/chgrp 执行权限:所有用户 语法:chgrp [用户组] [文件或目录] 功能描述:改变文件或目录的所属组 #示例: #改变文件demo的所属组为lampbrother [root@localhost ~]# chgrp lampbrother demo
权限管理命令:umask
命令名称:umask 命令英文原意:the user file-creation mask 命令所在路径:Shell内置命令 执行权限:所有用户 语法:umask [-S] -S 以rwx形式显示新建文件缺省(默认)权限 功能描述:显示、设置文件的缺省权限 示例: [root@localhost ~]# umask -S u=rwx,g=rx,o=rx
关机重启命令
shutdown命令(推荐)
[root@localhost ~]#shutdown [选项] 时间 选项: -c: 取消前一个关机命令 -h: 关机 -r: 取消前一个关机命令
其他关机命令
[root@localhost ~]#halt [root@localhost ~]#poweroff [root@localhost ~]#init 0
其他重启命令
[root@localhost ~]#reboot [root@localhost ~]#init 6
系统运行级别
0 关机 1 单用户 2 不完全多用户,不含NFS服务 3 完全多用户 4 未分配 5 图形界面 6 重启 [root@localhost ~]#cat /etc/inittab #修改系统默认运行级别 id:3:initdefault: #查询系统运行级别 [root@localhost ~]#runlevel
退出登录命令
#注销用户 [root@localhost ~]#logout #退出控制台 [root@localhost ~]#exit #logout和exit的区别 logout 注销用户 exit 退出控制台,对于多层shell,用于逐层退出,到最顶层shell,作用就和logout相同。 如果没有切换过用户的话,这两个命令都是退出控制台了。 如果切换过用户的话,这两个命令都是注销当前用户,返回上一个用户
链接命令
ln链接命令
命令名称:ln 命令英文原意:link 命令所在路径:/bin/ln 执行权限:所有用户 语法: ln -s [原文件] [目标文件] -s 创建软链接 ln 创建硬链接 功能描述:生成链接文件 示例 #创建文件/etc/issue的软链接/tmp/issue.soft [root@localhost ~]#ln -s /etc/issue /tmp/issue.soft #创建文件/etc/issue的硬链接/tmp/issue.hard [root@localhost ~]#ln /etc/issue /tmp/issue.hard
软链接和硬链接的区别
#软链接特征:类似Windows快捷方式 1、lrwxrwxrwx l 软链接 软链接文件权限都为rwxrwxrwx 2、文件大小-只是符号链接 3、/tmp/issue.soft -> /etc/issue 箭头指向原文件 #硬链接特征: 1、拷贝cp -p + 同步更新 echo "this is a test" >> /etc/motd 2、可通过i节点识别 3、不能跨分区 4、不能针对目录使用
文件处理命令
touch创建文件命令
命令名称:touch 命令所在路径:/bin/touch 执行权限:所有用户 语法: touch [文件名] 功能描述:创建空文件 #示例: [root@localhost ~]#touch demo.txt
cat查看文件内容命令
命令名称:cat 命令所在路径:/bin/cat 执行权限:所有用户 语法: cat [文件名] 功能描述:显示文件内容 -n 显示行号 #示例: [root@localhost ~]#cat demo.txt hello! linux [root@localhost ~]#cat -n demo.txt 1 hello! 2 linux
more查看长文件内容命令
命令名称:more 命令所在路径:/bin/more 执行权限:所有用户 语法: more [文件名] (空格)或f 翻页 (Enter) 换行 q或Q 退出 功能描述:分页显示文件内容 示例: [root@localhost ~]#more /etc/services
less查看长文件内容命令
命令名称:less 命令所在路径:/usr/bin/less 执行权限:所有用户 语法: less [文件名] 功能描述:分页显示文件内容(可向上下翻页↑↓) 示例: [root@localhost ~]#less /etc/services
head查看文件前几行命令
命令名称:head 命令所在路径:/usr/bin/head 执行权限:所有用户 语法: head [文件名] 功能描述:显示文件前面几行 -n 指定行数 示例: [root@localhost ~]#head -n 20 /etc/services
tail查看文件后面几行命令(动态日志查看)
命令名称:tail 命令所在路径:/usr/bin/tail 执行权限:所有用户 语法: tail [文件名] 功能描述:显示文件后面几行 -n 指定行数 -f 动态显示文件末尾内容 示例: [root@localhost ~]#tail -n 20 /etc/services [root@localhost ~]#tail -f /tomcat/logs/catalina.out
vim编辑器
vim常用操作
vim简介
vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。
vim没有菜单,只有命令
vim工作模式
插入命令
命令 作用
a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在光标所在行行首插入
o 在光标下插入新的一行
O 在光标上插入新的一行
定位命令
命令 作用
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
$ 移至行尾
0 移至行首
删除命令
命令 作用
x 删除光标所在处的字符
nx 删除光标所在处后n个字符
dd 删除光标所在行,ndd删除n行
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾内容
n1,n2d 删除指定范围的行
复制和剪切命令
命令 作用
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p 粘贴在当前光标所在行下
P 粘贴在当前光标所在行上
替换和取消命令
命令 作用
r 取代光标所在处字符
R 从光标所在处开始替换字符,按Esc结束
u 取消上一步操作
搜索和搜索替换命令
命令 作用
/string 搜索指定字符串
搜索时忽略大小写:set ic
n 搜索指定字符串的下一个出现位置
:%s/old/new/g 全文替换指定字符串
:n1,n2s/old/new/g 在指定范围内替换指定字符串
保存和退出命令
命令 作用
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键,保存修改并退出
:q! 不保存修改退出
:wq! 强制保存修改并退出(文件所有者及root可使用)
vim使用技巧
-
导入文档中的内容 r 文件名
示例:r demo.txt
-
导入命令执行结果:r !命令
示例:r !date
2017年 07月 17日 星期一 10:14:36 CST
-
自定义快捷键:map 快捷键 触发命令 (命令可以任意组合)
示例:map ^P I#<ESC> 注释
:map ^B 0x 取消注释
-
连续行注释:n1,n2s/^/#/g
:n1,n2s/^#//g
:n1,n2s/^/\/\/g //(java中的单行注释)
-
替换:ab syso System.out.println(""); (eclipse中快捷键syso)
-
自定义快捷键,电脑重启之后,设置的快捷键需要重新设置,如果需要自定义的编辑模式永久生效,需要在用户根目录(root用户[/root] 普通用户[/home/fei])配置.vimrc文件
示例:cd ~ 打开根目录
touch .vimrc 创建配置文件
vim .vimrc 编辑配置文件
set nu 显示行号
map ^P I#<ESC> 注释
:wq 退出并保存
软件包管理简介
1、软件包分类
-
源码包
脚本安装包
-
二进制包
RPM包
系统默认包
2、源码包
源码包的优点:
-
开源,如果有足够的能力,可以修改源码
-
可以自由选择所需的功能
-
软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
-
卸载方便
源码包的缺点:
-
安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
-
编译过程时间较长,安装比二进制安装时间长
-
因为是编译安装,安装过程中一旦报错新手很难解决
3、RPM包
二进制包的优点:
-
包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
-
安装速度比源码包安装快的多
二进制包的缺点
-
经过编译,不再可以看到源代码
-
功能选择不如源码包灵活
-
依赖性
RPM包管理-rpm命令管理
1、RPM包命名规则
举例:httpd-2.2.15-15.el6.centos.1.i686.rpm httpd 软件包名 2.2.15 软件版本 15 软件发布的次数 el6.centos 适合的Linux平台 i686 适合的硬件平台 rpm rpm包扩展名
2、RPM包依赖性
-
树形依赖:a→b→ c
-
环形依赖:a→b→c→a
-
模块依赖:模块依赖查询网站
www.rpmfind.net
3、包全名与包名
#包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径 #包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库
4、RPM安装
rpm -ivh 包全名 选项: -i(install) 安装 -v(verbose) 显示详细信息 -h(hash) 显示进度 --nodeps 不检测依赖性
5、RPM包升级
rpm -Uvh 包全名 选项: -U(upgrade) 升级
6、卸载
rpm -e 包名 选项: -e(erase) 卸载 --nodeps 不检查依赖性
7、查询是否安装
[root@localhost ~]# rpm -q 包名 #查询包是否安装 选项: -q 查询(query) [root@localhost ~]# rpm –qa #查询所有已经安装的RPM包 选项: -a 所有(all)
8、查询软件包详细信息
[root@localhost ~]# rpm –qi 包名 选项: -i 查询软件信息(information) -p 查询未安装包信息(package)
9、查询包中文件安装位置
[root@localhost ~]# rpm –ql 包名 选项: -l 列表(list) -p 查询未安装包信息(package)
10、查询系统文件属于哪个RPM包
[root@localhost ~]# rpm –qf 系统文件名 选项: -f 查询系统文件属于哪个软件包(file)
11、RPM包校验
[root@localhost ~]# rpm –V 已安装的包名 选项: -V 校验指定RPM包中的文件(verify) #验证内容中的8个信息的具体内容如下: S 文件大小是否改变 M 文件的类型或文件的权限(rwx)是否被改变 5 文件MD5校验和是否改变(可以看成文件内容是否 改变) D 设备的中,从代码是否改变 L 文件路径是否改变 U 文件的属主(所有者)是否改变 G 文件的属组是否改变 T 文件的修改时间是否改变
#文件类型 1 c 配置文件(config file) 2 d 普通文档(documentation) 3 g “鬼”文件(ghost file),很少见,就是该文件不 应该被这个RPM包包含 4 l 授权文件(license file) 5 r 描述文件(read me)
12、RPM包中文件提取
[root@localhost ~]# rpm2cpio 包全名 | \ cpio -idv .文件绝对路径 #将rpm包转换为cpio格式的命令 rpm2cpio #是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件 cpio [root@localhost ~]# cpio 选项 < [文件|设备] #选项: -i:copy-in模式,还原 -d:还原时自动新建目录 -v:显示还原过程 #示例 #查询ls命令属于哪个软件包 [root@localhost ~]# rpm -qf /bin/ls #将ls命令移动到/tmp文件夹,造成ls命令误删除假象 [root@localhost ~]# mv /bin/ls /tmp/ #提取RPM包中ls命令到当前目录的/bin/ls下 [root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils- 8.4-19.el6.i686.rpm | cpio -idv ./bin/ls #把ls命令复制会/bin/目录,修复文件丢失 [root@localhost ~]# cp /root/bin/ls /bin/
RPM包管理-yum在线管理
1、IP地址配置和网络yum源
1.1 IP地址配置
[root@localhost ~]# setup #使用setup工具 [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 把ONBOOT=“no” 改为 ONBOOT=“yes“ #启动网卡 [root@localhost ~]# service network restart #重启网络服务
1.2 网络yum源
[root@localhost yum.repos.d]# vi /etc/yum.repos.d/CentOS-Base.repo [base] 容器名称,一定要放在[]中 name 容器说明,可以自己随便写 mirrorlist 镜像站点,这个可以注释掉 baseurl 我们的yum源服务器的地址。默认是CentOS官方的yum源服务 器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地 址 enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成 enable=0就是不生效 gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效 gpgkey 数字证书的公钥文件保存位置。不用修改
2、yum命令
2.1 查询
1)查询 [root@localhost yum.repos.d]# yum list #查询所有可用软件包列表 [root@localhost yum.repos.d]# yum search 关键字 #搜索服务器上所有和关键字相关的包
2.2 安装
2)安装 [root@localhost yum.repos.d]# yum –y install 包名 选项: install 安装 -y 自动回答yes
2.3 升级
[root@localhost yum.repos.d]# yum -y update 包名 选项: update 升级 -y 自动回答yes 注意:升级一定要加包名,否则linuk系统全盘升级,一般很牛逼的人都不会轻易去尝试。
2.4 卸载
[root@localhost yum.repos.d]# yum -y remove 包名 选项: remove 卸载 -y 自动回答yes 注意:尽量不要使用yum卸载,因为它会自动把依赖包也卸载掉,但是有些依赖包不仅仅是一个软件在使用,其他软件也在使用这个依赖包。
2.5 yum软件组管理命令
[root@localhost ~]# yum grouplist #列出所有可用的软件组列表 [root@localhost ~]# yum groupinstall 软件组名 #安装指定软件组,组名可以由grouplist查询出来 [root@localhost ~]# yum groupremove 软件组名 #卸载指定软件组
3、光盘yum源搭建
3.1 光盘yum源搭建步骤
1)挂载光盘 [root@localhost ~]# mount /dev/cdrom /mnt/cdrom/ 2)让网络yum源文件失效 [root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak [root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo Centos-Debuginfo.repo.bak [root@localhost yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak 3)修改光盘yum源文件 [root@localhost yum.repos.d]# vim CentOS-Media.repo [c6-media] name=CentOS-$releasever-Media baseurl=file///mnt/cdrom #地址为你自己的光盘挂载地址 # file:///media/cdrom/ # file:///media/cdrecorder/ #注释这两个不存在的地址 gpgcheck=1 enabled=1 #把enabled=0改为enabled=1,让这个yum源配置文件生效 gpgkey=file:///etc/pki/rpm-gpg/RRM-GPG-KEY-CentOS-6 注意:一般配置文件有严格的格式限制,不能多加空格或者注释。
源码包管理
1、源码包与RPM包的区别
1、区别 安装之前的区别:概念上的区别 安装之后的区别:安装位置不同 #RPM包安装位置 是安装在默认位置中 #RPM包默认安装路径 /etc/ 配置文件安装目录 /usr/bin/ 可执行的命令安装目录 /usr/lib/ 程序所使用的函数库保存位置 /usr/share/doc/ 基本的软件使用手册保存位置 /usr/share/man/ 帮助文件保存位置 #源码包安装位置 安装在指定位置当中,一般是 /usr/local/软件名/ #安装位置不同带来的影响 RPM包安装的服务可以使用系统服务管 理命令(service)来管理,例如RPM包安 装的apache的启动方法是: /etc/rc.d/init.d/httpd start service httpd start #而源码包安装的服务则不能被服务管理命 令管理,因为没有安装到默认路径中。所 以只能用绝对路径进行服务的管理,如: /usr/local/apache2/bin/apachectl start
2、源码包的安装过程
2.1 安装准备
#安装C语言编译器 [root@localhost ~]# yum –y install gcc #下载源码包 [root@localhost ~]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.34.tar.gz
2.2 安装注意事项
#源代码保存位置:/usr/local/src/ #软件安装位置:/usr/local/ #如何确定安装过程报错: a.安装过程停止 b.并出现error、warning或no的提示
2.3 源码包安装过程
#下载源码包 [root@localhost ~]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.34.tar.gz #解压缩下载的源码包 [root@localhost ~]# tar -xvf httpd-2.2.34.tar.gz /usr/local/apache2 #进入解压缩目录 [root@localhost ~]# cd /usr/local/apache2/httpd-2.2.34 #定义安装位置 [root@localhost httpd-2.2.34]# ./configure --prefix=/usr/local/apache2
2.4 ./configure 软件配置与检查
Ø 定义需要的功能选项。 Ø 检测系统环境是否符合安装要求。 Ø 把定义好的功能选项和检测系统环境的信息 都写入Makefile文件,用于后续的编辑。
2.5 源码包的编译与安装
#编译解压后的源码包 [root@localhost httpd-2.2.34]# make #清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件 [root@localhost httpd-2.2.34]# make clean #将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。 [root@localhost httpd-2.2.34]# make install
2.6 测试是否安装成功
#启动apache服务 [root@localhost httpd-2.2.34]# /usr/local/apache2/bin/apachectl start #在浏览器输入 localhost:80 #浏览器显示内容 It works!
2.7 源码包的卸载
#不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件
脚本安装包
1、 脚本安装包简介
# 脚本安装包并不是独立的软件包类型,常见 安装的是源码包。 # 是人为把安装过程写成了自动安装的脚本, 只要执行脚本,定义简单的参数,就可以完 成安装。 # 非常类似于Windows下软件的安装方式
2、 Webmin的作用
#Webmin 是一个基于 Web 的 Linux 系统管 理界面。您就可以通过图形化的方式设置 用户帐号、Apache、DNS、文件共享等服 务。
3、Webmin安装过程
#创建文件夹webmin [root@localhost ~]# mkdir /usr/local/webmin #进入/usr/local/webmin [root@localhost ~]# cd /usr/local/webmin #下载软件 [root@localhost webmin]# wget https://sourceforge.net/projects/webadmin/files/webmin/1.850/webmin-1.850.tar.gz/download # 解压缩,并进入解压缩目录 [root@localhost webmin-1.850]# tar -xvf webmin-1.850.tar.gz # 执行安装脚本 [root@localhost webmin-1.850]# ./setup.sh 注意:安装过程中,键盘enter键,就表示执行下一步; :安装过程中,需要设置登录名和密码 小技巧:Ctrl+Backspace(退格键) 删除 # 安装完之后,测试是否安装成功 # 开启防火墙10000端口 [root@localhost webmin-1.850]# /sbin/iptables -I INPUT -p tcp --dport 10000 -j ACCEPT [root@localhost webmin-1.850]# /etc/rc.d/init.d/iptables save # 浏览器测试,输入linux Ip+端口号(10000) 成功的话,会进入一个登陆界面
用户和用户组管理
1、用户管理简介
# 越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和 服务器操作规范。 # 在Linux中主要是通过用户配置文件来查 看和修改用户信息
2、用户配置文件
2.1 用户信息文件/etc/passwd
#查看用户信息配置文件信息 [root@localhost ~]# vim /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin demo:x:500:500::/home/demo:/bin/bash liqi:x:501:501::/home/liqi:/bin/bash mysql:x:498:498:MySQL server:/var/lib/mysql:/bin/bash ucenter:x:502:502::/ucenter:/bin/bash #当打开配置文件时 窝草,看的劳资很懵逼 #可以利用man 命令 (man 5 配置文件名) 查看帮助 [root@localhost ~]# man 5 passwd #看主要内容 The field descriptions are: accout password UID ... #第1字段:用户名称 #第2字段:密码标志 #第3字段:UID(用户ID) 0: 超级用户 1-499: 系统用户(伪用户) 例如:mysql:x:498:498:MySQL server:/var/lib/mysql:/bin/bash 500-65535: 普通用户 例如:demo:x:500:500::/home/demo:/bin/bash #第4字段:GID(用户初始组ID) #第5字段:用户说明 #第6字段:家目录 普通用户:/home/用户名/ 超级用户:/root/ #第7字段:登录之后的Shell //shell是用户和计算机交流的中介,“登录shell”保证用户和计算机交流(一般Linux默认的用户shell都是bash ,也就是说你可以登录进去敲命令。),“非登陆shell(/bin/nologin 就是一个非登陆shell)”无法让用户与计算机交流。
2.2 初始组和附加组
#初始组:就是指用户一登录就立刻拥有这 个用户组的相关权限,每个用户的初始组 只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。 #附加组:指用户可以加入多个其他的用户 组,并拥有这些组的权限,附加组可以有 多个。
2.3 Shell是什么
#Shell就是Linux的命令解释器。 #在/etc/passwd当中,除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin(用户禁用),/usr/bin/passwd等。
3、影子文件/etc/shadow
3.1 影子文件/etc/shadow
[root@localhost ~]# cat /etc/shadow root:$6$CDD56Ji0/1P8TRCD$9QaqGR9Jpy6v9tYbs12rnhMynPdyYy2Y.AEsfUbh4bEgc7aF5UvIWB5DjYc6owmWsHus0WAfTOzJPTWAfp2.b/:17350:0:99999:7:::
配置文件详解
#第1字段:用户名 #第2字段:加密密码 加密算法升级为SHA512散列加密算法 如果密码位是“!!”或“*”代表没有密码,不能登 录 # 第3字段:密码最后一次修改日期 使用1970年1月1日作为标准时间,每过一天时间戳 加1 //改密码提示 it is based on a dictionary word(它是基于字典的词) is too similar to the old one(和之前设置的密码太相似) # 第4字段:两次密码的修改间隔时间(和 第3字段相比) # 第5字段:密码有效期(和第3字段相比) # 第6字段:密码修改到期前的警告天数( 和第5字段相比) # 第7字段:密码过期后的宽限天数(和第5 字段相比) 0:代表密码过期后立即失效 -1:则代表密码永远不会失效。 # 第8字段:账号失效时间 要用时间戳表示 # 第9字段:保留
3.2 时间戳换算
#把时间戳换算为日期 date -d "1970-01-01 16066 days" # 把日期换算为时间戳 echo $(($(date --date="2017/07/29" +%s)/86400+1)) 注意:时间 +%s 有个空格 一定要加上
4、组信息文件/etc/group和组密码文件/etc/gshadow
4.1 组信息文件/etc/group
[root@localhost ~]# cat /etc/group root:x:0: bin:x:1:bin,daemon demo:x:500: liqi:x:501: 第一字段:组名 第二字段:组密码标志 第三字段:GID 第四字段:组中附加用户
4.2 组密码文件/etc/gshadow
[root@localhost ~]# cat /etc/gshadow root::: bin:::bin,daemon demo:!:: liqi:!:: 第一字段:组名 第二字段:组密码 第三字段:组管理员用户名 第四字段:组中附加用户
5、 用户管理相关文件
5.1 用户的家目录
# 普通用户:/home/用户名/,所有者和所属 组都是此用户,权限是700 # 超级用户:/root/,所有者和所属组都是 root用户,权限是550 [root@localhost ~]# cd /home [root@localhost home]# ll 总用量 24 drwx------. 4 demo demo 4096 7月 6 23:45 demo drwx------. 4 liqi liqi 4096 7月 6 09:32 liqi drwx------. 2 root root 16384 7月 4 02:36 lost+found
5.2 用户的邮箱
# /var/spool/mail/用户名/长度 [root@localhost ~]# cd /var/spool/mail [root@localhost mail]# ll 总用量 8 -rw-rw----. 1 demo mail 0 7月 24 08:22 demo -rw-rw----. 1 liqi mail 609 7月 6 01:55 liqi -rw-------. 1 root mail 1215 7月 6 01:57 root -rw-rw----. 1 rpc mail 0 7月 4 02:43 rpc -rw-rw----. 1 ucenter mail 0 7月 7 01:51 ucenter
5.3 用户的模板目录
# /etc/skel ,每创建一个用户时,系统会按照模板文件给新得生成对应的文件 [root@localhost ~]# cd /etc/skel [root@localhost skel]# ls -a . .. .bash_logout .bash_profile .bashrc .gnome2 示例: [root@localhost skel]# touch warning.txt [root@localhost skel]# vim warning.txt 随便写点内容 #创建一个用户 [root@localhost skel]# useradd user1 #为用户设置密码 [root@localhost skel]# passwd user1 更改用户 user1 的密码 。 新的 密码: 无效的密码: 过于简单化/系统化 无效的密码: 过于简单 重新输入新的 密码: passwd: 所有的身份验证令牌已经成功更新。 #切换到use1用户 [root@localhost user1]# su user1 [user1@localhost ~]$ ls -a . .bash_logout .bashrc warning.txt .. .bash_profile .gnome2 我们可以看到这个用户的家目录生成了warning.txt
6、用户管理命令
6.1 用户添加命令useradd
useradd命令格式
[root@localhost ~]#useradd [选项] 用户名 选项: -u UID: 手工指定用户的UID号 -d 家目录: 手工指定用户的家目录 -c 用户说明: 手工指定用户的说明 -g 组名: 手工指定用户的初始组 -G 组名: 指定用户的附加组 -s shell: 手工指定用户的登录shell。默认是/bin/bash
添加默认用户
#最简单的添加用户 [root@localhost ~]# useradd lamp [root@localhost ~]# grep "lamp" /etc/passwd [root@localhost ~]# grep "lamp" /etc/shadow [root@localhost ~]# grep "lamp" /etc/group [root@localhost ~]# grep "lamp" /etc/gshadow [root@localhost ~]# ll -d /home/lamp/ [root@localhost ~]# ll /var/spool/mail/lamp
指定选项添加用户
#添加lamp用户组 [root@localhost ~]# groupadd lamp1 # ↑ 见useradd命令格式 [root@localhost ~]# useradd -u 550 -g lamp1 -G root -d /home/lamp1 -c "test user" -s /bin/bash lamp1 [root@localhost ~]# grep "lamp1" /etc/passwd lamp1:x:550:503:test user:/home/lamp1:/bin/bash lamp1:用户名 x:密码标识 550:UID 503:GID(用户初始组ID) test user:用户说明 /home/lamp1:用户家目录 /bin/bash:用户登录之后的shell
用户默认值文件
# /etc/default/useradd GROUP=100 #用户默认组 HOME=/home #用户家目录 INACTIVE=-1 #密码过期宽限天数(7) EXPIRE= #密码失效时间(8) SHELL=/bin/bash #默认shell SKEL=/etc/skel #模板目录 CREATE_MAIL_SPOOL=yes #是否建立邮箱 # /etc/login.defs PASS_MAX_DAYS 9999 #密码有效期(5) PASS_MIN_DAYS 0 #密码修改间隔(4) PASS_MIN_LEN 5 #密码最小5位(PAM) PASS_WARN_AGE 7 #密码到期警告(6) UID_MIN 500 #最小和最大UID范围 GID_MAX 60000 ENCRYPT_METHOD SHA512 #加密模式
6.2 修改用户密码passwd
passwd命令格式
[root@localhost ~]#passwd [选项] 用户名 选项: -S 查询用户密码的密码状态。仅root用户 可用。 -l 暂时锁定用户。仅root用户可用 -u 解锁用户。仅root用户可用 --stdin 可以通过管道符输出的数据作为用户 的密码。
查看密码状态
[root@localhost ~]# passwd -S lamp lamp PS 2013-01-06 0 99999 7 -1 #用户名密码设定时间(2013-01-06) 密码修改间隔时间(0) #密码有效期(99999 ) 警告时间(7) 密码不失效(-1)
锁定用户和解锁用户
#锁定用户 [root@localhost ~]# passwd -l lamp #解锁用户 [root@localhost ~]# passwd -u lamp
使用字符串作为用户的密码
[root@localhost ~]# echo "123" | passwd --stdin lamp1 Changing password for user lamp1. passwd: all authentication tokens updated successfully.
6.3 修改用户信息usermod
[root@localhost ~]#usermod [选项] 用户名 选项: -u UID: 修改用户的UID号 -c 用户说明: 修改用户的说明信息 -G 组名: 修改用户的附加组 -L: 临时锁定用户(Lock) -U: 解锁用户锁定(Unlock) #示例 [root@localhost ~]# usermod -c "test user" lamp #修改用户的说明 [root@localhost ~]# usermod -G root lamp #把lamp用户加入root组 [root@localhost ~]# usermod -L lamp #锁定用户 [root@localhost ~]# usermod -U lamp #解锁用户
6.4 修改用户密码状态chage
[root@localhost ~]#chage [选项] 用户名 选项: -l : 列出用户的详细密码状态 -d 日期: 修改密码最后一次更改日期(shadow3字段) -m 天数: 两次密码修改间隔(4字段) -M 天数: 密码有效期(5字段) -W 天数: 密码过期前警告天数(6字段) -I 天数: 密码过后宽限天数(7字段) -E 日期: 账号失效时间(8字段) 示例: [root@localhost ~]# chage -d 0 lamp #这个命令其实是把密码修改日期归0了(shadow第3字段) #这样用户一登陆就要修改密码
6.5 删除用户userdel
删除用户userdel
[root@localhost ~]# userdel [-r] 用户名 选项: -r 删除用户的同时删除用户家目录 手工删除用户 [root@localhost ~]# vi /etc/passwd [root@localhost ~]# vi /etc/shadow [root@localhost ~]# vi /etc/group [root@localhost ~]# vi /etc/gshadow [root@localhost ~]# rm -rf /var/spool/mail/lamp [root@localhost ~]# rm -rf /home/lamp/
查看用户ID
[root@localhost ~]# id 用户名
6.6 切换用户身份su
[root@localhost ~]# su [选项] 用户名 选项: - : 选项只使用“-”代表连带用户的环境 变量一起切换 -c 命令: 仅执行一次命令,而不切换用户身份 #示例 [lamp@localhost ~]$ su – root # 切换成 root [lamp@localhost ~]$ su - root -c "useradd user3" # 不切换成 root ,但是执行 useradd 命令添加 user1 用户 #注意su 后面一定要跟-,不带 - ,用户的环境变量是不会改变的。 [liqi@localhost ~]$ su root 密码: [root@localhost liqi]# env HOSTNAME=localhost.localdomain SELINUX_ROLE_REQUESTED= SHELL=/bin/bash TERM=xterm HISTSIZE=1000 SSH_CLIENT=192.168.80.6 55397 22 SELINUX_USE_CURRENT_RANGE= QTDIR=/usr/lib/qt-3.3 QTINC=/usr/lib/qt-3.3/include SSH_TTY=/dev/pts/1 USER=liqi 我们可以看到用户的环境变量没有切换user=liqi 所以需要加上- # su - root 必须要加上 - [liqi@localhost ~]$ su - root 密码: [root@localhost ~]# env HOSTNAME=localhost.localdomain SHELL=/bin/bash TERM=xterm HISTSIZE=1000 QTDIR=/usr/lib/qt-3.3 QTINC=/usr/lib/qt-3.3/include USER=root 我们可以看到用户的环境变量已经切换了
7、用户组管理命令
7.1 添加用户组
[root@localhost ~]# groupadd [选项] 组名 选项: -g GID: 指定组ID
7.2 修改用户组
[root@localhost ~]# groupmod [选项] 组名 选项: -g GID: 修改组ID -n 新组名: 修改组名 #示例 [root@localhost ~]# groupmod -n testgrp group1 #把组名group1修改为testgrp
7.3 删除用户组
[root@localhost ~]# groupdel 组名 注意:如果删除的组有初始用户,需要先删除用户,然后才能删除用户组
7.4 把用户添加入组或从组中删除
[root@localhost ~]# gpasswd 选项 组名 选项: -a 用户名: 把用户加入组 -d 用户名: 把用户从组中删除
ACL权限
1、ACL权限简介与开启
ACL权限简介
查看分区ACL权限是否开启
[root@localhost ~]# dumpe2fs -h /dev/sda3 #dumpe2fs 命令是查询指定分区详细文件系统信息的命令 选项: -h 仅显示超级块中信息,而不显示磁盘块组的详细信 息
临时开启分区ACL权限
[root@localhost ~]# mount -o remount,acl / # 重新挂载根分区,并挂载加入 acl 权限
永久开启分区ACL权限
[root@localhost ~]# vi /etc/fstab UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl 1 1 # 加入 acl [root@localhost ~]# mount -o remount / # 重新挂载文件系统或重启动系统,使修改生效
文件特殊权限
SetUID
1、SetUID的功能
1.只有可以执行的二进制程序才能设定SUID权限 2.命令执行者要对该程序拥有x(执行)权限 3.命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主) 4.SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效 示例: passwd命令拥有SetUID权限,所以普通可以修改自己的密码 [root@localhost ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容 [root@localhost ~]# ll /bin/cat -rwxr-xr-x 1 root root 47976 6月 22 2012 /bin/cat 普通用户明明对它(/etc/shadow)文件木有操作权限 如何写入的呢?因为passwd这个命令的作用 因为passwd用户suid权限 系统会认为你是把内裤穿在外面的男人(root用户),暂时变身为root用户
2、设定SetUID的方法
4代表SUID chmod 4755 文件名 chmod u+s 文件名 举例: [root@localhost ~]# chmod 4755 /tmp/test [root@localhost ~]# chmod u+s /tmp/test
3、取消SetUID的方法
chmod 755 文件名 chmod u-s 文件名 举例:
4、危险的SetUID
1.关键目录应严格控制写权限。比如“/” 、“/usr”等 2.用户的密码设置要严格遵守密码三原则(复杂性、易记忆性、时效性) 3.对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
文件下载链接:https://pan.baidu.com/s/1ggl8odVhQMV0DAclA-MRUQ 密码: 5qjf