单引号:强引用,变量引用不执行替换
双引号:弱引用,变量引用会替换
``:命令替换。 $()=``

 

文件类型:
	-:常规文件
	d:目录文件
	b:块设备文件,支持以block为单位进行随机访问
	c:字符设备文件,支持以character为单位进行线性访问
           major number:主设备号,用于标示设备类型,进而确定要加载的驱动程序
		   minor number:次设备号,用于标识同一类型中的不同的设备
		       8位二进制:0-255
	l:symbolic link:符号链接文件
	p:pipe:命名管道
	s:socket:套接字文件
	
基本命令:
	命令类型:
		外部命令
		shell内嵌命令
	
		ls 的-d选项是如果是目录只显示目录
		
		type COMMAND:
			内部:builtin
			外部:显示为命令文件路径:
				注意,命令可以与原名相同,此时原名被隐藏,此时如果要运行原程序,可在命令前加\

	echo 命令
	语   法:echo [-ne][字符串]或 echo [--help][--version]
补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
参   数:-n 不要在最后自动换行
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般
文字输出:
   \a 发出警告声;
   \b 删除前一个字符;
   \c 最后不加上换行符号;
   \f 换行但光标仍旧停留在原来的位置;
   \n 换行且光标移至行首;
   \r 光标移至行首,但不换行;
   \t 插入tab;
   \v 与\f相同;
   \\ 插入\字符;
[root@localhost ~]# echo -e "\033[43;31mred color\033[0m"
red color


	
    which:显示命令的完整路径名
	    --skip-alias:忽略别名
		 eg:[root@livecd ~]# which ls
                  alias ls='ls --color=auto'
	               /bin/ls
				   
	whatis :
	  
	  手动创建whatis数据库
	      centos 6: makewhatis
		  centos 7:makedb
		  
		  手动搜索所有whatis库中和关键字相关的所有文件
       [root@localhost ~]# apropos passwd
		chpasswd             (8)  - update passwords in batch mode
		fgetpwent_r [getpwent_r] (3)  - get passwd file entry reentrantly
		getpwent_r           (3)  - get passwd file entry reentrantly
		gpasswd              (1)  - administer /etc/group and /etc/gshadow
		htpasswd             (1)  - Manage user files for basic authentication
		kpasswd              (1)  - change a user's Kerberos password
		lpasswd              (1)  - Change group or user password
		lppasswd             (1)  - add, change, or delete digest passwords
		pam_localuser        (8)  - require users to be listed in /etc/passwd
		pam_passwdqc         (8)  - Password quality-control PAM modul
		.........
		  
		  
		  
    whereis命令:  
      whereis -  whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
         用法:whereis [options] name
					-b:仅搜素二进制程序路径
					-m:仅搜素使用手册文件路径
					
	who命令:show who is logged include
		 options:
		       -b:系统此次启动的时间
			   -r:运行级别
			   
	history:历史文件中的命令历史和内存中的命令历史不一样,且默认条目为1000,所以可能看到大于1000的命令
			 历史
 
			 
			命令历史相关环境变量
				HISTSIZE:命令历史记录的条数;
				HISTFILE:指定历史文件,默认为~/.bash_history;
				HISTFILESIZE:命令历史文件记录历史的条数;
				HISTTIMEFORMAT=“%F %T“ 显示时间
				HISTIGNORE=“str1:str2:… “ 忽略string1,string2历史
			控制命令历史的记录方式:
				环境变量:HISTCONTROL 可设置多个选项,中间以:分割
						ignoredups:忽略重复的命令;连续且相同方为“重复”
						ignorespace:忽略所有以空白开头的命令
						ignoreboth:ignoredups, ignorespace
						erasedups:删除重复命令
				export 变量名="值“
				存放在/etc/profile 或~/.bash_profile
			 
	  options:
	          -c:删除所有命令历史
           	  -d n:删除指定的命令历史
     			  history -d 304 :删除指定的命令历史
	          -w:把历史列表中的命令追加至历史文件中
			  -r:从文件读取命令历史至历史列表中
	   
		history在启动时会自动读取.bash_history中的命令历史吗??
		       !#:再一次执行命令历史中的第#号命令
			   !string:再一次执行历史列表中最近一个以最近一个string开头的命令
			   !^ :引用第一个参数
			   !& :引用最后一个参数
			   !:n  :引用第n个参数
			   
			   
			   
			 控制命令历史记录的方式:
			    环境变量:HISTCONTROL
				  ignoredups:忽略重复的命令
				  ignorespace:忽略以空白字符开头的命令
				  ignoreboth:以上两个同时生效
	
