linux操作系统一些基础命令

  1. 支持语言修改与查询:echo  $LANG,修改语言命令 LANG=en_US 修改为英语。
  2. bc切换出计算器,输入quit退出计算器
  3. 在使用man 或者 info 查询命令或者函数时,可以使用 page up/down 来翻页,使用划线/(向下)或者?(向上)来搜寻一个正则表达式,之后继续使用n,N来进行反向搜下一个。使用q来退出。 在查询命令后面加数字可以查看与数字对应的档案信息:
  4. Linux下的文档帮助手册(软件,命令,硬件等)都在目录 /usr/share/doc 下
  5. 关机命令:shutdown  -t  时间秒 ; -h now/20:25/+10  马上/时间点/过                      几分钟后

-k now/20:25/+10 ’xxx’(发送消息给所有使用这个内核的使用者,信息为xxx,后面为为发送消息的时间设置)

-r now/20:25/+10  ’xxx’(立即发送消息,并在设置的时间后面关机重启)

-c 取消设置的shutdown命令

   重启指令;reboot   一般输入模式  syns;syns;reboot  sync:将内存的东西写入硬盘。

6.文件权限所属用户有三个    分别为 用户:所属组:其他  

修改文件所属用户或者组的命令   chown 用户名:组名  文件名 (文件夹加 -R)

chown  .组名 文件名 (只改变文档所属组)   chgrp  组名 文件名

chmod  [option] mode 文档名

7.文件属性中,一个文件是否可以执行与文件名后缀没有关系,与去属性中是否为-X有关。与Windows不同。在文件命名时不要使用特殊字符。Linux对特殊字符有其他定义

8./根目录下各个文档作用

/bin :存放执行文件,存放了单用户模式使用的指令(也是最常用的的指令),如 ls chmod 等

/boot :系统开机用到的配置文件

/dev :装置文件  例如/dev/hd* 挂载了硬盘

/etc :系统的配置文件,人员的账号,密码,很多软件的的启动档案。/etc/init.d 存服务的预设启动,关闭,/etc/xinit.d 服务配置

/lib :放置开机,/bin和/sbin目录中指令所用到的库函数。其中/lib/modules放置了驱动

/mnt :用来临时挂载设备

/sbin :放置用来设置系统的指令,常见指令,fdisk,fsck,ifconfig等

/srv :用来放置网络服务的数据目录

/media :外部可移除装置:U盘  光盘

在开机过程中,仅有根目录会被挂载,因此,根目录下与开机有关的的目录千万不能放到不同的分割槽中。这些目录为:

/etc 配置文件 /bin 可执行文档

/dev 装置档案 挂载不可移除的设备  硬盘啥的

/lib 库函数与驱动模块 /sbin 系统的执行文件

 

FHS将目录分为四种形态: 可分享:其他网络用户可以使用

不可分享:给自己开机的装置档案,不可分享给其他用户

不可变:/etc等配置文件,不随系统的运行而变动

可变: /var 随着用户使用系统来加载保存一些配置和账号等,随着运行越来越大

 

/usr :unix software resourse 系统软件资源目录  ,与开机无关的软件资源

/var :系统运行过程中产生的记录文档,数据等

9.mkdir   -p(将目录名的沿途目录全部建立) -m mode(权限)  dname(目录名)

  Rmdir –p (将目录名的沿途空目录全部删除)

10.cp  -a(相当于-p) 文件的属性一起拷贝   -f 强制,如果存在且无法打开则删除再拷贝

-i 如果存在,则先询问动作是否执行 -l 建立硬连接

-s 建立符号连接 -u 资源要比目标新,否则不更新

11.查询某一个文档:

cat 从第一行顺着输出  -b 排除空白行列出行号 –n 不排除列出行号  -A 将特殊符号列出

tac 从最后一行倒着显示(查文件最后的信息)

nl 显示的时候顺道显示行号

more 一页页的显示 空格翻页,enter往下一行,q退出  /搜索当前显示页内字符串

less 一页页显示,可以看往前翻页 ?向上搜索字符串,n/N(重复/反向重复上一个搜索),添加page up page down

head 只看头几行 –n num(可以为负数,表明排除那些行,显示剩余行)

tail 只看尾部几行 od  二进制显示

ls 命令可以读取文档对应的时间 在文件名前加下面这些  默认查看mtime

--time=mtime  查看内容变更的时间

--time=ctime  查看状态变更的时间(权限 属性)

--time=atime  查看文件被读取的时间(例如cat命令操作后)

touch 更改文档时间属性和创建文档  

-a –c –m 和ls命令对应的的三个时间选项一样 将其修改成当前时间。

-d 后面加时间  将其三种时间都修改成预要修订的时间 其后面的时间有两种表达  ①"2 days ago" ②--date="日期或时间"

-t 后面加时间 修改mtime和atime  时间格式为 [YYMMDDhhmm] 

例 touch -t 0709150202 bashrc

12.查询执行档

which  [-a](列出PATH路径下的所有执行档)   执行档名(即命令)

which –a  ls (PATH当前用户设置的路径,账号不同PATH不一定相同)

有些执行档是bash内建指令,路径没有在PATH说明如cd 命令找不到

13.查询特定文档或者特定字符串

whereis [-bmsu]  档名或者目录名 (默认全查)

-b binary格式档案即可二进制文档   -m manual路径下档案,即用man可查

-s sourse资源路径下,用来重新加载配置文件到内存而不用重新开机

如sourse ~/.bashrc -u 排除上面三个其他的档案

locate  [-ir] 档名或者目录名   -i 忽略大小写 –r 后面加正则表达式

以上两个命令都是去文档数据库/var/lib/mlocate来搜索的,所以当数据库没有更新,而文件有变动就会出现搜索结果问题,直接使用命令 updatedb可以手动更新数据库,次命令依据/etc/updatedb.conf文件去更新数据库/var/lib/mlocate,上面两条命令比find的速度快,因为find是去磁盘找文件。

find [PATH] [option] [action]

[option]:1. 与时间有关的选项  -atime, -ctime  -mtime  -newer(比较两个文件的新旧程度)

2. 与使用者或组名有关的参数  

3. 与档案权限,类型及名称有关的参数 -perm  777(mode) -type d(TYPE)       -name  test.c(filename)

-size [+-]SIZE  c: 代表 byte, k: 代表 1024bytes

4. 可外加额可执行操作  -exec command \;:command 为其他指令,在完整find后面加  -exec 后面可再接额外的指令来处理搜寻到的结果   find / -perm +7000 -exec ls -l {} \;  {}表示对find得到的结果进行操作

14.将命令查询结果做二次筛选  | grep完整命令

15.权限需要同时满足两项界限  需要用到-a    或者用 –o 例如:

find /etc -size +50k -a -size -60k -exec ls -l {} \;大小介于二者之间

16.修改默认权限  umask  +- mode  在原有权限的基础上加减后面的mode

17.设定隐藏权限用chattr   查看用lsattr   隐藏属性很多

18.磁盘:

硬盘由磁盘,机械手臂,读取头(多个读取头,一个读取头负责多个磁柱)组成,磁盘有多个叠起来的磁盘盘,每一个磁盘盘被磁轨和多个由圆形散射的直线分为  一个一个的扇区  ,同一个圆心的扇区组成磁道,所有磁盘盘的相同圆心的磁道组成磁柱

磁柱是用来分割的最小单位,扇区是用来读写的最小单位。

分割槽可以理解为Windows下的SDEF盘。分割槽内有多少磁柱是可以分配的,然后最多有四个分隔槽,每个槽的信息都记录在第一扇区里面。主要分割以后可以进行逻辑分割,即将分割槽内进行细化分割,信息不记录在第一扇区里面,格式化磁盘是按照主要分割槽来进行的格式化,。

文件系统被挂载在分隔槽,但是在数量关系上,没有了直接联系。

19.ext2文件系统的inode和data块

Inode保存的是权限与属性和block的相关信息,而block保存内容,档案名保存在对应目录的block中。目录中的子文件inode也是就相当于内容,被保存在目录对应的block中。

一个文件有一个Inode号记录了,每一个inode号管理多个隶属于这一个档案的所有data block的相关信息。

inode号又被分为多个区块群组(block group)来管理inode号,每一个区块群组都有独立的inode/block/superblock系统来管理。

Superblock用来管理整个文件系统的,每一个文件系统只有一个Superblock,因此除开文件系统的第一个block grope中的super block外,其他的block grop中可能未含有,含有也是第一个的备份。这个系统记录了inode和block的相关信息。

文件系统最前面(Superblock之前)有一个引导启动扇区boot sector,启动扇区可以安装开机管理磁盘引导程序,如此开机管理程序安装到个别的文件系统最前端,而不用覆盖一个磁盘的唯一的MBR,因此一个计算机可以制作多重引导的文件系统环境。

