命令cat、tac、head、tail、cut、sort、tr、history及bash特性

作业1:
1、创建目录/backup
# mkdir -v /backup
2、复制目录/etc至/backup目录中,并重命名为"etc-当前日期",如etc-2013-02-26;要求保留文件原来的属性,保持链接文件;
cp:
-r,-R,--recursive:递归复制目录及目录所有文件及子目录到目标目录下
-p,--preserve:复制文件时候保留文件的原有的属主、属组、权限、以及时间戳等属性值。
-d,--no-dereference,--preserve=link:当复制符号连接时,保持链接自身,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
# cp -a /etc /backup/etc-2013-02-28
命令替换
3、复制文件/etc/inittab为/tmp/inittab.new,并删除inittab.new文件的后两行;

# cp /etc/inittab  /tmp/inittab.new
# nano /tmp/inittab.new

作业2:
1、思考:ls命令是否可以显示某目录的整体大小,即包括其内部的所有文件的整体大小?
2、通过帮助手册,学习使用du命令;
# du:显示目录或文件的大小
-s,--summarize:仅显示总计
-h,--human-readable 以K,M,G为单位,提高信息的可读性
3、通过帮助,学习read命令;
变量:内存空间,有名称
变量赋值:
变量替换:
作业3:
描述GPL, BSD, Apache三个开源协定的大体联系及区别。
自由软件
开源协定,版权描述
作业4:
1、如何获取Linux当前最新的内核版本号?
www.kernel.org
2、列出你所了解的Linux发行版,并说明其跟Linux内核的关系。
Linux, GNU: GNU/Linux, 源代码
发行版:Fedora, RedHat(CentOS), SUSE, Debian(Ubuntu, Mint), Gentoo, LFS(Linux From Scratch)
编译:把源代码转换成可以在CPU执行的二进制的过程;编译将源程序转化成对应平台可以执行的二进制格式,跟硬件密切相关的。
使用操作系统工作:
运行程序
设备管理
软件管理
进程管理
网络管理
目录管理:
ls 、cd、pwd、mkdir、rmdir、tree(查看目录树)
文件管理:
touch(修改时间戳)、stat(查看文件属性信息)、file(查看文件内容类型)、rm(删除)、cp(复制)、mv(剪切)、nano(编辑器)
日期时间:
date、clock、hwclock、cal(日历)
Linux哲学思想:
1、一切皆文件
2、使用纯文本文件保存软件配置信息
3、功能单一小程序组合完成复杂任务
4、尽量避免捕获用户接口
查看文本文件内容:
cat、tac、more、less、head、tail
cat:连接并显示,将参数给的文本文件内容一个一个完全显示出来。
cat [OPTION]... [FILE]...
-n:显示的时候可以显示行号,行号不是文件内容,只是显示的号码而已,跟文件内容没关系。
-E,--show-ends:显示每一行的行结束符,对于linux而言所有文本文件的每一行的行结束符是$符。
-T,--show-tabs:显示TAB制表符。
-v,--show-nonprinting:显示其他的非打印字符。
-A,--show-all:显示所有内容。
tac:反过来显示文本内容。
cat不加任何参数,cat默认作用,从标准输入读取内容并显示到标准输出上来,退出CTRL+C。
cat如果显示的文本文件内容比较长,闪过去的内容会在缓存区域保存下来,真正想往前看是可以翻回去的,但是内存区域有限,假如翻回去的50屏,只能缓存20屏,就算能够往前翻,也只能翻20屏而已,前面30屏都没了,在终端上翻屏SHIFT+PAGEUP/PAGEDOWN。

[root@Smoke ~]# cat /etc/issue(查看issue文件内容)
CentOS release 6.5 (Final)
Kernel \r on an \m
[root@Smoke ~]# cat /etc/fstab(查看fstab文件内容)
UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 /                       ext4    defaults        1 1
UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot                   ext4    defaults        1 2
UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@Smoke ~]# cat /etc/issue /etc/fstab(查看issue和fstab文件,逐个显示)
CentOS release 6.5 (Final)
Kernel \r on an \m
UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 /                       ext4    defaults        1 1
UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot                   ext4    defaults        1 2
UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@Smoke ~]# man cat(查看cat的man手册)
[root@Smoke ~]# cat -n /etc/issue(显示issue文件内容,-n显示行号,)
    1        CentOS release 6.5 (Final)
    2        Kernel \r on an \m
    3        
[root@Smoke ~]# cat -E /etc/issue(显示issue文件内容,-E显示每一行的行结束符)
CentOS release 6.5 (Final)$
Kernel \r on an \m$
$
[root@Smoke ~]# tac /etc/issue(反过来显示issue文件内容)
Kernel \r on an \m
CentOS release 6.5 (Final)
[root@Smoke ~]# cat(cat不加参数,cat默认作用,从标准输入读取内容并显示到标准输出上来,退出CTRL+C)
ls
ls
cd  
cd
abcd
abcd
^C
[root@Smoke ~]# cat /etc/issue^C(CTRL+C取消命令使用)
[root@Smoke ~]# cat -n /etc/rc.d/rc.sysinit(显示rc.sysinit文件内容,内容比较长,-n显示行号)

通过:SHIFT+PAGEUP/PAGEDOWN翻屏查看
分屏查看文本文件内容命令:
more、less
more:翻到最后会自动退出文本,所以不支持向前翻
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
less:man文档本身就是通过less命令打开并查看的
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER或j
向前翻一行:k
查找:
/KEYWORD: 向后查找
n: 下一个
N:前一个
?KEYWORD:向前查找
n: 下一个
N:前一个
q: 退出

[root@Smoke ~]# more /etc/rc.d/rc.sysinit(分屏显示rc.sysinit文件)
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
[root@Smoke ~]# less /etc/rc.d/rc.sysinit(分页显示rc.sysinit文件)
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER或j
向前翻一行:k

查看文件部分内容:
head:查看前n行,默认n是10行。
tail:查看后n行,默认n是10行。
-n:指定显示多少行。
-#:#代表数字,直接显示多少行,linux支持,unix不支持。
tail -f: 查看文件尾部,不退出,等待显示后续追加至此文件的新内容;其他任何进程只要向打开文件尾部写入新内容都会立即予以显示。