[root@localhost ~]# getent passwd jay
	jay:x:500:500:root:/home/jay:/bin/bash
				  
 [root@livecd tmp]# mkdir /tmp/{a,b}/{c,d} -pv
mkdir: created directory `/tmp/a'
mkdir: created directory `/tmp/a/c'
mkdir: created directory `/tmp/a/d'
mkdir: created directory `/tmp/b'
mkdir: created directory `/tmp/b/c'
mkdir: created directory `/tmp/b/d'

[root@livecd tmp]# mkdir /tmp/m/{n/{a,b},w} -pv
mkdir: created directory `/tmp/m'
mkdir: created directory `/tmp/m/n'
mkdir: created directory `/tmp/m/n/a'
mkdir: created directory `/tmp/m/n/b'
mkdir: created directory `/tmp/m/w'

[root@livecd tmp]# mkdir /tmp/{a,b}_{c,d} -pv
mkdir: created directory `/tmp/a_c'
mkdir: created directory `/tmp/a_d'
mkdir: created directory `/tmp/b_c'
mkdir: created directory `/tmp/b_d'

 



文件: 两类数据
      元数据: metadata
	  数据:  data
	  
	  
[root@localhost ~]# stat a
 File: `a'
 Size: 0         	Blocks: 8          IO Block: 4096   regular empty file
Device: 802h/2050d	Inode: 2223942     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-07-09 13:50:46.000000000 -0700  访问即改变,cat等
Modify: 2016-07-09 13:50:21.000000000 -0700   更改内容,数据改变
Change: 2016-07-09 13:50:21.000000000 -0700  元数据改变,access改变或者数据内容的话,此
                                             也是元数据改变
											 
touch命令:
	默认是三个时间戳都会改变为当前的时间
	-c:指定的文件路径不存在时不创建文件
	-a:仅仅修改atime
	-m:仅仅修改mtime
	 
	-t STAMP: 年月日时分秒
	eg:touch -m -t 201212011030,

date
	-d DATENAME:
		eg: [root@localhost ~]# date -d "yesterday"
              Sun Jul 24 10:21:45 CST 2016
		    [root@localhost ~]# date -d "-1 days"
			  Sun Jul 24 10:21:26 CST 2016
			
			[root@localhost ~]# date -d "+2 days"
			  Wed Jul 27 10:22:16 CST 2016  
	显示前天是星期几
	  [root@localhost ~]# date -d "-2 days" +%a
			Sat
	  
cp 命令:
   SYNOPSIS
      单源复制 cp [OPTION]... [-T] SOURCE DEST
      多源复制 cp [OPTION]... SOURCE... DIRECTORY

  单源复制中,如果目标文件不存在,则事先创建文件,并复制源文件的内容到dest中
               如果dest存在:
			          如果目标文件是非目录文件,会覆盖目标文件,这点要注意
					  如果目录文件是目录文件,则在目录中创建源文件
   多源复制中:
           如果目标文件不存在,错误
		   如果目标文件存在:
					如果为非目录文件,错误
					如果是目录文件,分别复制源文件到目标目录中
					
	常用选项:
			-i:交互式复制,即覆盖之前提醒用户确认
			-f:强制覆盖目标文件
			-r: 递归复制
			-d:复制符号链接文件本身
			-a:保持原文件的属性
			
		cp一个链接文件时,默认是复制了一个以链接文件名为文件名,内容为链接的文件的内容的文件。
			而且元文件属性为新复制文件时的时间
			
	 把/root/的所有隐藏文件复制到/tmp/testdir中?		
		这样的结果是复制整个文件系统的内容到/tmp/testdir,因为.*包含了..,而root的上级目录是根目录
		[root@localhost ~]# cp  -a .* /tmp/testdir 
		正确的是:
		[root@localhost ~]# cp  -a .[^.]* /tmp/testdir 
		
	练习题:
		1.显示某个目录下的所有隐藏文件?
		[root@localhost ~]# ls -d .*
		.   .Xauthority    .bash_logout   .bashrc  .config  .lesshst  .viminfo      .xauthffHqiY
		..  .bash_history  .bash_profile  .cache   .cshrc   .tcshrc   .xauthN30RIK
		2.只显示某个目录下的隐藏目录
		[root@localhost tmp]# ls -d /root/.*/
		/root/./  /root/../  /root/.cache/  /root/.config/
		[root@localhost tmp]# ls -d /root/.*    这个会把隐藏文件和目录都显示出来
		/root/.              /root/.bash_logout   /root/.cache   /root/.lesshst  /root/.xauthffHqiY  /root/.xauthtYuvN2
		/root/..             /root/.bash_profile  /root/.config  /root/.tcshrc   /root/.xauthN30RIK
		/root/.bash_history  /root/.bashrc        /root/.cshrc   /root/.viminfo  /root/.Xauthorit