一个data block 只能放一个档案,一个档案能放到多个data block,如果一个档案不能凑成整数个data block,则空间浪费。因此当文件系统中基本上为大文件,而文件系统少时需要将block设置的大一点以此来较少inode号记录的信息来加快读写,否则就小一点来减少空间的浪费。

Inode号的数量与大小(一般为128bytes)在格式化时固定下来,因此文件系统最大的文件数量在格式化时就已经确定下来,而文件的最大大小由block大小和inode的位寻址方式确定下来了也。

20.文件系统相关信息查看命令:

df [-h] 查询找磁盘的所有文件系统,并可以找到根目录对应的磁盘文件名

df [-h] 档案名  可以将档案所在的挂载点的信息列出来  以此来查看这个档案最多还有多少剩余容量

du [-haS] 档案名  去文件系统中 查询这个档案下的所有子档案的大小,默认查询一部分,所以加起来和当前档案的大小不一样。

dumpe2fs  [-bn]  磁盘文件名(由df查询挂载的文件系统对应磁盘文件名)

b 列出坏轨  -h 仅列出superblock部分,其他区段不列出

ls -di 档案名   可以将目录当做文件列出inode信息

21.挂载点:文件系统与目录

文件系统:对硬盘进行读写操作管理的集合,主要表现为通过管理inode和block对磁盘进行读写。

目录:提供给用户直观读写磁盘的外在表现。我们对目录的修改最后是文件系统通过inode和block修改对磁盘进行操作。

挂载点:挂载点一定是目录,文件系统必须挂载到目录树的某个目录才能才能使用该文件系统。

一个文件被读取时,都是通过挂载点开始,从挂载装置的inode号开始一层一层网下读,知道读取到目标所在的文件block。

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

cat /proc/filesystems  查看内存中支持的文件系统

22.虚拟文件系统:一个目录树中,有多个文件系统,但是,我们在一个目录树中并没有做其他的操作来区分不同的文件系统,在使用这界面进行文档操作都是先通过核心提供的系统呼叫界面来操作虚拟文件系统,然后虚拟文件系统来区分不同的文件系统之后来操作磁盘。

23.硬连接与软连接 ln [-sf] 来源文件 目标文件

默认硬链接 –s  软连接  -f 目标存在则删除重建

目录不支持建立连接,当建立一个空目录时,上级目录link加一(新目录下的..目录),新建目录的link为2(目录本身和.目录)。

硬连接:没有生成新的档案,在需要建立连接文档的所在的目录下对应block中增加一笔文档名,同时指向目标的inode号,因此,想要在磁盘删除此文件,需要将所有的文档都删除,但是当修改某一个目录下的文档时,所有文档都修改了。

软连接:新生成了一个档案,是目标文档的一个快捷方式,当原文档删除了,则快捷方式失效。

24.磁盘

查磁盘情况:df查已经挂载的分割槽大小情况  mount 查挂载好的文件系统属性情况  fdisk –l 查询系统中所有的磁盘的分割情况,外部磁盘识别到了也可以查询到。

磁盘分割操作:利用   fdisk  装置名字  (装置名字后面的数字不用加,因为我们要处理这个分割槽所在的整个磁盘)进行磁盘分割处理,按下m可以查看所有的操作命令。按q退出,不保存操作,按w保存所有的操作。

更新分割槽表:partprobe  让系统重新读取分割槽表

格式化制作文件系统:mkfs [-t 文件系统格式] 装置名(带数字) 格式化,将磁盘分割好的分隔槽制作文件系统。mkfs[tab][tab],按下两个tab键可以查看系统支持的文件系统

格式化制作EXT文件系统:mke2fs [-b block 大小] [-i block 大小] [-L “标头”] [-cj] 装置名  将装置格式化成EXT2/ EXT3的固有命令。-j :本来 mke2fs 是 2 ,加上 -j 后,会主劢加入 journal 而成为 EXT3。

磁盘检查:fsck 使用这个指令时,需要将即将修复的分割盘卸载,如果挂载状态来修复会导致文件系统损坏。用来修复非正常关机造成的文件系统错误,例如对磁盘读写进行到一半的时候非正常关机,造成文件系统中很多信息不同步。fsck[tab][tab]查看此指令可以用来修复哪些文件系统。

fsck [-t 文件系统] [-ACayN 装置名称  

-F: 在检查前将硬盘的 buffer cache 清空,避免发生错误。这个参数的一个要点是不要同时使用其它的参数。就单独运行一下这个参数。

-A :依据 /etc/fstab 的内容,将需要的装置扫瞄一次。通帯开机过程中就会执行此指令。

-a :自劢修复检查到癿有问题癿扂区,所以你丌用一直挄 y 啰!-y与-a类似,但是有些文件系统仅支持-y。

-N:不执行指令,仅列出实际执行会进行的动作;

EXT2/EXT3 的额外选项e2fsck 这支指令所提供)

-f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入细化检查,如果您想要强制 fsck 进入细化检查,就得加上 -f 旗标啰!

-D :针对文件系统下癿目彔迚行优化配置。

磁盘挂载:mount  装置名  挂载目录  不加选项,默认挂载方式

挂载事项:①单一文件系统不应该被重复挂载在不同的挂载点(目录)中②单一目录不应该重复挂载多个文件系统③要作为挂载点的目录,理论上应该都是空目录。

如果将挂载点的目录不是空目录,则目录下的其他所有档案都会被屏蔽掉,知道将这个挂载目录卸载才会重新显现。

mount  -a   :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来

mount [-l]:单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!

mount [-t 文件系统] [-L Label 名] [-o 额外选顷] [-n] 装置文件名 挂载点

-L :系统除了利用装置文件名 (例如 /dev/hdc6) 外,还可以利用文件系统的标头名称(Label)来进行行挂载,可以取一个解释性名字作为挂载标签。

-n :系统默认会将实际挂载的情况实时写入 /etc/mtab(mount –l 读取的就是这个文件的信息,记录的文件系统的挂载属性) 中,以利其他程序的运作。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。此时就得要使用这个 -n 的选顷了。

-o :可以有很多定义好的选项参数  这里介绍两种

defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async(参数是对挂载文件系统权限的赋予,默认就好)

remount: 重新挂载,这在系统出错,要重新更新参数时,很有用!

重新挂载时,使用的格式为 mount -o remount,rw,auto /  直接加需要重新挂载的挂载点就好

目录挂载:格式为 mount --bind 需要挂载的目录   挂载到目标目录

目录建立连接文件的时候,有很多问题,但是可以通过挂载目录形式建立一个硬链接

磁盘卸载:umount [-fn]  装置名或挂载点

-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;

-n :不更新 /etc/mtab 情况下卸除。

标签挂载磁盘:mount -L "vbird_logical" /mnt/hdc6 磁盘标签为双引号内,挂载点为最后一个参数。通过磁盘挂载后必须保证此标签唯一。

磁盘参数修改:创建设备 mknod  档案名称 -[bcp] [主设备号] [次设备号]

b:设置成存储设备档案,硬盘等 c:设置成输入设备,鼠标等  p:管道

修改装置标签:e2label  装置名称  新的label名称

tune2fs [-jlL] 装置名称  参数还有很多,类似于一个集合

-j 相当于dumpe2fs –h     -j :将ext2的filesystem转换成ext3

-L:相当于e2label用来修改标签

21.设定开机挂载:/etc/fstab 及 /etc/mtab

设定开机挂载则必须先卸载挂载好的设备,之后再修改/etc/fstab这个档案,在最后添加修改格式为 : 设备名或者标签  挂载点  文件系统类型  参数  是否支持备用dump指令    是否用fsck检查磁盘

当输入错误挂载出问题时,进入单人维护模式时,/目录只读,无法修改文件,可以使用命令mount -n -o remount,rw / 重新挂载后来修改/etc/fstab开机配置文件。

22.特殊装置loop挂载(映象不可录就直接挂载)

挂载光盘/DVD映象文件:

建立挂载目录,使用mount -o loop  镜像文件名 挂载点

建立大档案以制作loop装置档案:无多余分隔槽时,以此来挂载文件系统

使用dd命令在在现有文件系统中创建空档案,然后使用mkfs格式化将创建的空档案制作成文件系统,然后使用mount来进行loop挂载,这样能起到分隔槽挂载文件的作用。

dd if=/dev/zero of=/home/loopdev bs=1M count=512

if 自动写零输入档案  of 输出档案  bs 相当于文件系统中的block大小 count 指明block个数  相当于从/dev/zero中将零写入/home/loopdev(将要用来做制作文件系统的档案),512块1M的零

mkfs -t ext3 /home/loopdev

mount -o loop /home/loopdev   挂载点

23.内存置换空间:swap  