[root@Smoke ~]# head /etc/inittab(查看inittab文件前10行内容)
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
[root@Smoke ~]# head -n 1 /etc/inittab(查看inittab文件显示前1行内容,-n指定显示几行)
# inittab is only used by upstart for the default runlevel.
[root@Smoke ~]# head -n 2 /etc/inittab(查看inittab文件显示前2行内容,-n指定显示几行)
# inittab is only used by upstart for the default runlevel.
#
[root@Smoke ~]# head  -2 /etc/inittab(查看inittab文件显示前2行内容,-2指定显示2行)
# inittab is only used by upstart for the default runlevel.
#
[root@Smoke ~]# tail -5 /etc/inittab(查看inittab文件显示后5行内容,-5指定显示5行)
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
[root@Smoke ~]# tail  /etc/inittab(显示inittab文件后10行内容)
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
[root@Smoke ~]# cp /etc/inittab /tmp/(复制inittab文件到/tmp目录)
[root@Smoke ~]# tail -f /tmp/inittab(查看文件尾部,不退出,等待显示后续追加至此文件的新内容;其他任何进程只要向打开文件尾部写入新内容都会立即予以显示)
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
在通过另一个终端编辑/etc/inittab文件,编辑此文件。
[root@Smoke ~]# nano /tmp/inittab(编辑inittab文件,在尾部写入新的内容)
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
A new line
[root@Smoke ~]# tail -f /tmp/inittab(显示新的内容A new line)
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
A new line(显示的新内容)

文本处理:
cut、join、sed、awk
cut:文本切段,把每一行切片,切完之后只保留其中一部分
-d:指定字段分隔符,默认是空格(一个空格)
-d ::通过冒号:分段
-f: 指定要显示的字段
-f 1:显示第一个字段
-f 1,3:显示第一个和第三个字段
-f 1-3:显示第一到第三字段
join:文本拼凑,用来将两个文件中,制定栏位内容相同的行连接起来。
sed:是一种流编辑器
awk:报告生成命令
database:数据库,
数据要有意义,对于数据库而言通常要定义表述属性到底是什么
关系型数据库:
表:二维表,行和列;一个表可以没有行,但是不能没有列。
文本文件:也可以保存数据库,通过分隔符分开,只不过处理速度比较慢;
Tom:23:male:2013/05/06

[root@Smoke ~]# cat /etc/passwd(查看passwd文件内容)
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[root@Smoke ~]# cut -d : -f1 /etc/passwd(文本切段,-d:使用冒号:隔开,-f1只显示第一段)
root
bin
daemon
adm
lp
sync
[root@Smoke ~]# cut -d : -f 1,7 /etc/passwd(文本切段,-d:使用冒号:隔开,-f 1,7显示第1和第7字段)
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
sync:/bin/sync
[root@Smoke ~]# cut -d : -f 1-3 /etc/passwd(文本切端,-d:使用冒号:隔开,-f 1-3显示1到3字段)
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
sync:x:5

文本排序:
sort:排序,默认升序排序,根据一个字符在ASCII表中升序排序,并不影响原文件,仅仅是对输出显示内容进行处理,比较每一个字符自左向右逐个比较,如果第一个相同就比较第二个,如果第二个相同就比较三个,而后进行升序排列。
-n:数值排序,按照数值的大小排序
-r: 降序,
-t: 字段分隔符
-k: 以哪个字段为关键字进行排序
-u: 排序后相同的行只显示一次
-f: 排序时忽略字符大小写
uniq:报告那一行出现重复或略过重复的行
-c: 显示文件中行和重复的次数
-d: 只显示重复的行一次
-D:显示所有重复的行
无论是sort还是uniq如果两个行不相邻,就算它一模一样,也不认为是重复的行。

[root@Smoke ~]# cat /etc/fstab(显示fstab文件内容)
UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 /                       ext4    defaults        1 1
UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot                   ext4    defaults        1 2
UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@Smoke ~]# sort /etc/fstab(排序fstab,默认升序排列)
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
proc                    /proc                   proc    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot                   ext4    defaults        1 2
UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 /                       ext4    defaults        1 1
UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap                    swap    defaults        0 0
[root@Smoke ~]# nano sort.test(编辑sort.test文件)
[root@Smoke ~]# cat sort.test(查看sort.test内容的正常排序)
456
67
111
231
[root@Smoke ~]# sort sort.test(使用sort进行排序,默认升序,并不是比较字符大小,比较每一个字符自左向右逐个比较,如果第一个相同就比较第二个,如果第二个相同就比较三个,而后进行升序排列)
111
231
456
67
[root@Smoke ~]# sort -n sort.test(对sort.test文件内容排序,-n按照数值大小升序排序)
67
111
231
456
[root@Smoke ~]# sort -r sort.test(对sort.test文件内容排序,-r逆序排序,根据一个字符在ASCII表中排序)
67
456
231
111
[root@Smoke ~]# sort -rn sort.test(对sort.test文件内容排序,-r逆序排序,-n按照数值大小)
456
231
111
67
[root@Smoke ~]# sort /etc/passwd(对passwd文件内容排序,默认升序排序,根据一个字符在ASCII表中排序)
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
[root@Smoke ~]# sort -t: -k3 /etc/passwd(对passwd文件内容排序,-t指定冒号:分割,-k3指定第三段,默认升序排序,根据一个字符在ASCII表中排序)
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
[root@Smoke ~]# sort -t: -k3 -n /etc/passwd(对passwd文件内容排序,-t指定冒号:分割,-k3指定第三段,-n按照数字大小排序,默认升序排序)
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@Smoke ~]# nano sort.test(编辑sort.test文件,写入一下内容)
456
67
111
231
456
7890
111
[root@Smoke ~]# sort -n sort.test(对sort.test文件内容排序,-n按照数值大小排序,默认升序排序)
67
111
111
231
456
456
7890
[root@Smoke ~]# sort -n -u sort.test(对sort.test文件内容排序,-n按照数值大小排序,-u排序后相同的行只显示一次,默认升序排序)
67
111
231
456
7890
[root@Smoke ~]# uniq sort.test(报告那一行出现重复或略过重复的行,由于重复的行不相邻认为是不重复的行,统统显示)
456
67
111
231
456
7890
111
[root@Smoke ~]# nano sort.test(编辑sort.test文件,写入以下内容)
456
456
67
111
231
456
7890
111
[root@Smoke ~]# uniq sort.test(报告那一行出现重复或略过重复的行,由于第一行和第二行重复切相邻所以只显示一次)
456
67
111
231
456
7890
111
[root@Smoke ~]# uniq -d sort.test(报告那一行出现重复或略过重复的行,-d只显示重复的行)
456
[root@Smoke ~]# uniq -D sort.test(报告那一行出现重复或略过重复的行,-D显示所有重复的行)
456
456
[root@Smoke ~]# uniq -c sort.test(报告那一行出现重复或略过重复的行,-c显示文件中行和重复的次数)
     2 456
     1 67
     1 111
     1 231
     1 456
     1 7890
     1 111

