linux 完整学习资料:第七章 grub

--




使用grub菜单硬盘安装rhel6.3



我这里/dev/sda5  挂载到/share目录


/share/iso/rhel63-64.iso--把iso放到/share/目录


把iso挂载,并把挂载后的里面的isolinux目录里的vmlinuz和initrd.img拷出来,也放到/share目录,并把images目录和isolinux目录也拷到/share目录下

/share/rhel63-64.iso

/share/vmlinuz

/share/initrd.img

/share/images/

/share/isolinux/




然后开机重启,在grub菜单按C键进入grub> 提示符界面


grub > root (hd0,4)       --进入到/dev/sda5,也就是我的/share目录


grub > kernel /vmlinuz


grub > initrd /initrd.img


grub > boot--回车后,就进入到了安装界面



--后面的选择只有一个地方要注意的是:安装方式选择hard drive,然后选择/dev/sda5(也就是你的iso在的分区),别的步骤都一样





--这里注意,如果是在rhel6上硬盘安装rhel5的话,因为rhel5不能挂载ext4文件系统,所以你需要在rhel6上mkfs.ext3格式化一个ext3格式的分区,去存放

/share/vmlinuz

/share/images

/share/initrd.img

/share/isolinux/


其它的步骤一样




--注意:如果在rhel6上硬盘安装rhel5还要注意的是最好不要使用rhel5的grub去覆盖rhel6的grub;因为rhel5的grub无法引导rhel6系统,但反过来可以






===============================================================




文件查找


whichwhereis    locate    find




--which


which - shows the full path of (shell) commands.



[root@li ~]# which mount

/bin/mount


[root@li ~]# rpm -qf `which ls`--有别名

--color=tty': unknown option



[root@li ~]# rpm -qf `which --skip-alias ls`

coreutils-5.97-23.el5



[root@li ~]# which ifconfig--查找二进制可执行文件,通过环境变量来查找 也就是$PATH的路径来查找。

/sbin/ifconfig


[a@li ~]$ which ifconifg--普通用户环境变量没有/sbin/这个路径,所以which找不到

/usr/bin/which: no ifconifg in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/a/bin)




--whereis


 whereis - locate the binary, source, and manual page files for a command



[root@li ~]# whereis ifconfig

ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz


[a@li ~]$ whereis ifconfig

ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz



[root@li ~]# whereis grub.conf

grub: /sbin/grub /etc/grub.conf /usr/share/grub /usr/share/man/man8/grub.8.gz


[root@li ~]# whereis fstab

fstab: /etc/fstab /usr/include/fstab.h /usr/share/man/man5/fstab.5.gz





--locate


      locate - find files by name


[root@li ~]# locate rhel-5.4

/share/soft/iso/rhel-5.4-server-i386-dvd.iso



速度快,通过系统带的一个数据库去查找

[root@li ~]# ls /var/lib/mlocate/

mlocate.db


[root@li ~]# ll /var/lib/mlocate/mlocate.db -h

-rw-r----- 1 root slocate 4.6G Jul  6 11:02 /var/lib/mlocate/mlocate.db

--我这里看到这个文件有近5G,太大了,一般都在几M大小;因为我这台机器先前写脚本建立过大量文件



[root@li ~]# touch abcd777--新建一个文件

[root@li ~]# locate abcd777--locate查找不出来



[root@li ~]# updatedb--手动更新locate数据库,时间比较长,但是系统的时间任务服务会在晚上4点帮你去更新


[root@li ~]# locate abcd777--更新locate数据库后,再查找就有了

/root/abcd777




find

find  - search for files in a directory hierarchy



速度慢,因为要扫你的磁盘,功能强大

find 路径 [选项]

-name      --通过名字找

-type   --通过文件类型找

-uid   --通过uid查找

-gid   --通过gid查找

-user   --通过username查找

-group   --通过groupname查找


-perm   --通过权限查找

+n--n包含的权限也查找出来

-n--包含n的权限也查找出来