作用:当内存不足时,用来做虚拟内存的。低功耗模式,休眠模式,可以将一些数据存放到硬盘,当系统再次正常时将数据拿出来。必要的两个分割槽是根目录,还有一个就是swap空间。

实体swap步骤:第一步:使用fdisk在磁盘的空闲空间开辟一个分割槽给系统作为swap空间,然后建立后修改swap对应的分割槽的系统ID为82(建立分割槽是时默认的系统ID为Linux,83)。更新分割槽表:partprobe  让系统重新读取分割槽表

第二步:使用swap格式的格式化工具处理分割槽 mkswap  装置文件名

第三步:启动  swapon 装置文件名  相当于文件系统的挂载

第四部:查看物理内存以及swap空间  free

查看已经挂载的swap:swapon  -s

虚拟swap步骤:第一步:使用dd来建立空档案 第二步:使用mkswap来进行分割(此命令出错,文件系统崩) 第三步:使用swapon 来启动

卸载swap: swapoff  实体安装的装置名/虚拟安装的文件名

限制:机器字长限制swap的空间,因为内存地址要通过机器字长来寻址。

24.利用GNU的parted进行分割2TB以上的磁盘。有需要再百度

25.压缩与解压:不论是解压还是压缩  -f 后面必须立马加压缩包的名字  之后再加待压缩的文件名  或者加-C 目录 来指定解压目录

-c 加在-f之前表明是压缩 –x在-f之前表示释放 –t在-f之前表明查看如果解压会产生哪些文件  这三个数不能共同存在  

部分解压:在使用-t查询后,可以使用命令tar -jxvf 打包檔.tar.bz2  待解开档名   来解开需要的部分文档。

部分压缩:tar -jcv -f /root/system.tar.bz2 --exclude=不压缩档案(有几个不压缩的档案 就有几个exclude)  待压缩的档案列表

26.将数据备份到其他特别装置(磁带机,只支持一次性读写,不能用cp)中

tar  -cv -f /dev/st0(需要的目标盘)  /home /root /etc(待拷贝的文件列表)

27. 单一文件系统的备份与还原:dump [-Suvj] [-level] [-f 备份档] 待备份资料(可以是挂载点或者装置名)

-u 将备份时间保存到/etc/dumpdates 档案 –level:从 0-9共十个等级

单一文件系统的类似于svn的备份记录(除开水平0的备份,后面备份只备份是与前一次level的差异)。如果用于非单一文件系统的目录则不合适,有很多限制不如用tar打包备份。

还原:restore  需要先建立挂载一个文件系统,然后切换到挂载点去,之后在挂载点目录使用restore命令还原备份的档案。还原得是从水平0开始,一层一层(0,1,2)的依次还原到你需要的那个目录中去。

restore -t [-f dumpfile] [-h] <==用来查看 dump档案内容

restore -C [-f dumpfile] [-D 挂载点] <==比较dump与实际档案

restore -i [-f dumpfile] <==进入互动模式  可以进行部分还原

restore -r [-f dumpfile] <==还原整个备份文件系统

28. 光盘写入工具

映象档:将需要建立映象的很多档案打包成一个镜像文件,然后然后可以挂载到一个挂载点,在挂载点直接查看所有内容。

制作镜像:mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol]  -graft-point iso1_dir=待备份文件1   iso1_dir2=待备份文件2 ...

-m表示要排除的档案  -graft-point  后面一一列举出需要建立镜像的文档与镜像内的对应的档案名。

挂载镜像:mount -o loop 镜像档  挂载点  (镜像可以直接挂载)

卸载:unmont 挂载点

光盘刻录:cdrecord  将mkisofs做好的镜像进行光盘刻录 (步骤很复杂)

光盘挂载:mount –t  iso9660(光盘格式) 光盘装置名  挂载点  

29.dd拷贝:dd除开用来制作文档  也可以用来拷贝档案和装置(此时可以不用格式化装置,因为dd可以将这个装置文件系统superblock, boot sector,meta data等都拷贝,但是cp和tar以及dump不行)。在数据还原时需要考虑到原本的文件系统的格式。不能跨文件系统进行数据传送。

dd if=input_file of=output_file  bs=block_size  count=number

if 待备份档案  of 输出档案  bs 相当于文件系统中的block大小 count 指明block个数  相当于从input_file中将内容输出到output_file(将要用来做制作文件系统的档案),number块block_size字节的值,不写则默认大小为512字节(boot sector为512字节),数量为直到拷贝完所有的待备份档案。

30.备份装置,设备,档案

cpio -ovcB > [file|device] <==备份

cpio -ivcdu < [file|device] <==还原

cpio -ivct < [file|device] <==察看

缺陷,在备份时,需要利用find命令查找的文件,之后再用管线执行此命令来进行文件操作。即数据流重导向。

31.实用的vim键:

跳转:

数字+方向键:跳转到相对位置的多少行和字符后。

+-:移动到非空格符的的上下列。 Page up/down 上下页

数字0或Home:移动到行首。 End:移动到行位

H,M,L:分别移动到屏幕的最上行,最中间行,最后一行的行首。

G:移动到末尾  nG:n为数字,移动到第n行  gg:移动到第一行

n<enter>:向下移动n行。

搜寻与取代:

:n1,n2s/word1/word2/g     : n1与n2 为数字。在第 n1与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』。(常用)

:1,$s/word1/word2/g :从第一行到最后一行寻找 word1 字符串,并将该字符串取代为word2 !(常用)

:1,$s/word1/word2/gc :从第一行到最后一行寻找 word1 字符串,并将该字符串取代为word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)

编辑操作:

x,X:删除字符,可以在之前加上数字。

u:复原上个动作 [Ctrl]+r:重做上一个动作。(常用)

.:小数点,重复前一个动作,可以重复粘贴和重复删除等待。

存储操作:

:w [filename] :将编辑后的数据另存为

:r [filename] :在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面

:n1,n2 w [filename] : 将 n1 到 n2 的内容储存成 filename 这个档案

:! command :暂时离开 vi 到指令列模式下执行 command 的显示结果!例如『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!

:set nu :显示行号 :set nonu :不显示行号

32.当编辑文档时出现问题

两种情况:一种时有其他人也在编辑,一种上一次编辑在非正常的结束。这两个都会导致用来保存记录修改记录的文件没有结束。暂存档位/tmp/vitest/.xxx.swp

解决方法:按照最下方的进行操作,其提示词语其意思为:

[O]pen Read-Only:打开此档案成为只读档, 可以用在你只是想要查阅该档案内容并不想要进行编辑行为时。一般来说,在上课时,如果你是登入到同学癿计算机去看他的配置文件, 结果发现其实同学他自己也在编辑时,可以使用这个模式;

·  (E)dit anyway:还是用正常的方式打开你要编辑的那个档案, 并不会载入暂存盘的内容。不过很容易出现两个使用者互相改变对方癿档案等问题!

 ·  (R)ecover:就是加载暂存盘的内容,用在你要救回之前未储存的工作。 不过当你救回来并且储存离开 vim 后,还是要手动自行删除那个暂存档喔!

·  (D)elete it:你确定那个暂存档是无用的!那么打开档案前会先将这个暂存盘删除! 这个动作其实是比较常做!因为你可能不确定这个暂存档是怎么来的,所以就删除掉他吧!

·  (Q)uit:按下 q 就离开 vim ,不会进行任何动作回到命令提示字符。

·  (A)bort:忽略这个编辑行为,感觉上和 quit 非常类似! 也会送你回到命令提示字符就是啰!

33. 区块选择:通过操作,选中一个矩形的中内容 ,然后将矩形的内容进行删除或者拷贝到另外一个地方,相当于将文本当做图来进行选择后的删除复制粘贴等操作。

具体操作:v:字符选择,会将光标经过的地方反白选择!

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

[Ctrl]+v:区块选择,可以用长方形的方式选择资料

y:将反白的地方复制起来 d:将反白的地方删除

首先通过前三个的一种进行“画布”的选中,之后通过y和d来进行对选中的画布进行操作,如果是y的话,将光标移动到想要的位置进行p的粘贴。

34.单窗口多文本编辑:窗口只显示一个档案

作用:可以使用快捷键来编辑多个文档,多终端是不能用快捷键来拷贝操作多文档的

vi  filename1 filename2 .. . :files 来观察打开的文件,任意键返回

:n 编辑下一个档案 :N 编辑上一个档案  

35.多窗口多文本编辑:屏幕将每个档案等分的显示出来,作用同上

先用vim 打开一个档案 然后 :sp [filename]  开一个新窗口,如果有加 filename, 表示在新窗口开一个新档案,否则表示两个窗口为同一个档案内容(同步显示)

[ctrl]+w+↓/↑  先按下 [ctrl] 不放, 再按下 w 后放开所有按键,然后再按下 j (或向下/上箭头键),则光标可移动到下/上方的窗口。

