鸟哥的Linux私房菜——基础学习篇-笔记

鸟哥的Linux私房菜--基础学习篇-笔记

第六章 文件目录与管理
6.3 查看文件内容
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出,tac是cat的倒写
more 一页一页地显示文件内容
less 与more类似,但其优点是,可以往前翻页
head 只看头几行
tail 只看末尾几行
nl 显示时同时输出行号
od 以二进制方式读取文件内容
下面详细说明每个指令的基本用法。

6.4 链接文件的介绍
ln [-s] [源文件] [目标文件]
-s :提供符号链接
:如果直接使用ln而不加任何参数,就属于硬链接

文件与目录权限
chown 改变文件的拥有者
chgrp 改变文件的所属群组
chmod 改变文件的可写、可读、可执行等属性
umask 改变预设的建立文件或目录时的属性
chattr 改变文件的特殊属性
语法:
[root @test /root ]# chattr [+-=][ASacdistu] [文件或目录名称]
参数说明:
+-= :分别为“+”(增加)、“-”(减少)、“=”(设定)属性
A :当设定了属性A,这个文件(或目录)的存取时间atime (access)将不可被修改,可避免诸如手提电脑容易产生磁盘I/O错误的情况
S :这个功能有点类似sync,是将数据同步写入磁盘中,可以有效避免数据流失
a :设定a后,这个文件将只能增加数据而不能删除,只有root才能设定这个属性
c :设定这个属性之后,将会自动将此文件压缩,在读取时自动解压缩。但是在存储的时候,会先进行压缩再存储(对于大文件很有用)
d :当dump(备份)程序被执行,设定d属性将可使该文件(或目录)具有dump功效
i :这个参数可以让一个文件“不能被删除、更名、设定链接也无法写入或新增数据”,对于系统安全性有相当大的助益
j :当使用ext3文件系统格式时,设定j属性将使文件在写入时先记录在日志中,但是当filesystem设定参数为data=journalled时,由于已经设定了日志,所以这个属性无效
s :当文件设定了s参数时,它会被完全移出这个硬盘空间
u :与s相反,当使用u配置文件时,数据内容其实还存在于磁盘中,可以用来取消删除

lsattr 显示文件的特殊属性
语法:[root @test /root ]# lsattr [-aR]
参数说明:
-a :将隐藏文件的属性也显示出来
-R :连同子目录的数据一并显示出来

6.6 搜寻文件或目录
which 查看可执行文件的位置
whereis 查看文件的位置
locate 配合数据库查看文件位置
find 实际搜寻硬盘查询文件名称

6.7 SetUID,SetGID,Sticky bit与file指令
SetUID,SetGID
[test@test test]$ ls -l /usr/bin/passwd
-r-s--x--x 1 root root 13476 Aug 7 2001 /usr/bin/passwd
看到/usr/bin/passwd文件前面的属性了吗?在原来x的位置有一个s属性?这个就是所谓的SUID。如果是-r-xr-s--x,那么s就成为所谓的SGID。当一个文件具有SUID时,同时others群组具有可执行权限,那么当others群组执行该程序时,others将拥有该文件的owner权限。

Sticky bit
具有sticky bit属性的目录,其下的文件或目录只有文件拥有者及root才有权删除。这样就容易明白了,在我们的系统中本来就预设有一个,那就是/tmp目录。


第七章 硬盘与硬件管理

7.2 查看硬盘或目录的容量
7.2.1 df
[root @tsai /root ]# df -[ikm]
参数说明:
-i: 使用 i-nodes 显示结果
-k: 使用 KBytes 显示结果
-m: 使用 MBytes 显示结果

7.2.2 du
语法:
[root @test /root ]# du [-abckms] [目录名称]
参数说明:
[目录名称] 可以省略,如果省略,表示要统计当前所在目录的文件容量
-a :列出所有的文件与目录,默认值是列出目录的值
-b :列出的值以bytes输出
-c :最后求总total
-k :列出的值以KB输出
-m :列出的值以MB输出
-s :只列出最后求总的值

7.3 磁盘分割与格式化
7.3.1 fdisk 硬盘分区工具
[root @test /root ]# fdisk [-l] [设备名称]
参数说明:
-l :直接列出该硬盘设备的分区表
范例:
[root @test root]# fdisk /dev/hdb 分割我的hdb磁盘,记得后面不接数

7.3.2mke2fs Linux下重要的格式化工具
语法:
[root @test /root ]# mke2fs [-b block-size] [-i inode-size]
[root @test /root ]# mke2fs [-c]
[root @test /root ]# mke2fs [-L]
[root @test /root ]# mke2fs [-j]
参数说明:
-b :设定每个数据块占用的大小,目前支持的大小有
1024, 2048和4096 三种
-i :设定 inode 值
-c :检查磁盘错误,会比较慢
-L :设定这个扇区的label(表头名称)
-j :建立ext3这个具有日志管理功能的文件格式

7.3.3 e2label
语法:
[root @test /root ]# e2label [/dev/hd...] [label_name]
参数说明:
范例:
[root @test /root]# e2label /dev/hda1 /
将/dev/hda1设备名设为“/”

7.3.4 mknod
语法:
[root @test root]# mknod [device] [bcp] [Major] [ Minor]
参数说明:
b :设定节点为外部设备文档
c :设定节点为接口设备,如鼠标等
p :建立FIFO