-size   --通过大小查找

+n--查出大于n的文件

-n--查出小于n的文件




1,按名称查找


[root@li ~]# find /etc/  -name grub.conf  --必须要全名,与locate不同,不是匹配名字

/etc/grub.conf

[root@li ~]# find /etc/  -name grub

/etc/sysconfig/grub

[root@li ~]# find /etc/  -name grub*--名字不太确定,可以用*通配符来代替

/etc/sysconfig/grub

/etc/grub.conf


=======================

疑问:??????????

cd 到/etc目录里,下面的查找找不出来/etc/sysconfig/grub


[root@li etc]# find /etc -name grub*

/etc/grub.conf

[root@li etc]# cd

[root@li ~]# find /etc -name grub*

/etc/sysconfig/grub

/etc/grub.conf


[root@li etc]# touch /etc/grub--touch一个/etc/grub

[root@li etc]# find  /etc -name grub*--相同的命令去查找,居然报错

find: paths must precede expression

Usage: find [-H] [-L] [-P] [path...] [expression]




--上面的问题在man find的后面有说明,*会先被shell所解析,会造成冲突;换写成'grub*' 或者 grub\*




======================


find /test/  -iname Aaa--忽略大小写加上-i

/test/aaa

/test/Aaa

/test/AAa


[root@dns test]# find /test/ -name  adobe*


[root@dns test]# find /test/ -iname  adobe*

/test/AdobeReader_chs-7.0.0-2.i386.rpm



--定义查找的目录层次

[root@li a]# find /test/ -maxdepth 1 -name  aaa

/test/aaa

[root@li a]# find /test/ -maxdepth 2 -name  aaa

/test/aaa

/test/a/aaa


[root@dns test]# find /  -maxdepth 1 -name grub.conf

[root@dns test]# find /  -maxdepth 2 -name grub.conf

/etc/grub.conf

/test/grub.conf

[root@dns test]# find /  -maxdepth 3 -name grub.conf

/etc/grub.conf

/boot/grub/grub.conf

/test/grub.conf

[root@li test]# find / -mindepth 3 -maxdepth 3 -name grub.conf

/boot/grub/grub.conf





2,按类型查找

find /etc  -type l |grep grub.conf

find /etc  -type l -name grub.conf--与-name参数一起写


find /  -type b

find /  -type s

find /  -type c

find /  -type p






find /test -type d |xargs chmod 777

find /test -type d -exec chmod 755 {} \;


# find . -maxdepth 1 -type d |xargs chmod 755




题目:

把/etc/下所有以.conf结尾(包括子目录里的)都拷到/test5目录下,并到.conf结尾重命名成.html结尾



# find /etc/ -name *.conf -exec cp {} /test5 \;

# cd /test5

# rename .conf .html *.conf






3,按用户名,组名,uid,gid查找

find / -user a

find / -group a

find / -uid 533

find / -gid 533

find / -nouser  --查出系统的无头文件,就是指没有属主的文件  

find / -nogroup--查出系统的没有属组的文件

没有属主和属组的文件,系统管理一般是要去注意的








4,按权限查找


find / -perm  777   --查出所有权限为777的文件,一般也是管理员要注意的

find . -perm +111  ---相当于或的功能

find . -perm -777  ---相当于与的功能




[root@li test]# ll

total 0

-rwxrwxrwx 1 root root 0 Mar 16 13:38 1

-rwxr-xr-- 1 root root 0 Mar 16 13:38 2

-r-xr-x-w- 1 root root 0 Mar 16 13:38 3

-r-x------ 1 root root 0 Mar 16 13:38 4

-r--r----x 1 root root 0 Mar 16 13:38 5

--w-r--r-x 1 root root 0 Mar 16 13:38 6

---x-w--wx 1 root root 0 Mar 16 13:38 7

---------- 1 root root 0 Mar 16 13:38 8


[root@li test]# find . -perm +001--文件的权限与+号后的权限只要有一位重合,就找出来