36.在不同的操作系统之间档案问题时,需要留意可能发生权限和编码格式的问题,需要确认这些问题。

Dos系统与Linux系统文件格式转换工具

dos2unix [-kn] file [newfile] dos  -> unix k表示保留mtime时间

unix2dos [-kn] file [newfile] unix -> dos n表示保留原文档

37.语系间的转码

查询:locale  加-a表示查系统支持的语系,不加显示当前语系的相关

iconv -f 原本编码 -t 新编码 filename [-o newfile]

--list :列出 iconv 支持的语系数据

-o file:保留原本的档案,可以建立新编码档案。否则会覆盖

将正体utf8转简体utf8:比较麻烦 iconv -f utf8 -t big5 vi.utf8 |  iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8

38.shell中的变量 

工具设置别名:alias  别名=’具体shell 命令’

查看执行的类型:type [-tpa] name   参数用来进行name的不同情况显示

指令换行符:“\[enter]” 当指令一行输入不完的是时候将enter转义成换行符,不再将其当做命令的结束标志。

设定变量:变量名=变量值    

  • 两边不能有空格 ② 变量名只能有英文和数字(不能做开头)
  • 变量内容有空格时需要使用双引号或者单引号将其变成一串,但是单引号不会保留内容中特殊字符的功能仅为纯文本,双引号内的特殊字符可以保留功能特性。
    1. 特殊字符在其前面将\来进行转义成普通字符
    2. 指令的嵌套:当指令中需要套用其他指令的使用『`指令`』,『$(指令)』
    3. 用export 变量名 来将变量变成环境变量,是其他子程序可以使用
    4. 扩增变量的内容:使用”$变量名”或者${变量}  PATH=”$PATH”:/home/bin
    5. 取消变量:unset 变量名

查询变量:env 查环境变量  set 查所有变量  其中变量PS1为终端提示符

查shell的pid: echo  $$  查上一条指令的结果: echo $?  0成功

变量读取:read [-p “提示词”]  [-t 等待输入秒数]  变量名

变量类型设置:declare [-aixr]  变量名  

-a :将变量定义成为数组类型

-i :将变量定义成为整数数字类型  可以进行算术运算赋值

-x :用法和export 一样,变成环境变量; +x 取消

-r :将变量定成为 readonly 类型,该变量不可被更改内容,也不能 unset  +r 取消动作

限制用户的系统配额:ulimit [-SHacdfltu] [配额]

非针对一个用户,统一管理所有用户 -a表示查看,后面不加配额

变量内容的删除与取代:可以通过改配置文件,改临时变量的太麻烦了

命令别名:alias, unalias  与设置变量的规则一样

alias  别名=’shell命令’    取消别名 unalias lm

查看命令记录:history   n(查看n笔命令,不写则查看所有)  -w强制更新命令历史到~/.bash_history中去。查看到的命令信息中行首的数字表面编号,使用!num 或者 !xx的词组,执行编号或者最近的以xx开始的命令。一个账户开多个终端会进行命令覆盖,只有最后一个关闭的终端命令历史才会保存到文件中去。

39.修改bash进站欢迎信息:/etc/issue, /etc/motd ,/etc/issue.net

/etc/issue中包含了终端机接口 (tty1 ~ tty6)登陆时会显现的一些信息,其文件的提示信息中可以配合使用一些特殊格式的字符起到shell命令的作用,将系统的实时相关信息打印出来给登陆者。格式字符串有以下:

\d 本地端时间和日期; \l 显示第几个终端机接口;

\m 显示硬件的等级 (i386/i486/i586/i686...);

\n 显示主机的网络名称; \o 显示 domain name;

\r 操作系统的版本 (相当于 uname -r) \t 显示本地端时间癿时间;

\s 操作系统的名称; \v 操作系统的版本

/etc/issue.net提供给telnetd远程登陆用的提示,和/etc/issue文件作用一样

/etc/motd这个文件也是用来给用户提示消息的,这个文件的内容会被加载在/etc/issue之后,不支持特殊格式的字符。

40.bash的环境变量配置文件:

用户有进行登录,则系统会读着两个配置文件:需要修改配置就看这两个文件的内容