7.4.1 fsck
语法:
[root @test /root ]# fsck [-Aar] [设备名称]
参数说明:
-A :依据/etc/fstab的内容,将所有的设备都扫描一次
(通常启动过程中就会执行此指令)
-a :自动修复检查到的问题扇区,所以您不用一直按y
-r :一定要让用户决定是否需要修复,这与上一个-a参数刚好相反

7.4.2 sync
语法:
[root @test /root ]# sync
参数说明:
例:
[root @test /root]# sync; sync

7.6.1 mount
语法:
[root @test /root ]# mount [-ahlV]
[root @test /root ]# mount -t type /dev/hdxx /mountpoint
[root @test /root ]# mount -o [options]
[root @test /root ]# umount /mountpoint
参数说明:
-a :依照/etc/fstab的内容装载所有相关的硬盘
-h :只列出mount相关的参数,并不装载任何设备
-l :列出当前已经装载的设备、文件系统名称与装载点
-V :列出mount的版本信息
type :将后面/dev/hdxx设备以type的文件格式装载到
/mountpoint这个点。常见的type有下面几个:
vfat, msdos :是支持Windows系统的文件格式,其中vfat较常用
ext, ext2 :是Linux的主要文件格式
iso9660 :光驱的文件格式
nfs, ntfs, ufs :Windows 2000使用的NTFS格式
-o :这个参数后面接的项很多,如下:
rw :让装载的硬盘为可擦写
suid :允许该硬盘配置文件为SUID状态
exec :允许该硬盘执行二进制文件
auto :允许该硬盘使用mount -a参数设定
nouser :禁止他人(非root用户)使用装载功能,这是默认值。
async :允许硬盘进行异步记录(内存与硬盘不同步,最常用)
defaults:同时具有rw, suid, dev, exec, auto, nouser, async这些功能
nosuid :不许该硬盘具有SUID文件属性
ro :设定为只读属性
remount :让系统已经装载的硬盘重新被装载


第八章 文件系统加载
8.2/etc/fstab 文件说明(设定启动实时装载方式)
[root @test / ]# more /etc/fstab
# History:
# ==================================================
# When Who What
# 2002/10/19 VBird This file had been modified by me.
# ==================================================
# device MountPoint filesystem parameters dump fsck
/dev/hda1 / ext3 defaults 1 1
/dev/hda2 swap swap defaults 0 0
LABEL=/backup /backup ext3 defaults 1 1
none /dev/pts devpts mode=0620 0 0
上面一共有6栏,分别谈一谈。
1. 分区或标头:其实就是分区。不过,如果在安装时需要给出一个标头,使用label也
可以,例如上面的LABEL=/backup一行。如果是要增加新分区,这里就必须使用分
区,例如新装一个硬盘到/dev/hdd1中,那么这里就应写/dev/hdd1。那么,如果还是
想使用label来装载呢?就使用e2label建立标头名。e2label的用法在前一章有说明。
2. 装载点:就是mount的装载点。
3. 扇区的文件格式:目前Linux大都使用ext2,ext3,reiserfs等,不过,如果您使用了
Windows文件格式,那么可以使用vfat。目前支持的格式还有iso9660(光盘),msdos,
minix,nfs和swap等文件格式。
4. 文件格式参数:这个很重要。有哪些参数可以参考呢?在前一章的mount指令里介
绍了一些,这里再详细列出如下:
另外,如果有兴趣,还可以加上类似iocharset=big5,codepage=950这种额外的功能
参数以支持中文编码,详细内容可以使用man mount搜寻。
5. 是否可以使用dump指令备份:这一列说明,使用dump指令备份时,该分区是否跟
着一起动作。如果没有数字则以0代替。由于我们希望具有备份功能,所以这里使
用1表示开启。
6. 检查分区:这个数字在用fsck检查分区时使用。在开机与关机时,通常Linux希望检
查分区,所以这里需要设定。通常root(就是根目录/)需要设定为1,其他文件系
统(filesystem)设定为1也可以。当然,由于proc及swap与Windows并不需要用fsck
检查,所以可以设定为0。

8.3 建立与装载虚拟内存文件
8.3.1Swap 分区
1. 用fdisk /dev/hd[a-d]先建立一个分区。具体地说,就是:(1)建立一个分区。(2)将该分区的ID改为82,这是swap文件格式代号。
2. 用mkswap /dev/hd[a-d][1-16]将您刚刚配置的分区格式化为swap文件格式。
3. 启动swap。启动的指令为swapon /dev/hd[a-d][1-16]。

8.3.1Swap 文件 
1. 以dd指令建立swapfile;
2. 以mkswap将swapfile格式化为swap文件格式;
3. 以swapon启动该文件,使之成为swap;
4. 以swapoff关闭该文件。

第九章 VI
9.3 vi常用指令
光标移动类
Ctrl + f 屏幕向前翻动一页(常用)
Ctrl + b 屏幕向后翻动一页(常用)
Ctrl + p 屏幕向前翻动一行(常用)
Ctrl + n 屏幕向后翻动一行(常用)
0 (这是数字0)移动到这一行的第一个字符处(常用)
$ 移动到这一行的最后一个字符处(常用)
n<Enter> 光标向下移动n行(常用)
nG 移动到这个文件的第n行。例如20G,则会移动到这个文件的第20
行(可配合:set nu)