.

./6

./5

./1

./7



--find . -perm /001   --和+号一样,用来取代+号


[root@li test]# find . -perm -400--文件的权限要包含-号后的权限(也就是都重合)就找出来

.

./3

./5

./1

./2

./4



练习: 查找/etc/下所有只要user1用户可读可写的普通文件



# find /etc -perm -006 -type f




查找一个目录下一个用户对其有什么权限的所有文件(以后尝试用脚本写成命令的形式)






5,按大小查找


find / -size +500M--单位有c,b,k,m,g等

find / -size +1G

find /etc -size +50k

find /etc -size +50b--b是块,一个块是512个字节

find /  -size -1M


例:我在这里把/etc/at.deny里随便写几个字符,大小现在为5个字节


[root@li test]# find /etc/ -size -1b |grep at.deny

[root@li test]# find /etc/ -size -2b |grep at.deny

/etc/at.deny

--从上面可以看到-1b找不出来,-2b找出来,说明无论几个字节,小于512也会占用一个块,所以-1b就相当于是找空文件


[root@li test]# find /etc/ -size +4c -size -6c  |grep at.deny

/etc/at.deny

--精确使用-c来查找



--查找大于80M小于100M的普通文件

find /share -size +80M -size -100M  -type f






6,按时间查找



[root@li a]# stat 1

 File: `1'

 Size: 0               Blocks: 0          IO Block: 4096   regular empty file

Device: 808h/2056d      Inode: 12177882    Links: 1

Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2010-04-24 14:44:00.000000000 +0800--atime阅读过,用cat,tail,head命令等或者vi访问过,但没有修改;执行过也会改变

Modify: 2010-04-24 14:44:00.000000000 +0800--mtime 修改过内容,用vi修改过或者echo一个值重定向

Change: 2010-04-24 14:44:14.000000000 +0800--ctime 改变过内容,属主,属组,权限,创建软链接,硬链接,重命名等



find 按时间查找有  atime,mtime,ctime,amin,mmin,cmin等


-mtime  n--代表n天前的24小时内

+n--代表n天前(不包含n天本身的24小时)

-n--代表n天内


find . -atime 1        --表示从现在起往前推24小时到推48小时之间的24小时内

find . -atime +1       --表示从现在起前推48小时之前的所有时间

find . -atime -1       --表示从现在起往前推24小时到将来的所有时间






1234567

|-- 2 --|

<-------    -2  | | +2--------------->

将来now以前的时间



find / -mtime 0--0代表目前当天的24小时

find / -mtime  +1--修改时间1天之前

find . -mtime -1--修改时间在一天之内到将来





练习:

比如现在为27号凌晨0点

   查找/etc/下25号那天修改过内容的文件


find /etc  -mtime 1



 查找/ 下22号以前修改过权限的可能文件

find /  -ctime   +4



查找  / 下26号到现在(不包括时间搞错时出现的将来情况)被访问过的文件


find /  -atime  0



  查找10分钟内访问过的文件


find / -amin   -10



现在为上午11:30   查找上午10点之后修改过内容的文件


find / -mmin -90




-----------------------------

find后接-exec动作

-exec    


find /etc/ -name "*.conf" -exec  cp {} /test/a \;


find  /etc/ -name grub -exec cat {} \;

---exec后面接动作,  {}代表前面的结果集      \; 代表结束






==================================================================




linux下的打包,压缩,和解压



压缩使文件更小,有利于网络传输,在传输大量小文件时,最好是打包压缩,速度较快




--包括网页浏览等各个方面,也包含了压缩功能;服务器压缩,浏览器解压缩来实现加快网页传输




压缩工具

tar (打包)     compress    gzip     bzip2   zip



.rar   .zip   .iso





compress --老的压缩工具,现在已经很少使用




[root@li ~]# yum list|grep compress

This system is not registered with RHN.

RHN support will be disabled.

ncompress.i386                          4.2.4-47                  Server  


[root@li ~]# yum install ncompress--装这个包使用compress命令


man compress

compress,  uncompress,  zcat  -  compress and

      expand data (version 4.1)




compress grub.conf --直接压缩文件,源文件没了

compress -d grub.conf.Z--解压

zcat  grub.conf.Z  --查看压缩文件的内容

uncompress grub.conf.Z

compress -c grub.conf > grub.conf.Z--这样压缩并保留源文件


# file grub.conf.Z

grub.conf.Z: compress'd data 16 bits   --压缩文件类型,不能使用cat去查看内容,可以使用zcat grub.conf.Z来查看内容



--关于windows和linux的后缀名的问题

windows里后缀名很重要,  如:一个word文档应该为.doc,如果你把后缀名改为.pdf。那么双击会用打开pdf的软件去打开它

linux里后缀名可以随意,最好什么类型的文件就改成什么类型。它对运行不影响,但最好是使用file命令去确认它的类型





--gzip使用广泛,用来替代compress,它能解压.Z    .gz   .zip  等格式的压缩包

gzip grub.conf--压缩

zcat grub.conf.gz --查看压缩包的内容

gzip -d grub.conf.gz--解压

gzip -c grub.conf > grub.conf.gz--压缩并保留源文件

gzip -d grub.conf.Z




--zip压缩



zip grub.conf.zip grub.conf--zip压缩

 adding: grub.conf (deflated 64%)




--使用unzip命令去解压.zip的包

      unzip  -  list,  test  and extract compressed

      files in a ZIP archive



unzip /share/soft/lamp/LAMP_source/PHPWind_GBK_6.3.2.zip -d /test

--小写d参数代表指定解压到哪里





bzip2


--bzip2它用来替代gzip,拥有更好的压缩比率

bzip2 grub.conf--压缩

bzcat grub.conf.bz2 --查看压缩包的内容

bzip2 -d grub.conf.bz2  --解压

bzip2 -c grub.conf > grub.conf.bz2--压缩并保留源文件



[root@li test]# ll

-rw-------   1 root root   810 Apr 24 09:53 grub.conf

-rw-r--r--   1 root root   560 Apr 24 10:04 grub.conf.bz2

-rw-r--r--   1 root root   493 Apr 24 09:59 grub.conf.gz

-rw-r--r--   1 root root   614 Apr 24 09:55 grub.conf.Z

-rw-r--r-- 1 root root     561 Feb 24 14:54 grub.conf.zip



--上面看到压缩比率,gzip最小,但是应该是bzip2有更好的压缩比率,在大文件就可以体现出来





tar   打包


对于目录的压缩,上面几个工具默认都是忽略


gzip -r mplayer/--这是把目录(包括子目录)下的所有文件都单独压缩

gzip -rd mplayer/--递归解压



一般来说,压缩目录,都是先打包,再压缩


-c      打包

-v显示过程

-f      接文件

-j调用bzip2进行压缩或者解压

-z调用gzip进行压缩或者解压

-C解压时指定解压的路径

-t查看包内容

-x解压



tar cvf  mplayer.tar mplayer/


[root@li test]# time gzip -c mplayer.tar > mplayer.tar.gz


real    0m13.047s

user    0m12.770s

sys     0m0.217s



[root@li test]# time bzip2 -c mplayer.tar > mplayer.tar.bz2


real    0m56.495s

user    0m56.253s

sys     0m0.225s



[root@li test]# time tar cvfz mplayer.tar.gz mplayer/

real    0m14.533s

user    0m13.318s

sys     0m0.864s



[root@li test]# time tar cvfj mplayer.tar.bz2 mplayer/

real    0m58.509s

user    0m57.090s

sys     0m0.697s



--上面的实验可以看到bzip2压缩比gzip压缩需要更多的压缩时间,但压缩后,bzip2压缩的文件比较小(被压缩的文件越大越明显)




[root@li test]# tar -tf mplayer.tar.gz  |grep ass_fontconfig.h

--使用t参数,查看压缩包内压缩了哪些文件



W能解压       无论.tar.gz还是.tar.bz2还是.tar

都直接使用tar xvf   或  tar xf 来解压


[root@li test]# tar xf /share/soft/keepalived-1.1.20.tar.gz -C /usr/src/


--大写C参数指定解压路径




rar --.rar类型在linux默认不支持,需要安装第三方软件



/share/soft/rar/rarlinux-3.8.0.tar.gz


[root@li soft]# tar xvf /share/soft/rar/rarlinux-3.8.0.tar.gz -C /usr/src/



[root@li soft]# cd /usr/src/rar/



[root@li rar]# make--直接make,没有configure文件,但已经有makefile了,所以直接make

mkdir -p /usr/local/bin

mkdir -p /usr/local/lib

cp rar unrar /usr/local/bin

cp rarfiles.lst /etc

cp default.sfx /usr/local/lib



rar a etc.tar.rar etc.tar--压缩

rar e etc.tar.rar --解压




tar的其它写法:


tar tvf etc.tar |grep fstab--查看压缩包的内容 用-t参数

tar xvf etc.tar etc/fstab--指定解压单一文件

tar cvf etc.3.tar  etc/ --exclude=etc/fstab    排除某些文件不打包

tar cvf etc.5.tar  etc/ --exclude=etc/fstab --exclude=etc/inittab排除多个文件

tar cvf etc.6.tar  etc/ --exclude=etc/*.conf支持通配符,排除有相似度的一批文件




tar cvf - etc/  |tar xvf -   -C /root/Desktop/--使用管道来执行一些特殊操作



shell>  gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -


shell> ln -s full-path-to-mysql-VERSION-OS mysql







练习:先建立一个/backup目录

实现每天开机用root登录系统,就自动在把前一天/var/log下的日志(除了/var/log/btmp,/var/log/wtmp和/var/log/lastlog)打包,并使用bzip2压缩到/backup目录下,并记录时间

要求格式都为(年-月-日.xxx);如2012-03-17.xxx




[root@li test]# tar cvfj /backup/`date -d yesterday +%Y-%m-%d`.log.tar.bz2  /var/log  --exclude=/var/log/btmp --exclude=/var/log/wtmp --exclude=/var/log/lastlog


[root@li test]# tar cvfj /backup/`date -d yesterday +%Y-%m-%d`.log.tar.bz2  /var/log  --exclude=/var/log/btmp,/var/log/wtmp,/var/log/lastlog



--再把上面的命令放到环境变量文件里





===============================






nfs network  file system




共享式集群文件系统



是由sun公司提出的 ,用来做网络之间的文件共享,是一种共享式集群文件系统




服务端:   nfs      portmap(rhel6下改为叫rpcbind)



客户端:  portmap(rhel6下改为叫rpcbind)





# showmount -e 172.16.2.35--OK


# /etc/init.d/rpcbind stop



# showmount -e 172.16.2.35

clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)


# /etc/init.d/rpcbind start


# showmount -e 172.16.2.35--rpcbind再启起来,也不会

clnt_create: RPC: Program not registered



# /etc/init.d/nfs restart--重启NFS,把新的rpc注册



# showmount -e 172.16.2.35--再次OK




portmap  被用于NFS和NIS协议

RPC    remote  produrce  call远程程序调用,端口注册




portmap或rpcbind     111  端口       功能端口注册

nfs    2049 端口

其他的rpc.xxx  启动的端口是要向111端口注册的



[root@li ~]# netstat -ntlup |grep 2049

tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -                  

udp        0      0 0.0.0.0:2049                0.0.0.0:*                               -    


[root@li ~]# netstat -ntlup |grep :111

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3687/portmap        

udp        0      0 0.0.0.0:111                 0.0.0.0:*                               3687/portmap  



还有下面几个随机端口

[root@dns ~]# netstat -ntlup |grep rpc

tcp        0      0 0.0.0.0:805                 0.0.0.0:*                   LISTEN      3170/rpc.mountd    

tcp        0      0 0.0.0.0:791                 0.0.0.0:*                   LISTEN      3155/rpc.rquotad    

udp        0      0 0.0.0.0:788                 0.0.0.0:*                               3155/rpc.rquotad    

udp        0      0 0.0.0.0:802                 0.0.0.0:*                               3170/rpc.mountd    



--NFS的端口多并且rpc的端口不固定,以后学iptables,用防火墙去控制会比较麻烦,可以使用/etc/sysconfig/nfs文件去固定nfs的端口





做nfs服务器  


[root@li ~]# /etc/init.d/portmap(rpcbind) start

[root@li ~]# /etc/init.d/nfs start--修改完配置文件后把这两个服务启起来





配置文件:

vim /etc/exports


参数:

ro    只读

rw    可读可写

root_squash 代表客户端以nfsnobody用户挂载,默认不写就有

no_root_squash 代表客户端以root用户挂载

sync同步

async异步



man exports--查看参数帮助



--下面是帮助文档里的例子

      # sample /etc/exports file

      /               master(rw) trusty(rw,no_root_squash)

      /projects       proj*.local.domain(rw)

      /usr            *.local.domain(ro) @trusted(rw)

      /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)home/joe       pc001(rw,all_squash,anonuid=150,ano

      /pub            (ro,insecure,all_squash)




主配置文件 

vim /etc/exports


/share/iso  *(ro)--把/share/iso  共享给* (代表所有IP)   ro (代表只读)


/share/iso  *(rw)--rw代表可读可写


/share/iso  10.1.1.0/24(ro)  --只共享给10.1.1的网段的计算机访问

/share/iso  10.1.1.0/255.255.255.0(ro)


/share/iso  10.1.1.218/255.255.255.255(ro)    --定义只10.1.1.218这台计算机可以访问

/share/iso  10.1.1.218/32(ro)


/share/iso  10.1.1.218/32(ro) 10.1.1.254/32(ro)   --定义只有218和254这两台可以访问





客户端访问一个服务,一定会以一种用户身份去访问的,这个身份是由服务器决定的,与你客户端以什么用户操作无关




关于nfs权限:

客户端挂载目录的权限为服务端共享目录的权限


nfs服务共享目录的默认权限规定是以nfsnobody这个用户来挂载

在/etc/passwd下有这么一句

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin




注意:如果做了服务的话,权限要由服务的权限+系统的权限合起来生效


也就是说,客户端是否可以访问,需要防火墙允许,服务允许,系统权限允许,才可以访问





/share/iso  *(ro)   默认等于 /share/iso *(ro,root_squash)

--root_squash代表客户端以nfsnobody用户挂载



/test   *(rw,no_root_squash)

--表示客户端会以root的身份来挂载服务端的/test目录



/share/iso 10.1.1.218/32(ro,no_root_squash) 10.1.1.254/32(ro,root_squash)

--no_root_squash代表客户端以root用户挂载,就算是218对/share/iso有w权限,也不能写,因为ro参数确定只读


/share/iso 10.1.1.218/32(rw,anonuid=533,anongid=534)--指定客户端以uid=533,gid=534挂载



--修改了/etc/exports以后,要重启服务使之生效




不用重启服务,使修改过的配置文件生效


exportfs    -arv      --重新读取/etc/exports文件里的共享,并导入

   -auv      --卸载/etc/exports文件里的共享,别人showmount -e看不到,也挂载不了




[root@li iso]# cat /var/lib/nfs/etab

/share/install  *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)

/share/soft     *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)

/share/iso      *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)



cat /var/lib/nfs/xtab




--客户端的操作

showmount -e 10.1.1.35


mount 10.1.1.35:/share/iso /mnt



扩展两个命令去了解一下:

showmount -a

nfsstat




==================================


















你可能感兴趣的:(grub)