您的位置:首页 > 运维架构 > Linux

鸟哥的Linux学习笔记

2011-12-30 16:36 225 查看
这是我阅读《鸟哥的Linux》基础篇做的笔记,整理的比较乱套,我的Linux系统式Ubuntu 11.04。

我接触Linux已经有很多日子了,应该说不是新手,然而高手是谈不上的。在Linux的世界里我还有还多很多未知的。

《鸟哥的Linux》一书我看过其中的一部分主要是Shell脚本和正则表达式,颇有所获,并未通读全书。虽然本书是Linux

的入门书籍,但《鸟哥》的涵盖面很广,好多知识我没有掌握。因此,这也是我值此机会应该好好地阅读《鸟哥》。

第一部分 认识Linux及Linux主机规划和安装

第一章 什么是Linux

操作系统内核必须管理的事项:

1、系统调用接口(通常简称为系统调用),用户通过系统调用同内核交互

2、进程控制,控制作业并管理CPU资源进行CPU调度

3、内存管理,管理内存的分配、回收、

4、文件系统管理,例如数据的IO、文件格式的支持。

5、设备驱动程序,提供内核对具体硬件设备的支持。

所有硬件资源都由内核来管理!

操作系统,管理软硬件资源的系统软件。Linux是一个操作系统,它提供了一个完整的操作系统中最底层的硬件控制与资源管理的架构,该

架构演戏了Unix的良好传统。

Unix及Linux历史:

1965年,Bell,MIT,通用电气公司发起Multics计划(让大型机同时连接300台以上终端),1969年宣告失败。

1969年,Ken Tompson在Multics的经验教训基础上开发了一个小型操作系统,即Unix原型

1972年,Dennis Ritchie发明C语言

1973年,Dennis Ritchie用C语言重写了Unix操作系统,从而具有了良好的可移植性。

1977年,伯克利大学修改并开发了Unix分支BSD操作系统

1984年,基于x86架构的类Unix的Minix诞生;Richard Mathew Stallman发起GNU计划,想建立一个自由开放的Unix操作系统,GNU著名工具作品有:

Emacs,C编译器gcc,C语言库glibc,Bash Shell等。

1988年,图形用户界面XFree计划

1991年,Linus Torvalds利用GNC软件gcc,bash等针对386机器,参考Minux的设计理念,开发了免费、开源操作系统内核是为Linux,随着网络大量传播和改进。

1994年,Linux开始支持很多硬件,如IBM,HP,Sun等公司生产的硬件。

Linux的优缺点

优点

1)

缺点

1)

自由软件

免费软件

共享软件

GPL授权

第二章 如何学习Linux

第三章 Linux主机规划

CPU

外频:CPU与接口设备进行数据传输/运算的速度,外频可以超频

倍频:CPU本身运算时的运算速度

GPU

Linux下,几乎所有的硬件设备号文件都在/dev目录下

/dev/hd[a-p]:SCSI硬盘,U盘

/dev/hd[a-d]:IDE硬盘

/dev/cdrom:CDROM

/dev/fd[0-1]:软驱

/dev/lp[0-2]:打印机

/dev/mouse:鼠标

/dev/ht0:磁带机

每个版本的Linux都使用http://www.kernel.org所开发的核心

Linux系统下载网址:

台湾义守大学ftp:http://ftp.isu.edu.tw/pub/Linux

国外:http://www.linuxiso.org

国内Linux网站大全:http://zhaolinux.com

Linux的硬盘分区:

简单划分,该方法不太安全:

/ 根分区;Swap分区(交换分区,即虚拟内存分区)新手通常划分这两个分区,注意保留一部分硬盘不要分区

麻烦的方式:

/ 根分区

/usr usr分区,Linux操作系统在此

/home home分区,用户主目录

/var var分区,所有默认服务器的登录文件

Swap 分区

特别注意:务必使得引导分区范围小于1024,安装时,划分出/boot分区引导分区100M以内即可,放于整块硬盘的最前面。

第四章 安装FC4与多重启动技巧

FC4,Fedora Core Release 4

第五章 启动关机、在线求助与执行命令的方式

重启X Window——Ctrl+Alt+Backspace,当X Window因不明原因导致出现问题时,也可以利用这种方法来重新启动X Window

Linux的命令行模式,又称终端界面,终端,控制台;默认有6个终端让用户登录:

Ctrl+Alt+[F1~F6],系统分别将它们定义为tty1——tty6终端;Ctrl+Alt+F7图形用户界面。

KDE/GNOME桌面系统

我的机器登录首行

Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-8-generic i686)

我使用的是Ubuntu系统 11.04版本,Linux2.6内核

===========Linux的命令是区分大小写的,一定要记住!===================

基础命令

1、显示日期命令date:我的机器使用汉语,可修改LANG环境变量使之用英文显示时间

root@duyuqi-OptiPlex-380:~# date

2011年 12月 12日 星期一 16:11:08 CST

root@duyuqi-OptiPlex-380:~# LANG=en

root@duyuqi-OptiPlex-380:~# date

Mon Dec 12 16:52:27 CST 2011

2、显示日历命令cal:默认显示本月目录

root@duyuqi-OptiPlex-380:~# cal

cal: setlocale: No such file or directory

December 2011

Su Mo Tu We Th Fr Sa

1 2 3

4 5 6 7 8 9 10

11 12 13 14 15 16 17

18 19 20 21 22 23 24

25 26 27 28 29 30 31

3、简单好用的计算器bc

在线帮助

man 命令,Linux在线帮助系统,man page数据放于/usr/share/man(通常,Ubuntu确实放在此)

首行括号中的数字含义:

1:用户可以操作的命令或可执行文件

2:系统核心可调用的函数与工具

3:一些常用的函数与函数库

4:设备文件的说明

5:设置文件或者是某些文件的格式

6:游戏

7:惯例与协议等,如Linux标准文件系统、网络协议、ASCII码等说明内容

8:系统管理员可用的管理命令

9:与内核有关的文件

man page组成部分:

NAME:简短的命令数据说明

SYNOPSIS:简短的命令语法简介

DESCRIPTION:较为完整的说明

OPTIONS:针对SYNOPSIS部分中,列举说明所有可用的参数

COMMANDS:当这个程序(软件)在执行的时候,可以在此程序(软件)中发出的命令

FILES:这个程序或数据所使用、参考或连接到的某些文件

SEE ALSO:与这个命令或数据相关的其他参考说明

EXAMPLE:一些可以参考的范例

BUGS:是否有相关的错误

info 命令 支持info命令的文件放于/usr/share/info

/usr/share/doc目录中有好多帮助文件

Windows(非NT)是单用户,假多任务

观察系统使用状态 who,观察网络的联机状态 netstat -a,查看后台执行程序 ps aux

数据同步写入磁盘:sync 将内存中尚未更新的数据写入硬盘。仅有root用户可以执行

关机命令

shutdown:-r重启-h立即关机 时间(分钟数或时间点)

reboot等价于shutdown -r now(now为时间0分钟)

halt

poweroff

启动中的故障排除:

1、硬盘坏轨或扇区错乱

小结:关于命令的学习,我的态度是尽力而为,即尽可能多的记住命令及其用法;非 常用命令应该其用途,学会使用man或者info进行查找用法

第二部分 文件目录与磁盘格式