/etc/profile:这是系统整体设定,里面有有很多关于系统的变量,然后还会呼叫其他的文件加载到系统shell环境中,这里面会呼叫三个配置文件分别是,/etc/inputrc,/etc/profile.d/*.sh,/etc/sysconfig/i18n。

~/.bash_profile 或 ~/.bash_login 或 ~/.profile:依次从前往后读取一个,属与使用者个人设定,改自己的数据,就写入这里。里面会呼叫用户配置文件~/.bashr。

主动加载配置文件:source或者小数点 (.)   配置文件档名   不需要注销重新登陆就可以将配置文件加载到shell环境

用户不进行再登陆:登陆以后,之后再进入bash环境不用登陆的情况

只会将~/.bashrc加载进shell,不会加载/etc/profile。

当用户误删~/.bashrc时,可以赋值/etc/skel/.bashrc到家目录下就OK。

~/.bash_history存放历史命令,~/.bash_logout存放当注销bash时,需要的动作,可以手动改这个文件实现一些需要的注销后的动作。

40.tty0-tty6的按键管理:参看stty –a  修改:stty  功能名  热键定义

41.特殊通配符:

[]:表示一定要匹配括号内一个字符  [^]:表示一定匹配非括号内字符

[ - ]:表示编码顺序内的任意一个字符

&:工作控制台,将命令变成背景下工作  

>, >>:数据流重导向:输出导向,分别是『取代』与『累加』

<, << 数据流重导向:输入导向 (这两个留待后面介绍)

;:连续指令下达分隔符:连续性命令的界定 (注意!与管线命令不相同)

42.数据流重导向:将标准输入和标准输出进行重定向到指定文件

标准输入 (stdin) :代码为 0 ,使用 < 或 << ;

标准输出 (stdout):代码为 1 ,使用 > 或 >> ;>覆盖 >>追加

标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;

输出:

使用示例:find /home -name .bashrc > list_right 2> list_error

将find正确结果信息存入文件list_right,错误存入list_error

如果需要将正确与错误的信息存入一个文件,且两种信息不交叉写入则

find /home -name .bashrc > list 2>&1

将错误信息丢到则可以将错误信息重定向到/dev/null(垃圾桶黑洞) 例

find /home -name .bashrc 2> /dev/null  正确信息输出到屏幕

  输入:cat > catfile < ~/.bashrc 将.bashrc写入文件catfile

cat > catfile << "eof" 从屏幕输入到文件catfile,以输入eof结束,,不加后面的(<< "eof")则以[crtl]+d结束

43. 命令执行的判断依据:; , &&, ||

命令1;命令2  命令没有相关性,等命令1执行完(不论结果是否正确)就执行命令

cmd1 && cmd2  若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2,否则不执行cmd2

cmd1 || cmd2 若 cmd1 执行完毕且正确执行($?=0),则 cmd2 不执行执行。否则执行cmd2

44.管线命令:将前一条命令的结果当做下一条命令的输入

注意点:管线命令仅会处理 standard output,对亍 standard error output 会予以忽略

管线命令必须要能够接接受自前一个指令的数据成为 standard input 继续处理才行

①处理输出信息的命令:cut,grep

cut:将某一段讯息的一行的信息进行按要求切出来

cut -d'分隔字符' -f fields <==用于有特定分隔字符,将输出信息的每一行进行以分隔字符为分隔界限进行分割,然后打印出-f 后面所接的数字段。

echo $PATH | cut -d ':' -f 3,5 将环境变量以:字符进行分割,打印第三个和第五个字符段。相当于只打印第三个和第五个路径

cut -c 字符区间 <==用于排列整齐的讯息

命令 | cut -c n1-n2  将数字n1和n2之间的数据打印出来,不写则认为是行首和行尾

  grep:将符合信息的整行输出

grep [-acinv] [--color=auto] '搜寻字符串' filename

-a 将二进制文件以text档案的方式搜寻数据

-c :计算找到的次数

-v 反向选择 找没有这个字符串的那一行

  ②排序命令: sort, wc, uniq  对数据进行整理,统计,是查阅更加直观

sort [-fbMnrtuk] [file or stdin] 将结果进行排序

-f :忽略大小写的差异,例如 A 不 a 规为编码相同;

-b :忽略最前面的空格符部分;

-M :以月份的名字来排序,例如 JAN, DEC 等等排序方法;

-n :使用『纯数字』进行行排序(默讣是以文字型态杢排序癿);

-r :反向排序;

-u :就是 uniq ,相同的数据中,仅出现一行代表;

-t :分隔符,预设是用 [tab] 键来分隔;

-k :以那个区间 (field) 来进行排序的意思

cat /etc/passwd | sort -t ':' -k 3 将文档以’:’进行分隔,以第三栏来排序

uniq [-ic]  将重复内容仅显示一个 –i忽略大小写  –c 计数

wc [-lwm] 用来统计数据的,默认三个选项都有

-l :仅列出行;

-w :仅列出多少字(英文单字);

-m :多少字符;

  ③双向重导向:tee 同时将文档输出到屏幕和档案

tee [-a] file -a :以累加的方式,将数据加入 file 当中!默认替换

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

tr [-ds] SET1 ..可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换! -d 删除set1字符串 -s 取代重复字符

last | tr '[a-z]' '[A-Z]' 将登陆者信息长得小写替换成代写

cat /etc/passwd | tr -d ':' 删除输出信息的分隔符

col [-xb] –x将tab键转换为对等x个的空格键  -b仅保留反斜杠最后接的那个字符,用来将man查阅的信息转换成纯文本文档

join [-ti12] file1 file2 将文件1,2以关键字段分析,将其合并成一行

-t :默认空格符分隔数据,默认第一个字段,对比『第n个字段』的数据,如果两个档案相同,则将两笔数据联成一行,且第n个字段放在第一个!

-i :忽略大小写的差异;

-1 :这个是数字1 ,代表『第一个档案要用后面所接数字的那个字段来分析』的意思;

-2 :代表『第二个档案要用那个字段来分析』的意思

join -t ':' -1 4 /etc/passwd -2 3 /etc/group

join之前需要用sort来进行排序,否则有些对比项目会被忽略

      paste [-d] file1 file2 直接将两行文件的数据写在一行  –d 后面接分隔符,默认tab分隔符

expand [-t] file  将tab按键转换成空格符,-t后面接需要转换多少个空格符

⑤分割命令:split [-bl] file PREFIX  将文件分割

-b :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;

-l :以行数来进行分割。

PREFIX :代表前导符的意思,可作为分割档案的前导文字,生成的文件名会以PREFIXaa, PREFIXac等等来命名 例

分割 cd /tmp; split -b 300k /etc/termcap termcap

拼接 cat termcap* >> termcapback

  ⑥参数代换:xargs [-0epn] command 将 stdin输入分隔成后面命令的参数

-0可以将输入的特殊字符变成一般字符

-e 遇到eof字符时,停止工作   -p 执行每个指令的参数时询问

-n 表示每条指令执行时读入几个参数作为命令的输入

cut -d':' -f1 /etc/passwd | xargs -p -n 5 finger 将密码文档以冒号分割符分开,然后将其结果作为参数给finger命令,每次只传五个

可以将很多不是管线命令变成转换成类似于管线命令来使用  例如ls

find /sbin -perm +7000 | xargs ls –l 就可以将find的结果当做ls命令的输入了,否则ls就是列出当前目录的信息

⑦减号-的作用:在利用管线命令进行连续处理时,需要将前一个指令的输出当成下个指令的输入时,输出和输入都用“-”来替代  例

tar -cvf - /home | tar -xvf – 将home目录下的的文档压缩成压缩文件当成下一个解压命令的对象,后面的这个 - 则是取用用前一个指令的 stdout

45.正则表达式:语系不同,字符16进制编码,会产生不同结果,所以注意语系,正则表达式中的符号不同于bash环境中的规则

①特殊符号:不随语系的改变而改变表达式结果

[:alnum:] 代表所有英文字母及数字  [:alpha:] 代表所有英文字母

[:upper:] 大写字母A-Z      [:lower:] 小写字母a-z

[:blank:] 空格和按键   [:xdigit:] 16进制的数字类型 0-9A-Fa-f

[:space:] 任何会产生空白的字符 包括空格 tab CR 键

②grep  [-An] [-Bn] [--color=auto] “字符串” 档案名  是管线命令

-A  后面的n表示目标行的前n行业显示出来

-B  后面的n表示目标后的后n行也显示出来  

color表示搜寻到目标字符串颜色  

字符串用双引号,里面可以用正则表达式来搜寻,同时将grep变成egrep

-v 可以方向选择,不匹配目标字符串的行显示出来  -i 忽略大小写

[] 中括号中  不论加多少字符,都表示任意其中一个字符意思

grep -n '[^[:lower:]]oo' regular_express.txt  查找[^abc..z]oo

^ 表明匹配行首(在[]内外意思不一样)    $ 表明匹配一个行尾巴

搜寻空白行  grep -n '^$' regular_express.txt 同时搜行首行尾符

. 小数点表明一定有一个任意字符  .* 就代表零个或多个任意字符

{n1,n2}表明连续括号前的字符,括号在使用时需要加\来转义

46.关键词处理工具 sed和awk:两个都是管线命令

sed [-nefr]  [动作]   ,动作需要用单引号括起来格式 ‘[n1[,n2]]function’,n1,n2为需要处理的行号。 func为动作

-n 默认将所有stdin都输出,-n后只会输出用动作处理过的那几行

-e 在指令模式上进行sed动作编辑,两条动作及以上每条都要加-e

-f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

-r 支持延伸的正则表达式语法

-i  直接修改档案,不由屏幕输出

function:

a 新增,在前面数字的后一行添加a后面的字符串为新的一行

c 取代,c 的后面可以接字符串,这些字符串取代 n1,n2 之的间行

d 删除,删除前面的数字那些行

i 插入,在数字行的上一行插入i后面的字符串为新行

p 打印,将选择的数据那一行打印 ,配合-n一起使用

s 取代,例如 1,20s/old/new/g  将1-20行的old取代成new

示例:sed -i '$a # This is a test' regular_express.txt

在文档最后一行增加#This…的字符串,$表示最后一行,a增加

i在option和在动作中的意思不一样。

  延伸正则表达式:

| 或, egrep -n 'gd|good' regular_express.txt 找出 gd或者good

() 群组,egrep -n 'g(la|oo)d' regular_express.txt 找glad或good

+ 重复一个或一个以上前面的字符

格式化打印printf: 相当于的c语言的printf

printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt | grep -v Name)

\a 警告声音输出    \b 退格键(backspace)

\f 清除屏幕 (form feed)    \n 输出新的一行

\r 亦 Enter 按键    \t 水平的 [tab] 按键

\v 垂直的 [tab] 按键

\xNN NN 为两位数癿数字,可以转换数字成为字符。

  awk:相比于sed一行一行的整体处理,awk将一行分成字段来处理,管线命令

    awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename 默认空格

默认空格或tab键为空格符  没有条件类型可以不加

$0表示一整行  $1 $2…表示第一字段,第二字段,… 

awk 内建变量,使用时不用加$来引用。

   NF 每一行($0)拥有的总字段数  NR 当前在处理的是第几行数据

   FS 修改分隔符,需要在第一行就生效得是用BEGIN {FS="分隔符"}

   cat pay.txt | awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2{total = $2 + $3 + $4 ;printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'

注:在{}内的多条指令,需要用;来分隔,或者直接按[enter]来分隔,等于使用==,printf需要使用\n来换行,与bash shell中不同,变量使用时不用加$符号,在{}内支持使用if语句,可以将条件类型用if语句转移到{}内

47.档案对比工具:diff   cmp   path

diff [-bBi] from-file to-file  以行为单位,用于新旧版本的比较上

  -b 忽略一行当中的多个空白差异 a b和a   b是一样的

  -B 忽略空白行的差异  -i 忽略大小写

   diff –bB /etc/rc3.d/ /etc/rc5.d/ 

cmp 以字节单位 cmp [-s] file1 file2 –s 列举所有不同,默认列举第一个

patch :diff -Naur passwd.old passwd.new > passwd.patch 制作成补丁档

        patch -pN < patch_file <==更新,将差异补丁档更新到旧的文档中

        patch -R -pN < patch_file <==还原,将新的档案以补丁档还原

-p :后面可以接『取消几层目录』的意思。

-R :代表还原,将新的文件还原成原来旧的版本。

patch -p0 < passwd.patch  没有目录差,所以为0,更新档案的意思patch会根据补丁档的+,-号来判断是增加还是删除,一行中有细微的修改会让这一行的状态整体进行+,-的标记

  pr /etc/man.config  打印文档加上页码时间等各类信息,参数需要的再查吧

48.shell脚本

  ①格式规范:功能,版本,比较特殊的指令使用绝对路径,修改历史,环境变量,使用vim来撰写可以进行语法检测。

  ②由外部获取变量值:read -p "Please input first name: " firstname

  ③获取动态时间:$(date --date='1 days ago' +%Y%m%d) # 前一天的日期

  ④计算:var=$((运算内容)) 两个括号表示计算括号内的数学运算。

  ⑤让shell脚本设立的变量在bash中生效,source XX.sh sh脚本中建立的变量在整个bash环境中都生效而不是只有那个shell脚本中有用

  ⑥test指令的而测试功能:利用它来检测某些档案以及相关的属性,结果不会显示任何信息,使用$? 或 && 及 || 来展现整个结果

     test -e /dmtsai && echo "exist" || echo "Not exist" 档案是否存在

     测试文件类型:-e 档案是否存在  -f 测试是否存在且为文件

                   -d 是否存在且为目录  -b  block device 装置

                   -c character device 装置  -S Socket 档案

                   -p  FIFO (pipe) 档案   -L 连结档

     测试档案的权限与属性,-rwx,-u SUID属性,-g SGID的属性,-s 非空白档

     两个档案的比较:-nt f1 比f2新,-ot  相反,-ef  是否为同一个inode

     两个整数之间的比较,判断与比较字符串,多重条件判定 –a(and)-o(or) !相反test ! -x file

⑦利用判断符号[]:用法和test类似

  在中括号 [] 内的每个组件都需要有空格键来分隔;

  在中括号内的变数,最好都以双引号括号起来,因为变量的值如果有空格会导致这个值变成分开的两个

  在中括号内的常数,最好都以单戒双引号括号起来,理由同上

  [ "$HOME" == "$MAIL" ] 每一个元素之间都用空格隔开

⑧变量:$num 0表示执行档  1,2…表示后面的参数

        $#表示参数个数,不包括执行档 $@ :代表"$1" "$2"等所有参数

⑨参数偏移shift num:将执行的参数进行num个数的后移,相当于将输入的num变量进行删除。

⑩条件判断:if  condition1 ;then

                 语句包

            elif  condition2 ;then

                 语句包

else  

                 语句包

            fi

(11)条件选择:case ..... esac

 case $1 in    #$1代表变量,可以是其他变量名

"hello")

echo "Hello, how are you ?"

;;    #语句包必须以这个符号结尾,语句包语句可以很多条

"")

echo "You MUST input parameters, ex> {$0 someword}"

;;

*)     # 其实就相当于通配符,0~无穷多个任意字符之意!

echo "Usage $0 {hello}"

;;

esac    #结束case语句的结束符

  (12)函数:

定义语法function fname() {

程序段

}

    使用:函数名 变量1 变量2 …

内建变量:此时在函数中有和shell  script中相同的内建变量$num来表示使用参数,$0表示函数名。函数内建变量和运行shell script的内建变量作用域类似于全局和局部的关系。

(13)不定循环:while,until(语法一样,只是条件为真时结束循环)

语法定义:while [ condition ] <==中括号内的状态就是刞断式

do <==do 是循环的开始!

程序段落

done <==done 是循环的结束

      (14)固定循环:for

       语法定义:for var in con1 con2 con3 ...

do

程序段

done

        for (( 初始值; 限制值; 执行步阶 )) #相当双括号内被解释为数式

do

程序段

done

(15)shell调试:sh [-nvx] XXX.sh

-n 不执行,进查询语法问题。    -v 执行前将shell的内容输到屏幕

-x 将使用到的内容显示到屏幕,可以查看整个shell执行流程

49.磁盘配额:Quota在一个文件系统中给使用者限制inode和block

①安装工具:确认系统支持,然后安装软件工具

②扫描并建立 quota 记录文件:quotacheck,记录档不能手动编辑用指令

③启动服务:quotaon(关闭:quotaoff)

④编辑账号/群组的限值不宽限时间:edquota

⑤查询相关数据记录报表:quota 查某一个用户 repquota 查文件系统报表

简便方法: 直接于指令中设定 quota 限额:setquota。具体用具体查使用

50.防止硬件损坏同时保留读写速度:软件磁盘阵列(Software RAID)   

    工具:mdadm

磁盘阵列作用:将多颗磁盘处理用来做备份,减小硬件损坏带来的数据丢失分险。分割磁盘存储,提高读写速度。

因为硬件磁盘阵列卡比较贵,所以用软件来模仿磁盘阵列。利用分割槽来实现。

51.弹性管理磁盘空间:逻辑滚动条管理员 (Logical Volume Manager)LVM

作用:当一个磁盘在分割时,分割槽后期使用过大过小时,修改分割槽大小很方便,相当于磁盘的空间管理具有弹性。也可以用来做备份:系统快照-因为文件存储单元重新定义过,定义一块分区(分配存储单元PE),这块分区用来记录变更的存储单元(只记录一次,可以用来一次性还原,不可分步回溯),其他的存储单元与原有的分区共享(变更将不共享),相遇于备份整个文件系统,可以用来还原这个系统(将原有的存储单元进行还原)

流程:先分割出 4 个 partition ,每个 partition 的容量均为 1.5GB 左右,调整 system ID 需要为 8e(LVM标识符),即将partition 重定义为PV。

全部的 PV整合成为一个 VG,VG 名称设定为 vbirdvg;将 设定PE (类似于文件系统中的block)的大小为 16MB;

·  全部的 VG 容量都丢给 LV ,LV 的名称设定为 vbirdlv;

·  最终这个 LV 格式化为 ext3 的文件系统,将挂载在 /mnt/lvm 中

    通过将其他的分割槽转换为PE单位加载到LV中去就实现扩大,将LV中的PE移除,相当于缩小了文件系统的容量。

52.工作排程:at:仅执行一次就结束排程的指令, cron:循环的一直执行下去

安装:使用sudo apt-get intall at  安装工具 cron会被同时安装

启动 /etc/init.d/atd  restart  

开机启动服务:chkconfig atd on (实践时出错,开机自启动后面再完善)

at: 使用者限制:/etc/at.allow 写在这个档案的用户才能使用at,没有则不能(即时没有写在at.deny)。如果此文件不存在,则找寻/etc/at.deny这个档案,有写在这个档案的使用者不能使用at,否则就可以使用。如果两个文档都没有,则直有root可以使用at命令。

    使用方法:at [-mldv] TIME   at后面加时间即可,之后进入命令行开始输入shell命令,一行为一个shall命令,结束输入使用[ctrl] + d,shell命令使用时,尽可能的使用绝对路径来执行命令。

      -m 没有输出信息,也使用邮件通知该使用者工作以及OK

      -l :at -l 相当与 atq,列出目前系统上面的所有该用户的 at 排程;

      -d :at -d 相当于 atrm ,可以取消一个在 at 排程中的工作;

      -v :可以使用较明显的时间格式栏出 at 排程中的任务栏表;

      TIME:时间格式,HH:MM  时刻已经超过则明天执行,例04:00

            HH:MM YYYY-MM-DD    例: 04:00 2009-03-17

            HH:MM[am|pm] [Month] [Date] 例: 04pm March 17

            HH:MM[am|pm] + number [minutes|hours|days|weeks]

            例: now + 5 minutes    04pm + 3 days(注意+s)

   查询某一个at指令集:at -c 工作号码

   查询at所有的工作号码:atq

   删除某一个at工作号码:atrm [jobnumber]

   等系统有空时才执行:batch 与at功能和使用方法一样

crontab:使用限制的方式和at一样,指令进行工作排程以后会被记录在目录/var/spool/cron/中,里面会有一个以账号问名字的文件来记录信息,不能使用vi来编辑此文档,会出错。同时执行的每一项工作会记录在/var/log/cron着登陆档中。

    使用方法:crontab [-u username] [-l|-e|-r]  

      -u :只有 root 才能进行这个任务,亦即帮其他使用者建立/移除 crontab 工作排程;

      -e :编辑 crontab 的工作内容

      -l :查阅 crontab 的工作内容

      -r :移除所有crontab工作内容,若仅要移除一项,用-e编辑

      例:crontab –e  回车后进入vi编辑。每一项工作一行。输入:wq结束。每一项工作六个字段,空格为分隔符,字段为分别为

分钟  小时  日期  月份  周  指令

0-59  0-23  1-31  1-12  0-7  就是正常的shell指令

      其中辅助字符:*表示全部  逗号,表示分隔时段,二者都

                    -表示区间,这一段区间的其他时间都执行

        /n n表示数字,每隔n个所在栏单位的意思例如 */5 每隔五分钟

    其实第五个字段是使用者用户名,只是因为这个命令在执行的时候就已经确定了,所以省略用户名的编写,在后面另外一种方式中会有提到用户名。

    系统配置:系统的例行性任务,非对于使用者而言。编辑/etc/crontab,每隔一分钟系统去调用查询一次这个文档(使用者其实默认root,可以自己修改)。用户使用crontab –e的crontab是/usr/bin/crontab 这个执行档(使用者就是执行这个命令的用户)。

    指令形态:正常指令:正常的shell  