Linux enable命令用于启动或关闭 shell 内建指令。
若要执行的文件名称与shell内建指令相同,可用enable -n来关闭shell内建指令。若不加-n参数,enable可重新启动关闭的指令。
语法
enable [-n][-all][内建指令]
参数说明:
-n  关闭指定的shell内建指令。
-all  显示shell所有关闭与启动的指令
			
	bash
			
			通配符:
			   *:
			   ?:
			   []: 
			    所有以m,n,r开头的以.conf结尾的文件
			      eg:[mnr].conf
			   [^]:非[]中的
			    [[:space:]]
				[[:upper:]]
				[[:lower:]]
				[[:alnum:]]
				[[:digit:]]
				[[:punct:]]
				
				
	IO重定向及管理
			可用于输入的设备:文件
			   键盘设备、文件系统上的常规文件,网卡等
			 可用于输出的设备: 文件
			   显示器、文件系统上的常规文件、网卡等
			   
			程序的数据流有三种:
			     输入的数据流:<----标准输入(stdin),键盘      0
				 输出的数据流:----->标准输出(stdout),显示器     1
				 错误的输出流: -----> 错误输出(stderr),显示器   2
			         
			   
set 设置或者撤销shell的一些选项
    set -C : 设置无法覆盖文件
       如果确认想要覆盖,可以使用>| 	
	set +C : 关闭上述特性,可以自由覆盖,	
				
>:覆盖重定向
>>:输出追加重定向				

<:输入重定向

2>: 错误输出覆盖重定向
2>>:错误输出追加重定向

合并正常输出流和错误流:
   (1)&>,$>>
  eg:cat /etc/issue &> /tmp/issue.out
    (2)command >/path/to/somefile 2>&1
	   command >>/path/to/somefile 2>&1,这里即使追加重定向也不用2>>&1
   eg:	   
    cat /etc/issue >> /tmp/issue.out 2>&1
	
	将多个命令的执行结果保存
	eg:[root@localhost ~]# (pwd;ls) > /tmp/a


	将输入的内容保存到某个文件
	cat > /tmp/cat.out << EOF
	> how are you
	> how old are you 
	>EOF	
	
	[root@localhost ~]# cat /tmp/a
	/root
	anaconda-ks.cfg
	fish-1.23.1-1.el6.rf.x86_64.rpm
	initial-setup-ks.cfg
	
	合并两个文件的内容:
	[root@localhost ~]# cat f1 f2 > f3
	

 命令 > /dev/sda

上列命令会将某个‘命令‘的输出写到块设备/dev/sda中。该操作会将在块设备中的所有数据块替换为命令写入的原始数据,从而导致整个块设备的数据丢失。

	
	
tr命令: 不会修改原文件,必须有输入,不能直接接文件

    -c或——complerment:取字符集的补集
	-d或——delete:删除所有属于第一字符集的字符;
	-s或—squeeze-repeats:把连续重复的字符以单独一个字符表示
	-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符

				
	用法1: tr SET1 SET2 < /path/to/file 
	  eg: [root@localhost ~]# tr '[a-z]' '[A-Z]' < /etc/issue
        RED HAT ENTERPRISE LINUX SERVER RELEASE 5.8 (TIKANGA)
        KERNEL \R ON AN \M

	 用法2:tr -d 'adb' < /etc/issue   
	   [root@localhost ~]# tr -d 'abc' < /etc/issue
     Red Ht Enterprise Linux Server relese 5.8 (Tikng)
     Kernel \r on n \m
	 用法3:操作补集
    [root@localhost ~]# tr -dc 'abc' < a
	abcaaabbbccc[root@localhost ~]# cat a
	abcefg
	123
	aaabbbccc
	 [root@localhost ~]# tr -c 'a\n' 'Z' < a
		aZZZZZ
		ZZZ
		aaaZZZZZZ
	 