第六章 Linux的文件属性与目录管理

关于使用文件的用户有三种类型:

文件所有者,同组用户,其他用户

口令文件/etc/passwd——访问口令文件<pwd.h> struct passwd{}

阴影口令/etc/shadow——访问阴影文件<shadow.h> struct spwd{}

组文件/etc/group——访问组文件<grp.h> struct group{}

主机文件/etc/hosts——访问主机文件<netdb.h> struct hostent{}

网络文件/etc/networks——访问网络文件<netdb.h> struct netent{}

协议文件/etc/protocol——访问协议文件<netdb.h> struct protoent{}

服务文件/etc/services——访问服务文件<netdb.h> struct servent{}

Linux口令文件——root:x:0:0:root:/root:/bin/bash——用户名:密码:用户ID:组ID:注释字段:主目录路径:默认shell

Linux组文件——root:x:0:root,linuxsir——组名:组密码:组ID:用户列表(每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名)

ls -l所展示的7字段含义,例如:

root@duyuqi-OptiPlex-380:~# ls -l

总用量 112

drwxr-xr-x 2 root root 4096 2011-08-10 17:00 blog

drwxr-xr-x 5 root root 4096 2011-08-03 16:10 DataStruct

prw-r--r-- 1 root root 0 2011-09-21 16:52 fifo

lrwxrwxrwx 1 root root 4 2011-09-22 00:48 fifo.s -> fifo

-rw-r--r-- 1 root root 6612 2011-08-11 13:55 Linux系统管理

-rw-r--r-- 1 root root 55314 2011-09-04 15:34 tcpdump.txt

drwxr-xr-x 6 root root 4096 2011-08-31 11:13 Unix

drwxr-xr-x 5 root root 4096 2011-10-01 22:17 workspace

drwxr-xr-x 2 root root 4096 2011-07-12 01:06 公共的

drwxr-xr-x 2 root root 4096 2011-07-12 01:06 模板

drwxr-xr-x 2 root root 4096 2011-07-12 01:06 视频

drwxr-xr-x 2 root root 4096 2011-07-12 01:06 图片

drwxr-xr-x 2 root root 4096 2011-07-12 01:06 文档

drwxr-xr-x 2 root root 4096 2011-09-17 01:45 下载

drwxr-xr-x 2 root root 4096 2011-07-12 01:06 音乐

drwxr-xr-x 2 root root 4096 2011-08-01 16:13 桌面

文件属性 链接数目 文件所有者 文件所属用户组 文件大小(B) 文件最新修改时间 文件名

其中文件属性,有必要详细记忆。

共十位,第一位是文件类型:

1)普通文件 -

2)目录文件 d

3)块文件 b

4)字符文件 c

5)FIFO f

6)套接字 s

7)符号链接 l

接下来的九位是文件访问权限位,他们分别是:(文件所有者owner 文件所有者所在的组成员group 其他成员other)

owner:S_IRUSR S_IWUSR S_IXUSR

group:S_IRGRP S_IWGRP S_IXGRP

other:S_IROTH S_IWOTH S_IXOTH

r为可读权限,w为可写权限,x为可执行权限

链接数目为硬链接的数目,软链接单独为一种文件类型;硬链接数目代表了有多少文件使用该文件对应的inode

更改文件权限命令:

1.chgrp

2.chown

3.chmod

FHS(Filesystem Hierarchy Standard),文件系统层次标准

/etc:放设置文件

/bin与/sbin:放可执行文件

/usr和/var:放置内容由其子目录来定义

Linux支持的文件系统

ext2(Linux second extended file system,Linux第二扩展文件系统)。内核必须识别该文件系统,才能正确读取该文件系统的文件。

ext3,ext2的升级版,增加了日志功能,ext3向下支持ext2.

查看/lib/modules/`uname -r`/kernel/fs,可知Linux所支持的文件系统

root@duyuqi-OptiPlex-380:/lib/modules/2.6.38-8-generic/kernel/fs# ls

9p autofs4 binfmt_misc.ko cifs dlm fat gfs2 isofs minix nfsd ocfs2 reiserfs ubifs

adfs befs btrfs coda efs freevxfs hfs jffs2 ncpfs nilfs2 omfs romfs udf

affs bfs cachefiles configfs exofs fscache hfsplus jfs nfs nls qnx4 squashfs ufs

afs binfmt_aout.ko ceph cramfs exportfs fuse hpfs lockd nfs_common ntfs quota sysv xfs

四个理由要从ext2转换到ext3,可利用性、数据完整性、速度及易于转换

Linux的VFS(Virtual Filesystem Switch)快速文件系统

第七章 Linux文件和目录管理

相对路径和绝对路径

- 表示前一个工作目录

1、cd 切换目录命令

2、pwd 显示当前所在的目录

3、mkdir 建立新目录

4、rmdir 删除空目录,非空目录不能删除;删除目录即目录下所有的东西使用rm -rf filename

5、ls 查看问价和目录(选项很多),结果蓝色为目录,白色为普通文件

-a,全部文件,包括隐藏文件

-F,根据文件、目录等信息,附加数据结构,可执行文件*,目录/,套接字文件=,FIFO|

-i,列出inode的位置

6、cp 复制文件或目录,若源文件有两个以上,则最后一个目的文件一定是“目录”

-r,递归持续复制,用于目录的复制操作

-l,建立硬连接的链接文件,等同于ln

-s,复制成符号链接文件,等同于ln -s

注意:在不加任何参数的情况下,文件的拥有者,权限会改变,可以使用-a保持这些属性

7、rm 删除文件或目录

-r,递归删除,常用在目录的删除

-i,交互模式

-f,强制删除

8、mv 移动文件与目录,或重命名

-f,强制移动

-i,若木匾文件已存在,则询问是否覆盖

-u,若目标文件已经存在,且源文件比较新,才会更新

dirname filepath 结果为目录名

basename filepath 结果为文件名

查看文件内容

9、cat file 全部显示

-n 显示行号

-E 将结尾的换行符$显示出来

-v 列出一些看不出来的特殊字符

-T 将[Tab]按键以^I显示出来

10、tac file 倒序显示,其它同cat

11、nl [-bnw] 显示时,先输出行号

12、more 按页显示

13、less 同more类似但它可以向前翻页

14、head [-n number] file 只看前几行

15、tail [-n mumber] file 只看后几行

16、od [-t TYPE] file 以二进制方式读取文件内容

TYPE:

c 使用ASCII字符来输出

17、 touch 修改文件时间与创建新文件命令

mtime,修改时间,文件的内容数据改变时更新该时间。

ctime,状态时间,更改了文件的权限、属性,更新该时间。

atime,访问时间,读取文件内容是,更新该时间

touch [-acdmt] file

-a 仅修改access time

-c 仅修改时间而不建立文件

-d 后面可以接日期,一可以使用--date="日期或时间"

-m 仅修改mtime

-t 后面可以接时间,格式为【YYMMDDhhmm】

18、 umask 文件默认权限,当用户在建立文件或目录时的属性默认值,他是一个掩码,即去掉这种权限取剩余权限。

umask 数字形式

umask -S 符号形式

19、chattr 设置文件隐藏属性

lsattr 显示文件的隐藏属性

SUID设置用户ID/SGID设置组ID/Sticky Bit粘住位——文件特殊权限