查找替换类
/word 在光标之后查找一个名为word的字符串(常用)
?word 在光标之前查找一个名为word的字符串
:1,$s/word1/word2/gc 从第一行到最后一行查找word1字符串,并将该字符串替换为word2,且在替换前显示提示符让用户确认(conform)(常用)

编辑类
x, X x为向后删除一个字符,X为向前删除一个字符(常用)
dd 删除光标所在的那一整行
yy 复制光标所在行(常用)
p, P p为复制的数据粘贴在光标下一行,P则为粘贴在光标上一行(常用)
u 恢复前一个动作(常用)

i, I 插入:在当前光标所在处插入输入的文字,已存在的字符会向后退
(常用)
a, A 添加:由当前光标所在处的下一个字符开始输入,已存在的字符会
向后退(常用)
o, O 插入新的一行:从光标所在处的下一行行首开始输入字符(常用)
r, R 替换:r会替换光标所指的那一个字符;R会一直替换光标所指的文
字,直到按下Esc为止(常用)
Esc 退出编辑模式,回到一般模式(常用)

存取退出类
:w 将编辑的数据写入硬盘文件中(常用)
:w! 若文件属性为只读,强制写入该文件
:q 退出vi(常用)
:q! 若曾修改过文件,又不想保存,使用!为强制退出不保存文件
:wq 保存后退出,若为:wq!,则为强制保存后退出(常用)
:w [filename] 将编辑数据保存为另一个文件(类似另存新文档)
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 filename这个文
件内容加到光标所在行的后面
:set nu 显示行号,设定之后,会在每一行的前面显示该行的行号
:set nonu 与set nu相反,为取消行号
n1,n2 w [filename] 将n1到n2的内容保存为filename这个文件。

 

 

第十章 文件BASH SHELL

10.3 变量与变量的设定
10.3.1 echo

10.3.2 env

10.3.3 set/unset

10.3.5 export

10.4.1 alias与unalias

10.4.2 history

10.4.2  source
[root @test root]# source 变量配置文件

10.5 bash shell 的配置文件

系统设定值

· /etc/profile:这个文件设定了几个重要变量,例如PATH、USER、MAIL、HOSTNAME、
HISTSIZE、umask等,也同时规划出/etc/inputrc 这个针对键盘热键设定的文件数据
内容。您可以在这里设定总体的PATH等信息。同时,这个文件还规划出/etc/profile.d
及/etc/inputrc这两个文件,其中,inputrc作用于history(历史指令)。总之,您可
以了解到刚刚我们学会的变量设定方式,在这个文件中也可以设定。但是设定上需
要特别小心,因为所有的用户都会用到这个文件的信息。注:通常我都喜欢将
/usr/local/bin 这个路径加在最前面,因为通常自己安装的套件自己最喜欢,所以当
然最先搜寻。此外,请注意,可以改变HISTSIZE的大小,改成50就可以,比较安
全!

· /etc/bashrc:这个文件用于规划umask,同时规划提示符的内容(就是里面那个PS1)。
特别留意的是,这个文件在不同的 Linux 版本里摆放的位置可能不太一样,所以需要查询。

· /etc/man.config:这个文件或许跟bash shell没有太大相关性,但是对于系统管理员
来说,却是很重要的一个文件!这个文件的内容规范了使用man时man page的路径
到哪里寻找,说得简单一点,这个文件指定了输入man时查看数据的路径设定。那
么什么时候修改这个文件?如果您是以 Tarball方式安装数据,那么您的 man page
(指令说明文件)可能会放在/usr/local/softpackage/man中,其中的softpackage 是套
件名称,这时您得以手动方式将该路径加到 /etc/man.config中,否则使用man时会
找不到相关的说明文档。

个人设定值

· ~/.bash_profile:里面定义了个人路径(PATH)与环境变量的文件名称。您可以在
这里修改您的个人路径,当然,也可以在 ~/.bashrc这个个人设定的变量中修改。
有的时候可以用~/.profile或~/.bash_login等文件来取代这个文件!

· ~/.bashrc:这个文件对于个人喜好的bash设定是最重要的,因为我都是在这里设定
我的个人变量,例如命令别名的设定,路径的重新定义等。

· ~/.bash_history:这个文件用于将您曾经用过的命令记录下来,而当您再次以上下
键搜寻或者直接以history搜寻时,就可以找到曾经用过的指令。需要注意的是:
1. 在这一次执行过程中用到的指令,将在您退出shell之后才会被记录到这个文件
中,否则将先被写到高速缓存中;
2. 可以通过history指令将其中的记录搜寻出来;
3. 这个文件的指令记录笔数与HISTSIZE有关,您可以自行在~/.bashrc中设定,或者
直接由root在/etc/profile中统一设定。

· ~/.bash_logout:这个文件则是在您注销shell的时候BASH为您所做的事情。通常默
认是只有清除屏幕这件事,不过,您也可以将一些备份或其他您认为重要的工作写
在这个文件中(例如清空暂存空间),那么当您退出Linux时,就可以解决一些烦
人的事情。

10.6 通配符与特殊符号