[root@localhost ~]# tr 'abc' 'xy' 
aaabbbccc
xxxyyyyyy
[root@localhost ~]# tr -t 'abcd' 'xy' < a
xycefg
123
xxxyyyccc

[root@localhost ~]# tr -s 'ab' 'xy' < a
xycefg
123
xyccc 
[root@localhost ~]# tr 'bc' 'xyz' 
aaabbbccc
aaaxxxyyy

[root@localhost ~]# ls /root/ | tr "\n" "\v"
a
 anaconda-ks.cfg
                b
                 c
                  d
                   fish-1.23.1-1.el6.rf.x86_64.rpm
                                                  initial-setup-ks.cfg
                                                                      lntest
                                                                            lovers.txt
                                                                                      mail


1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中。
     [root@localhost ~]# tr 'a-z' 'A-Z' < /etc/issue >/tmp/issue.out
	[root@localhost ~]# cat /tmp/issue.out
	\S
	KERNEL \R ON AN \M

3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,the system version is here,pleasehelp me to check it ,thanks!
操作系统版本信息
   [root@localhost ~]# mail -s "help" root <<EOF
	i am `id -nu` ;
	`cat /etc/centos-release`
	EOF
   [root@localhost ~]# cat a | mail -s "help5" root
   [root@localhost ~]# mail -s "help6" root < b
   [root@localhost ~]# cat b
	i am second
   
   
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开。
   一 [root@localhost ~]# ls /root/ | tr  "\n" " "
a anaconda-ks.cfg b c d fish-1.23.1-1.el6.rf.x86_64.rpm initial-setup-ks.cfg lntest lovers.txt mail  
   二 [root@localhost ~]# ls /root/ | xargs
5、file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和
6、删除Windows文本文件中的'^M'字符
7、处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格

install命令: 复制文件并且设置目录

	   单源复制:
			install [option] ... SOURCE DEST
	   多源复制:不能复制目录
			install [option] ... SOURCE... DEST
	   创建目录:
			install [option]... -d DIRECTORY...
		常用选项:
		    -m,--mode=MODE:设定目标文件权限
			-o,--owner=OWNER:设定目标文件属主
			-g,--group=GROUP:设定目标文件属组
		
		eg:
		    [root@localhost tmp]# install -m 600 -o jay -g jay /etc/issue /tmp/issue
			[root@localhost tmp]# ll /tmp/issue
			-rw-------. 1 jay jay 47 Jul 20 15:05 /tmp/issue
			[root@localhost tmp]# ll /etc/issue
			-rw-r--r--. 1 root root 47 May 19 03:47 /etc/issue


 screen命令:   命令详解 http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
		打开新的screen:
		# screen
		或:#screen -S SCREENNAME
		
		退出并关闭screen:
		# exit
		
		剥离当前screen:
		Ctrl+a,d
		或screen -d [SESSION]
		
		显示所有已经打开的screen:
		screen -ls
	
		恢复某screen
		screen -r [SESSION]		
		screen -x [session]
		
		加入到某个screen
		screen -x SCREENNAME
		
		C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态
	  ,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。 	
		
		。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。

