01.Linux操作系统安装
安装环境:
- VMware12 Pro http://pan.baidu.com/s/1sl6lR0T
- SecureCRT http://pan.baidu.com/s/1hsQhddU
第一种: 直接基于发行版ios文件安装
- CentOS-6.9-i686-minimal.iso http://pan.baidu.com/s/1qXTEsXm
第二种:远程自动化安装(kickstart)
- 原理:
- 以CentOS为例,已经成功安装的linux系统,会在/root目录下生成anaconda-ks.cfg文件,这个是由CentOS 安装程序anaconda根据你在系统安装过程中所有的键盘类型、语言、时区、分区、程序包的选择而生成的一个指导安装文件.
- 如果对自动生成的anaconda-ks.cfg 不满意,还可以在源主机上安装system-config-kickstart 程序,结合图形化界面,生成自定义的ks.cfg文件,该文件包含安装源(install),初始化设置(键盘类型,语言时区,网络状态),预先安装软件( %packages ),预执行脚本( %pre ),安装后执行脚本( %post )等信息.
- 以源主机为模板,加载其安装源文件IOS,其他待安装机器,通过boot.ios启动引导程序 以通过网络连接方式访问源主机,参照ks.cfg 文件,完成自定义安装过程.
- 步骤
源主机准备:
1.推荐安装图形化界面 ( yum -y groupinstall Desktop ),以便使用kickstart 定制ks.cfg 文件;
2.安装httpd (yum install httpd) 服务 ,最终源主机通过http 协议对外发布linux安装服务, http 服务默认为80端口, 默认目录为/var/www/html ,因此最终提供的 安装服务链接的端 口 和 默认目录都可以省略. chkconfig httpd on 设置为开机启动, service httpd start 启动httpd服务, service httpd status / telnet -ntlp | grep 80 / lsof -i 80 查看运行状态;
3.mkdir /var/www/html/{ks , x86_64} 创建ks.cfg 文件存放目录 ,可源主机安装包挂载目录.;
4.参照/root/anaconda.cfg 配合kickstart编辑自定义的ks.cfg ( http://pan.baidu.com/s/1dEE17KP ) 文件,并将该ks.cfg 文件拷贝到/var/www/html/ks目录下;
5.mount -r /dev/dvd /var/www/html/x86_64/ 手动挂载CentOS-6.9-i686-minimal.iso 安装文件到 x84_64 目录 ( mount | tail -l 查看);
6.将CentOS-6.9-i686-minimal.iso 挂载文件中的启动引导文件单独拷贝并打包boot.ios
mkdir /tmp/cdrom |
cp -r /var/www/html/x86_64/isolinux/ /tmp/cdrom/ |
cd /tmp |
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos6.9 X86_64 boot disk" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso cdrom/ |
ls /root/boot.ios |
待安装主机准备:
7.SecureCRT 客户端启动SecureFX 将源主机上的/root/boot.iso 文件拷贝到宿主机上,留给待安装linux的虚拟机作为启动引导盘使用;
02.Linux的基本原则
- 自由软件原则;
- 由目的单一小程序组成,组合小程序完成复杂任务;
- 一切皆文件;
- 尽量避免捕获用户接口(与用户进行交互);
- 纯文本格式保存配置文件;
- 能简写绝不全写。
03.Shell 人机交互界面
作用: 将用户的意图(动作、命令)转换为kernel能够识别和执行的指令,然后进行执行,并反馈相应响应结果;
分类:
1). GUI 图形化交互接口 (双击、单击,右键菜单,拖拽等)
Gnome : C 语言编写 ; KDE : C++ 编写 ;XFace : 轻量级图形化交互界面
windows 的桌面内置与kernel,没有桌面无法使用操作系统,而linux的图形化界面采用c/s架构仅仅充当一个小交互工具,没安装GUI 也可以使用;
2).CLI 命令行交互接口
shell分类:sh(default) , bash , csh, zsh , ksh , tcsh
命令提示符 prompt : # root用户,$ 普通用户 例:[root@localhost tmp]#
命令格式:命令 [选项:加强命令] [参数:命令作用对象,不带参数存在默认对象]
短选项(-) : ls -l
长选项(--): chkconfig --list
多个选项(只有短选项可以合并): ls -l -a = ls -la
获取命令帮助: 命令 --help 或 man 命令 。
3).使用凭证: 认证用户使用资源的凭据。
终端类型:物理终端(源机)、虚拟终端(初始登录界面)、模拟终端(图形化登录后启动的控制台)、控制台。
虚拟终端(terminal): tty0 - 停机,tty1 - 单用户(运维权限) , tty2 - 多用户(断网) , tty3 - 完全多用户 ,tty4 - 预留 , tty5 - 图形化 ,tty6 - 关机 。
设置默认启动终端: vim /etc/inittab 将末行3 改为 5 即可 (id:3:initdefault:)。
切换终端: ctrl+alt+F7 图形化 ,ctrl+alt+F1~6 。 (安装了X Window System 图形化界面情况下,命令行使用 startx & 可以直接切换到图形化界面)
4).用户切换
终端登录状态通过: su (switch user) 用户名 进行切换
完全切换 [root@localhost ~]# su student [student@localhost root]$ whoami student [student@localhost root]$ exit exit [root@localhost ~]# whoami | 半切换 |
用户密码修改:
passwd 修改当前用户密码
passwd 用户名 root用户权限下,修改指定用户密码
whoami 查看当前登录用户 ,users 查看全部终端用户。
密码复杂性规则:
01)至少取数字、小写、大写,特殊字符 中的3种;
02)长度不少于7位;
03)避免使用日期,姓名等常用字典字符,采用随机策略;
04)定期更换;
05)循环周期足够长。
5).IDE : 集成开发环境。
04.操作系统基本组成
硬件设备 -> 内核 -> 库 -> Shell -> 应用程序
05.计算机设计基本思想
身份标识ID:计算机操作数字效率比字母快,因此用户名student 不能作为用户身份唯一标识,ID号才是唯一标识。
认证Authentication: 鉴别操作对象是其声称对象的过程;
授权Autthorization: 鉴别用户是否具备相应操作的权限;
审计Audition: 将用户的全部操作记录在案,以备后期审核查纠,计算机最常用审计手段通过日志完成;
命令提示符Prompt(# $): 提示当前用户身份 和 位置标识,方便快速定位;
模数Magic Number: 标识二进制文件执行格式的标记,例如.sh脚本开头的 “#!/bin/bash” 就是该二进制可执行文件的格式标识;不同操作系统由于模数差异,即便库相同,同一个程序编译后也不一定能够跨系统运行。
命令: command [options...命令执行特性] [arguments... 命令执行对象]
ls path 列出指定路径下的文件(目录是一种特殊的路径映射文件)。
pwd (print working directory) : 查看当前工作目录。
路径: 从指定起始点到目标对象所经过的位置,层次性结构查询效率最高。
文件系统 FileSystem: 层次化管理文件的机制, 使用图形化表示,整个文件系统可以看成树状的形状,可以分叉的节点称为“目录”,不能分叉的称为文件。查找文件时,从根“/” 开始查找的路径为“绝对路径”,从中间某个叉点,开始查找的路径为“相对路径”。
文件系统层级结构标准File system Hierarchical Standerd : linux 标准委员会制定的linux操作系统必须具备的第一级子目录(名称,存放内容)。
变量variable:命名的内存空间,往该命名空间存放数据的过程为“变量赋值”,声明变量过程就是向操作系统申请存放数据的内存空间过程。
环境变量env: 定义当前用户工作环境,以及能被系统全局使用的数据。
PATH: 使用“:” 分割的命令路径,首次执行某个命令先找缓存,再按PATH配置的路径集合,依次匹配查找对应可执行文件,然后缓存起来,再次输入该命令,直接从缓存先查找,使用hash 查看被缓存的命令,以及各命令被使用的频率。
哈希表hash:缓存思想的核心就是以k-v形式将某标识与指定内容关联起来,记录在一张虚拟的hash表,随hash表规模不断扩大,要查找指定缓存信息的难度始终为O(1)常阶数,即难度不变。
栈stack:存放数据空间需要被命名的内存空间,空间被命名,可以被重复使用。
堆heap: 存放无需命名的数据的内存空间,读取文件,需要将文件数据放入内存,该内存空间就是堆空间。
06.命令类型
- 内置命令:shell本身内建的命令,该命令只能在shell启动时运行,如 : type cd -> cd is a shell builtin ,内置命令通过 help command 获取帮助
- 外置命令:文件系统的某个路径下存在与之对于的可执行文件的命令,如:type su -> su is hashed (/bin/su) , 通过 which su -> 查看可执行文件位置 /bin/su,使用command --help 获取简要帮助信息,大多数命令可用。无论内置还是外置命令,都可以使用 man command 获取使用帮助手册。
注:外置命令要被执行,严格来说需要先定位到该命令对于的可执行文件,为避免繁琐输入,操作系统通过定义环境变量PATH,让常用的外置命令路径被映射到内存备用,所有输入命令简写就可定位带哦命令脚本,并执行该命令。(printenv 打印输出全部环境变量)
07.常用命令
08.获取命令帮助
内置命令: help COMMAND
外置命令:COMMAND --help
命令手册: man COMMAND 内置命令通过man 获取的是对于shell 的帮助信息,外置命令则分章节显示帮助信息。
步骤:
1).区分命令类型 type COMMAND 有buildin字样,则为shell内置命令,通过help COMMADN 查看帮助,否则为外置命令通过COMMADN --help 查看;
2).多数情况项man 查看内置命令,为shell对于的帮助信息,man查看的外置命令,则会有比较详细说明,并且涉及相关命令的帮助信息可能分布在不同章节,需要首先确定man手册有哪些章节与次命令关联,通过whatis COMMAND 查看;
3).直接使用man COMMAND 往往只能够查看到首次出现相关命令的章节,在whatis COMMAND 的指引下,同man chapNum COMMAND 则可精确定位需要的章节。
命令文档查看:info COMMAND ,显示命令的详细演化历史
命令相关文档: /usr/local/bin/xx
09.文件系统
FHS (File system Hierarchical Standard) :linux 标准委员会制定的linux文件系统层级标准,该标准指定了linux系统必须具备点的第一级文件系统名称,以及对于目录的功能,存放文件类型。
文件系统的颜色:目录 , 普通文件 ,软链接 ,设备文件(字符设备,块设备) ,套接字文件,管道文件
rootfs:根文件系统。
核心17个目录:
/boot 系统启动相关文件,如:内核vmlinuz,虚拟磁盘镜像initramfs-xxx.img ,引导加载器grup (bootloader)
/dev 存放的是设备文件,如 : /dev/cdrom 和 /dev/cdrw 都指向光驱,设备文件都不存放内容,只作为内核访问硬件设备的入口存在,
因此设备文件只有元数据(主设备号major,次设备号minor),没有内容数据,不存在大小的概念,
其分类有: 1).b 开头的块设备文件,按随机访问模型设计,如硬盘;
2).c开头的字符设备文件,按线性顺序以字符为单位访问模型设计,如键盘,鼠标,显示器等;
/etc 配置文件目录,linux 将程序的配置全部以纯文本文件格式进行存放;
/home 普通用户的主目录,每个普通用户都在/home 下有对应用户名命名的目录/home/USERNAME
/root 超级用户的主目录,生产环境严禁使用root身份登录
/lib 存放大多数库文件,为简化应用程序通过操作系统使用硬件资源,在系统调用的基础上将一些相似的功能(如:打印),抽象提取,称为库。
(相似功能抽象提取,高度复用)
分类:
动态库:应用程序共享,单独编译库。使用动态库节省运行内存空间,程序迁移过程,需要同步迁移依赖的动态库 。
windows 下为.a , linux 下为.la
静态库:应用程序独自使用,随程序一起编译的库。使用静态库,运行内存比较大,迁移时,直接随应用一起迁移,方便移植。
windows 下为.dll, linux下为 .so
/lib/modules 内核模块文件
注:库文件没有程序执行入口,只能被调用,自身不能被执行。
/lost+found 意外断电,文件找回
/media :移动设备(光驱,硬盘等)挂载点 mount -r /dev/cdrom /media 将光驱目录挂载到media下 (迭代挂载)
/mnt : 临时文件系统挂载点,挂载(远程主机某目录)
windows 目录挂载到linux
1).将windows上的指定目录设置为共享目录;
2).mount -t cifs -o username=Administrator,password="cat" //192.168.1.101:/HotFix /mnt/ShareDoc挂载远程windows的共享目录
umount /mnt 取消挂载
linux 系统间相互挂载
1).被挂载机上安装nfs-utils 和 portmap(6.0改为rpcbind) 服务,通过 rpm -q name 查看是否安装
2).被挂载机启动nfs 和 rpcbind 服务: service nfs start ,service rpcbind start
3).被挂载机设置需要被共享的目录:vim /etc/exports
目录名称 云访问ip/指定网段 (同步,权限ro/rw,是否让来发者具备root权限no_root_squash / root_squash)
/tmp 192.168.1.*(sync,ro,no_root_squash)
4).使共享配置生效:exportfs -rv (-r 刷新共享配置,-v显示最新共享信息)
showmount -e 在被挂载机查看共享信息
showmount -e 192.168.1.102 在挂载机查看被挂载机的允许共享信息
5). 挂载远程机器文件目录 mount -t nfs 192.168.1.102:/source/dir /self/dir
6). umount /self/dir 取消挂载。
/opt : 可选目录,早期用于安装与系统无关的第三方程序目录,如:oracle 等 ,后期统一规定安装到/usr/local 下。
/proc : 伪文件系统,存放内核映射文件,其实质是一个空文件,只有正常启动时,才会将内核数据映射到此处,是内核处理,交换,统计数据的位置,
与系统调优,性能监控密切相关。
/sys : 伪文件系统,存放硬件设备相关的属性的映射文件,侧重于硬件设备,与内核映射文件也有关,关机情况下,也为空,正常运行才会加载映射数据。
/tmp : 临时目录,存放可被公共查阅的临时文件,该目录下的文件超过规定时间(默认30d)没被访问,就自行删除,任何用户都可在此目录创建自己的零时文件,
都能随意访问他人创建的文件,但只能修改自己的文件。ls -ld /tmp -> drwxrwxrwt. 19 root root 4096 Apr 30 00:09 /tmp
最后一组权限为rwt. 说明他人是有限制修改
/var : 可变化的文件存放目录,存放会不断变化的文件,随运行时间,逐步膨胀。/var/run 存放全部正在运行进程的pid文件,/var/tmp 另一个临时文件
/bin : 用户命令,可执行程序,可执行程序都有程序执行入口,该程序的执行可能会依赖/lib下的库文件(.la, .so), 还可能受/etc 下的配置文件约束
/sbin :管理命令,超级管理员命令目录super bin
/usr : universal shared read-only 全局共享只读文件,上述/bin /sbin /lib /etc 是操作系统正常启动的保证,
/usr 下的 bin sbin etc 则是系统能够正常运行的保证
/usr/bin
/usr/sbin
/usr/lib
/usr/etc
/usr/tmp
第三方程序安装路径,该路径与操作系统启动,运行无关,但与业务密切相关
/usr/local
/usr/local/bin
/usr/local/sbin
/usr/local/lib
/usr/local/etc
注: 由于linux 没有注册表概念,只需包含上述17个核心目录,以及相应的文件,就可以启动一个linux系统。
命名规则:
1).文件名称长度不能超过255个字符;2).不能使用“/”;3).严格区分大小写;
10.文件管理
文件管理
touch /tmp/a 创建名称为a的文件 man touch --> NAME:touch - change file timestamps 本质是刷新文件状态(时间戳),而不是创建文件
touch -c /tmp/b -c:do not create any files 只刷新时间戳,不创建新文件
-a:change only the access time 修改访问时间为当前系统时间
-m: change only the modification time 修改内容时间为当前系统时间
由于访问时间和修改内容时间都属于文件的属性,因此其中任意一个改变都会,导致属性时间修改
touch -m -t 201705111209.16 /tmp/a 将/tmp/a 的最后一次修改内容时间改为指定的时间戳YYMMDDhhmm.ss
file /tmp/a 查看文件类型 /tmp/a: empty
stat /tmp/a 查看文件状态 man stat --> NAME: stat - display file or file system status
[root@localhost vistor]# stat /tmp/a
File: `/tmp/a'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 2104698 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-05-11 12:09:16.414536249 +0800 访问时间
Modify: 2017-05-11 12:09:16.414536249 +0800 修改内容时间
Change: 2017-05-11 12:09:16.414536249 +0800 改变属性时间
nano /tmp/a 使用文本编辑器编辑文件,nano ,vi 都是比较常见的文本编辑器,windows平台下的记事本 和 notpad++ 都是简单文本编辑器,
word则是编辑文本和属性的子程序。
^x --> ctrl +x 标识编辑完毕直接退出,使用 file /tmp/a 查看类型 :/tmp/a: ASCII text
文本编码:
ASCII :Ameriacl Standard Code For Information Interchange 美国标准信息交换码
英语环境常用的字符总共128个,总共7位bit就可以表示全,尽管计算机的基本存储单位是二进制,但内存是按字节byte存储,
因此仍然使用2^8=256 个二进制组合标识全部英语字符,对应编制8位二进制与英文字符的映射关系的标准称为ASCII码表。
同理,汉语环境有GB18030,GB2312,GBK 等编码规范规定使用2个字节与一个汉字映射,
ISO8859-1拉丁码表 和 ASCII 是 一个字节 与 一个字符映射
utf-8编码使用 Unicode码表(全球统一标准码),普通中文字符使用3个字节表示
rm /tmp/a 删除文件,通过type rm 命令查看发现管理员界面的rm 是 rm -i(interactive) 的别名 (rm -> rm is aliased to `rm -i')
即由于root用户的权限太大,所有删除文件操作默认以交互方式运行,普通用户可操作的资权限已经受限,可以直接运行,
\rm /tmp/a 直接使用原生命令执行,无交互
cd /tmp & rm -r test/x 递归删除x 和 test
rm -f /tmp/a 强制删除,不使用交互(root下慎用)
cp SRC DEST 复制源文件到指定目标,目标为目录则直接存放,若为不存在文件名,则将源复制并重命名,如果已经存在该命名的文件,则直接覆盖
cp file1 fil2 file3 cp默认最后一个对象为复制目的地,此处表示将file1,file2文件拷贝到file3目录下
cp -r dir path 递归拷贝,path已经存在就直接存放,否则就是复制并重命名
-i 交互拷贝
-f 强制拷贝(覆盖)
-p 保留文件的属主,属组,权限时间戳等(理论上文件被谁创建或拷贝,就属于该用户)
-L cp命令拷贝链接文件时,默认拷贝链接指向的内容,即默认是带-L
-P 拷贝链接文件的链接属性,仍保持是链接,与 -d 相同
-a --archive相当于 -dR ,递归复制,保存文件的全部属性,常用于备份
cp /etc/{passwd,inittab,rc.d/init.d} /tmp 使用命令行展开,复制3个文件到指定目录
mv SRC DEST 移动或重命名,目标已经存在,如果是目录则直接存放,如果是文件则进行覆盖,如果不存在则移动并重命名,不管源有多层,全部移动
默认root用户下使用是-i 交互式移动(重命名)
-f 强制覆盖
mv -t DEST SRC 先指定目标,再指定源
install SRC... DEST 拷贝文件并设置文件属性(copy files and set attributes) ,已经存在就执行拷贝存放,或拷贝覆盖,不存在就进行拷贝重命名
被拷贝的文件顺便赋予了执行权限(-m 指定权限,-o指定属主)
install -d file1 file2 拷贝目录(-d --directory 当成目录处理),将目录 拷贝到目录2下,如果file1不为空,则只复制空目录,不复制内容
install -t DEST SRC...
install -d /tmp/a/{b,c} 创建多个目录
11.目录管理
目录管理
ls
cd
pwd
mkdir [-p] /usr/local/tmp/xx 创建(多层)目录 ,只有最后一个为需要创建的对象, -v verbos 显示详细信息
[root@localhost ~]# mkdir -pv /tmp/x/y/z
mkdir: created directory `/tmp/x'
mkdir: created directory `/tmp/x/y'
mkdir: created directory `/tmp/x/y/z'
花括号(命令行)展开mkdir -p /tmp/x/xx /tmp/x/yy = mkdir -p /tmp/x/{xx,yy}
cd ~vistor --> /home/vistor
mkdir -p /tmp/test/x/{a,b} /tmp/test/y/{a,b} = mkdir -p /tmp/test/{x,y}_{a,b} 相当于“乘法分配律”(x+y)×(a+b)
[root@localhost vistor]# mkdir -p /tmp/test/{x,y}_{a,b}
[root@localhost vistor]# tree /tmp/test
/tmp/test
├── x_a 相当于 /tmp/test/x/a
├── x_b
├── y_a
└── y_b
rmdir /tmp/x 删除空目录 : rmdir -p /tmp/x_a 删除 删除一系列空目录
tree /root 查看文件系统目录树 例:mkdir /tmp/x/y/z & tree /tmp/x
/tmp/x
└── y
└── z
12.文本管理
查看
cat 连接并显示 cat - concatenate files and print on the standard output 使用Shift+PgUp/Down 对缓存内容进行翻屏,翻屏范围受限于缓存大小
cat 1.txt 2.txt 将1 和 2 平均显示在屏幕上
[root@localhost aa]# cat /etc/issue --> CentOS release 6.9 (Final) 查看 linux 版本
-n 显示行号
-E 显示文本的行结束符,linux 文本的行结束符为“$”,windows则为“$+回车”
-T 显示制表符
-A 显示全闭控制符
tac 逆序显示
Ctrl+c 取消命令输入,向shell发起终止命令输入信号
more a.txt 向前翻屏(下一屏:空格,上一屏:b),默认翻到尾部自动退出,可对全文进行翻屏检索
less v.txt 支持前后翻屏,全文检索,到尾部不退出(:q 退出)
head -n pageNum 1.txt 显示开头前n行,默认n=10 ,或直接缩写为 head -20 1.txt 显示前20行
tail -n pageNum 2.txt 显示结尾n行
tail -f db.log 阻塞式查看文件后续追加内容,监控文件
截取
cut 按指定规则截取文件内容的部分进行显示
cut -d :-f 1 /etc/passwd 截取/etc/passwd文件中以“:”为分隔符分割的第一个属性字段的内容,一般用于截取文本格式储存的数据库的指定字段内容
-d delimiter 分隔符,默认为空格
-f fields 指定要显示的字段 -f 1 = -f1 ,-f 1,3 显示第1个和第3个,-f 1-3 显示第1~3个字段,中间用“:”间隔显示
拼接
join
排序
sort 文本排序,将文件内容逐行按指定顺序显示,默认按ASCII升序排序
sort 1.txt 按ASCII升序排序显示 sort -n 1.txt 按数值从小到大排序显示 sort -nr 1.txt 按数值从大到小排序显示
001 001 2121
11 11 323
11 11 123
123 123 11
2121 323 11
323 2121 001
sort -t: -k3 -n /etc/passwd
-t 指定字段分隔符 ,-k 指定排序字段位置(从1开始),-n 按数值升序排序, -u 去重,-f 忽略字符大小写
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
注: liunx 规定相邻并且完全相同的行,才会被认定为是重复的行,才能进行去重操作。
去重
uniq 1.txt 显示文本内容,自动去除重复行(相邻且完全相同行才会认为是完全重复的)
-d 只显示重复行内容 , -D 显示全部重复行 , -c 显示各行重复次数 以及 各行内容
统计
wc 统计文本 行数 单词数 字节数(包括空白)
wc 1.txt --> 7 7 27 1.txt
-l 统计行数 , -w 统计单词数 ,-m 统计字节数(1char = 1byte) , -c 统计字符数 ,-L 统计最长行包含字符数
字符处理
tr 转换或删除字符
tr 'ab' 'AB' 将接下来输入文本的全部a字符替换为A,b替换为B --> 输入 abc ,返回 ABc
tr 'a-z' 'A-Z' 26个字符大小写替换
tr -d 'ac' 注字符删除指定字符集 --> 输入 abc ,返回b
重定向
输入重定向 tr 'ab' 'AB' < /etc/passwd 将/etc/passwd 中的内容全部读取并完成字符替换,然后显示出来
[root@localhost aa]# tr 'ab' 'AB' < /etc/passwd
root:x:0:0:root:/root:/Bin/BAsh
Bin:x:1:1:Bin:/Bin:/sBin/nologin
[root@localhost aa]# tr 'a-z' 'A-Z' < /etc/passwd
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
输出重定向 ls -l /root > /tmp/root.list 将查询结果输出到/tmp/root.list文件中。">" 从头部覆盖,">>" 从尾部追加
13.Shell特性
Shell(进程) 人机交互界面,shell自身是一个外部程序,其运行起来后,有有内建的命令。
type bash --> bash is /bin/bash ,type cd --> cd is a shell builtin
GUI:KDE,Gnome,Xface
CLI: sh,csh,ksh,bash,tcsh,zsh
bash遵循开源协议,兼具ksh,sh特性,为linux默认程序。linux 用户登录后就开启了shell程序的一个进程。进程间是相互隔离的。
子Shell(子进程) : 以bash为例,linux主机正常登录后,就开启了一个shell程序的实例(进程),继续在命令行输入bash ,则表示在已经
开启的bash进程中,又开启bash子进程。
pstree 查看进程树
├─sshd───sshd─┬─bash───bash───bash───pstree,通过"exit" 连续退出"子进程"。
注:1).即使是父子关系的进程,相互直接也是隔离的,分别拥有独立的工作环境。父shell环境设置不能被子shell继承。二者相互独立;
2). 不同类型的shell,可以嵌套,bash -> zsh -> ksh
进程:进程是程序的执行实例,同一个主机的进程名可以相同,其唯一标识是进程号pid。用户从登入到注销登出,构成一个进程的生命周期。
bash 特性:
1).支持命令历史,命令补全,路径补全
命令历史
bash 会自动缓存过去执行过的命令,直接使用↑,↓查找,用户正常退出,全部执行过的命令会保存在对于家目录/home/USERNAME
的 隐藏文件.bash_history中(ls -a)下次启动会自行加载到内存缓存区,继续使用。
PATH: 命令搜索路径
HISTSIZE: 命令缓存条数 echo $HISTSIZE --> 1000 默认为1000条
history 查看命令历史,
-c 清空命令历史
-d offset 删除第offset条命令记录
-d offset count 删除第offset条开始的连续count条命令记录
-w 手动保存命令历史到备份文件.bash_history中
!n 执行命令历史中的第n条命令
[root@localhost aa]# !583
echo $HISTSIZE
1000
!-n 执行命令历史的倒数第n条
!! 执行上一条命令
!string 执行命令历史中最近匹配string字符串的命令(逆序匹配)
!$ 引用上一个命令的最后一个参数:如;先输入 file 1.txt ,紧接着输入 vim !$ == vim 1.txt
Esc . 按住Esc,快速松开,然后按"." ,快速引用上个命令的最后一个参数,本地终端Alt+. ,也是快速引用,在远程终端失效。
命令补全:基于PATH路径进行补全,tab,无法唯一标识,双击tab 则显示全部匹配的命令
路径补全:基于已经输入的打头路径下查找匹配的命令,进行补全。不能唯一标识,双击tab,显示全部可能性。
命令别名:alias COMALIAS='COMMAND [option..] [args...]' alias cls='clear' 使用cls 代替clear 。
shell中定义的别名的生命周期和作用域只对当前shell有效,要想全局永久有效,需要在shell的配置文件中定义别名。
alias 显示当前系统定义的所有别名
unalias cls 撤销别名
root用户下往往将常见命令映射到某选项下,要使用原生命令使用\COMMAND 格式。
命令替换:动态引用命令$(CMD)的执行结果。例:echo "The current directory is $(pwd)." 等效于 echo "The current dir is `pwd`."
touch ./file-$(date +%F-%H-%M-%S).txt 创建当前目录下以当前时间命名的文件 例:file-2017-05-11-22-50-32.txt
注:$(COMMAND) 效果等同于 `COMMAND` 反引号
bash中的引号:`` 反引号,实现变量替换;"" 双引号,弱引用,实现变量替换; '' 不完成变量替换。
2).支持管道和重定向;
3).支持命令行编辑;
光标跳转:ctrl+a 跳到行首,ctrl+e 跳到行尾,ctrl+u 从光标位删除到行首,ctrl+k 从光标为删除到行尾,ctrl+l 清屏
4).支持命令行展开;
文件名展开机制: mkdir -p /tmp/{a,b}_{c,d} 分配律
5).支持文件名通配;
* :匹配任意长度的任意字符
? : 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符。例:[acf] a,c,f 中的任意一个满足即可,[0-9] 0~9, [a-z] 小写,[A-Z] 大写,[a-zA-z0-9]大小写数字
ls [a-zA-Z]*[0-9] 以字母开头中间跟任意字符,数字结尾。
[^]:匹配除指定范围之外的单个字符。例: ls [^0-9] 非数字开头文件
touch 'a b' 创建包含空格字符命名的文件
[:space:] 空白类字符集合 [[:space:]] 包含空白类字符集合
[:punct:] 标点符号集合
[:lower:] 所有小写字母
[:upper:] 所有大小字母
[:alpha:] 大小写字母
[:digit:] 数字
[:alnum:] 所有数字+字母
man 7 glob 查看全部内容
[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]
ls [[:alpha:]]*[[:space:]]*[[:alpha:]] 字母开头结尾中间包含空白符命名的文件
ls [[:alpha:]]*[[:space:]]*[^[digit]] 字母开头,非字母结尾,中间包含空白符文件
练习:1)创建a123 , cd6 , c78m , c1 my , m.x , k 67 , 8yu , 789 命名的文件
touch a123 cd6 c78m 'c1 my' m.x 'k 67' 8yu 789
2)显示以a 或 m 开头的文件 ls [am]*
3)显示所有文件名包含数字的文件 ls *[0-9]* 或 ls *[[:digit:]]*
4)显示文件名包含非字母或非数字的特殊字符的文件 ls *[^[:alnum:]]*
5)显示所有以数字结尾且不包含空白字符的文件
ls *[^[:space:]]*[[:digit:]] 是错误的,[:digit:]只能够标识0-9的整数,而不能表示全部整数,此处需要使用正则表达
6).支持变量;
7).支持脚本编程。
14.权限管理思想
权限管理思想
用户:对于计算机外部是具体的个人。对于计算机,是外部使用计算机计算资源的凭据。
用户组:为方便授权,将相同权限用户抽象到一类用户容器,构成了用户组。
权限:定义用户或用户组访问资源和可执行操作的行为。rwx rwx rwx 分别对于属主 数组 其他用户 的权限,
--- 000=0,--x 001=1,-w- 010=2,-wx 011=3,r-- 100=4,r-x 101=5,rw- 110=6,rwx 111=7
对于文件:r --> cat ,more,less 查看内容; w --> vi,nano 编辑;x --> 可提交内核执行(./)。
对于目录: r --> 通过ls 查看内部包含文件; w --> 可再次下创建新文件; x --> 可通过cd 进入,使用ls -l 查看内部文件详细属性。
注:1).linux 通过文件颜色区分权限;
2).用户权限数据UID保存在/etc/passwd 下,用户组权限数据GID保存在/etc/group 下,这两个表为文本类型权限数据库;
3).linux通过影子口令形式,将用户,用户组的口令从权限数据库/etc/passwd, group 中分离出来,保存到/etc/shadow,gshadow中,
并用遮盖符保护;
4).为方便指派权限,通过组容器管理相同权限用户集合,用户一旦放入组,自动关联组具备的权限,此外还可通过用户权限对组内
权限进行差异化;
用户类别:
管理员:默认使用0表示;
普通用户:1~65535 表示。
系统用户:1~499,无需登录,直接默认是登录状态,随机启动服务,以系统用户身份运行;
一般用户:500~65535,需要登录才能访问资源。
用户组类别:
管理员组:放管理员。
普通组:系统组,一般组。
注:为完善“用户-组”的权限模型,又提出如下分组模型。
基本组:用户被创建时,被特定指明的属组,称为基本组。没有特别指明时,默认加入与用户同名的"私有组";
附加组:基本组之外,后期加入的组。
命令操作进程流程:
1.进程和文件都具备属主,属组概念,用户登录系统后,通过shell开启进程,进程代理用户操作计算资源。进程具备属主,属组标识。
2.进程操作文件前,必须先验证是否具备访问权限。依次查看进程的属主,是否与文件属主一致,是否属于文件的数组,
文件被其他用户访问权限是否充分。以上3个条件满足任何一个,都能够成功访问到资源;
3.进程能否访问到文件,取决于进程发起者的身份(属主身份,属组身份,其他身份)是否具备访问权限。
安全上下文(secure context):用户完成登录操作后,借助shell,启动应用程序实例,开启进程,从而操作计算资源。进程是用户访问计
算资源的基本单位,是用户访问计算资源的代理。各进程以进程号pid进行隔离,与属主属组进行关联。
用户权限表:/etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
man 5 passwd (5 为文件内容描述DESCRIPTION)
account 登录名
password 命密码,使用"x",占位表示,真正信息保存在影子口令/etc/shadow中;
UID 用户ID
GID 组ID
GECOS 注释
directory 家目录
shell 用户默认shell(登录后默认开启的shell).只有出现在/etc/shells 中的shell才被认为是系统的安全shell
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
cat /etc/shadow
student:$6$lCDegY24$7nVMJzskMggPpa35OsFkTdcyBOSI/o6RdzkV5MHPbuwp5cnFg0rEE438kVkT0ZkMe5S/43r7oiEWJZ8nTWzxU.:17285:0:99999:7:::
vistor:$6$IlApMEGv$q4X6br9qYFCkk1iFwJsq5.7FjG8ckqNKBV.2vfb6chAu2jdPxs3NxhmE5cRmvmlEpXNyxy25ujzkABIKQSvt31:17285:0:99999:7:::
算法 盐 定长加密后的密文
man 5 shadow
login name 登录名
encrypted password:加密密码。
加密方法:
对称加密:加解密使用同一套密码,加密快(比公钥加密快3个数量级),但安全性低;
公钥加密:加解密使用成对密码,一个为私钥(secret key),另一个为公钥(public key),私钥加密公钥解,公钥加密私钥解,
加密慢,安全性高;是电子商务安全基础。
单向加密: 对明文进行采用特殊算法(hash算法),从而提取数据特征码,用于数据完整性校验(不可逆加密,指纹加密)。
特征:
1.雪崩效应:微小差异通过特殊算法,差异被放大。
md5sum /tmp/1.txt(uu) --> a374dbe48755965c0942862638236a1a /tmp/1.txt
md5sum /tmp/1.txt(uu1) --> 65fc3448711c59176afb32a4f6a9f2a3 /tmp/1.txt
2.定长输出。
MD5 : Message Digest 信息摘要,128位定长输出;
SHA1: Secure Hash Algorithm,168位定长输出;
变种:SHA256 ,SHA512 。
date of last password change:最近修改时间,系统安全策略规定需要定期更换密码,命名的使用期限,更换周期依赖此时间戳作参照。
minimum password age:密码最短使用生命期,该使用期限内不允许再次修改命名。
maximum password age:密码最长使用生命期,超过该期限,系统存在安全隐患。
快到达之前,会一直倒计时提醒;
逾期宽限期内,强制登陆后必须先修改密码;
超过登录失效期,无法继续登录,需要管理员协助解锁。
password warning period:密码过期前倒数开始提醒更换密码天数,此期间会一直发系统邮件提醒,逾期命名过期,在一定时间内仍可以登录,
最后会被禁用。
password inactivity period:密码过期但未禁用时期,强制修改期。仍运行登录,但必须先修改密码的逾期宽限期。
account expiration date:登录失效截至时间点(禁用时间点),此时已经不能登录,需要管理员帮助。
reserved field:保留字段。
15.权限管理
权限管理(chown chgrp chmod umask)
三类用户: 属主,属组,other.
三种权限:r - 读取/查看包含对象 ,w - 编辑/在其中新建文件 ,x - 可被执行/可进入,查看内部包含对象详细属性。
chown username file 改变文件属主和属组(只有root用户可使用),如果是目录,则只能改变目录属主,目录内部文件属性不变
-R user dir 递归修改 目录和目录内容的属主
--reference=/path/to/ref_file file 按ref_file的属主,属组信息修改 file的对应归属信息。
chown username:group_name file 同时改变属主和属组 username:group_name 等价于 username.group_name
chown :group_name file 只改变属组
chgrp group_name file 改变文件的数组
-R group_name dir 递归修改数组
--reference=/path/to/ref_file file 参照修改属组
chmod 修改文件的权限
修改三类用户权限
chmod 775 file (从右往左自动匹配 75 ---rwxr-x)
-R 递归修改权限
--reference=/path/to/ref_file file 参照修改权限
修改某类用户权限(u:owner , g:group , o:other ,a:all)
chmod u=rwx 1.txt
chmod u=rx 1.txt 缺失的权限直接省略即可
chmod u=rwx,g=x 1.txt
chmod u=g=rw 1.txt
修改某类用户的某类权限
chmod u-xr,g+w 1.txt 属主减rx,数组加w
chmod +x 1.txt 全部添加执行权限
umask 遮罩码
umask 查看当前用户的遮罩码
unask 0002 将当前用户的遮罩码设置为0002
1).linux 用户创建文件默认不得具备执行权限,因此root用户 和 普通用户创建文件,目录具备的初始权限为:666 ,777
2).为进一步限制初始创建文件 和 目录的权限,linux 规定root 用户和普通用户还要进一步剔除部分权限,分别表示为: 0022 ,0002。
此编号就是对应用户的遮罩码(掩码),666 和 777 分别 对 022 和 002 进行减法运算,得到的就是该类用户新建文件(目录)的初始权限;
root用户新建目录 root用户新建文件 普通用户新建目录 普通用户新建文件
022 022 002 002
目录 777-022=755 rwxr-xr-x / 777-002=775 rwxrwxr-x /
文件 666-022=644 rw-r--r-- 666-002=664 rw-rw-r--
3).新建文件默认不得具备执行权限,即使通过预设umask,是的新建文件在理论上具备可执行权限,具体新建过程,系统会默认+1,跳过执行权限。
16.用户管理
用户管理(useradd userdel usermod passwd chsh chfn finger id chage)
用命令替换查看命令属性:
ls -l $(which useradd) 或 ls -l `which useradd` --> -rwxr-x---. 1 root root 109328 May 11 2016 /usr/sbin/useradd
which CMD PATH路径下查看命令可执行文件存在位置;
whereis xxx 查看文件(-s 源文件,-b 可执行文件)
locate xxx 从缓存的整个文件系统文件索引目录,扫描匹配xxx标识的文件,列出全部列表
yum install mlocate 安装程序 --> updatedb 更新索引 --> locate xxx 执行查找任务。
find path -type mark 从指定路径下,按指定格式查找匹配文件,例:find /tmp -name a* 查找/tmp路径下以a开头命名的文件
grep 'xx' a* 常找当前路径下,以a开头命名的文件中包含xx 的行
(1)grep 'test' d* #显示所有以d开头的文件中包含 test的行
(2)grep ‘test’ aa bb cc #显示在aa,bb,cc文件中包含test的行
(3)grep ‘[a-z]\{5\}’ aa #显示所有包含每行字符串至少有5个连续小写字符的字符串的行
(4)grep magic /usr/src #显示/usr/src目录下的文件(不含子目录)包含magic的行
(5)grep -r magic /usr/src #显示/usr/src目录下的文件(包含子目录)包含magic的行
(6)grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’).
useradd name 添加用户,系统默认加入用户名命名的私有组;
[root@localhost tmp]# tail -1 /etc/passwd
tom:x:502:502::/home/tom:/bin/bash
[root@localhost tmp]# tail -1 /etc/shadow
tom:!!:17298:0:99999:7::: 尚未给该用户设置密码,所以加密算法位置为"!!",表示禁止使用。
[root@localhost tmp]# tail -1 /etc/group
tom:x:502:
使用useradd命令添加用户,执行了上述连串操作,每个添加的用户都有一套默认属性保底。
[root@localhost default]# ls -l /etc/default
-rw-r--r--. 1 root root 1756 Apr 11 23:03 nss
-rw-------. 1 root root 119 Feb 9 2016 useradd
[root@localhost default]# file /etc/default/useradd
/etc/default/useradd: ASCII text
[root@localhost default]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 组ID
HOME=/home 默认创建家目录位置
INACTIVE=-1 密码过期,宽限期(可登录,但强制必须先修改)
EXPIRE= 密码过期期限(空,表示永不过期)
SHELL=/bin/bash 默认shell
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
useradd
-u UID 指定UID添加用户,uid(0 - root用户,1~499 系统用户,500~65535 普通用户),UID要>=500 且未被使用
[root@localhost ~]# useradd -u 1000 toney (下一个新增用户默认在上一个UID+1)
[root@localhost ~]# tail -1 /etc/passwd
toney:x:1000:1000::/home/toney:/bin/bash
-g GID 添加用户并设置基本组
[root@localhost ~]# useradd -g test storm
[root@localhost ~]# tail -1 /etc/passwd
storm:x:1002:503::/home/storm:/bin/bash
-G GID, ... 添加用户,并指定附加组(用户只能属于唯一基本组,但可属于多个附加组)
[root@localhost ~]# useradd -G dev storm1
[root@localhost ~]# useradd -G dev storm2
[root@localhost ~]# cat /etc/group | grep 'dev'
dev:x:1002:storm1,storm2 附加组有dev组的用户集合为:storm1 storm2。
-c "COMMENT" 指定注释信息
[root@localhost ~]# useradd -c "idom" storm3
[root@localhost ~]# tail -1 /etc/passwd
storm3:x:1005:1005:idom:/home/storm3:/bin/bash
-d /path/to/home_dir 指定家目录,添加用户
[root@localhost ~]# useradd -c "Tom cat" -d /home/cat storm4
[root@localhost ~]# tail -1 /etc/passwd
storm4:x:1006:1006:Tom cat:/home/cat:/bin/bash
-s /def/shell/path 指定默认shell路径,该shell 必须是/etc/shells 下的可用shell
[root@localhost ~]# useradd -c "use zsh" -s /bin/zsh storm5
[root@localhost ~]# tail -1 /etc/passwd
storm5:x:1007:1007:use zsh:/home/storm5:/bin/zsh
-m 强制创建家目录,不继承
在-m 使用前提下,继续使用-k 将/etc/skel (skeleton)目录下文件(关于bash环境变量的设置文件).拷贝到该/home/username 下,达到继承目的。
[root@localhost ~]# ls -a /etc/skel
. .. .bash_logout .bash_profile .bashrc .emacs .gnome2 .mozilla .zshrc
-M 强制不创建家目录,即使在/etc/login.defs 中定义了默认的登录设置,此时添加的用户,不会拷贝/etc/skel下的环境设定,成功登录后可通过
默认bash,完成交互。
[root@localhost ~]# useradd -M ttt
[root@localhost ~]# su ttt
bash-4.1$
-r 添加系统用户(1~499),该用户不能登录系统,系统用户被创建后 不会创建家目录,创建随机启动服务时,通常要添加系统用户和系统组。
id [username] 查看指定用户的uid
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
-u 只显示用户uid , -g 基本组id , -G 附加组id
-un 显示用户名, -gn 基本组组名, -Gn 附加组名称
finger username 查看用户信息
[root@localhost ~]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Fri May 12 10:56 (CST) on tty1 2 hours 44 minutes idle
On since Fri May 12 10:56 (CST) on pts/2 from 192.168.1.101
26 minutes 48 seconds idle
On since Fri May 12 10:56 (CST) on pts/3 from 192.168.1.101
No mail.
No Plan.
finger 查看当前终端连接主机的全部登录信息
[root@localhost ~]# finger
Login Name Tty Idle Login Time Office Office Phone
root root tty1 2:44 May 12 10:56
root root pts/2 27 May 12 10:56 (192.168.1.101)
root root pts/3 May 12 10:56 (192.168.1.101)
userdel username 删除用户,但保留家目录
-r 顺带删除家目录
usermod
-u uid username 修改用户的uid
-g gid username 修改用户的gid
-Ga Gid username 最近用户的附加组(不适用a会覆盖之前的附加组)
-c "comment" username 修改注释
-dm /new/home_dir username 指定新的家目录,必须使用-m,才会搬家
-s /new/def_shell username 修改默认shell
-l new_name username 修改用户名
-L username 锁定帐号,类似于禁用
-U username 解锁帐号
chsh username 修改用户的默认shell
[root@localhost ~]# chsh vistor
Changing shell for vistor.
New shell [/bin/bash]: /bin/zsh
Shell changed.
[root@localhost ~]# su vistor
[vistor@localhost]/root% 命令提示符发生改变
chfn username 修改用户的注释信息
[root@localhost ~]# chfn vistor
Changing finger information for vistor.
Name []: Tom
Office []: Shanghai
Office Phone []: 123456
Home Phone []: 654321
Finger information changed.
[root@localhost ~]# finger vistor
Login: vistor Name: Tom
Directory: /home/vistor Shell: /bin/bash
Office: Shanghai, 123456 Home Phone: 654321
Never logged in.
No mail.
No Plan.
[root@localhost ~]# ls -ltr /etc/passwd
vistor:x:501:503:Tom,Shanghai,123456,654321:/home/vistor:/bin/bash
passwd 修改自身密码
passwd username root用户下修改其他用户密码
--stdin 从其他输入源代替标准输入源,完成密码设置, 例echo "redhat" | passwd --stdin username
-l username 锁定帐号,类似于禁用
-u username 解锁帐号
-d username 清空用户密码
注:echo "redhat" | passwd --stdin username 通过管道,将echo "redhat" 执行的结果,当成标准输入流(键盘)输入的信息,设置为该用户密码。
达到不与用户产生交互,通过其他信息源取代标准输入源信息,设置密码的效果。(linux 设计哲学之一,避免捕获用户接口,避免交互)
[root@localhost ~]# echo "redhat" | passwd --stdin vistor
Changing password for user vistor.
passwd: all authentication tokens updated successfully.
chage 修改用户命名的生命周期相关时间
chage -d YYYY-MM-DD username 修改最近一次修改密码时间
chage -E days username 过期周期(-1 表示永不过期)
chage -I days username 过期-禁用间隔
chage -m days username 最短至少使用期限
chage -M days username 最长能够使用期限
chage -W days username 过期前第几天开始倒计时提醒
pwck 检查用户账户完整性
[root@localhost ~]# pwck
user 'adm': directory '/var/adm' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'gopher': directory '/var/gopher' does not exist
user 'ftp': directory '/var/ftp' does not exist
user 'saslauth': directory '/var/empty/saslauth' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
user 'rpc': directory '/var/lib/rpcbind' does not exist
user 'ttt': directory '/home/ttt' does not exist
pwck: no changes
17.组管理
组管理(groupadd groupdel groupmod gpasswd)
groupadd name 添加用户组
[root@localhost ~]# tail -1 /etc/group
test:x:503:
-g GID group_name 创建组,并指定组ID
-r group_name 创建组,并添加为系统组(以后的Apache 和 Nginx 服务都要设置为随机启动服务,往往需要纳入系统用户,系统组进行管理)
groupmod -g GID group_name 修改组ID
-n new_name group_name 修改组名称
groupdel group_name 删除组名
gpasswd group_name 给组加密码
正常登录用户,通过shell创建的文件属于该用户所在的基本组。某些情况下,需要临时通过newgrp group_name 切换当前用户的所属基本组,
切换前就需要输入此时设置的组密码,一旦使用exit 退出当前shell,就自动恢复用户的原基本组。
-r 删除组密码
newgrp group_name 临时切换用户的基本组为其他组。用户在其基本组和附加组间的切换不需要输入组密码。
18.用户角度Shell分类
从用户角度看,Shell的分类
登录式shell(读取配置文件流程: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bash_rc --> /etc/bashrc)
正常终端登录
su - username
su -l username
非登录式shell(读取配置文件流程:~/bash_rc --> /etc/profile.d/*.sh --> /etc/bashrc)
su username
图形化界面,从模拟终端登录的shell
自动运行的shell脚本
bash的配置文件(全局配置优先加载,个人配置文件相对滞后,最新生效)
全局配置: 对所有用户都有效
/etc/profile , /etc/profile.d/*.sh , /etc/bashrc
个人配置:对相应的用户有效。
~/.bash_profile , ~/.bashrc
profile类文件作用:设置环境变量,运行初始化命令或脚本
bashrc类文件作用:设置本地变量,定义别名
应用:1).定义永久生效的别名:
vim ~/.bashrc 添加 alias cls='clear'
source ~/.bashrc 重新导入个人环境变量
2).定义全局永久生效别名
vim /etc/bashrc 添加 alias cls='clear'
source /etc/bashrc 重新导入全局环境变量
Tips:
1).获取linux最新内核版本号: www.kernel.org
2).linux内核与发行版间的联系:
由GUN/linux 维护的是linux的内核,其实高级语言编写的源代码程序。该程序需要针对硬件系统做相应的适配编译,转换称为二进制程序才能运行在指定的硬件架构的计算机上。
计算机的所有硬件平台的发展都遵循“向前兼容”的原则,因此各linux发行商以早期款的CPU架构为参照,按比较统一通用的架构类型将最新的linux内核进行编译,打包称为可以直接安装运行的二进制安装包发行,构成了linux的一级发行商,还有针对一级版本进行再次发行。常见的linux发行版有:Redhat(CentOS,Fedora), SUSE, Debain(Ubuntu,Mint), Gentoo, LFS(Linux From Scratch) 。
其中Redhat流行于北美,中国大陆地区,CentOS属于Redhat的社区版本,Fedora是Redhat的试验版本,SUSE流行于欧洲地区,Debain原生版本在GUN/linux的内核基础上添加少量的外围应用程序,因此其安装较为简介,使用难度比较大。Ubuntu,Mint 则是在其基础上增强图形化功能。
由于市面常见的是面向早期CPU架构的通用发现版,因此大多市面上的发现版,只满足可执行需求,硬件性能并没有被适配编译出来,导致硬件性能被浪费,为解决此问题,Gentoo发现商提供针对指定最新硬件平台的linux系统内核的源码,以及对于编译方式,让用户手动基于最新平台进行边缘,以便最大限度发回硬件性能。LFS 从“Scratch(起跑线)”开始构建linux,不提现成安装软件,只给定对于内核软件链接,和编译方式,按照给定“菜谱”,完全手动拼装,编译一个linux系统,深度定制。
3).手动添加用户
1.手动添加mysql(4008) 用户,其基本组为mysql(4008) ,附属组为mygroup(4009)
vim /etc/passwd 添加用户信息 >> mysql:x:4008:4008:mysql:/home/mysql:/bin/bash
vim /etc/group 添加用户属组信息 >> mysql:x:4008: 基本组
mygroup:x:4009:mysql 附属组
chmod u+rw /etc/shadow 修改影子口令权限
vim /etc/shadow 添加针对新用户的影子口令
方法一:直接以已经存在用户为模板进行修改
>> mysql:$6$fapZpdyh$dPpSN32VeAXhLNYW/KrUoexGVppjwAY/y11d9wfn3K9RfspgcMYSNwc7gNxN4W9XfZAc1qPP0W/KKYzcDOQ/J/:17298:0:99999:7:::
M3.DMQ30lWZAwOmdpzvUUKVefIfasHnnyDR0bC2
方法二:全自动拼接
1).加密策略暂时不考虑
2).设置密码过期策略
date +%s --> 1494585153
bc >> 1494585153/(24*60*60) --> 17298
bc >> scale=2 >> 17298.43 --> 17298.43
mysql:!!:17298:0:99999:7:::
用户名:暂不设密码:最近修改属性时间:最短修改间隔:最长修改间隔:过期前开始倒数天数:登录失效前间隔期:失效时间戳:保留字
3).先使用MD5 加密
[root@localhost home]# openssl passwd -1 -salt '12345678' 使用openssl库,调用MD5加密(-1) 方法 ,设置盐值为(12345678)8位加密
Password:
$1$12345678$Sx03Gy86On0pOXXdarGbj
mysql:$1$12345678$Sx03Gy86On0pOXXdarGbj:17298:0:99999:7:::
就可以设置了
chmod u-w /etc/shadow 重新闭合shadow的权限
直接使用nano /etc/shadow 可以不受权限约束编辑文件。
cp -R /etc/skel /home/username 给新用户添加家目录,并设置默认环境编辑
chown -R username:group_name /home/username 递归修改新用户家目录的属主,属组属性
chmod -R go-rwx /home/username 闭合家目录权限
echo "mysql" | passwd --stdin mysql 将mysql 的登录命名设置为mysql
su vistor
su mysql 登录验证 finger mysql 进一步验证
难点分析:
1).修改影子口令前,先要获取编辑权限
ls -l /etc/shadow --> -r--------. 1 root root 1790 May 12 17:41 /etc/shadow
2).由上可见普通用户通过passwd修改密码,貌似受限
ls -l $(which passwd) --> -rwsr-xr-x. 1 root root 25980 Nov 24 2015 /usr/bin/passwd
s 说明 passwd 命令具备特殊权限。