文本统计:
wc(word count):统计一个文件中一共有多少行,有多少个单词,有多少字符;
-l:只显示行数
-w:只显示单词数
-c:只显示字节数
-m:只显示字符数
-L:最长一行包含多少字符

[root@Smoke ~]# wc /etc/fstab(使用wc统计fstab文件内容有多少行,多少单词,多少字符)
15  78 805 /etc/fstab
[root@Smoke ~]# wc -l /etc/fstab(统计fstab的行数,-l只显示
15 /etc/fstab
[root@Smoke ~]# wc -w /etc/fstab(统计fstab的单词数,-w只显示单词数)
78 /etc/fstab
[root@Smoke ~]# wc -c /etc/fstab(统计fstab的字节数,-c只显示字节数)
805 /etc/fstab
[root@Smoke ~]# wc -m /etc/fstab(统计fstab的字符数,-m只显示字符数)
805 /etc/fstab
[root@Smoke ~]# wc -L /etc/fstab(统计fstab的字符数,-L最长一行包含多少字符)
93 /etc/fstab

字符处理命令:
tr:转换或删除字符
tr [OPTION]... SET1 [SET2]
-d: 删除出现在字符集中的所有字符,只需要给出SET1。
tr ab AB:将小写ab换成AB,逐个字符进行比较。

[root@Smoke ~]# tr 'ab' 'AB'(将小写ab替换为大写AB)
abc
ABc
able
ABle
account
Account
begin
Begin
[root@Smoke ~]# tr 'ab' 'AB' < /etc/passwd(将passwd文本内容输入重定向,通过tr将小写ab转换为大写AB)
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
lp:x:4:7:lp:/vAr/spool/lpd:/sBin/nologin
[root@Smoke ~]# tr 'a-z' 'A-Z' < /etc/passwd(将passwd文本内容输入重定向,通过tr将小写字母转换为大写字母)
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
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
[root@Smoke ~]# tr -d 'ab'(删除a字符或者b字符,-d删除出现在字符集中的所有字符)
hellodba
hellod
are
re
^C

bash及其特性:
shell: 外壳
GUI:Gnome, KDE, Xfce
CLI: sh, csh, ksh, bash, tcsh, zsh
shell在什么时候被启动:
在用户登录的时候,当用户舒服帐号密码完成以后,用户下来就要使用系统资源;此时就得给用户提供一个输入命令的地方,因此这时就会打开一个shell
程序:程序只能有一个;进程可能有多个,进程是程序的副本,进程是程序执行的实例,一个程序只有运行起来才叫进程,进程是有生命周期的,从启动那一刻开始到中止那一刻结束,这个过程是由内核管理的,bash也不例外,用户登录进来系统之后很可能在系统上同时运行的shell进程会有多个,而且每一个用户之间,甚至同一个用户在不同地方登录的它们都会具有不同的shell进程。
允许一个用户帐号登录多次,而这多次登录每一个打开的shell都是各自独立的shell,彼此之间各不相干。
每一个进程只认为当前系统上所运行的程序只是它自己,也就意味着每隔进程是不知道别人的存在的,在每隔进程看来,当前主机上只存在内核和当前进程,它意识不到其他进程的存在,每一个用户登录一次为了两个用户之间不会产生冲突,不会产生矛盾,事实上是打开多个进程,进程可以同名,但是只要进程号不同,他们属于不同的进程。
用户工作环境:
bash:
#:管理员
$:普通用户
shell是有子shell,在shell中又打开一个shell,一个shell子shell也未必非要跟它一样的shell,因为它只是打开一个程序而已,不管那个程序是什么。
父shell不知道子shell在运行,它认为自己是独有的shell,很多时候对父shell设定对子shell是无效的,对子shell设定对父shell也是无效的。
无论那种shell都支持用户对自己的工作环境做装饰

[root@Smoke ~]# type bash(查看bash命令类型)
bash is /bin/bash
[root@Smoke ~]# bash(在shell中打开一个子shell)
[root@Smoke ~]# bash(在子shell中打开子shell)
[root@Smoke ~]# export LANG=en(更改语言编码为english)
[root@Smoke ~]# pstree(以树状图的方式展现进程之间的派生关系)
init─┬─NetworkManager─┬─dhclient
    │                └─{NetworkManager}
    ├─abrtd
    ├─acpid
    ├─atd
    ├─auditd───{auditd}
    ├─automount───4*[{automount}]
    ├─bluetoothd
    ├─certmonger
    ├─console-kit-dae───63*[{console-kit-da}]
    ├─crond
    ├─cupsd
    ├─dbus-daemon
    ├─hald─┬─hald-runner─┬─hald-addon-acpi
    │      │             ├─hald-addon-inpu
    │      │             └─hald-addon-rfki
    │      └─{hald}
    ├─login───bash
    ├─master─┬─pickup
    │        └─qmgr
    ├─5*[mingetty]
    ├─modem-manager
    ├─mysqld_safe───mysqld───9*[{mysqld}]
    ├─nrpe
    ├─rpc.idmapd
    ├─rpc.mountd
    ├─rpc.rquotad
    ├─rpc.statd
    ├─rpcbind
    ├─rsyslogd───3*[{rsyslogd}]
    ├─sshd───sshd───bash───bash───bash───pstree(打开bash,在里面打开bash,再打开bash,运行pstree)
    ├─tpvmlp
    ├─udevd───2*[udevd]
    ├─vmtoolsd───{vmtoolsd}
    ├─vmware-vmblock-───2*[{vmware-vmblock}]
    ├─wpa_supplicant
    └─xinetd
