2.Linux常识

01.Linux操作系统安装

安装环境:

第一种: 直接基于发行版ios文件安装

第二种:远程自动化安装(kickstart)

  •     原理:
  1. 以CentOS为例,已经成功安装的linux系统,会在/root目录下生成anaconda-ks.cfg文件,这个是由CentOS 安装程序anaconda根据你在系统安装过程中所有的键盘类型、语言、时区、分区、程序包的选择而生成的一个指导安装文件.
  2. 如果对自动生成的anaconda-ks.cfg 不满意,还可以在源主机上安装system-config-kickstart 程序,结合图形化界面,生成自定义的ks.cfg文件,该文件包含安装源(install),初始化设置(键盘类型,语言时区,网络状态),预先安装软件( %packages ),预执行脚本( %pre ),安装后执行脚本( %post )等信息.
  3. 以源主机为模板,加载其安装源文件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

半切换
[root@localhost ~]# su -l student
[student@localhost ~]$ whoami
student
[student@localhost ~]$ exit
logout
[root@localhost ~]#

                用户密码修改:

                    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 命令具备特殊权限。

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/2934211/blog/889444

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值