如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。

     除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,
     然后输入quit命令退出Screen会话。
    	需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序
		
   快捷键
		C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,
				此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。 
		C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
		C-a w -> 显示所有窗口列表
 		C-a t -> Time,显示当前时间,和系统的 load 
		C-a k -> kill window,强行关闭当前的 window
		C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
			C-b Backward,PageUp 
			C-f Forward,PageDown 
			H(大写) High,将光标移至左上角 
			L Low,将光标移至左下角 
			0 移到行首 
			$ 行末 
			w forward one word,以字为单位往前移 
			b backward one word,以字为单位往后移 
			Space 第一次按为标记区起点,第二次按为终点 
			Esc 结束 copy mode 
		C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上	
		
		
		5.3 查看窗口和窗口名称

			打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,
			  这个列表会列在标题栏里。窗口列表的样子一般是这样:

			0$ bash  1-$ bash  2*$ bash  
			这个例子中我开启了三个窗口,其中*号表示当前位于窗口2,-号表示上一次切换窗口时位于窗口1。

			Screen默认会为窗口命名为编号和窗口中运行程序名的组合,上面的例子中窗口都是默认名字。练习了上面查看窗口的方法,你可能就希望各个窗口
			可以有不同的名字以方便区分了。可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认
		
		
mktemp:创建临时文件
   mktmp [options] TEMP
				-d:创建临时目录
		eg: mktmp /tmp/mytest.xxxxx


开发时经常会需查看非文本文件内容,最常见的16进制查看器就是hexdump
	hexdump:
		格式:hexdump [option] FILENAME| less
			选项:
				-b 将每个字节显示为8进制
				-c 将每个字节显示为ASCII字符
				-C 每个字节显示为16进制和相应的ASCII字符
				-d 每两个字节显示为10进制
				-o 每两个字节显示为8进制
				-x 每两个字节显示为16进制
		 常用:hexdump -C binfile     
			显示结果分为三列(文件偏移量、字节的十六进制、ASCII字符)
			DOS/Windows的换行符 \r\n 即十六进制表示 0D 0A
			Linux/Unix的换行符      \n    即十六进制表示 0A
		   
           [root@localhost ~]# hexdump -C ab.txt -s 3 -n 4
			00000003  62 0d 0a 63                                       |b..c|
			00000007
将doc文件装换为unix类型	去除换行符不一致的,	
     dos2unix FILENAME
	 
pwd :
	-P:显示真正的物理路径,而不是软连接的目录
	
	
	
	
centos6及以后的atime更改策略:
	 1只有在以下三种情况之一才会更新atime:

		(1) 如果将分区mount的挂载的时候指定采用非relatime方式(默认采用relatime方式),如strictatime.

		补充:在OS启动的时候,将各个分区挂载到不同的目录,在挂载(mount)的参数中采用strictatime,表明及时更新atime。在2.6.30之后mount添加了”relatime”和”strictatime”两个选项,详细的可以通过”man mount”查看。

		(2) atime小于ctime或者小于mtime的时候

		(3) 本次的access time和上次的atime超过24个小时









管道  接受标准输出  
[root@localhost ~]# cat /etc/issue| tr 'a-z' 'A-Z'
RED HAT ENTERPRISE LINUX SERVER RELEASE 5.8 (TIKANGA)
KERNEL \R ON AN \M

既打印到屏幕又保存到文件一份
[root@localhost ~]# cat /etc/issue |   tr -d 'adb'| tee /tmp/cat2.out
Re Ht Enterprise Linux Server relese 5.8 (Tikng)
Kernel \r on n \m

|&:表示无论正确错误都输入
[root@localhost ~]# ls /errr |& tr 'a-z' 'A-Z'
LS: CANNOT ACCESS /ERRR: NO SUCH FILE OR DIRECTORY

[root@localhost ~]# ls /errr  2>&1 | tr 'a-z' 'A-Z'
LS: CANNOT ACCESS /ERRR: NO SUCH FILE OR DIRECTORY

用户标识:
 16进制:0-65535
  管理员:0
  普通用户:1-65535
       系统用户:1-499(Centos6),1-999(Centos7)
	   登录用户:500-60000(CentOS6),1000-60000(CentOS7)
	   
	私有组和基本组的关系?
	
密码的使用策略:
	1.使用随机密码
	2.最短长度不要低于8位
	3.应该使用大写字母,小写字母,数字和标点符号中的至少3类
	4.定期更换
				
加密算法:
	 对称加密; 加密和解密使用同一个密码;
	 非对称加密:加密和解密使用的一对儿密钥:
	      密钥对儿:
				公钥
				私钥
	单向加密:只能加密,不能解密,:提取数据特征码
	    定长输出
		雪崩效应
		
		
非对称加密比对称加密慢3个数量级