[root@Smoke ~]# exit(退出子shell)
exit
[root@Smoke ~]# csh(在bash中打开csh)
[root@Smoke ~]# pstree
init─┬─NetworkManager─┬─dhclient
    │                └─{NetworkManager}
    ├─abrtd
    ├─acpid
    ├─atd
    ├─auditd───{auditd}
    ├─automount───4*[{automount}]
    ├─bluetoothd
    ├─certmonger
    ├─console-kit-dae───63*[{console-kit-da}]
    ├─crond
    ├─cupsd
    ├─dbus-daemon
    ├─hald─┬─hald-runner─┬─hald-addon-acpi
    │      │             ├─hald-addon-inpu
    │      │             └─hald-addon-rfki
    │      └─{hald}
    ├─login───bash
    ├─master─┬─pickup
    │        └─qmgr
    ├─5*[mingetty]
    ├─modem-manager
    ├─mysqld_safe───mysqld───9*[{mysqld}]
    ├─nrpe
    ├─rpc.idmapd
    ├─rpc.mountd
    ├─rpc.rquotad
    ├─rpc.statd
    ├─rpcbind
    ├─rsyslogd───3*[{rsyslogd}]
    ├─sshd───sshd───bash───csh───pstree(在bash中打开csh)
    ├─tpvmlp
    ├─udevd───2*[udevd]
    ├─vmtoolsd───{vmtoolsd}
    ├─vmware-vmblock-───2*[{vmware-vmblock}]
    ├─wpa_supplicant
    └─xinetd
[root@Smoke ~]# exit(退出csh)
exit

bash:
1、命令历史、命令补全
2、管道、重定向
3、命令别名
4、命令行编辑
5、命令行展开
6、文件名通配
7、变量
8、编程
命令行编辑:
光标跳转:
Ctrl + a:跳到命令行首
Ctrl + e:跳到命令行尾
Ctrl + <-:向命令行首每单词跳动
Ctrl + ->: 向命令行尾每单词跳到
Ctrl + u: 删除光标至命令行首的内容
Ctrl + k: 删除光标至命令行尾的内容
Ctrl + l: 清屏
Ctrl + d:删除光标至命令行尾的内容,单个字符删除
Delete: 删除光标至命令行手的内容,单个字符删除
命令历史:
history:查看命令历史,命令历史保存在内存缓冲区当中,
history #:#代表数字,显示最近使用#条历史命令
-c:清空命令历史
-d OFFSET [n]: 删除指定位置的命令
-w:保存命令历史至历史文件中
可以使用上下箭头或pageup/pagedown进行找回历史命令;
登录系统以后所执行的命令历史都在内存缓冲区当中,这意味着,一旦这个进程结束了,它的命令历史就没有了,但是下次开机以后还想再用,用户每一次登录系统所执行的命令历史都在内存缓冲区当中,如果用户正常退出的话,这些命令历史会被从内存中保存至某一个文件里面去,这个文件在登录用户的家目录里面的隐藏文件叫.bash_history,所以用户正常退出以后,那些命令都会被追加到.bash_history文件里面,所以下次再登录进去,包括关机了下次再启动,原来上次执行的命令历史仍然会有,因为这个文件能读到,也可以手动将缓冲区中的历史命令保存到.bash_history文件里面去,bash能够给我们保存多少条历史命令,尽管说可以使用内存空间保存历史命令,但也不能过多,如果我们执行了10W条命令都保存下来需要多大内存,所以能保存多少是需要定义的;
环境变量:
PATH:命令搜索路径
HISTSIZE:命令历史大小,默认是1000条
命令历史的使用技巧:
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
Esc, .:引用前一个命令或前一个命令的最后一个参数,按Esc松开按.点。
Alt+.:引用前一个命令或前一个命令的最后一个参数,按Alt按住按.点,只能在本地终端使用。

[root@Smoke ~]# help history(查看history命令帮助)
[root@Smoke ~]# history(查看命令历史)
   2  history
   3  ls
   4  cd
   5  history
[root@Smoke ~]# history 2(查看命令历史最近2条命令)
  17  history
  18  history 2
[root@Smoke ~]# history -d 3(删除第3个历史命令)
[root@Smoke ~]# history(查看命令历史)
   2  history
   3  cd
   4  history
   5  history -d 3
   6  history
[root@Smoke ~]# history -d 2 2(从第2个开始往下删除2行命令历史,不包含第二个)
[root@Smoke ~]# history
   2  cd
   3  history
   4  history -d 3
   5  history
   6  history -d 2 2
   7  history
[root@Smoke ~]# ls -a(命令历史隐藏文件)
.bash_history
[root@Smoke ~]# history -w(手动将缓冲区中的历史命令保存至用户家目录.bash_history文件中)
[root@Smoke ~]# echo $HISTSIZE(显示命令历史变量定义可以保存多少命令,默认保存1000条)
1000
[root@Smoke ~]# !25(执行历史命令中第25条命令)
echo $HISTSIZE
1000
[root@Smoke ~]# !-6(执行历史命令中倒数第6条命令)
hostname
Smoke
[root@Smoke ~]# !!(执行上一条命令)
hostname
Smoke
[root@Smoke ~]# !ho(执行命令历史最近一个以ho开头的命令)
hostname
Smoke
[root@Smoke ~]# cat /etc/inittab(查看inittab文件)id:3:initdefault:
[root@Smoke ~]# nano !$(引用上一个命令最后一个参数)
nano /etc/inittab
id:3:initdefault:

命令补全:
PATH:
路径补全:

文本相关的命令
查看:cat, tac, more, less, head, tail
统计:wc
处理:tr, cut, join
排序:sort
uniq
bash特性:
shell: 外壳
GUI:Gnome, KDE, Xfce
CLI: sh, csh, ksh, bash, tcsh, zsh
命令行编辑:
光标跳转:
Ctrl + a:跳到命令行首
Ctrl + e:跳到命令行尾
Ctrl + <-:向命令行首每单词跳动
Ctrl + ->: 向命令行尾每单词跳到
Ctrl + u: 删除光标至命令行首的内容
Ctrl + k: 删除光标至命令行尾的内容
Ctrl + l: 清屏
Ctrl + d:删除光标至命令行尾的内容,单个字符删除
Delete: 删除光标至命令行手的内容,单个字符删除
命令历史:
history:查看命令历史,命令历史保存在内存缓冲区当中
-c:清空命令历史
-w:保存命令历史至历史文件中
-d OFFSET [n]: 删除指定位置的命令
环境变量:
PATH:命令搜索路径
HISTSIZE:命令历史大小,默认是1000条
~/.bash_history:将缓冲区中的历史命令保存至用户家目录.bash_history文件中;所以用户正常退出以后,那些命令都会被追加到.bash_history文件里面,所以下次再登录进去,包括关机了下次再启动,原来上次执行的命令历史仍然会有。
!n, !-n, !!, !string, !$
命令补全,路径补全
命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表;否则将直接补全;
路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全;
命令别名:给命令起另外一个命令,在使用的时候即可以使用命令本身也可以使用命令别名。
命令别名:
alias:显示系统上定义的所有别名
alias CMDALIAS='COMMAND [options] [arguments]':CMDALIAS别名叫什么,等于某个实实在在的命令,还
ualias CMDALIAS:撤销别名,CMDALIAS别名名字。
\CMD:当定义的命令别名加了选项跟命令本身相同,想使用命令本身加\反斜杠。
可以带选项和参数,如果命令中间有空格最好用引号''引起来,最好是单引号。
注意:这些定义跟变量的定义一样,它是我们shell的特性,因此如果shell关闭了再启动就没有了,所以定义的别名只在当前shell进程生命周期有效,就算使用同一个用户帐号再打开一个shell它也不会可以使用此别名,别名的作用范围当前shell进程、
很多应用程序的配置信息都是临时有效的,如果想让它永久有效,就得通过这个程序的配置文件来定义,而不是命令来定义,所以我们只需要在bash配置文件中把定义的别名命令写到bash的配置文件里面,它就能够做到永久有效,甚至它的作用范围也可以是全局的所有用户都可以有效。
清屏命令在linux下叫做clear,在windows的command的清屏命令cls,有些人从windows刚转向linux时候总喜欢使用cls清屏,执行告诉没有这个命令,但用习惯了,总不想输入clear,给clear起个别名叫cls即可。