* 通配符,代表任意字符(0到多个)
? 通配符,代表一个字符
[ ] 中间为字符组合
` ` 两个“`”中间为可以先执行的指令

/ 路径分隔符号
\ 跳转符号,将特殊字符或通配符还原成一般字符
>, >> 输出导向,分别为“取代”与“累加”

10.7 绝对路径与相对路径

10.8 命令重定向
>重定向(redirect)
· 标准输入:代码为0,或称为stdin,使用方式为<
· 标准输出:代码为1,或称为stdout,使用方式为1>
· 错误输出:代码为2,或称为stderr,使用方式为2>

这里我们来说明命令重定向里几个常用的符号与设备:
· < :由 < 的右边读入参数文件;
· > :将原本由屏幕输出的正确数据输出到 > 右边的file(文件名称)或device(设
备,如printer);
· >> :将原本由屏幕输出的正确数据输出到 >> 右边,与 > 不同的是,该文件将
不会被覆盖,而新的数据将以累加方式添加到文件的最后面;
· 2> :将原本应该由屏幕输出的错误数据输出到2>的右边;
· /dev/null :可以视为垃圾设备。


10.9 管线命令

10.9.1 cut
语法:
[root @test /root ]# cut -d "分隔字符" [-cf] fields
参数说明:
-d :后面接的是分隔字符,默认是空格符
-c :后面接的是第几个字符
-f :后面接的是第几个区块

10.9.2 sort
语法:
[root @test /root ]# sort [-t 分隔符] [(+起始)(-结束)] [-nru]
参数说明:
-t 分隔符:使用分隔符隔开不同区块,默认是 tab
+start -end:由第 start 区块排序到end区块
-n: 使用纯数字排序(否则会以字母方式排序)
-r: 反向排序
-u: 相同出现的一行,只列出一次

10.9.3 wc
语法:
[root @test /root ]# wc [-lmw]
参数说明:
-l :多少行
-m :多少字符
-w :多少字

10.9.4 uniq

10.9.5 tee

10.9.6 tr
语法:
[root @test /root ]# tr [-ds] SET1
参数说明:
-d :删除 SET1 这个字符串
-s :取代重复的字符

10.9.7 split
语法:
[root @test /root ]# split [-bl] 输入文件 输出文件前导字符
参数说明:
-b :以文件 size 来分

-l :以行数来分


10.11压缩指令

*.Z compress 程序压缩的文件;
*.bz2 bzip2 程序压缩的文件;
*.gz gzip 程序压缩的文件;
*.tar tar 程序打包的数据,没有经过压缩;
*.tar.gz tar 程序打包的文件,且经过gzip压缩。

11.1.1 compress
语法:
[root @test /root ]# compress [-d] filename
参数说明:
-d :解压缩参数!

11.1.2 bzip2,bzcat
语法:
[root @test root]# bzip2 [-dz] filename <==压缩解压缩指令
[root @test root]# bzcat filename.bz2 <==读取压缩文件内容
参数说明:
-d :解压缩
-z :压缩

11.1.4 tar
语法:
[root @test /root ]# tar [-zxcvfpP] filename
[root @test /root ]# tar -N 'yyyy/mm/dd' /path -zcvf target.tar.gz source
参数说明:
-z :是否同时具有 gzip
-x :解开一个压缩文件
-t :查看 tarfile 里面的文件
-c :建立一个压缩文件
-v :压缩过程中显示文件
-f :使用文件名
-p :使用原文件的原有属性(属性不会依据用户而变)
-P :可以使用绝对路径
-N :比后面接的日期(yyyy/mm/dd)还要新的文件才会被打包进新建的文件中
--exclude FILE:在压缩过程中,不要将FILE打包
eg:
tar -cvf directory.tar directory 对应tar -xvf directory.tar
tar -czvf directory.tar.gz directory对应 tar -zxvf directory.tar.gz

11.1 cpio
语法:
[root @test /root ]# cpio -covB > [file|device] <==备份
[root @test /root ]# cpio -icduv < [file|device] <==还原
参数说明:
-o :将数据复制输出到文件或设备上
-i :将数据自文件或设备复制出到系统中
-t :查看 cpio 建立的文件或设备的内容
-c :以一种较新的便携格式(portable format)储存
-v :让储存过程中文件名称可以在屏幕上显示
-B :让默认的Blocks可以增至5120bytes,默认是512bytes
这样的好处是可以让大文件的储存速度加快,请参考i-nodes
-d :自动建立目录,由于cpio的内容可能不在同一目录内,
如此在反备份过程会有问题。这个时候加上-d,就可以自动将需要的目录建立起来
-u :自动用较新的文件覆盖较旧的文件

这个cpio很神奇,它最适用于备份时,因为它并不像cp,它可以直接将文件复制过去,
例如,cp*/tmp就可以将所在目录的所有文件复制到/tmp下。在 cpio指令的用法中,由于 cpio
无法直接读取文件,而是需要每个文件或目录的路径连同文件名一起才可以被记录下来,
因此,cpio最常跟find指令一起使用。cpio是备份时的一项利器,因为它可以备份任何文件,
包括/dev下的任何设备文件。由于cpio必需配合其他程序(例如find)来建立文件名,所以,
cpio与管线命令及命令重定向的相关性就相当重要了,上面的例子刚好可以用来复习上一
章里提到的内容。
· 备份:在备份用法中,它可以直接输出到文件或设备中,但是如前面说过的,必须
配合find这个指令。-o表示将文件或目录输出到右边,还记得命令重定向吗?对,
就是那个东西。在上面的例子中,我们将备份的数据复制到磁带机里,磁带机的设
备代号就是/dev/st0。
· 还原:如何还原数据?可以直接输入cpio -i,i就是input,例如上头的例子。这个指
令可以多看看。


11.2 正规表示法(regular express)
grep
语法:
[root @test /root ]# grep "word" filename
参数说明:


第十二章学习使用Shell Scripts

12.3 卷标与运算符declare
declare
语法:
[test @test test]# declare [-afirx]
参数说明:
-a :定义为数组 array
-f :定义为函数 function
-i :定义为整数 integer
-r :定义为只读
-x :定义为通过环境输出变量

12.4 交互式脚本
read

12.5 脚本逻辑判断式与表达式
逻辑卷标 含义
1. 关于文件与目录的逻辑卷标
-f 常用!检测文件是否存在
-d 常用!检测目录是否存在
-b 检测是否为一个block文件
-c 检测是否为一个character文件
-S 检测是否为一个socket标签文件
-L 检测是否为一个符号链接文件
-e 检测某个东西是否存在!可以是任何东西
2. 关于程序的逻辑卷标
-G 检测是否由GID所执行的程序拥有
-O 检测是否由UID所执行的程序拥有
-p 检测是否为程序间传送信息的name pipe或FIFO
3. 关于文件的属性检测
-r 检测是否为可读属性
-w 检测是否为可写入属性
-x 检测是否为可执行属性
-s 检测是否为非空白文件
-u 检测是否具有SUID属性
-g 检测是否具有SGID属性
-k 检测是否具有sticky bit属性
4. 两个文件之间的判断与比较。例如test file1 -nt file2
-nt 第一个文件比第二个文件新
-ot 第一个文件比第二个文件旧
-ef 第一个文件与第二个文件为同一个文件(诸如链接文件)
5. 逻辑与(and)和或(or)
&& 逻辑与
|| 逻辑或

运算符
= 等于
!= 不等于
< 小于
> 大于
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
-a 双方都成立(and)
-o 单方成立(or)
-z 空字符串
-n 非空字符串

12.6 条件判断
12.6.1 if...then...fi
if [ 条件判断一 ] && (||) [ 条件判断二 ]; then <==if 是起始,后面可以接若干个判断式,使用 && 或 ||执行判断
......
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then <==第二段判断,如果第一段不符合要求就转到此搜寻条件,执行第二段程序
......
else <==当前两段都不符合时,就执行这段内容
......
fi <==结束 if then 的条件判断

12.6.2 case..esac
case 种类方式(string) in <==开始阶段,种类方式可分成两种类型,通常使用 $1 这种直接输入类型
种类方式一)
程序执行段
;;               <==种类方式一的结束符号
种类方式二)
程序执行段
;;
*)
echo "Usage: {种类方式一|种类方式二}" <==列出可以利用的参数值
exit 1
esac <== case结束处

12.7 循环
12.7.1 for
for ((条件1; 条件2; 条件3))
do
.....
done 

12.7.2 while 
while [ condition1 ]
do
....
done

12.7.3 until
until [ condition1 ]
do
....
done

12.8 如何调试脚本
[test @test test]# sh [-nvx] scripts
-n :不执行脚本,查询脚本内的语法,若有错误则列出
-v :在执行脚本之前,先将脚本的内容显示在屏幕上;
-x :将用到的脚本内容显示在屏幕上,与-v稍微不同

第十三章 Linux用户管理
第13章帐号管理

认识/etc/passwd
[root @test /root]# vi /etc/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
..........................................
1. 账号名称:账号名称用于对应UID,例如root就是默认的系统管理员的账号名称。

2. 密码:早期的Unix系统的密码放在这个文件中,由于这样很容易造成数据被窃取,
所以后来就将数据改放到/etc/shadow中,这一部份后面再说。这里您会看到一个x,
别担心,密码已经被移到shadow这个加密后的文件了。

3. UID:这就是用户识别码(ID),通常Linux对于UID有几个限制,如下:
0 系统管理员。所以,当您要设立另一个系统管理员账号时,将该账号的UID改成0即可
1~500 系统预留的ID。其实,1~65535之间的账号并没有不同,也就是说,除了0之外,其他UID
并没有不一样,预设1~500给系统作为保留账号只是一个习惯。这样的好处是,以named为
例,这个程序默认所有人named的账号UID是25,当有其他账号同样是25时,很可能会造成
系统的一些小问题。为了杜绝这样的问题,建议保留500以前的UID
500~65535 供一般用户使用

4. GID:它与/etc/group有关。其实,/etc/group与/etc/passwd差不多,只是它用来规范
群组。

5. 说明:这个字段基本上没有什么用途,只是用来解释这个账号的意义,不过,如果
您可以使用finger程序,这个字段可以提供很多信息。后面的13.1.6节可以提供进一
步的解释。

6. 根目录:这是用户的根目录,以上面为例,root的根目录在/root,所以当root登入之
后,马上转到/root中。如果您有个账号的使用空间特别大,想将该账号的根目录移
到其他硬盘,那么可以在这里进行修改。默认的用户根目录在/home/yourIDname。

7. Shell:所谓的shell是用来沟通人类与机器硬件的界面。我们通常使用/bin/bash这个
shell进行指令的输入。关于shell的用法后面还会提及,这里需要注意的是,有一个
shell可以让账号无法登入,那就是/bin/false。

认识/etc/shadow
[root @test /root]# vi /etc/passwd
root:$1$XkigRT1lfgw4rhrm5NwQN/:11979:0:99999:7:::
bin:*:11979:0:99999:7:::
daemon:*:11979:0:99999:7:::
adm:*:11979:0:99999:7:::
.......................................................

1. 账号名称:这和passwd相对应,和passwd的意思相同。

2. 密码:这才是真正的密码,而且是经过加密的密码,您只能看到一些特殊符号。需
要特别留意的是,虽然这些加密密码很难被破解,但是很难不等于不会,所以,这
个文件的默认属性是-rw-------,即只有root才可以读写。注意,不要改动这个文件
的属性,另外,如果密码栏的第一个字符为“*”,表示这个账号不会被用来登入。
所以万一有一天您的某个用户不乖时,可以先在这个文件中将他的密码多加一个
“*”,这样他就无法使用该账号了。

3. 上次更动密码的日期:这个字段记录了更动密码的最后日期。奇怪的是,我的例子
中怎么会是11979呢?这是因为计算Linux日期的方法是以1970年1月1日作为1,
1971年1月1日则为366,这个日期是累加的。这一点需要注意。因此,最近的2002
年1月1日就是11689了。

4. 密码不可被更动的天数:第四个字段记录了这个账号的密码需要经过几天才可以变
更。如果是0,表示密码随时可以更动。这个限制是为了怕密码被某些人一改再改。
如果设定为20天,当您设定了密码之后,20天之内都无法改变这个密码。

5. 密码需要重新变更的天数:由于害怕密码被某些有心人窃取而危害到整个系统的安
全,所以安排了这个字段。您必须在这个时间内重新设定密码,否则这个账号将会
暂时失效。如果像上面的99999,那就表示密码不需要重新输入。不过,为了安全,
最好设定一段时间之后严格要求用户变更密码。

6. 密码变更期限快到前的警告期:当账号的密码失效期限快到的时候,系统依据这个
字段的设定发出警告,提醒用户“再过n天您的密码就要失效,请尽快重新设定您
的密码”。上面的例子则是密码到期之前的7天之内,系统会警告用户。

7. 账号失效期限:如果用户过了警告期没有重新输入密码,使得密码失效,而该用户
在这个字段限定的时间内又没有跟root反映,让账号重新启用,那么这个账号将暂
时失效。

8. 账号取消日期:这个日期跟第三个字段一样,都是使用1970年以来的日期设定方法。
这个字段表示:这个账号在此字段规定的日期之后将无法再使用。这个字段通常用
在收费服务系统中,您可以规定一个日期让该账号不能再使用。

9. 保留:最后一个字段是保留的,看以后有没有新功能加入

认识/etc/group
[root @test /root]# vi /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
1. 群组名称:就是群组名称。

2. 群组密码:通常不需要设定,因为我们很少用到群组登入。不过,同样,密码也被
记录在/etc/gshadow中。

3. 群组ID:就是所谓的GID。

4. 支持的账号名称:这个群组中的所有账号。如上所言,如果您想让myaccount也属
于root这个群组,就在上面的第一行最后加上“,myaccount(不要有空格)”,变
为“root:x:0:root,myaccount”就可以了。

认识/etc/gshadow
[root @test /root]# vi /etc/gshadow
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
sys:::root,bin,adm
adm:::root,adm,daemon

13.3.1 su
语法:
[root @test /root ]# su

13.3.2 sudo
语法:
[root @test /root ]# sudo [-u username] [command]
参数说明:
-u :将身份变成username的身份

13.4 用户查询
13.4.1 id 查询用户的UID,GID及所拥有的群组;
语法:
[root @test root]# id [username]

13.4.2 finger查询用户的一些相关信息,如电话号码等。
语法:
[root @test root]# finger [-s] username
参数说明:
-s :完整列出

13.4.3 groups

第14章 磁盘配额(quota)

第15章 列行性命令at与crontab

第16章 程序与资源管理

16.3 背景工作管理
16.3.1 &与Ctrl+z         <=背景工作
16.3.2 jobs,fg与bg,kill
jobs
[root @test /root ]# jobs
参数说明:

fg 与bg
[root @test /root ]# fg %number
[root @test /root ]# bg %number
参数说明:
% :后面接数字,表示jobs的工作代号
number :工作代号

kill
[root @test /root ]# kill -signal %number
参数说明:
%number :背景工作的代号,可使用jobs查询
signal
-1 :重新读取参数配置文件(类似reload)
-2 :用户中断该工作,类似使用Ctrl+c中断一个工作
-9 :立刻杀掉一个工作,不论该工作是否为死亡程序
-15 :停止一个工作(这是默认值)

16.4 程序与资源管理
16.4.1 ps
[root @test /root ]# ps -aux
参数说明:
a : 选择列出所有的程序
u : 列出所有用户的程序
x : 列出所有tty的程序
· USER:说明该程序属于哪一个用户;
· PID:该程序的代号;
· %CPU:代表该程序使用了多少CPU资源;
· %MEM:代表该程序使用了多少RAM;
· VSZ,RSS:占去的RAM的大小(以字节为单位);
· TTY:是否为登入者执行的程序?若为tty1-tty6,则为本机登入者,若为pts/??,则为远程登入者;
· STAT:该程序的状态,R为可执行,S为该程序正在睡眠中,就是没有执行,T为正在检测或者停止,Z表示死亡程序,需要用kill除去;
· START:该程序开始的日期;
· TIME:该程序的运行时间;
· COMMAND:该程序的内容。

16.4.2 top
[root @test /root ]# top
参数说明:
在执行top的程序中,可以输入下面的字符进行排序
A :以age亦即执行的先后顺序进行排序
T :由启动的时间排序
M :以所占的内存大小排序
P :以所耗用的CPU资源排序

16.4.3 free
[root @test /root ]# free
参数说明:
-k :以KBytes显示内存
-m :以MBytes显示内存
范例:
[root @test /root]# free
total used free shared buffers cached
Mem: 255892 222076 33816 0 49072 112272
-/+ buffers/cache: 60732 195160
Swap: 289128 7572 281556

16.4.4 sar
[root @test /root ]# sar [-u] [-r] 秒数 次数
参数说明:
-u :看CPU的使用情况
-r :看内存的使用情况
秒数:几秒钟观测一次?
次数:共观测几次

16.4.6 uname
[root @test /root ]# uname [-apnr]
参数说明:
-a :列出所有的系统信息
-p :列出CPU信息
-n :列出主机名
-r :列出核心版本信息


cat /proc/meminfo,
cat /proc/cpuinfo.

16.5 程序的优先级
16.5.1 nice
[root @test /root ]# nice [-n number] command
参数说明:
-n :后面那个number即为nice值
PRI(new) = PRI(old) + nice
这样,当nice值为负值时,该程序会提前执行,即调整了程序处理的优先顺序。不过,
由于PRI值是内核依据当时的状况来调整的,所以实际上的PRI会一直变化,它必需加上nice
值成为新的PRI,这个概念需要特别注意。另外,这里需要注意的是:只有具有root权限的
用户可以将程序的nice值调为负值,所以,对于nice值有如下约定:
· 一般用户可用的nice值为0 ~ 19;
· root 管理员可用的nice值为-20 ~ 19。

16.5.2 renice
[root @test /root ]# renice [number] PID
参数说明:
范例:
[root @test /root]# ps -aux
[root @test /root]# renice 5 234

16.6 信息管理
16.6.1 dmesg
16.6.2 uptime
16.6.3 who,w,whoami
16.6.4 last,hostname

16.7 关于网络校时:ntpdate

第17章 开关机流程与多重启动

17.1 开机流程分析
1)寻找BIOS 加载硬件信息
2)可引导硬盘的MBR 读取Kernel loader
3)载入内核
   3.1内核执行init 并由/etc/inittab 取得系统登入状态
    加载内核之后,由内核执行的第一个程序就是/sbin/init,而这个程序第一个目标当然是
    确定主机以怎样的模式登入。这时必须以/sbin/init加载/etc/inittab的信息,但Linux有多种登
    入模式,这里有必要说明都有哪些登入模式。如果您进入Linux的/etc/inittab文件(可以使
    用vi),应该会看到如下信息:
# 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 X-Windows图形界面登入的多用户系统
# 6 - reboot (Do NOT set initdefault to this) 重新启动
#
id:3:initdefault:

  3.2 init 的第一个执行内容/etc/rc.d/rc.sysinit
4)启动内核的外挂式模块(/etc/modules.conf)
5)init 执行运行级的各脚本:init 执行/etc/rc.d/rc.local
6)启动配置文件/etc/sysconfig

第18章 套件管理RPM与Tarball


20.2.1 service
[root @test /root]# service [service name][stop|start|restart]
它会将/etc/init.d(其实就是/etc/rc.d/init.d)中的东西取出来,然后进行分析

20.2.2 chkconfig
[root @root /root]#chkconfig [--level levels] [--list |add|del][service name]
chkconfig程序可以将/etc/rc.d/init.d/中的可执行服务与/etc/xinetd.d中的相关可执行服务
链接到当前run-level中,或者您可以定义您的run-level让您的该项服务在开机时启动。不过
请注意,service是马上让您的该项服务立刻启动,但是chkconfig则仅是设定某个服务在开
机时可以被启动,并不一样,请注意

20.3 md5sum
[root @test /root]#md5sum [-bct] filename
[root @test /root]#md5sum [--status|--warn] --check filename 

20.4 核心模块管理

20.4.1 模块编译
核心模块的放置目录: /lib/modules/'uname -r'/kernel/
核心的文件格式模块: /lib/modules/'uname -r'/kernel/fs
核心的网卡驱动程序模块: /lib/modules/'uname -r'/kernel/drivers/net

20.4.2 depmod
[root @test /root]# depmod [-aens]
参数说明:
-a :将 /etc/modules.conf 可以查询到的模块的相关性都写入/lib/modules/'uname-r'/中
-e :显示当前已加载的不可执行的模块名称
-n :将各模块的相依性直接输出屏幕上,而不是输出到/lib/modules/'uname -r'中
-s :将一些结果信息输出到syslog 的登录文件中
很多时候在使用模块时,这些模块基本上是有相关性的,什么意思呢?例如您要在NAT
服务器下启动NAT,那么就需要ip_tables模块和ip_nat模块,而若您还想启用NAT下的ftp功
能,那么就需要启用ip_nat_ftp模块。换个角度来想,如果您需要启用ip_nat_ftp模块,那么
就必需启用ip_nat与ip_tables模块,这就是所谓的相依性,而这些相依性内容都被记录在
/lib/modules/`uname -r`/modules.dep文件中,要分析这些模块的相关性,需要执行depmod。
此外,如果不想让模块被写入/lib/modules/`uname -r`中,那么加入-n参数,可以先看一下各
模块的相依性

20.4.3 lsmod

20.4.4 modinfo
[root @test /root]# modinfo [-adnp] module_name
参数说明:
-a :显示作者
-d :显示这个模块的基本说明
-n :显示这个模块的文件放置路径与名称

20.4.5 modprobe
root @test /root]# modprobe [-l|-c]
[root @test /root]# modprobe modules_name <==直接加载该模块与其相依属性的模块
参数说明:
-l :列出当前系统所有的模块 ( 在 /lib/modules/`uname -r`/kernel下 )
-c :列出当前系统所有的模块(更详细的代号对应表)

20.4.6 insmod
[root @test /root]# insmod [-fkps] module_name
参数说明:
-f :强制加载模块,要加载不同版本的模块时可能会用到这个参数
-k :在核心没有用到该模块时先自动清除干净
-p :测试模块是否可以被加载,不会直接加载到系统中!
-s :将一些执行信息写到 syslog登录文件,而不是写到terminal中!
范例:
[root @test /root]# insmod -p /usr/local/src/dlink-530/via-rhine.o
Warning: loading /usr/local/src/dlink-530/via-rhine.o will taint the kernel:
no license
See http://www.tux.org/lkml/#export-tainted for information about tainted
modules
它和modprobe有点类似,但是insmod可以读取非/lib/modules/`uname -r`/kernel内的模
块,而且可以为模块进行加载测试。您可以加上路径与完整的文件名来加载模块,加上-p
参数可以验证该模块的可执行性。要注意的是,这个insmod输入的模块名称必须是完整的
路径、文件名

20.4.7 rmmod
[root @test /root]# rmmod modules_name
参数说明:
范例:
[root @test /root]# rmmod 8139too
顾名思义,用于移除模块。

系统服务
21.5.1 netstat
[root @test /root]# netstat [-r] [-i interface]
[root @test /root]# netstat [-antulp]
参数说明:
-r :显示route
-i :显示interface的内容,跟ifconfig类似
-a :显示当前所有的网络联机状态
-n :默认情况下,显示出的 host 会以 host name表示。若为n则可以使端口与host都以数字
表示
-t :仅显示 tcp 包的联机行为
-u :仅显示 udp 包的联机状态
-l :仅显示 LISTEN的内容
-p :同时显示此联机服务的PID(注意:只有root才能使用此功能)

eg:[root @test /root]# netstat -anp | more

·Proto:指的是包或通信协议,较常见的是tcp和udp。
· Local Address:本地IP与Port号,如果/etc/services 存在对应服务名称,就以服务名
称显示。
· Foreign Address :监听哪一个地区与 端口。
· state:基本的状态有:
? LISTEN :即监听状态中的端口
? ESTABLISHED:已建立联机的联机情况
? TIME_WAIT:该联机目前已经处于等待状态,随时有可能断线
善用netstat可以查到很多网络信息,尤其在关闭本机的端口时。

连接Internet 的方法
1. 设定 /etc/sysconfig/network文件
[root @test /root]# vi /etc/sysconfig/network
NETWORKING=yes <==是否启动网络,当然是
HOSTNAME=test.linux.org <==主机名称,要确定。可以随时修改
GATEWAY= <==可以设定 IP ,但是我们不需要设定IP
GATEWAYDEV=eth0 <==设定网关设备,使用 eth0

2. 设定网卡 /etc/sysconfig/network-scripts/ifcfg-eth0文件
这个文件也可以设定得很简单,现在设定:
[root @test /root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 <==设定设备的名称,这个要跟文件名称对应!
ONBOOT=yes <==是否在开机时启动网卡,如果不要,可以写 no
BOOTPROTO=static <==启动时取得的IP协议,如果是 Cable,要改成 dhcp
IPADDR=192.168.1.2 <==这个就是 IP
NETMASK=255.255.255.0 <==这个就是子网掩码
NETWORK=192.168.1.0 <==这个就是网段
BROADCAST=192.168.1.255 <==这个就是最后一个同网段的广播地址
GATEWAY=192.168.1.2 <==这个就是这块网卡的网关,也可以不用写入
这个文件就是用于设定这个网卡的主要网络参数,包括其网域、IP、子网掩码、软件
广播地址及网关等。另外,请注意,如果在/etc/sysconfig/network中设定好GATEWAY,那
么这里就不用再设定了,GATEWAY只要在一个地方即可,切记切记!

3. 启动与关闭网卡
启动与关闭网卡需要使用ifconfig,但是有更简单的指令,就是ifup跟ifdown。
[root @test /root]# /etc/rc.d/init.d/network restart <==重新启动网络接口
[root @test /root]# ifup eth0 <==启动 eth0 网卡
[root @test /root]# ifdown eth0 <==关闭 eth0 网卡

4. 检查是否已启动
检查网卡是否启动可以使用ifconfig,如下面的示例所示。
[root @test /root]# ifconfig

[root @test /root]# ping -c 3 192.168.1.2

394页


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值