20、file 文件类型 查看文件是ASCII、数据文件,二进制文件,是否用到动态链接库等信息

21、which [-a] command 搜索可执行文件,根据PATH环境变量。

whereis [-bmsu] filename 寻找特定文件

-b:只找二进制文件

-m:只找在帮助文件manual路径下的文件

-s:只找源文件

-u:没有帮助文件的文件

locate 文件的部分名称
查找的数据在/var/lib/slocate数据库

22、find [path] [option] [action]

-atime n: n为数字,含义为在n天之前的“一天之内”访问过的文件(n*24——n*24+24)

-ctime n: n为数字,含义为在n天之前的“一天之内”修改过状态的文件

-mtime n: n为数字,含义为在n天之前的“一天之内”修改过内容的文件

-newer file:file为一个存在的文件,意思是说,只要比file还要新,就会被列出来。

-uid n:用户账号ID

-gid n:用户组ID

-user name:用户账号名称

-group name:用户组名称

-nouser:查找文件拥有者不在/etc/passwd中的文件

-nogroup:查找文件的拥有用户不在/etc/group中的文件。

-name filename:最常用,搜索文件名为filename的文件

-size [+-] SIZE:搜索比size还要 大/小 的文件。c为byte,k表示1024byte

-type TYPE:搜索文件的类型为TYPE(f,b,c,d,l,s,p)

-perm mode:w文件属性刚好等于mode的文件,这个mode为类似chmod的属性值。

-perm -mode:搜索文件属性必须要全部包括mode的属性的文件。

-perm -mode:搜索文件属性包含任一mode的属性的文件。

-exec command:command为其他命令,-exec后面可再接额外的命令来处理搜索到的结果

例如:find -perm +7000 -exec ls -l {}\; {}表示由find找到的内容 -exec最后一定要以\;结束

-print :将结果打印,默认动作。

第八章 Linux磁盘与文件系统管理

磁盘构成:多个盘片。柱面(柱面是分区时的最小单位),磁道,扇区(扇区是硬盘片上最小的存储物理量)

磁盘0号扇区称为主引导记录(Master Boot Record,MBR),MBR的结尾是分区表(给出每个分区的起始地址和结束地址)。

表中的一个分区被标记为活动分区。计算机被引导时,BIOS读入并执行MBR,MBR确定活动分区,读入其第一个块,称为引

导块并执行。引导块中的程序将装载该分区的操作系统,保留引导块,可以保证以后可以安装操作系统。

超级块,保存文件系统重要参数。

MBR。仅提供最多4个分区的记忆,主分区与扩展分区最多有四个。——

文件系统

针对操作系统格式化分区,每个分区,就是一个文件系统(一个分区不可以具有两个文件系统),每个文件系统开始位置的那个块称为

超级块,超级快的作用是存储文件系统的大小,空的和填满的快,以及他们各自的总数和其他诸如此类的信息。

数据存储的最小单位是逻辑块,这是在分区进行文件系统格式化时所指定的最小的存储单元,该最小单元以扇区大小为基础。

EXT2文件系统(inode)

标准的ext2文件系统中,每个文件的内容分为两个部分来存储,一个是文件的属性,另一个是文件的内容。inode要将一个分区格式化为ext2,必须指定inode与块。

块记录文件内容数据;inode是记录“文件的相关属性,以及文件内容放置在哪一块内”的信息。(owner/group,read/write/execute,type,

ctime/atime/mtime,flag,pointer)
ls命令默认显示的是mtime,dumpe2fs可以查看inode大小