[root@Smoke ~]# cls(执行cls命令,找不到命令)
-bash: cls: command not found
[root@Smoke ~]# alias cls=clear(给clear命令起别名叫cls)
[root@Smoke ~]# cls(使用clear的别名cls清屏)
[root@Smoke ~]# alias(显示系统上定义的所有别名)
alias cls='clear'
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@Smoke ~]# type alias(查看alias命令类型,alias是shell内建命令)
alias is a shell builtin
[root@Smoke ~]# help alias(查看alias的帮助)
alias: alias [-p] [name[=value] ...
[root@Smoke ~]# unalias cls(撤销cls命令别名)
[root@Smoke ~]# cls(使用cls清屏,无法使用)
-bash: cls: command not found

命令替换:
把命令中某个子命令替换为其执行结果的过程。
$(COMMAND):$符号加()小括号,将命令替换成执行结果
COMMAND:反引号将命令引起来实现命令替换成执行结果
例子:想显示当前目录是什么。[root@Smoke ~]# echo "Thoe current directory /root."(显示文本Thoe current directory /root.)
Thoe current directory /root.
如果切换到别的目录下,还打印当前目录是/root就不行,怎么才能立即获得当前目录;

[root@Smoke ~]# cd /etc/sysconfig/(切换到/etc/sysconfig目录)
[root@Smoke sysconfig]# echo "The current directory is $(pwd)"(使用$(pwd)命令替换当前目录)
The current directory is /etc/sysconfig
创建文件file-2013-02-28-14-53-31.txt,这个文件能以当前时间作为文件名中间字符串,一定要是当前的时间,使用命令替换是最好的做法。
[root@Smoke ~]# touch "file-$(date +%F-%H-%M-%S).txt"(创建文件,并以当前时间作为文件名,通过命令替换)
[root@Smoke ~]# touch "file-$(date +%F-%H-%M-%S).txt"(创建文件,并以当前时间作为文件名,通过命令替换)
[root@Smoke ~]# ls(查看当前目录,以当前时间命名的文件)
file-2014-06-06-09-58-09.txt
file-2014-06-06-09-59-32.txt
[root@Smoke ~]# echo "Dir is `pwd`"(使用``反引号变量替换显示当前目录)
Dir is /root

bash支持的引号:
``: 命令替换,把命令中某个子命令替换为其执行结果的过程
"": 弱引用,可以实现变量替换,把变量名替换为变量中的值
'': 强引用,不完成变量替换
文件名通配:globbing
命令行展开的机制,有波浪线展开、有花括号展开,还支持名称展开叫文件名通配,在表示某些文件的文件名的时候可以使用一个符号通配,替代具有某种特性的文件名。
*: 任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符

   [abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
   [:space:]:空白字符
   [:punct:]:标点符号
   [:lower:]:小写字母
   [:upper:]: 大写字母
   [:alpha:]: 大小写字母
   [:digit:]: 数字
   [:alnum:]: 数字和大小写字母

# man 7 glob:获取通配man帮助。

[root@Smoke ~]# mkdir test(在当前目录创建test目录)<br/>[root@Smoke ~]# cd test(切换到test目录)<br/>[root@Smoke test]# pwd(查看当前路径)<br/>/root/test<br/>[root@Smoke test]# touch a123 abc ab123 xyz x12 xyz123(创建5个文件)<br/>[root@Smoke test]# ls<br/>a123 ab123 abc x12 xyz xyz123<br/>[root@Smoke test]# ls a*(显示以a开头后面跟任意长度的任意字符)<br/>a123 ab123 abc<br/>[root@Smoke test]# touch a(创建a文件)<br/>[root@Smoke test]# ls a*(显示以a开头后面跟任意长度的任意字符)<br/>a a123 ab123 abc<br/>[root@Smoke test]# ls a*3(显示字母a开头以数字3结尾的文件)<br/>a123 ab123<br/>[root@Smoke test]# touch helloy123(创建helloy123文件)<br/>[root@Smoke test]# ls *y*(显示任意长度任意字符后面跟了一个y,y的后面跟任意长度任意字符)<br/>helloy123 xyz xyz123<br/>[root@Smoke test]# touch y123(创建y123文件)<br/>[root@Smoke test]# ls *y*(显示任意长度任意字符后面跟了一个y,y的后面跟任意长度任意字符)<br/>helloy123 xyz xyz123 y123<br/>[root@Smoke test]# ls ?y*(显示任意单个字符后面跟y,y的后面任意长度任意字符)<br/>xyz xyz123<br/>[root@Smoke test]# touch 1xy6(创建1xy6文件)<br/>[root@Smoke test]# ls [a-zA-Z]*[0-9](显示以字母开头中间任意长度任意字符后面跟数字的文件名)<br/>a123 ab123 helloy123 x12 xyz123 y123<br/>[root@Smoke test]# ls [^0-9]*(显示非数字开头的文件)<br/>a a123 ab123 abc helloy123 x12 xyz xyz123 y123<br/>[root@Smoke test]# touch 'a b'(创建a空格b文件名的文件,必须使用''引号引起来)<br/>[root@Smoke test]# ls<br/>y6 a a123 a b ab123 abc helloy123 x12 xyz xyz123 y123<br/>[root@Smoke test]# ls [[:alpha:]]*[[:space:]]*[[:alpha:]](字母开头字母结尾中间包含空白字符的文件名)<br/>a b<br/>[root@Smoke test]# ls [[:alpha:]]*[[:space:]]*[^[:alpha:]](字母开头非字母结尾中间包含空白字符的文件名)<br/>ls: cannot access [[:alpha:]]*[[:space:]]*[^[:alpha:]]: No such file or directory
练习:
1、创建a123, cd6, c78m, c1 my, m.z, k 67, 8yu, 789等文件;注意,以上文件是以逗号隔开的,其它符号都是文件名的组成部分;
2、显示所有以a或m开头的文件;
ls [am]
3、显示所有文件名中包含了数字的文件;
ls
[0-9]
ls
[[:digit:]]
4、显示所有以数字结尾且文件名中不包含空白的文件;
ls
[^[:space:]][0-9] ?????????
5、显示文件名中包含了非字母或数字的特殊符号的文件;
ls
[^[:alnum:]]*

操作系统组成结构:
操作系统最底层的是硬件,硬件上面是内核,也就是操作系统,内核把计算功能通过各种系统调用向上提供的,这些调用过于底层了,所以做成了更高级的库,库有动态和静态,动态库是以.so(共享对象)结尾,库也是二进制程序,但是不能独立执行,必须要被其他程序调用才可以执行,同时我们也把它叫做共享库,应用程序的开发者即可以调用库也可以直接使用系统调用进行编程,对程序而言典型的就是shell,否则用户将无法跟计算机进行交互,当我们操作系统安装完以后是放在硬盘上(外部存储设备)的,当我们启动操作系统的以后,在我们的内存当中或者是从逻辑的视角来看整个操作系统应该是怎么组成的,当我们系统启动起来以后,我们说过库是不能独立运行的,所以在我们硬件之上所直接运行的就是内核,在内核之上所启动的就是各个应用程序,应用程序本身放在硬盘上它叫做程序,但是启动起来以后叫做process(进程),因为它是程序的执行过程,是一个处于系统上能够获取CPU时间和内存资源以及其他文件等,并且能够运行起来处于运行当中的程序,因此我们把它称作进程,如果一个进程在编译的时候使用了共享库的话,这就意味着这个进程在启动之前必须要将它所依赖的库装入内存当中,这个进程真正要想运行起来,在内存空间当中启动有各个库,这些库在内存当中,它不是独立执行的,而是被我们程序调用以后才执行的,再次之后要启动另外一个进程,或者说把另外一个程序在shell中写到命令提示符下并敲回车了,就意味着要想内核发起运行这个程序了,如果这个程序依赖于跟第一个程序一样的共享库文件的话,那这个库文件已经处于内存当中,就不需要将同样的库再装入到内存当中,因为这个库本身不是独立运行的,它已经在内存当中了,这就意味着每一个进程在调用它的时候都是在自己的地址里边调用这个功能,谁调用谁去拿一个副本,所以这个库被称为共享库,在这个角度来看库其实是跟进程平行的概念,它没有上下关系,只是被依赖关系,都直接由内核进行操作,这是站在运行的角度来看的。
权限:定义资源和服务的访问能力
用户
用户组:建立用户逻辑容器,还可以关联权限,只某个用户在这个容器中,它就具有这个容器关联的权限,组是权限的容器,或者权限的集合,而这个集合可以附加到某个用户上,从而让用户具有这个容器的权限,所以组是个逻辑概念,它本身并不能直接使用,它不可能能登录计算机,它也不能使用某些资源,它只能方便指派权限。
在linux系统上每一个资源或服务的权限分别定义了三类用户的使用能力;第一文件的属主,这个文件的所有者,第二就是文件的属组,就是这个文件的原生组,他应该具有什么样的访问权限,第三除了用户,即不是属主又不是属组,叫其他用户的访问权限;为了方便定义系统资源的访问能力,就必须让系统能够识别用户和组,对于我们的外部来讲每个用户就是一个人,对于计算机什么叫用户,用户就是获取资源或服务的凭证,映射到系统上用户无非也就是个跟外在的人对应唯一的标识,同时在定义某一个资源的时候,定义资源为那一个标识符所有,如果某个用户来试图访问资源的时候,它被机器映射为某个标识符。
进程也是有属主属组的,谁发起了这个进程,这个进程就以谁的身份去运行。
安全上下文(secure context):任何时候用户操作计算机无法就是发起进程,因此进程是用户操作计算机的代理,所以进程在运行的时候一定是以发起用户的身份在运行,所以这个进程能够访问那些文件取决于这个进程权限和它访问资源的权限,这个过程的判断是用我们系统资源的安全管理属性自动完成的。
在linux上每一个文件都有三类权限的定义,其中每三位为一组,自左而右分别是属主权限、属组的组权限、其他用户权限;
权限:
r,w,x
文件:
r:可读,可以使用类似cat等命令查看文件内容;
w:可写,可以编辑或删除此文件;
x: 可执行,eXacutable,可以命令提示符下当作命令提交给内核运行;
目录:
r: 可以对此目录执行ls以列出内部的所有文件;
w: 可以在此目录创建文件;
x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;
注意:对于目录来讲执行权限一定的有,不建议文件默认就有执行权限。
rwx:
r--:只读
r-x:读和执行
---:无权限
读写执行权限和对应八进制意义:
0 000 ---:无权限
1 001 --x: 执行
2 010 -w-: 写
3 011 -wx: 写和执行
4 100 r--: 只读
5 101 r-x: 读和执行
6 110 rw-: 读写
7 111 rwx: 读写执行
755:rwxr-xr-x
rw-r-----: 640
660:rw-rw----
rwxrwxr-x:775
对于计算机而言它所能够识别数字的能力是大于对识别字符串的能力的,速度要快的多的多,因为不需要做任何转换,直接就能识别数字,计算机要想把一个数字识别成字符串,得经过中间软件转换才能完成,虽然计算机操作会很快,但是对于大量如此类的操作的时候速度要慢的多了,因此计算机无论是识别用户还是识别进程等都是按照数字来完成的,所以每一个用户在系统上都有一个被称为叫用户ID的代码来标识这个用户,这叫用户的UID,每个组也都有一个ID来标识这个系统是它是组叫做GID,只不过它在显示的时候和登录的时候都是用户名,但是当用户输入用户名以后敲回车,我们的系统会自动的将这个用户的用户名翻译成对应的ID号,必须内部有一个数据库,里面定义了,通过查这个数据库,就能够找到对应的是什么,这就叫转换的过程,叫做解析(名称解析)。
用户和组数据库文件目录:
用户:UID, /etc/passwd
组:GID, /etc/group
影子口令:
用户:/etc/shadow
组:/etc/gshadow
用户类别:
管理员:0
普通用户: 1-65535
系统用户:1-499
一般用户:500-60000
系统用户:
任何进程都应该以某个用户的身份来运行,这样这个进程到底访问的资源是那些取决于运行这个进程的用户身份和被它访问资源的权限模型,系统在启动的时候会发现有很多进程已经在运行了,这些进程很多称为后台进程或者叫服务,这些服务应该以谁的身份运行,以管理员显然不合适,应为管理员的权限太大了,一个进程以管理员身份运行就意味着这个进程可以到处的访问任何文件,如果有人通过其他手段劫持了这个进程,那就因而可以获得这个进程所有权限了,不安全,因此很多位于后台运行的不需要跟用户关联的进程,也应该以一个普通用户来运行,而这一类用户专门拿来运行后台进程的用户叫做系统用户。
为什么称为系统用户:
既然这个用户只是为了负责运行某一类服务进程,那就意味着这类用户是不需要登录系统的,所以这类用户应该限定它不允许登录系统。
用户组类别:
管理员组:
普通组:
系统组:
一般组:
用户组类别:
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
基本组:用户的默认组,基本组未必是私有组。
附加组,额外组:默认组以外的其它组
进程:tom tom
对象:rwxrw-r-- jerry tom a.txt
tom: ls
rwxr-xr-x root root /bin/ls
注意:tom去执行命令ls,ls发起以后就叫进程,当tom试图去执行ls命令,就试图去找/bin/ls可执行文件,并让它执行,tom可以运行这个文件,tom即不是属主也不属于这个组,只能以其他的用户身份访问,其他用户有执行权限,可以运行起来,运行起来以后这个进程叫做ls进程,而ls进程的属主是发起的身份tom,所以文件本身属主属组无论是谁,它只要是一个可执行文件,执行以后,它的执行者应该是发起者身份,所以ls能不能访问a.txt取决于ls进程和它访问a.txt文件对象的权限。
用户的UID文件冒号隔开的7个字段解释:
/etc/passwd
1、account: 登录名
2、password: 密码,但是密码不在这放,在/etc/shadow当中
3、UID:用户ID
4、GID:基本组ID,额外组在/etc/group当中
5、GECOS:comment注释,可选,用户其他基本信息全名、邮箱、地址等。
6、HOME DIR:家目录,系统用户虽然指定了家目录路径但是没有家目录,也不允许登录
7、SHELL:用户的默认shell,/sbin/nologin(不登陆),如果给用户指定非法shell也不能登录,当前系统合法shell文件在/etc/shell,只有出现在这个文件中的shell一般才被认为是安全shell,才能被当前用户用于做默认shell
[root@Smoke ~]# cat /etc/passwd(查看用户UID文件)<br/>root:x:0:0:root:/root:/bin/bash<br/>bin:x:1:1:bin:/bin:/sbin/nologin(不登陆)<br/>daemon:x:2:2:daemon:/sbin:/sbin/nologin<br/>adm:x:3:4:adm:/var/adm:/sbin/nologin<br/>lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin<br/>sync:x:5:0:sync:/sbin:/bin/sync<br/>shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown<br/>halt:x:7:0:halt:/sbin:/sbin/halt<br/>mail:x:8:12:mail:/var/spool/mail:/sbin/nologin<br/>uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin<br/>operator:x:11:0:operator:/root:/sbin/nologin<br/>games:x:12:100:games:/usr/games:/sbin/nologin<br/>[root@Smoke ~]# whatis passwd(查看passwd有几个章节中的man文档)<br/>passwd (1) - update user's authentication tokens<br/>passwd (5) - password file(配置文件格式的说明)<br/>passwd [sslpasswd] (1ssl) - compute password hashes<br/>[root@Smoke ~]# man 5 passwd(查看第五章节passwd配置文件格式man文档)<br/>[root@Smoke ~]# cat /etc/shadow(查看用户密码文件)<br/>root:$6$J8gZaoVm$AVHX82AxDzLhnuzXjBZTV2WHPT6C/6ntgy8u7tWS8jJr4qAW21cvvho.4sKSYaRpyi6FBHMBkvZMdnvJY262s/:16221:0:99999:7:::<br/>bin:*:15980:0:99999:7:::<br/>daemon:*:15980:0:99999:7:::<br/>adm:*:15980:0:99999:7:::<br/>lp:*:15980:0:99999:7:::<br/>sync:*:15980:0:99999:7:::<br/>shutdown:*:15980:0:99999:7:::<br/>halt:*:15980:0:99999:7:::<br/>mail:*:15980:0:99999:7:::<br/>uucp:*:15980:0:99999:7:::<br/>operator:*:15980:0:99999:7:::<br/>games:*:15980:0:99999:7:::<br/>[root@Smoke ~]# cat /etc/shells(当前系统合法shell)<br/>/bin/sh<br/>/bin/bash<br/>/sbin/nologin<br/>/bin/dash<br/>/bin/tcsh<br/>/bin/csh
用户口令文件冒号隔开的字段解释:
/etc/shadow
1、account: 登录名
2、encrypted password: 加密的密码,如果显示两个!!叹号或号表示此用户是锁定的,不允许登录
3、date of last password change:从1970-01-01开始到上次密码修改为止经过的天数,密码安全性策略要求密码最长使用多少天,应该定期更换
4、minimum password age:在密码可以被修改之前要经过的天数,密码最小使用期限,改了密码马上再改不让改,最少要用几天再改,0表示不做限定,改了之后可以再改
5、maximum password age:过了多少天密码必须得改,密码最长使用期限
6、password warning period:密码离过期还有多少天开始向用户警告,告诉你密码快过期应该修改,警告时间
7、password inactivity period:在用户被禁用之前,密码过期之后,可以经过的天数,宽限几天,登录之后先改密码,不改就不让登录,如果这几天用户没登录,宽限期限到了,锁定帐号,只能找管理员解锁
8、account expiration date:明确从1970-01-01开始到那一天帐号就禁用了
9、reserved field:保留字段,没有意义
加密方法:
对称加密:加密和解密使用同一个密码
公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)
单向加密,散列加密:提取数据特征码,常用于数据完整性校验
1、雪崩效应
2、定长输出
MD5:Message Digest, 128位定长输出
SHA1:Secure Hash Algorithm, 160位定长输出
```[root@Smoke ~]# cat /etc/shadow(查看用户密码文件)
root:$6(加密方式)$J8gZaoVm(8位杂质,防止一样密码的用户猜测密码,随机生成)$AVHX82AxDzLhnuzXjBZTV2WHPT6C/6ntgy8u7tWS8jJr4qAW21cvvho.4sKSYaRpyi6FBHMBkvZMdnvJY262s/(密码):16221:0:99999:7:::
bin:
(用户锁定):15980:0:99999:7:::
daemon::15980:0:99999:7:::
adm:
:15980:0:99999:7:::
lp::15980:0:99999:7:::
sync:
:15980:0:99999:7:::
shutdown::15980:0:99999:7:::
halt:
:15980:0:99999:7:::
mail::15980:0:99999:7:::
uucp:
:15980:0:99999:7:::
operator::15980:0:99999:7:::
games:
:15980:0:99999:7:::
[root@Smoke ~]# whatis shadow(查看shadow有几个章节中的man文档)
shadow (3) - encrypted password file routines
shadow (5) - shadowed password file
[root@Smoke ~]# man 5 shadow(查看第五章shadow配置文件格式man文档)
[root@Smoke ~]# cp /etc/inittab ./(复制inittab文件到当前目录)
[root@Smoke ~]# md5sum inittab(计算inittab的md5特征码)
753a386bcd9ab0ca581056348463891e inittab
[root@Smoke ~]# nano inittab(编辑inittab文件,加上a)
id:3:initdefault:
a
[root@Smoke ~]# md5sum inittab(计算inittab的md5特征码,两次完全不一样)
7d871b6a5d107329c7f255ad5771cb8b inittab
添加用户:
useradd USERNAME:添加用户,USERNAME用户名
passwd USERNAME:加密码或更改密码
[root@Smoke ~]# which useradd(查看命令路径)
/usr/sbin/useradd
[root@Smoke ~]# ls -l /usr/sbin/useradd(查看useradd文件详细信息)
-rwxr-x---. 1 root root 103096 Dec 8 2011 /usr/sbin/useradd
[root@Smoke ~]# ls -l $(which useradd)(使用$()命令替换将which useradd的执行结果输出)
-rwxr-x---. 1 root root 103096 Dec 8 2011 /usr/sbin/useradd
[root@Smoke ~]# ls -l which useradd(使用命令替换将which useradd的执行结果输出)<br/>-rwxr-x---. 1 root root 103096 Dec 8 2011 /usr/sbin/useradd<br/>[root@Smoke ~]# ls -l `which adduser`(使用命令替换将which adduser的执行结果输出)
lrwxrwxrwx. 1 root root 7 Apr 14 08:19 /usr/sbin/adduser -> useradd(软连接或符号连接指向useradd,事实上是同一个命令)
[root@Smoke ~]# useradd tom(添加用户tom)
[root@Smoke ~]# tail -n 1 /etc/passwd(显示passwd文件最后一行,-n指定显示的行数,默认10行)
tom:x:514:514::/home/tom:/bin/bash
[root@Smoke ~]# tail -1 /etc/shadow(显示shadow文件最后一行,-1指定显示1行,默认10行)
tom:!!:16227(密码上次修改时间):0(可以修改密码时间间隔):99999(密码最长使用期限)):7(离过期警告时间):::
[root@Smoke ~]# passwd tom(给tom用户添加密码)
Changing password for user tom.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
[root@Smoke ~]# tail -1 /etc/shadow(显示shadow文件最后一行,-1指定显示1行,默认10行)
tom:$6$cakI4EDz$ff/s0OG.dv5EOrqkYr4Mzwo8nj0bKhf1yjXM7XQsj6uNxeS3I0NRiIH7sfZeH5ymZ.IgOAh5pV5nwfr.t2/ri0:16227:0:99999:7:::
[root@Smoke ~]# tail -1 /etc/group(显示group文件最后一行,-1指定显示1行,默认10行)
tom(组名):x(密码):514(GID):
[root@Smoke ~]# cd /etc/default/(切换到default目录)
[root@Smoke default]# ls(查看当前目录的文件及子目录)
nss useradd
[root@Smoke default]# file useradd(查看useradd文件内容类型)
useradd: ASCII text
[root@Smoke default]# cat useradd(完全显示useradd文件内容)
# useradd defaults file
GROUP=100
HOME=/home(如果没给用户指定家目录就在这个目录下给用户建一个默认跟用户名同名的目录作为用户家目录)
INACTIVE=-1(非活动期限有多长,密码过期了还没改宽限几天还可以改的期限,3天)
EXPIRE=(密码永不过期)
SHELL=/bin/bash(默认shell)
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
组的GID文件冒号隔开的字段解释:
1、组名
2、密码占位符
3、组ID4、以这个组为附加组的用户列表,多个用户彼此之间用逗号隔开
[root@Smoke default]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
tty:x:5:
disk:x:6:
lp:x:7:daemon
mem:x:8:
kmem:x:9:
wheel:x:10:
mail:x:12:mail,postfix
uucp:x:14:
man:x:15:
games:x:20:
添加组:
groupadd GRPNAME:GRPNAME组名
[root@Smoke default]# groupadd mygroup(添加组mygroup)
[root@Smoke default]# tail -1 /etc/group(显示group文件最后一行内容,-1指定显示1行,默认10行)
mygroup:x:515:


用户管理:
       useradd(添加), userdel(删除), usermod(修改), passwd(密码), chsh(默认shell), chfn(改变finger信息), finger(显示用户finger信息), id(查看帐号相关属性信息), chage(改变用户各种外围属性命令)
组管理:
       groupadd(添加组), groupdel(删除组), groupmod(修改), gpasswd(密码)

权限管理:
       chown(更改属主属组), chgrp(用来改变文件或目录所属的用户组), chmod(改权限), umask(设置限制新建文件权限的掩码)

猜你喜欢

转载自blog.51cto.com/smoke520/2426095