加密是定长输出的,且微小的差异结果相差很多:
 [root@localhost ~]# echo "magedu" | sha224sum 
4fcc85567843dce2a166f3bee52fe2395f0fc732e01239cb5d48634e  -
[root@localhost ~]# echo "magedu1" | sha224sum 
8c516813770259a2c9e672b3cd85f19b6c60c1879410c718b7deac69  -

#echo "haha" | sha512sum  也可以加密,sha512要比md5更安全

相同的字符串,结果是相同的,为了防止这种情况,在/etc/shadow中
加了salt,也就是随机字符串,使得即使相同的密码,结果看起来也不同。

groupadd [options] group_name

更改加密算法authconfig--passalgo=sha256 --update
 
目录与文件的权限意义:
		权限对文件的意义:
			文件是实际含有数据的地方,包含一般文本文件,数据库内容文件,二进制可执行文件
			r:可读取此文件的实际内容,如可读取文本文件的文字内容等
			w:可以编辑、新增、或者修改该文件的内容(但不含删除该文件),这里的修改等是对文件内容而言,是否可以删除文件要看该目录的权限
			x:该文件具有可以被系统执行的权限,linux中文件是否可被执行,不是看其文件名,而是看权限
		
		权限对目录的意义:
			目录主要的内容是记录文件名列表,文件名与目录有强烈的关联
			r:表示具有读取目录结构列表的权限
			w:1.新建新的文件与目录
			   2.删除已经存在的文件与目录
			   3.将已存在的文件与目录的重命名
			x:表示用户是否能够进入该目录病成为工作目录
			
			
			如果想让一个目录让任何人都可以浏览,至少应该开放r,x权限,w不能随便给

参照指定文件的权限来给新文件赋予权限	 
chown [options] --reference=SFILE DFILE

对于/etc/passwd,/etc/group等文件直接利用vim命令可能造成文件的格式问题,建议使用vipw,vigr
对于/etc/passwd,/etc/group等文件进行检查可以使用命令pwck和grpck
	
umask:默认权限
      文件:
	       666-umask
	  目录:
			777-umask



			如果umask如果是003,那么新建的文件权限是什么? 
						666-003=663(rwxrwx-wx) 这个是不对的,因为一般文件是默认没有可执行权限的
                        可以使用字符做加减
	
用户仅可以修改自己为属主的文件的权限,
仅管理员可以修改文件的属主和属组
	



	
隐藏权限		
		chatter:设置文件的隐藏属性
			 +:增加某一个特殊参数,其他原本参数不动
			 -:删除某一个特殊参数,其他参数不动
			 =:设置为仅后面的参数
		  选项:
			 a:设置a后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性
			 i:它可以让一个文件不能被删除,改名,设置连接也无法写入或添加数据,对系统安全有重要意义,只root可设置
			 
		lsattr:查看隐藏属性
		
特殊权限
		SetUID: 针对文件
			SUID权限仅对二进制程序有效
			执行者对于该程序需要具有x的执行权限
			本权限仅在执行过程中有效
			执行者将具有该程序所有者的权限
			
		eg:[root@livecd ~]# ll /usr/bin/passwd 
			-rwsr-xr-x. 1 root root 30768 Feb 22  2012 /usr/bin/passwd
		
		SetGID: 针对文件
			SGID对二进制程序有用
			程序执行者对于该程序来说,需具备x的权限
			执行者在执行过程中将会获得该程序用户组的支持
			
			  设置该选项后具有的功能:
				 用户若对于此目录具有r与x的权限时,该用户能够进入此目录
				 用户在此目录下的有效用户组将会变成该目录的用户组
				 若用户再次目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同
				 
		SBIT: 针对目录
			当用户对于此目录具有w,x权限,即具有写入的权限
			当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件