Usage: dumpe2fs [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device

Linux如何读取一个文件的内容?

1、目录

分配一个inode和至少一个块,inode记录该目录的相关属性,并指向分配到的块,块记录在这个目录下的相关文件的关联性(最重要的是文件名和inode的对应关系)。

2、文件

分配至少一个inode和相对该文件大小的块数量(文件名记录在目录所属的块区域)

要读一个文件,Linux会先由根目录/获取该文件的上层目录所在的inode,再由该目录所记录的文件关联性获取该文件的inode,最后通过inode内内提供的

块指针获取最终的文件内容。

注意:

1、一个分区(文件系统)所能容纳的最大文件数与inode的数量有关,每个文件至少占用一个inode

当建立ext2文件系统时,它拥有超级块/组描述/块位图/inode位图/inode表/数据块等区域。

日志文件系统,可以快速修复文件系统。(日志文件系统的最基本的功能)

文件系统的载入点,是目录而不是文件,它是该文件系统的入口。

Linux支持的其它文件系统有:

传统文件系统:ext2/minix/MS-DOS/FAT/iso9660等等

日志式文件系统:ext3/ReiserFS/Windows NTFS/IBM JFS/SGI XFS

网络文件系统:NFS/SMBFS

ls -l /lib/modules/`uname -r`/kernel/fs 查看Linux支持的文件系统

cat /proc/filesystems 系统当前启用的文件系统

root@duyuqi-OptiPlex-380:~# cat /proc/filesystems

nodev sysfs

nodev rootfs

nodev bdev

nodev proc

nodev cgroup

nodev cpuset

nodev tmpfs

nodev devtmpfs

nodev debugfs

nodev securityfs

nodev sockfs

nodev pipefs

nodev anon_inodefs

nodev devpts

ext3

ext2

ext4

nodev ramfs

nodev hugetlbfs

nodev ecryptfs

nodev fuse

fuseblk

nodev fusectl

nodev mqueue

nodev binfmt_misc

8.2 文件系统的简单操作

1、df 磁盘与目录容量

-a:列出所有的文件系统

-i:不用硬盘容量,以inode的数量来显示

-T:连同属于的文件系统类型也列举出来。

2、du

3、ln 链接文件

默认建立硬链接(不能跨越文件系统,不能连接目录)

ln -s 源文件 目标文件 :建立软链接,软链接又叫符号链接。

-f:如果目标文件存在时,就主动将目标文件直接删除后再建立。

创建新目录时,新目录的链接数为2,其父目录链接数+1

4、mount
磁盘载入和卸载

mount [-tonL] 设备名称 载入点

-a:按照/etc/fstab的内容将所有相关的磁盘都挂上来

-n:

-L:

-t::Linux支持的文件系统

-o:

umount 设备号或载入点 ——卸载设备文件

分区命令fdisk

格式化磁盘 mke2fs

磁盘检测 fsck/badblocks

sync将内存中数据写入磁盘,避免不一致情况的发生。

mknod 修改设备参数

e2label

tune2fs

hdparm

Windows分区以ABCD的方式来划分,而Linux/Unix系统以目录划分,that is,一个目录可能就是一个分区

/etc/fstab就是使用mount将设备载入到系统地某个载入点所需执行的命令内容,将这些内容写到/etc/fstab里,让系统一启动就主动载入。

<file system> <mount point> <type> <options> <dump> <pass>

文件系统 挂载点 类型 文件系统参数 dump备份命令(0不备份,1要备份,2要备份重要性比1低) 是否以fsck检验分区(0不检验,1要检验,2要检验但1会较早检验,)

swap分区,虚拟内存;/proc /sys

建立虚拟内存swap、

虚拟内存,是将硬盘规划出一个区间,让内存的数据可以通过硬盘来读取。

第九章 文件的压缩与打包

压缩文件扩展名:

.Z:compress程序压缩文件,compress程序是一个早期的压缩软件,现在不是默认的压缩软件了。gzip,bzip2压缩比更好,缺点是只针对一个文件。

.bz2:bzip2程序压缩

.gz:gzip程序压缩

.tar:tar打包,未压缩

.tar.gz:tar打包,经gzip压缩

tar命令:

命令格式:tar [options] tarfile filepath

-c 建立压缩文件;-z gzip压缩;-j bzip2压缩;-v 压缩过程显示文件;-f 后面跟文件

-x 解压缩;-t 看压缩文件中的文件 (-c -x -t)选项只能有一个存在

命令示例:

tar cvf /tmp/etc.tar /etc;仅打包,不压缩

tar czvf /tmp/etc.tar.gz /etc;打包,gzip压缩

tar cjvf /tmp/etc.tar.bz2 /etc;打包,bzip2压缩

tar xzvf /tmp/etc.tar.gz;解压到本地目录

tar xzvf /tmp/etc.tar.gz /etc;把etc.tar.gz解压到/etc下

tar czvf this.tar.gz ./*:将当前目录下的所有文件压缩为this.tar.gz

tar xzvf this.tar.gz ./:将this.tar.gz解压到当前目录下

第三部分 学习Shell和Shell脚本

第十章 vi文字处理器

总体来讲,vi编辑器内容繁多,掌握起来不容易。现在单捡取我不熟练但却常用的技巧。

命令行模式:

输入模式:

末行模式:

复制多行:

切换到在命令模式下,

光标移到起始行,输入ma

光标移到结束行,输入mb

光标移到粘贴行,输入mc

然后输入 :'a,'b co 'c (把 co 改成 m 就成剪切了)

复制一行:切换到命令模式下,输入 yy,然后移动光标到目标行 输入p执行

复制连续6行:切换到命令模式下,输入 y6y或者6yy,然后移动光标到目标行 输入p执行

/word:光标处向上找匹配

?word:光标下上找匹配

:n1、n2s/word1/word2/g 从n1到n2,word1全局替换word2

:1、$s/word1/word2/g 从第一行到最后,word1全局替换word2

:1、$s/word1/word2/gc 从第一行到最后,word1全局替换word2,在替换前显示提示符给用户确认

dd删除一行

ndd删除n行

:set nu 显示行号

:set nonu 取消行号

块选择

v:字符选择,光标经过的地方反白选择

V:行选择,光标经过的行反白选择

Ctrl+v:块选择,可以用长方形的方式选择数据

y:复制选定

d:删除选定

多文件编辑,使用vim命令接多个文件,配合块选择。

:files列出当前vim打开的所有文件

:n编辑下一个文件

:N编辑上一个文件

vim环境变量

:set all查看vim所有环境变量参数,很多大约有三页

DOS的换行符为^M$('\r\n'也写作CR与LF) 即16进制 13 10

Unix/Linux的换行符为$('\n',即LF),即16进制 10

格式转换

dos2unix [-kn] file [newfile] -k保留原来的mtime时间格式

unix2dos [-kn] file [newfile] -n保留原来旧文件,转换内容输入到新文件中。

LPI——Linux Professional Institute。LPI认证是对Linux应用技能的认证,它不是由哪一家Linux发布厂商提供的产品认证,而是站在一个

中立的、第三方的角度,对Linux广泛和通用的技术水平进行考核,考试标准是根据Linux标准基础(LSB)制订的。

第十一章 认识Bash Shell

关于shell

Bourne shell /bin/sh

Bourne-again shell /bin/bash GNU shell兼容Bourne shell,Linux使用

C shell /bin/csh Sun默认

Korn shell /bin/ksh

TENEX C shell /bin/tcsh

/etc/shells文件,记录

root@duyuqi-OptiPlex-380:~/Unix/test# cat /etc/shells

# /etc/shells: valid login shells

/bin/csh

/bin/sh

/usr/bin/es

/usr/bin/ksh

/bin/ksh

/usr/bin/rc

/usr/bin/tcsh

/bin/tcsh

/usr/bin/esh

/bin/dash

/bin/bash

/bin/rbash

命令别名:alias lm='ls -al'

type命令:

type [-tpa] name

不加参数,type会显示出name是外部命令还是bash内置命令

-t:将name通过(file alias builtin)显示。file为外部命令,alias为命令别名所设置的名称,builtin为bash内置的命令功能

-p:如果后面节的name为命令,会显示完整文件名(外部命令)或显示为内置命令

-a:在PATH变量定义的路径中,列出所有含有name的命令包含alias

MAIL变量,邮件信箱访问路径,每个账户都不一样,/var/spool/mail/...

shell环境中设置变量,"=" 之间不能有空格,数字不能开头,变量扩展PATH="$PATH":/home

取消变量方法为unset 变量名称

切换到当前核心的模块目录:cd /lib/modules/`uname -r`/kernel

环境变量:env 列出当前黄静下环境变量及其内容;set会将环境变量列出来,还会列出其他的自定义变量,所有的变量都会列出来。

LANG:语系文件

RANDOM:随机数发生器/dev/random

PS1:命令提示符

root@duyuqi-OptiPlex-380:~/Unix/test# echo $PS1

${debian_chroot:+($debian_chroot)}\u@\h:\w\$

$:关于本shell的PID,?:上一个执行命令的放回状态码

export 变量,自定义变量转换成环境变量。自定义变量和环境变量的不同之处是 是否可以被子程序所引用

语系文件变量locale -a;

系统语系支持文件:/etc/sysconfig/i18n——Ubuntu不是这个文件,/etc/default/locale

read [-pt] variable -p接提示信息,-t后接等待的秒数

declare [-aixr] variable 声明变量的属性 同typeset

-a:定义为数组array

-i:定义为integer

-x:同export,使变量称为环境变量

-r:将变量设置为只读(readonly),该变量不可更改内容,也不能取消设置。

与文件系统及程序的限制关系:ulimit

bash对诸多系统资源,例如可以打开的文件数量,可以使用的CPU时间,可以使用的内存总量,都有限制。

ulimit [-SHacdflmnpstuv] [配额]

-H:hard limit,严格限制,必定不能超过设置的值

-S:soft limit,警告设置,可以超过但有警告,仍然不能超过严格限制。

-a:列出所有的限制额度,以下是我的系统执行的结果。

root@duyuqi-OptiPlex-380:/etc# ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 20

file size (blocks, -f) unlimited

pending signals (-i) 16382

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 1024

pipe size (512 bytes, -p) 8

POSIX message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) 8192

cpu time (seconds, -t) unlimited

max user processes (-u) unlimited

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

-c:可建立的最大核心文件容量(core files)

-d:程序数据可使用的最大容量

-f:此shell可以建立的最大文件容量

-l:可用于锁定的内存量

-p:可用于管道处理的数量

-t:可使用的最大CPU时间(单位是秒)

-u:单用户可以使用的最大进程数量

附加变量设置功能:

${vbird##/*/}:删除变量中最长匹配,取剩余