目录规划:*/5 * * * * root run-parts /root/runcron

利用run-parts工具,每隔五分钟自动到要求的目录中去执行里面所有的执行档,目录可以自己建立,得确保支持工具run-parts

        注意事项:周与日月不可同时并存,错误时间相当于

anacron:唤醒停机期间的的工作任务,因为关机而未执行的任务被重新执行。它会比较现在时间和最后一次执行anacron排程的时间差异来判断,以此来计算出没有执行的crontab排程,然后去执行crontab排程。anacron时间记录文件/var/spool/anacron/*。

     使用方法:anacron [-usfn] [job]

         -s :开始一连续的执行各项工作 (job),会依据时间记录文件的数据判断是否进行;

         -f :强制进行,而不去判断时间记录文件的时间戳;

         -n :立刻执行未进行的仸务,而不延迟 (delay) 等待时间;

         -u :仅更新时间记录文件de 时间戳,不进行任何工作。

job :由 /etc/anacrontab 定义的各项工作名称

/etc/anacrontab格式:

天数 延迟时间 工作名称定义 实际要进行的指令串

          流程:1. 由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;

2. 由 /var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳;

3. 由上个步骤与目前的时间比较,若差异天数为 1 天以上 (含 1 天),就准备进行指令;

4. 若执行,根据 /etc/anacrontab 的设定,延迟执行

5. 延迟时间过后,开始执行后续指令,亦即『 run-parts /etc/cron.daily 』这串指令令;这个指令自动去执行需要执行的crontab排程

6. 执行完毕后, anacron 程序结束。

        需要的动作:设定开机自动执行anacron就OK。其余的按照需求修改/etc/anacrontab后会自动执行的。

53. job control 的管理:

  (1)将工作丢入背景中执行 在命令的最后加上 &  防止工作中的stdout 及 stderr可以将输出的数据流重导向到文件中,防止来干扰其他操作。

  (2)将目前工作丢入背景:[ctrl]-z 例:在vi编辑文件是进入管理模式后[ctrl]-z将vi丢入后台,之后在查明一下需求后继续唤醒工作,继续vi。

(3)查看目前背景工作状态:jobs  [-lrs]

     -l :除了列出 job number 与指令传之外,同时列出 PID 的号码;

-r :仅列出正在背景 run 的工作;

-s :仅列出正在背景当中暂停 (stop) 的工作

最后放入背景工作的job number后面有个+,倒数第二的有个-号。

 (4)将背景工作拿到前景来处理:fg %jobnumber  (也可以 fg  +/-)

 (5)将背景下暂停的工作变成背景下运行:bg %jobnumber

 (6)管理背景当中的工作:kill -signal %jobnumber/pid   

       signal可以使用 kill –l 来加进行查询对应的标号列举重要的

       -1 重新读取参数的配置文件,相当于重启

       -2 相当于由键盘输入[ctrl]-c来停止

       -9 立刻强制删除一个工作不会做后续工作收尾

       -15 会做后续工作收尾,比如删除一些临时文件,以正常的方式结束。

       -17暂停正在执行的程序

        %jobnumber可以用pid来替换结束程序

  (7)脱机工作:nohup,当登陆终端注销后,进程会继续运行,一般情况当终端退出,终端运行的进程也会挂掉。

        nohup [指令与参数] <==在终端机前景中工作

        nohup [指令与参数] & <==在终端机背景中工作

  (8)时间点进程查询:ps [opt]

           -A:所有的 process 均显示出来,与-e 具有同样的效用;

           -a :不与terminal(终端)有关的所有 process ;

           -u :有效使用者 (effective user) 相关的 process ;

           x :通常与a这个参数一起使用,可列出较完整信息,带有x的选项不用加- 例如 ps axjf <==连同部分程序树状态,查所有系统程序

           l :较长、较详细的将该 PID 的信息列出;仅看自己bash的相关程序。

j :工作的格式 (jobs format)

-f :做一个更为完整的输出

      (9)动态观察进程的状态及CPU的使用:top [-d 数字] | top [-bnp]

          -d :后面接秒数,就是整个程序画面更新的秒数,默认5秒;

-b :以批次的方式执行 top ,还有更多的参数可以使用喔!通常会搭配数据流重导向来将批次的结果输出成为档案。

-n :与-b一起使用,意思是,需要进行几次top的输出结果。

-p :指定某些个 PID 来观察监测而已。

在top执行中可以使用按键来重定义显示方式与修改进程调度方式

? :显示在 top 当中可以输入的按键指令有哪些;

P :以 CPU 的使用资源排序显示;

M :以 Memory 的使用资源排序显示;

N :以 PID 来排序喔!

T :由该 Process 使用的CPU 时间累积 (TIME+) 排序。

k :给予某个PID一个讯号 (signal)

r :给予某个 PID 重新制订一个 nice 值。

q :离开 top 软件的按键。

          显示的结果需要注意的点:第一行top的load average的三个数字代表1,5,15分钟需要负载的程序个数,越大,系统越繁忙。up 指系统开机持续时间。第二行Tasks的zombie僵尸进程个数。第三行cpu中%wa,代表i/o wait,系统变慢可能是这个项目消耗CPU的资源。多核可以使用数字1来切换不同的CPU。第四行第五行物理内存与虚拟内存 (Mem/Swap)。后面就是实际情况。实际情况中PR和NI越小,越早被执行。

      (10)pstree [-A|U] [-up] 将进程以程序树的形式列举

            -A :各程序树之间的连接以 ASCII 字符来连接;

-U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;

-p :同时列出每个 process 的 PID;

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

      (11)killall  [-ieI] -signal 指令名称

             -i 表示交互,删除前询问

             -e 表示命令要完全一致,包括参数啥的,但是不超过15个字符

             -I 忽略大小写

     (12)提高程序执行的优先级:修改nice值,来修改执行的优先级

           PRI(new) = PRI(old) + nice  PRI:核心动态调整,越小越优先

           注意事项:root调整nice值-20~19,一般用户0 ~ 19,nice值会在父进程->子进程间传递

           nice [-n 数字] command  修改正要运行程序的优先级

           renice [number] PID     修改已存在进程的优先级,top也可以

54.系统资源的观察:

(1)free:查内存:free [-b|-k|-m|-g] [-t]

     -b,k,m,g都表示单位

     -t在输出的最终结果,显示物理内存和 swap 的总量。当buffers和cached使用多的时候,是为了让系统的存取效能增加,只要swap没有使用就是正常的。

(2)uname:查阅系统与核心相关信息  uname [-asrmpi]

    -a 查系统相关的所有信息

    -s 系统核心版本    -r  核心的版本  -m  系统的硬件名称i686 或x86_64

    -p cpu类型        -i 硬件的平台ix86

 (3)uptime:观察系统启动时间与工作负载,相当于top的第一行

 (4)netstat :追踪网络或插槽文件,可以对网络程序进行管理

netstat -[atunlp]

             -a :将目前系统上所有联机、监听、Socket 数据都列出来

             -t :列出 tcp 网络包数据  -u 列出udp网络包数据

             -n :非己程序的服务名称,以埠号 (port number) 来显示;

             -l :列出目前正在网络监听 (listen) 的服务;

-p :列出该网络服务的程序 PID

      (5)dmesg :分析核心产生的讯息,也就是硬件相关消息

      (6)vmstat :查cpu,内存,磁盘,系统资源的读写io等情况。

               vmstat [-option] [延迟 [总计侦测次数]]

      (7)内存档:/proc/*   各个进程的pid目录以及运行相关的参数记录

             除开pid目录。运行参数相关的比较重要的有

             /proc/cmdline  加载 kernel 时所下达的相关参数!查阅此档案,可了解系统是如何启动的!

             /proc/cpuinfo  本机的 CPU 的相关信息,包括频率、类型与运算功能等

             /proc/devices  这个档案记录了系统各个主要装置的主要装置代号,与 mknod 有关!

             /proc/interrupts 目前系统上面的IRQ 分配状态

             /proc/ioports  目前系统上面各个装置所配置的 I/O 地址

             /proc/kcore  内存癿大小!好大对吧!但是不要读他啦!

             /proc/loadavg  还记得 top 以及 uptime 吧?没错!上头的三个平均数值就是记录在此!

             /proc/meminfo  使用 free 列出的内存信息,嘿嘿!在这里也能够查阅到!

             /proc/modules  目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序啦!

             /proc/mounts  系统已经挂载的数据,就是用 mount 这个指令呼叫出来的数据啦!

             /proc/swaps  到底系统挂的加载的内存在哪里?呵呵!使用掉的 partition 就记录在此啦!

             /proc/pci  在 PCI 总线上面,每个装置的详绅情况!可用 lspci 来查阅!

             /proc/uptime  就是用 uptime 的时候,会出现的信息啦!

             /proc/version  核心的版本,就是用 uname -a 显示的内容啦!

             /proc/bus/*  一些总线的装置,还有 USB 的装置也记录在此喔!

     (8)找出正在使用该档案(或文件系统)的程序

             fuser [-umv] [-k [i] [-signal]] file/dir

             -u 同时列出程序的pid和拥有着

             -v 列出每个档案的与程序的还有指令的完整相关性

             -m 显示出操作这个文件夹的程序,对umount不成功很有效也

             -k 发送信号SIGKILL(-9)给该pid

             -i 配合-k,删除pid前询问使用者意愿

             -signal 后加-1 -15 等信号 不加信号默认为-9

         查询结果中 有一栏ACCESS表示状态,具体参数使用命令的时候百度

      (10)查找被程序开启的档案文件名与装置

             lsof [-aUu] [+d]  

            +d  后面接目录,列出改目录下被开启的档案与装置

            -u  后面接username,列出该用户相关程序所开启的档案

            -U 列出Unix like 系统的socket文件类型

            -a and同时满足条件,在多条件时使用lsof -u root -a -U

       (11)找出正在执行程序的pid:  pidof [-sx] program_name

             -s 仅列出一个pid而不是所有 –x 同时列出父进程的pid

55.当对服务器的安全性要求较高,Linux自带的文件权限无法满足要求,SELinux可以用来增加对程序的管理。工作方式为控制程序,通过规则来管理资源档案的读写。以此来增加安全性。

56.开机启动流程:

1.BIOS加载:加载CMOS来获取硬件相关的配置与MBR。

2. MBR:MBR存放boot loader,此位置存放的boot loader是唯一的,每一次安装系统都会被覆盖。而多操作系统的原因是每个操作系统在对应的扇区起始位置还有一份BootLoader ,MBR的BootLoader会根据选项加载所选择的系统的BootLoader,以此来加载系统相关的核心配置。MBR的BootLoader功能为1.为客户提供选单,选择不同开机项目,多重引导的重要功能。2.载入核心档案:直接指向可开机程序区段来开始操作系统。3.转交其他loader:将开机管理功能交给其他loader来负责。最终加载内核档案。

3.虚拟文件系统:initrd

    作用:boot loader作为开机上电的第一条程序,它执行以后,就加载核心档案,之后加载内核,加载所必要的模块,加载文件系统,正常开机init。但是除开boot loader以外,其他所有的在flash中是不固定的,其相关参数是写死在boot loader中的。内核参数相当于独立于文件系统之外,只要硬件地址写死boot loader中,就能被加载到。同时内核同样是存储在和boot loader相同的硬件存储设备中。之后加载驱动模块,但是驱动模块在文件系统中,而文件系统可能在特殊的存储硬件中(SATA接口的硬件),这些硬件要加载驱动以后才能被内核所识别。这样就陷入了死循环。此时虚拟文件系统的作用就出来了,它内部集成了读取磁盘所需要的驱动模块,此时就能去读文件系统,然后可以呼叫文件系统的的/sbin/init来开始正常的开机流程了。然后文件系统安装在IDE接口的设备中,且格式为ext2/ext3,那么不需要的initrd也能进入Linux。

    mkinitrd 命令用来赋值一份虚拟文件系统。

4.第一只init及配置文件/etc/inittab与runlevel:

    所做的工作:通过加载文件/etc/inittab来配置主机名字,网络设定,语系处理,文件系统格式,以及其他服务的启动等。这个文件中还规定了runlevel(开机执行等级),规定进入系统模式(单人维护,无网络服务,重启等)。

5.开机自启动服务:将自己写的脚本执行写入/etc/rc.d/rc.local中。

6.将各类驱动以模块的形式放在内核中,可以是在编译内核时将驱动加载进去,也可以将驱动在开机以后insmod的方式挂载上去。内核查看模块的方式lsmod,卸载内核rmmod。查询模块的依赖性,使用modprobe命令会建立档案modules.dep。

7.boot loader的两个stage:

    Stage1:执行boot loader的主程序(放在MBR中的boot sector中)。主要用来从磁盘中加载核心档案,以让核心能顺利驱动整个系统的硬件。

 

作用:①认识很多的文件系统,主程序能够直接在文件系统中搜寻核心档案名

②能自行编辑与修改开机设定项目,类似bash的指令模式

③可以动态的搜寻配置文件,而不需要修改配置文件以后重新安装grub,即修改完menu.lst的设定,下次开机就能生效。(相当于自动读配置menu.lst,然后通过②作用来写入代码中进行设定)

    工作方式:记录磁盘和分隔槽在grub中的代号。第一颗搜寻到的磁盘代号为hd0,该磁盘的第一个磁盘为hd0,0,比如SATA使用逻辑分割槽,其在Linux的档名为/dev/sda5,对应在grub中的代号为(hd0,4)。前面的四个分隔槽名留给主分割槽和扩展分割槽的,逻辑从第五个开始。

    Stage2:加载主程序的配置文件,包括文件系统的定义和主要配置文件menu.lst,放在/boot下/boot/grub/中。

      工作方式:在文件menu.lst中记录了开机的设定:

在关键词title以前的四行为开机的整体设定:

          default:在读秒结束前都没有动键盘,那么选择第几个tille作为开机配置由这个宏来决定。

           timeout:设定开机读秒的时间

           splashimage:splashimage=(hd0,0)/grub/splash.xpm.gz表明开机图示由这个档案提供。(比如是彩色还是黑白)

           hiddenmenu:表明是否进行开机选单。

           title:①选择核心档直接开机:其数值设置为:

               root代表后面核心档案放置在哪个partition而不是根目录

               kernel 后面加核心的档名,档名后面接核心的参数,由于开机过程中需要加载根目录,root=LABEL=..表示根目录在哪个分割槽。vga参数可以设定分辨率。

               initrd 指定虚拟文件系统所在的ram disk的档案名

磁盘表示例:系统分割槽/dev/hda1 (/), /dev/hda2 (swap),核心档案为/boot/vmlinuz,grub的menu.lst在核心档位置?

源文件: /boot/vmlinuz ↓

Linux 装置:(/dev/hda1)/boot/vmlinuz ↓

grub 装置:(hd0,0)/boot/vmlinuz

其写法为:kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 ...

如果分割槽为/dev/sda1 (/boot), /dev/sda5 (/),则写法改变为

源文件: /boot/vmlinuz ↓

Linux 装置:(/dev/sda1)/vmlinuz ↓

grub 装置:(hd0,0)/vmlinuz

所以最终的 kernel 写法会变成:

kernel (hd0,0)/vmlinuz root=/dev/sda5 ...

②将控制权交给下一个loader:其数值设置为:

    不用启动内核,只要将boot的控制权交给下一个boot并需要查验下一个boot loader所在的文件系统。所做工作为:指定分割槽以及设定启动引导程序到那个分割槽的启动扇区上去。

57.Linux核心编译与管理:

     核心版本:主要的版本定义为:主.次.释放-修改 例如2.6.x是稳定版2.5.x是测试版,选择偶数来编译核心。同时2.4.x与2.6.x是相当大差异的核心版本.如果原本是2.4.xx要更新也是更新到2.4.xx版本.不能更新到2.6.xx

58.将旧的软件更新原始码:patch  只能临近的代码进行更新

patch –p数字 < patch_file 其中数字是表明旧的档案要从第几个目录开始更新,忽略前面的目录从制定的数字目录开始更新里面的代码。

更新包错误需要还原:patch -R < ../main_0.1_to_0.2.patch

59.将动态函数库放入内存,加快读取速度:ldconfig与/etc/ld.so.conf

1.在/etc/ld.so.conf里面写下想要读入内存的动态库所在目录

2.利用ldconfig这个执行档将/etc/ld.so.conf的资料读入内存中

3.同时将数据记录一份在/etc/ld.so.cache这个档案当中

ldconfig  [-f conf] [ -C cache] –p

-f conf 指定路径目录而不是以/etc/ld.so.conf作为默认值

-C cache 指定文件,而不是去加载/etc/ld.so.conf作为默认值

-p 列出所有的函数库资料(在/etc/ld.so.conf中的)

解析二进制执行档中的动态库(也解析库中调的其他库):ldd [-vdr] [filename] 

     -v 列出所有信息 –d 重新将资料有遗失的link显示

     -r jiang ELF有关错误显示出来

60.md5sum值的计算:用来判断一个档案的真确性,例如:在档案数据传输前计算md5值放到这个档案中,其他人获取档案后。计算这个档案的md5值与档案中的md5值进行比较,相同即为正确。

61.kernel目录下重要文件夹及其作用

arch:与硬件相关的东西,CPU类型分类,CPU的gpio定义与控制,驱动的device端信息注册

crypto:核心支持的加密技术,例如md5值验证以及des等

drivers:各类硬件相关的驱动程序,注:设备信息在arch中注册,在drivers中通过函数来获取,进行对应的硬件寄存器操作,也就是硬件编程,显示器,网卡,pci等。

init:一些核心初始化定义功能,包括挂载与init程序的呼叫等

mm:与内存单元有关的各项数据

sound:与声音有关的各个模块与驱动

猜你喜欢

转载自blog.csdn.net/qq_43706825/article/details/103700009