find命令:			
 find [path] [option] [action]
			 参数:
							
				-[mtime|ctime|atime]:
				      n : n为数字,意义为在n天之前的“一天之内” 被改动过的文件
					  +n:n天之前被更改过的文件
					  -n:n天之内被更改过的文件
					  
				-newer:比那个文件更新的
					 找出/etc下比/etc/passwd更新的所有文件
					 find /etc  -newer /etc/passwd   
				-uid n: 按照用户id查找
					eg: find /tmp -uid 500 
				-gid n;
				-user name:
				-group name:
				-nouser:
				-nogroup
				-name filename 
					eg: find name /pattern/ 
					     支持glob风格的通配符,
				-regex pattern:基于基础正则表达式模式查找文件,匹配的是整个路径,而非其名
				
				-iname filename:忽略文件名大小写
				-size [+-]SIZE:
				    eg:find /etc/ -size +1M
					#UNIT:(#-1,#]
					-#UNIT: [0,#-1]
					+#UNIT: (#,无穷大)
				-type TYPE: 依照文件类型查找
						f:
						d:
						l:
						b:
				-perm mode: 权限完全相等的文件会显示
				-perm -mode:三组权限大于等于要求的文件都会显示
				-perm /mode: 只要有某一位权限吻合就显示
				-exec command 
				
				组合测试:
					与:-a,默认组合逻辑
					或:-o,
					非:-not ,!
				练习:
					1.找出/tmp/目录下属主为非root,且文件名不包含fstab字符串的文件;
					
				处理动作:
					 -print:输出至标准输出,默认的动作
					 -ls:类似于对查找到的文件执行“ls -l”,输出文件的详细信息
					 -delete:删除查找到的文件
					 -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中
					 -ok COMMAND {} \;   :对查找到的每个文件执行由COMMAND表示的命令,每次操作都由用户确认
					 -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令
				

				注意:find 传递查找到的文件路径至后面的而命令时,是先查找出所有符合条件的文件路径,并
				     一次性传递给后面的命令,但有些命令不能接受过长的参数,此时命令执行会失败。
					 
					 
				xargs:
					eg: cut -d: -f1 /etc/passwd | xargs mv {} {}.er 
					
					

linux用户和组管理
	groupadd : 添加组
			-g GID:指定GID,默认是上一组的GID
			-r :创建系统组
			
			eg:增加一个组ID为3305的系统组
			[root@localhost ~]# groupadd -r -g 3305 myssql
			[root@localhost ~]# tail -1 /etc/group
			myssql:x:3305:
	groupmod命令: 修改组的属性
			groupadd [options] GROUP
				-g  GID: 修改GID;
				-n new_name:删除组名
			eg: 同时修改组合GID
			 [root@localhost ~]# groupmod -g 3308 -n mygroup myssql
			[root@localhost ~]# !tai
			tail -1 /etc/group
			mygroup:x:3308:
				
	groupdel: 删除组			

useradd命令: 创建用户
	  useradd [options] 登录名
			-u UID: 指定UID
			-g GROUP:指定基本组ID
			-G  GROUP1,GROUP2....:指明用户所属的附加组
			-c,--comment COMMENT:指明注释信息
			-d,--home HOME_DIR:以指定的路径作为家目录,
			-s,:指定用户的默认shell
			-r:创建系统用户,默认没有家目录
			-M:不创建家目录
			-N 不创建私用组做主组,使用users组做主组
			
			useradd -D: 显示创建用户的默认配置
			useradd -D arg:修改默认选项的值
		            默认修改的结果其实在/etc/default/useradd	
		
		创建用户时的诸多默认设定配置文件为/etc/login.defs
		
		添加系统用户: 
			useradd -r -s /sbin/nologin  na 
		
usermod命令: 修改用户属性  
	  usermod  选项 登录名
		   -u,--uid UID:修改用户的ID为此处指定的新UID,如果同时有-o选项,则可以重复使用其他用户的标识号,例如让两个用户拥有相同的UID
		         eg: usermod -o -u 0 jay 
		   -g GID:修改用户所属的基本组
		   -G  GROUP1,GROUP2....:指定用户所属的附加组
		   -a -G GID : 添加一个附加组
		   -c OMMENT:指明注释信息
			-d -m HOME_DIR:修改用户的家目录,并将原来的文件也转移到新位置
			-d HOME_DIR:只重新指定新的家目录,原有的文件不动
			-l NEW_LOGIN:修改用户名
			-s SHELL: 修改用户的shell
			-L :锁住用户,用户不能登录,其实是在密码串前加一个“!”
			-U:解锁用户
			 
		tips:修改用户名后只是修改了用户的名称,其他的家目录和密码等都没有改变,所以/home/下并没有新用户名命名的目录
			
			i love you ,do you know 
			
			
userdel: 删除用户
		-r:移除用户的家目录,默认不删除用户家目录
			
passwd 
		-l,-u:锁定和解锁用户
		-d:清除用户的密码
 	    --stdin: 利用标准输入赋予密码
			eg: echo "haha" | passwd --stdin jay
		
newgrp:可以切换基本组。
  exit:可以撤销为原来的组
  
 gpasswd:
       gpasswd [options] group
	    -a USERNAME:添加用户
		-d USERNAMW:删除用户
		
		不加选项就是赋予组密码,可以用来被其他用户临时作为基本组
	
chage命令: 
		chage [options] 用户名
	         -l:列出用户的以及密码的有效期限
			-m:修改密码的最小天数
			-M:修改密码的最大天数
			-I:密码过期后,锁定帐号的天数
			-d:指定密码最后修改的日期
			-E:有效期,0表示立即过期,-1表示永不过期
			-W:密码过期前,开始警告天数	
    $ sudo chage -d0 <user-name>

	最初,“-d <N>”选项应该被设成密码的“有效期”(自密码上一次更改时间1970年1月1日以来的天数)。所以,“-d0”表明该密码是在1970年1月1日更改的,
	这实际上让当前密码到期失效,从而让密码在下一次登录时被更改。

	让当前密码到期失效的另一个办法是通过passwd命令。

	    $ sudo passwd -e <user-name>  此命令具有与“chage -d0”同样的功效,让用户的当前密码立即到期失效。
		 [root@localhost ~]# passwd -e lu
		Expiring password for user lu.
		passwd: Success
		You have new mail in /var/spool/mail/root
		[root@localhost ~]# tail -1 /etc/shadow
		lu:$6$ykaDA5pL$F4/xBagMqc81vmYh5g3di3hdpmQmGuhqtFBegVHLOci4Fd.fhai.XLcFwANBQU1kw3ASyy0Q.25XyFx7KJ/JL/:0:0:99999:7:::

 
	
	
	
	
id [options] [user]
     -n:
	 -u:
	 -g:
	 -G:
	 
su 
 -c:不切换过去,直接执行一些命令
 
 
 文件比较工具:
    diff:
       diff [-bBi] from-file  to-file 
		 options:
			-b:忽略一行当中仅有多个空白的区别
			-B:忽略空白行的区别
			-i:忽略大小写的差别
		  eg:
			[root@]localhost test] # cat issue.old issue.new 
				\S
				Kernel \r on an \m

				Kernel \r on an \m
				hello world

			[root@]localhost test] # diff issue.old issue.new 
				1d0
				< \S
				2a2
				> hello world
						
    patch:
	  	   patch -p# < patch.file
	       patch -R -p# < patch.file
	   -p #:表示取消几层目录的意思
	   -R :代表还原,将新文件还原为原来的旧版本
	   
 
	   
		[root@]localhost ~] # diff -Naur issu^C
		[root@]localhost ~] # cd /tmp/test/
		[root@]localhost test] # diff -Naur issue.old issue.new > issue.patch 
		[root@]localhost test] # cat issue.patch
		--- issue.old	2016-07-31 11:08:47.537563762 +0800
		+++ issue.new	2016-07-31 11:09:35.176561366 +0800
		@@ -1,3 +1,3 @@
		-\S
		 Kernel \r on an \m
		+hello world
		 
		[root@]localhost test] # patch -p0 < issue.patch 
		patching file issue.old
		[root@]localhost test] # cat issue.old 
		Kernel \r on an \m
		hello world

		[root@]localhost test] # patch -R -p0 < issue.patch 
		patching file issue.old
		[root@]localhost test] # cat issue.old 
		\S
		Kernel \r on an \m

	
	

	
		独立分区:
			/boot:  100M即可
			/:      10-15G
			/swap:  至少512M,一般等于自己的物理内存即可,太大也无用
			/home: 最大剩余空间的一半,多留点
			
			
	进程以其发起者的身份运行;
	  进程对文件的访问权限,取决于发起此进程的用户的权限
	  
	 为了能够让后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不登录系统
	 
 红帽知识库和官方在线文档
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com


http://tldp.org
http://www.slideshare.net
http://www.google.com
Openstackfiletype:pdf
rhcasite:redhat.com/docs