${vbird#/*/}:删除变量中最短匹配,取剩余

${vbird%%/*}:比较最后字符串,删除最长匹配取剩余

${vbird%/*}:比较最后字符串,删除最短匹配取剩余

${vbird/test/TEST}:替换第一次匹配

${vbird//test/TEST}:替换所有匹配

命令别名:

alias lm='ls -l|more' 设置命令别名

alias——查询当前有哪些命令别名

unalias lm 取消命令别名

历史命令:

history n:列出最近使用的n行命令

history -c:清除当前history内容

history -a:将当前新增的history命令加入histfiles中,若没有加入histfiles,则默认写入~/.bash_history

history -r:将histfiles的内容独到当前shell的历史记忆中。

history -w:将当前的历史记忆内容写入到histfiles中

历史记录的条目与HISTSIZE有关,至多这些。

root@duyuqi-OptiPlex-380:~# echo $HISTSIZE

1000

history的用途很多,要注意安全,尤其是root的历史记录文件。~/.bash_history,该文件被解析后果不堪设想。

环境设置文件

/etc/profile:该文件确定了/etc/inputrc针对键盘热键设置的文件数据内容,也规划出/etc/profile.d及/etc/inputrc这两个目录与文件,

该文件可以设置变量,所有用户都会使用该文件的信息,故应当小心。

/etc/bashrc:该文件确定umask的功能,同时也确定了提示符的内容(PS1)。Ubuntu中文件在/etc/bash_completion

/etc/profile.d/*sh:针对bash及C-shell规范了一些数据。

root@duyuqi-OptiPlex-380:/etc/profile.d# ls

bash_completion.sh

/etc/man.config——Ubuntu中是/etc/manpath.config

个人设置值——个人的home的几个隐藏文件

~/.bash_profile,~/.bash_login,~/.profile:三个文件通常只要一个即可,bash启动时,先读取~/.bash_profile,找不到时读~/bash_login,

然后是~/.profile

~/.bashrc:在每次执行shell脚本是都会重新读取该文件。~/.bash_profile只在登录时才读一次。

~/.bash_history:历史命令文件

~/.bash_logout:该文件记录,当注销bash后,系统再做什么操作后才离开。

source和小数点.都可以将设置文件的内容读进当前的shell环境中。

终端的环境设置stty,set

stty -a将当前所有的stty参数列举出来

root@duyuqi-OptiPlex-380:~# stty -a

speed 38400 baud; rows 23; columns 155; line = 0;

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;

werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;

-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts

-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8

opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0

isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

通配符和特殊符号(记录我不会的,或者不熟的)

;连续命令的分割

&将命令变成后台工作

!逻辑意义上的非

()中间为子shell的起始与结束

[]中间位字符的组合

{}中间为命令区块的组合

``在遗传命令中,`command`内的命令会先执行,执行完的消息再回传到外部命令来处理。

重定向

标准输入:< <<

标准输出:> >>

标准错误输出:2> 2>>

find /home -name test > right 2> error 标准输出和标准错误分开存放

find /home -name test > right 2> /dev/null 只要标准输出,标准错误扔到垃圾桶/dev/null中。

find /home -name test > list 2>&1 将数据都写到同一个文件中

管道命令——略

cut 命令

cut -b list [-n] [file ...]

cut -c list [file ...]

cut -f list [-d delim][-s][file ...]

上面的-b、-c、-f分别表示字节、字符、字段(即byte、character、field);

list表示-b、-c、-f操作范围,-n常常表示具体数字;

file表示的自然是要操作的文本文件的名称;

-d为分隔符,delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;

-s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)

N 只有第N项

N- 从第N项一直到行尾

N-M 从第N项到第M项(包括M)

-M 从一行的开始到第M项(包括M)

- 从一行的开始到结束的所有项

grep命令:全称是Global Regular Expression Print

grep [options] pattern filename;pattern为正则表达式,options如下,

-c:只输出匹配行的计数。

-i:忽略大小写。

-n:显示匹配行及行号。

-v:显示不包含匹配文本的所有行。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-s:不显示不存在或无匹配文本的错误信息。

该命令结合正则表达式使用。

排序命令sort

排序完毕将重复数据仅显示一次uniq

统计命令wc:统计文件里有多少字,多少行,多少字符。

wc [-lwm]: lines,words,

双向重定向tee

  功能说明:读取标准输入的数据,并将其内容输出成文件。

  语   法:tee [-ai][--help][--version][文件…]

  补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。我们可利用tee把管道导入的数据存成文件,甚至一次保存数份文件。

  参   数:-a 附加到既有文件的后面,而非覆盖它。如果给予tee指令的文件名称已经存在,预设会覆盖该文件的内容。加上此参数后,数据会新增在该文件内容的最

后面,而不会删除原先之内容。

  -i 忽略中断信号

  --help 在线帮助

  --version 显示版本信息

字符转换命令:tr、col、join、paste、expand

拆分命令split,将大文件拆分成小文件

参数代换xargs

管道命令常用-代替stdin和stdout

eg:tar -cvf - /home | tar -xvf -

第十二章 正则表达式

grep,sed,awk,vi等程序的基础,最为重要的一部分。

正则表达式

[],匹配一个指定范围内的一个字符,如'[Gg]rep'匹配Grep和grep。

eg:grep -n '[Gg]rep' filename

反向符号^,

eg:grep -n '[^g]oo'//匹配oo前不是g的文本行,^在[]内表示反向符号

行首符号^,

eg:grep -n '^[^A-Za-z]' filename//匹配行首不是字母的文本行,注意反向符号和行首符号的区别。

行尾符号$,^M为windows下的换行符

eg:grep -v '^[$#]' filename//过滤空白行和注释行(设#为注释符号,如Shell脚本makefile文件等)

.一个任意字符,*(0个或者多个,bash中表示任意字符串)

eg:grep -n 'g.*g' filename// 匹配g开头g结尾的字符串

\<: 表示词首. 如 \<abc 表示以 abc 为首的词.

\>: 表示词尾. 如 abc\> 表示以 abc 结尾的词.

限定范围字符{},

grep -n 'go\{2,5\}' filename//匹配g后面跟2-5个o的文本行

grep -n 'go\{2,\}' filename//匹配g后面跟2个以上o的文本行

?: 表示前一个char 的出現次数为 0 或 1 次. 如 ab?c 表示 a 与c 之间可有 0 或 1 个b 存在.

sed命令

sed是一种在线编辑器,一次处理一行数据。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),

接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

文件内容并没有 改变,除非你使用重定向存储输出。

sed命令格式:

sed [options] 'command' files

sed [options] -f scriptfile files;

-i 直接修改原文件。-e执行多个sed命令。

command如下,

-a新增一行,加到当前行的下一行

eg:sed '2a test' filename;在filename第2行之后添加一行文本,文本内容是test

-i插入到当前行的上一行,sed '2i test' filename;在filename第2行之前添加一行文本,文本内容是test,

-d,删除数据

eg:sed '2,5d' filename;删除filename2-5行

sed '2d' filename;只删除filename第2行

sed '2,$d'filename;删除filename第2行之后所有文本

-s,搜索和替换

[address,[address]]s/pattern-find/replacement-pattern/[gpwn]

g,global每一行的所有匹配进行全局替换,默认情况下只替换第一个;

sed 's/1/2/g' sample,把文件sample中的1全部替换成2

sed '/two/ s/1/2/g' sample,把匹配two的行中的1全部替换成2

awk命令

awk语言最基本的功能是在文件或字符串中基于指定的规则浏览和抽取信息,倾向于一行中分成数个

“字段”来处理数据,数据多为结构化数据源(类似于小型数据库,例如有规则的文件)

awk命令格式:

awk 'type{action1} type{action2} ...' filename

字段分割符默认为空格与tab

$0为一整行数据,$1,$2,...分别为第一个数据第二个数据

awk的内置变量:

NF 每行拥有的字段总数

NR 当前awk处理的是第几行

FS 当前的分割符

awkfile原文件内容:

ID Name Score Deptname Others

1 Bao 90.0 Physics

2 Antique 90.5 Mathmetics

3 Elder 91.5 Computer major

4 Pig 92.7 Software major

5 Monkey 93.2 Software

6 Nothing 94.9 Mathmetics major

7 Secret 95.0 Fore.... major

显示详细信息

awk 'NR==1{print "行\t字段数\t" $0}NR>1{print NR-1 "\t" NF "\t" $0}' awkfile

result:

行 字段数 ID Name Score Deptname Others

1 4 1 Bao 90.0 Physics

2 4 2 Antique 90.5 Mathmetics

3 5 3 Elder 91.5 Computer major

4 5 4 Pig 92.7 Software major

5 4 5 Monkey 93.2 Software

6 5 6 Nothing 94.9 Mathmetics major

7 5 7 Secret 95.0 Fore.... major

#!/bin/bash

echo "/etc/passwd"

cat /etc/passwd

echo "awk FS=: 第一行不起作用"

cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}'

echo "awk FS=: 第一行起作用"

cat /etc/passwd | awk 'BEGIN{FS=":"} $3 < 10{print $1 "\t" $3}'

BEGIN,打印报告头

END,打印信息尾

打印语句print,printf语句与C语言相同

{}中语句支持if

文件数据比较与显示的相关功能

diff [-bBi] from-file to-file 比较ASCII文件;

cmp [-s] file1 file2

patch

文件打印准备:pr

第十三章 学习Shell脚本

自动化管理的重要依据;追踪与管理系统的重要工作;简单的入侵检测工作;连续命令单一化;简单数据处理;跨平台支持与缩短学习历程

这部分略,留待看Unix Shell时在详细学习。

第四部分 Linux用户管理

第十四章 Linux账号与身份管理

UID用户ID和GID组ID,位于/etc/passwd,我的root账户和普通账户duyuqi的信息如下:

root@duyuqi-OptiPlex-380:~# cat /etc/passwd|egrep 'root|duyuqi'

root:x:0:0:root:/root:/bin/bash

duyuqi:x:1000:1000:duyuqi,,,:/home/duyuqi:/bin/bash

这里必须详细了解几个文件,如:/etc/passwd;/etc/shadow等

Unix环境高级编程中有叙述:

口令文件/etc/passwd——访问口令文件<pwd.h> struct passwd{}

阴影口令/etc/shadow——访问阴影文件<shadow.h> struct spwd{}——用户的密码信息

组文件/etc/group——访问组文件<grp.h> struct group{}

主机文件/etc/hosts——访问主机文件<netdb.h> struct hostent{}

网络文件/etc/networks——访问网络文件<netdb.h> struct netent{}

协议文件/etc/protocol——访问协议文件<netdb.h> struct protoent{}

服务文件/etc/services——访问服务文件<netdb.h> struct servent{}

Linux口令文件——root:x:0:0:root:/root:/bin/bash——用户名:密码:用户ID:组ID:注释字段:主目录路径:默认shell

Linux组文件——root:x:0:root,linuxsir——组名:组密码:组ID:用户列表(每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名)

Linux阴影文件——duyuqi:$6$/oRs2PHa$Vei2/8L63v/v2bqqS4wzDGWqfXXbJCFPX1fkdg5uFwpyuRYksX..IzxN17at.9OPkVU.UPy5Gu6rXaY9mAUCN0:15165:0:99999:7:::

——共7段,账户名:真正的密码(经过编码后的密文):最近更改密码的日期:密码不可更改的天数:密码需要重新更改的天数:密码更改期限前的警告期限:密码过期的宽限时间:账号失效日期:保留

UID = 0为系统管理员

UID = (1——499)保留给系统使用的ID

UID = (500——65535)给一般用户用

groups查看当前用户所支持的所有用户组,第一个用户组为有效用户组;newgrp 用户组名可以更改当前有效用户组,exit退出新的有效用户组

/etc/gshadow:它的作用是,让那些不在用户组中的成员,临时加入该用户组。

root:*:: ——用户组名:密码栏(!表示无法登录):用户组管理员账号:该用户组的所属账号

daemon:*::

账号管理:

新增用户useradd [-u UID] [-g initial_group] [-G other_group] [-Mm] [-c 说明栏] [-d home] [-s shell] username

-m:强制,要建立home目录

-M:强制,不要建立home目录

使用useradd新增账号时,默认情况下,相关信息都参考/etc/default/useradd文件内容的设置。

home目录的各项数据都是由/etc/skel/*所复制过去的。

密码和UID/GID有关的设置文件则是在/etc/login.defs中

passwd [useraccount]

修改用户usermod [-cdefGlsuLU] username

删除用户userdel username

-r 连同home目录也删掉

一般用户常用的账号数据更改命令:

chsh [-ls]

-l:列出当前系统上可用的shell,其实就是/etc/shells的内容(没执行成功!!!)

-s:设置修改自己的Shell

chfn [-foph] 修改用户有关信息

finger [-s] username

id [username] 查询某人或自己的相关UID/GID信息

groupadd [-g gid] [-r]

-r:建立系统用户组

groupmod [-g gid] [-n group_name]

-g:修改已有的GID

-n:修改已有的用户组名

groupdel [groupname]

gpasswd

newgrp 额外以另一个login来让用户登录到另一个shell,并且将有效用户组改为newgrp后面接的那个用户组(若没有接用户组,则默认用户组为初始用户组)

su [-lcm] username

-: su -时,表示该用户想要变换身份称为root,且使用root的环境设置参数文件

-l:后可接用户,如su -l duyuqi 可使用变换身份这的所有相关环境设置文件

-m:与-p一样,表示“使用当前环境设置,而不重新读取新用户的设置文件”

-c:仅进行一次命令,所以-c后面可以加上命令

su更安全的替代品——sudo,相关文件为/etc/sudoers

root@duyuqi-OptiPlex-380:~# cat /etc/sudoers | grep -v '^#' | grep -v '^$'

Defaults env_reset

root ALL=(ALL:ALL) ALL ——说明:用户账号 登陆的主机=(可以变换的身份) 可以执行的命令

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL

sudo的工作过程:

1.用户执行sudo时,系统寻找/etc/sudoers判断用户是否有执行sudo的权限

2.确认用户具有可执行sudo的权限后,让用户"输入用户自己的密码"来确认

3.若密码输入成功,开始执行sudo后续命令

4.root执行sudo时,不需要输入密码

sudo [-u [username]#uid] command

/sbin/nologin,不让用户实际登录,不允许账号登录;可以建立/etc/nologin.txt说明用户不能登录的原因

PAM(Pluggable Authentication Modules,嵌入式模块)验证

PAM设置文件/etc/pam.d

更多的环境设置在/etc/security/*

PAM验证模块,模块在/lib/security/*

查询用户:w,who,last,lastlog

用户对话:talk,mesg,wall

用户邮件信箱:mail

每个Linux用户都有一个邮箱(文件)——位于/var/spool/mail/*

寄信:

mail username@localhost-s "邮件标题"

正文

.(正文的结束)

Cc:(抄送给其他人)

收信:

mail

?(列出mail内部的命令有哪些)

第十五章 Linux磁盘配额

Linux下,进行硬盘空间管理的是磁盘配额。磁盘配额的几个基本限制:

1、仅针对整个分区

2、内核必须支持磁盘配额

3、磁盘配额的记录文件

4、只对一般身份用户有效:root不能设置磁盘配额,因为他拥有整个系统所有的数据。

磁盘配额程序针对整个分区的限制:

1、最低限制:可以突破该限制

2、最高限制:绝对不可超越的限制

3、宽限时间:当用户使用的空间超过了最低限制,海内到最高限制是,在“快线时间”内,必须请用户将使用的磁盘容量降低到最低限制之下。

宽限时间会自动启动和自动取消。

基本磁盘配额命令

文件/etc/mtab:文件系统实际载入的记录文件

查询命令:quota,quotacheck,quotastats,warnquota,repquota

编辑磁盘配额内容:edquota,setquota

启动有磁盘配额的文件系统:quotaon

关闭有磁盘配额的文件系统:quotaoff

磁盘配额的一般用途:

限制某个用户组所能使用的最大磁盘配额

限制某一用户的最大磁盘配额

已连接方式,是邮件可以作为限制的配额。

磁盘配额设置步骤:——我没有实际操作

设置分区的文件系统支持磁盘配额参数

建立配额记录文件

编辑磁盘配额限制值数据

重新扫描与启动磁盘配额

第十六章 例行性命令的建立

at:工作仅执行一次就从Lin徐系统的任务分配中取消

cron:工作将持续做下去

Linux的默认例行工作:

登录文件的数据轮换

rpm数据库的建立

建立locate的数据库

程序分析

检查登录文件

指纹数据库的比较

at命令

负责任务分配的服务atd,Linux不默认打开它,手动打开:/etc/init.d/atd restart,再设置开机启动chkconfig --level 35 atd on

工作记录文件/var/spool/at,利用/etc/at.allow与/etc/at.deny限制at的使用,写在/etc/at.allow文件中的用户才能使用at,没有

/etc/at.allow的文件就找/etc/at.deny,写在at.deny中的用户不能使用at,没在at.deny中的用户可以使用at;两个文件都不在,只有root能使用at

at [-m] TIME

-m:当at的工作完成后,以电子邮件的方式通知用户该工作已完成

TIME时间格式

HH:MM eg:04:00

HH:MM YYYY-MM-DD eg:04:00 2005-12-13

HH:MM[am][pm] [Month] [Date] eg:04:00 04pm December 3

HH:MM[am][pm] + number [minutes|hours|days|weeks] eg:04:00 04pm + 3 days

at可以再一个工作内输入多个命令,以<EOF>结尾。at命令进行后台执行

atq:查询当前主机上有多少at工作任务分配

atrm [jobnumber]:删除工作任务

crontab

循环执行的例行性命令,由crond系统服务控制,默认启动;限制使用crontab命令

/etc/cron.allow,/etc/cron.deny同at很像,不再重复

crontab [-u username] [-l|-e|-r]
该命令实际上是/usr/bin/crontab

-u:只有root才能执行这个任务

-e:编辑crontab的工作内容,每项工作是一行

-l:查看crontab的工作内容

-r:删除crontab的所有工作内容,慎用!!!

每项工作的格式是 五个时间参数 实际操作命令,五个时间参数代表

分钟0-59 小时0-23 日期1-31 月份1-12 周0-7(0和7都代表星期天)

*表示任何时间都接受

,表示分割时段

-表示一段时间范围内

/n 表示每隔n单位时间

系统的设置:/etc/crontab,crontab -e是针对用户的cron来设计的,系统的例行性任务之哟啊编辑/etc/crontab文件就可以。

cron服务弟弟检测时间是分钟,每分钟读取一次/etc/crontab与/var/spool/cron中的数据内容;某些系统需要重启crond服务

/etc/init.d/crond restart

root@duyuqi-OptiPlex-380:~# cat /etc/crontab

# /etc/crontab: system-wide crontab

# Unlike any other crontab you don't have to run the `crontab'

# command to install the new version when you edit this file

# and files in /etc/cron.d. These files also have username fields,

# that none of the other crontabs do.

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command

17 * * * * root cd / && run-parts --report /etc/cron.hourly

25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

#

第六个字段表示执行用户为root;run-parts后面接目录,表示,一个目录内的所有可执行文件。

注意资源分配不均的问题,让任务分散开来。

取消不要的输出项目,扔入/dev/null垃圾桶中。

执行安全检验

第十七章 程序与资源管理

常驻内存程序,又称为守护进程如crond、atd、syslog、vsftpd等等

作业管理的常用命令:每个作业都是当前bash的子程序

& 直接将命令放入后台执行;用户可以直接控制的作业称为前台作业,在内存可以自行运行的作业,用户无法直接控制它,除非用bg、fg等命令将改作业掉用出来

[ctrl]-z:【1】表示第一个作业,+表示当前在后台下默认的作业,由ctrl+z放到后台中的作业都是暂停状态

jobs [-lrs]

-l:除了列出作业号之外,同时列出PID

-r:仅列出正在后台运行的作业

-s:仅列出正在后台暂停的作业

fg %jobnumber:将后台作业拿到前台处理

bg:让作业在后台运行

kill管理后台作业

kill -signal %jobnumver

-l:字母L的小写,列出当前kill能够使用的信号

-1:数字一,重新读取一次参数的设置文件

-2:Ctrl+C中断信号

-9:强制删除一个作业

-15:正常方式终止一项作业。

ps命令

ps

-A所有的进程均显示出来

-a:与终端无关的所有进程

-u:有效用户的相关进程

x通常与a参数一起使用,可列出较完整的信息

-l:较长较详细的显示出该PID的信息

j:作业的格式

-f:更为完整的输出

输出信息表头F(进程的标志,4表示为超级用户),S(进程状态STAT),PID(进程ID),PPID(父进程ID),C(CPU使用的资源百分比),

PRI(优先级Priority的缩写),NI(NICE值),ADDR(指出进程在内存的那一部分,运行的进程是-),SZ(用掉的内存大小),

WCHAN(当前进程是否正在运行),TTY登录者的终端位置,TIME用掉的CPU时间,CMD所执行的命令

USER(进程属于哪个用户账号),VSZ(进程使用的虚拟内存量),RSS进程占用的固定内存量,START进程被触发启动的时间

top命令

top [-d] | top [bnp]

-d:后面可以接秒数即画面更新的秒数,默认为五秒

-b:以批处理的方式执行top

-n:与-b搭配,需要几次top的输出结果

-p:指定某个PID来进行观察检测

在top执行过程中可以使用的按键命令有:? P M N T k r

top的输出结果,

root@duyuqi-OptiPlex-380:~# top

top - 15:35:35 up 22 days, 18:41, 2 users, load average: 0.00, 0.02, 0.05

Tasks: 147 total, 1 running, 145 sleeping, 0 stopped, 1 zombie

Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 2023752k total, 832224k used, 1191528k free, 244752k buffers

Swap: 2059260k total, 0k used, 2059260k free, 343532k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

第一行:显示系统已启动的时间,当前上线人数,系统整体负载。

第二行:显示当前观察的进程数量,注意Zombie数值

第三行:显示CPU总负载

第四行:当前物理内存使用量

第五行:当前虚拟内存使用量

pstree [-Aup]
要找出进程之间的关联性,pstree非常好用

-A:各进程树之间以ASCII字符来连接

-p:同时列出每个进程的PID

-u:同时列出每个进程的所属账号名称

killall [-iIe] [command name]

-i:交互式的,若需要删除,会出现提示符

-e:命令完全匹配,但整个完整命令不超过15个字符

-I:命令名称忽略大小写

系统资源观察:

free

uname [-asrmpi]

uptime

netstat网络监控命令

dmesg

sar

进程的优先级PRI是priority的简写,NI是nice的简写,他们凑在一起产生当前的PRI值,PRI越小,表示该进程优先级越高。PRI(new)=PRI(old)+nice

nice [-n] command

nice后面接一个数值,数值的范围是-20~19

renice [number] PID

进程都在内存中,内存数据都写入到/proc/*中

查询以打开的文件或已执行进程打开的文件

fuser [-ki] [-signal] file/dir 由文件或设备去找出使用该文件或设备的进程。

lsof 查出某个进程打开或使用的文件与设备

pidof

第五部分 Unix系统管理员

第十八章 启动关机的流程与加载程序

Linux的启动过程:

加载BIOS的硬件信息,并获取第一个启动设备的代号

读取第一个启动设备的MBR的引导加载程序(lilo,grub,spfdisk等)启动信息

家在操作系统内核,内核解压缩,并尝试驱动所有硬件设备

init执行/etc/rc.d/rc.sysinit)——第一个程序init程序,其设置文件为/etc/inittab与runlevel

启动内核外挂模块/etc/modprobe.conf

init执行运行的各个批处理文件

init执行/etc/rc.d/rc.local文件

执行/bin/login程序,等待用户登录

登录后,开始以shell控制主机

Linux的运行等级:默认运行等级是3或者5

0——halt

1——单用户模式

2——多用户模式,无NFS服务

3——多用户模式,有NFS服务

4——系统保留级别,未使用

5——X11,同3,但使用X Window

6——reboot,重启

第十九章 源码与Tarball套件管理程序

第二十章 RPM与SRPM套件管理程序

第二十一章 系统服务守护程序

守护进程(不会一直占用系统资源,Sleeping状态)分类:

1.独立启动的独立启动守护进程

2.通过统一安全机制管理的超级守护进程

与服务有关的端口信息:/etc/services

守护进程的shell脚本存放在哪里?

1.独立启动的独立启动守护进程/etc/init.d目录

2.通过统一安全机制管理的超级守护进程,即xinet或者inet。启动脚本写在/etc/init.d/xinetd里。

服务设置项目写在 /etc/xinetd.conf和/etc/xinetd.d/*目录的任何文件中

启动守护进程:/etc/init.d/syslog start 或者
service syslog start

service [service name] (start|stop|restart|...)

解析超级守护程序的设置文件——这是个重点,要花点时间,内容好多。

/etc/xinetd.conf还有/etc/xinetd.d/*

观察系统启动的服务使用netstat命令

第二十二章 认识与分析登录文件

登录文件:记录系统活动的文件,何时何地何人做了何事。这些系统信息非常详细。通常,这些登录文件只有root可以查看。其功能有:

1.解决系统故障,系统资源被耗尽,内核发生错误,登录文件会将错误信息记录在登录文件中

2.解决网络服务问题

3.记录登录信息

常见的登录文件有:——Ubuntu上不是这样

/var/log/secure

/var/log/wtmp:登录者的信息数据

/var/log/messages

/var/log/maillog

/var/log/boot.log:开机或服务启动时所显示的启动或关闭信息

/var/log/maillog:邮件访问和来往的用户记录

/var/log/cron:记录例行性服务的内容

/var/log/httpd,/var/log/news...分别是几个网络服务的记录文件

针对登录文件来设计的服务有:记录系统或者是网络服务的登录文件syslogd,将旧的数据更名并且建立新的登录文件保持登录文件的全新,删除

最旧的登录文件logrotate

syslogd守护进程

syslog程序提供了系统登入信息记录,核心错误或警告信息记录,本地端与远程计算机的登录信息记录,

经过syslog记录下来的数据主要有:

日期和时间;主机名称;服务名称或函数名称;该消息数据内容

登录文件的配置文件:/etc/syslog.conf
——Ubuntu下没找到该文件,有一个/etc/rsyslog.conf

每种服务所产生的信息分为7个等级:

info:基本信息说明

notice:比info更需要注意的一些信息

warning或warn:一些中的错误信息。

err或error

crit:比error严重的错误,临界点(critical)的缩写

alert:比crit还要严重

emerg或panic:系统几乎要死机,非常严重,硬件问题

另外有debug(错误检测等级)与none(不需要登录等级)

第二十三章 Linux备份策略

备份那些文件?/home/*和/etc/*

域账号和系统设置有关的文件(如/etc/passwd;/etc/shadow;/etc/group;/etc/gshadow;)所以要备份Linux的默认的主句信息设置文件/etc/*/home/*;

用户邮件/var/spool/mail/*, 如果改动过内核则要备份/boot;另外是/root,如果自行安装过其它程序则/usr/local或/opt也要备份。

系统www+MySql /var/www/*; 或/srv/www; /var/lib/mysql

在Linux主机上提供的其它数据库数据文件

备份介质:可擦写光盘,另一个硬盘,同一硬盘的不同分区,网络备份系统

备份方式:完全备份,部分备份

备份频率

备份工具:tar cpio dump

还原系统

主机需要在“很短时间内”立刻还原上线:保有一模一样的可立刻替换的机器

主机希望能够在查询到问题的原因后才正式上线

存储架构:SAN(Storage Area Network,存储区域网络);NAS(Network Attack Storage,网络攻击存储)

第二十四章 X Window简单设置

类Unix系统中的GUI,被称为X Window系统。——暂时不看了

第二十五章 Linux硬件检测与维护

没有看

第二十六章 Linux核心编译与管理

内核的问题,好深奥。需要找个大段的时间好好的研究一下。在这里我先放弃了。

总结:

本想阅读的更详细,还是有些时间不足。在Linux方面,系统管理上我是很弱的。第五部分好多地方没看,留下了空白,需要找点时间补上。

可以说,我以前的很多记忆是零碎而杂乱无章的,现在通读一遍《鸟哥的Linux》,稍微有些统一了。要熟练掌握和使用Linux,并不是一蹴而就的,

还需要坚持不懈的练习,在学习上没有通向终点的捷径。

Shell的语法方面没什么问题,只是练习尚缺,这一点留待学习Unix Shell时加强。

Unix环境高级编程,我大部分都看过,其中好多理解的还可以。这个复习起来应该比较容易的内核方面的知识几乎为0。

总之,我要学习的地方实在太多了。

这个文件是用UltraEdit编辑的,层次感不够好,不美观。使用word需要排版,而用CTex也有调试的麻烦,于是就用了个省略排版的UE了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: