以第一篇博文大概总结一下通过预习第三期课程学到的Linux基本知识,但是都放在一块的话估计字数会太多,感觉差不多了就重开一篇。总结之前先来扯扯淡。作为一个资深的细桶假狗屎,不懂点基本的Linux操作似乎有点说不过去,开发完成以后不能独立操作服务器更新版本什么的简直naive。最重要的是,我还听说了一个有点玄乎的结论,那就是有博客并且坚持写博客的假狗屎||攻城狮||程序猿要比没有博客或者不能坚持写博客的工资水平要高出不少。好了,淡也扯了,言归正传,走起~
1.系统分区一般规则:
/boot 200M
swap 实际内存的2倍,但不超过8G
/ 剩余全部空间
当然,这只是最基本的一种分区策略,实际应用中可以分出/data,专门存放各种数据,或者给用户家目录单独分区存放用户数据,具体情况根据实际需求进行调整。
可以通过以下命令来查看分区情况:
[root@localhost~ ]# fdisk -l
2.链接文件--硬链接和软连接:
[root@localhost ~]# ln 被链接文件 链接文件 --> 硬链接
[root@localhost ~]# ln -s 被链接文件 链接文件 --> 软链接
注:如果链接文件不存在,自动生成;如果链接文件存在,提示链接失败,解决办法是使用 -f 参数,强制链接,覆盖可能存在的链接文件。
★两者区别:
(1)硬链接后链接文件和被链接文件的 inode 相同,软连接则不同。
(2)硬链接后,链接文件为普通文件(即通过 stat, file, ll 等命令查看链接文件时为regular file),而软链接后,链接文件为symbolic link类型,ll时也会指向其链接的文件。
(3)硬链接后,删除被链接文件,链接文件照常使用。软连接后,删除被链接文件,链接文件不能使用。
(4)硬链接只能用于链接普通文件,链接目录文件时报错:
ln: `link/': hard link not allowed for directory
软连接没有这种限制,可以用来链接目录。这里还要特别说明一点,将目录做软连接后,删除时需要注意,比如:
[root@localhost learn ~]# ln -s ./link/ test //这里不能是test/这种目录形式
[root@localhost learn ~]# rm -rf test //这里不能是test/这种目录形式
如果将以上的test写为test/这种形式会报错。原因大概是因为链接文件test的文件类型是symbolic link,而不是directory。
(5)硬链接不能跨分区链接,比如想要将/boot分区下的文件链接到/根分区下,会报错:
ln: creating hard link `/test' => `/boot/test': Invalid cross-device link
软连接无此限制,可以跨分区链接。
(6)硬链接没有自己的文件类型,硬链接后文件类型仍为regular file。而软链接后,链接文件的文件类型为symbolic link。
注:可以简单的将硬链接理解为一种cp,只是该cp会将inode的值一并cp过来。同时使用这种cp会增加链接文件和被链接文件的节点数(即通过 ll 命令查看时的第二列数值)。
特别注意一点,如果对目录使用软链接,如:
[root@localhost ~]# ln -s /usr/local/apache-tomcat-8.0.1 /usr/local/tomcat
当我们想删除软链接时,切记要这样:
[root@localhost ~]# rm -f /usr/local/tomcat //rm这里最好,或者说一定不要使用-r参数
这样才能保证我们删除的是软链接文件,而非被链接目录下的文件。如果使用这种方式:
[root@localhost ~]# rm -rf /usr/local/tomcat/
你会发现软链接文件 /usr/local/tomcat 并没有被删除,相反,/usr/local/apache-tomcat-8.0.1 目录被清空,哔了狗了吧?所以这里一定要特别注意一下。
3.Linux系统分层及RAID:
用户
↑
文件系统
↑
RAID
↑
物理硬盘1 物理硬盘2 ……
其中,RAID分为以下几种,作用不同;
RAID 0 -- 增加写入速度
RAID 1 -- 镜像,为了安全
RAID 3 -- 最少需要三块物理硬盘,是RAID 5的过度版本
RAID 5 -- 最少需要三块物理硬盘
在做完RAID后,几块物理硬盘看起来就是一块硬盘一样
RAID 0 假如有两块100G的物理硬盘做成,则该RAID 0可使用空间为200G
RAID 1 假如有两块100G的物理硬盘做成,则该RAID 1可使用空间为100G(镜像)
RAID 5 假如有三块100G的物理硬盘做成,则该RAID 5可使用空间为200G(一块物理硬盘拿出去做奇偶校验)
注:这里说的RAID是物理RAID,而非系统在分区时的逻辑RAID。逻辑RAID不推荐使用,物理RAID一般由硬件提供商做好,这一块知识了解一下就行。
4.Linux添加硬盘及使用硬盘:
为Linux虚拟机添加新硬盘时:
(1)硬盘类型选择IDE,则Linux中路径为/dev/hda(hdb, hdc...顺序排列)
(2)硬盘类型选择SCSI,则Linux中路径为/dev/sda(sdb, sdc...顺序排列)
注:经过实验发现,CentOS 6.6中不管是IDE硬盘还是SSCI硬盘,在Linux中都是/dev/sd*这种形式,而非视频中所说的IDE为/dev/hd*,可能是因为在CentOS6.6或者更早的版本中已经取消了SSCI和IDE在命名上的区别。在为虚拟机添加新的硬盘后,SSCI排在IDE前面,如,开始时有两块IDE硬盘,分别为/dev/sda和/dev/sdb,之后添加一块SSCI硬盘,此时三块硬盘为/dev/sda(SSCI),/dev/sdb(IDE), /dev/sdc(IDE)。
2015/03/24 修改 ―― 上述关于新添加的硬盘的命名问题已经找到原因,较老的计算机的硬盘为IDE接口,添加了这种硬盘会显示 /dev/hd* ,而现在所使用的硬盘绝大多数都为SATA接口,添加这种硬盘会显示 /dev/sd* 。
使用新添加的硬盘(又称裸设备)需要三步:分区 --> 格式化 --> 挂载
(1)分区:
[root@localhost ~]# fdisk /dev/sdb
根据提示信息进行分区, n --> 新建
p --> 主分区 83 Linux
e --> 扩展分区 5 Extended
p + e 个数 <= 4, 编号从1-4
扩展分区可以再分区,分为l --> 逻辑分区 83 Linux,逻辑分区编号从5-more。分区完成后,在Command中,p查看该硬盘分区情况,q不保存退出,w保存退出。
(2)格式化:
[root@localhost ~]# mkfs.ext4 /dev/sdb1 //将/dev/sdb硬盘下的/sdb1分区格式化为ext4文件系统,文件系统有ext1,ext2,ext3,ext4版本,版本越高越稳定,现在一般使用的文件系统都为ext4。
(3)挂载:
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb1 /data
即可完成挂载,通过
[root@localhost ~]# df -hT
命令可以看到分区的挂载信息和使用情况,此时/dev/sdb1分区已挂载在/data目录下。注意,这样挂载只是暂时的,系统重启后会失效。解决方法有两种。第一种:
[root@localhost ~]# vim /etc/fstab
修改该文件,添加新的一行:
/dev/sdb1 /data ext4 defaults 0 0
保存退出即可。第二种:
[root@localhost ~]# vim /etc/rc.d/rc.local //或者 vim /etc/rc.local,这两个文件为软连接,/etc/rc.local为链接文件,/etc/rc.d/rc.local为被链接文件。添加新的一行:
mount /dev/sdb1 /data
保存退出即可。补充一点,/etc/rc.local文件是系统启动时最后执行的文件,想让系统启动后帮你做的事都可以写到该文件中。另外,
[root@localhost ~]# fdisk -l
[root@localhost ~]# df -Th
两条命令都可以查看分区,其中,fdisk -l查看的主要是分区表信息,而df -Th侧重的是已经格式化并挂载后的文件系统,包括容量大小、使用情况、挂载点及文件系统类型等。(df -Th查看不到swap交换分区,查看交换分区需要使用fdisk -l,如下:
Device Boot Start End Blocks ID System
/dev/sda2 26 287 2097152 82 Linux swap / Solaris
)
说了挂载就不得不说一下如何取消挂载,下面三种形式均可:
[root@localhost ~]# umonut /dev/sdb1
[root@localhost ~]# umonut /data
[root@localhost ~]# umonut /dev/sdb1 /data
注:umount取消挂载时可能会显示device busy错误而导致umount失败,这是因为有进程正在访问该设备,可以使用参数- l (lazy) 即umount -l 来解决。该参数的作用是在该设备空闲后再取消挂载。想要强行取消挂载需要使用ps aux或ps -ef来查找使用设备的进程PID,kill -9结束进程后方可取消挂载。
5.强大的find命令:
在介绍 find 命令之前先来看一看 stat 命令:
[root@localhost ~]# stat /tmp/learn/test.log
该命令用来查看文件的详细信息(不特别说明的话,Linux中的文件都是指广义上的文件,既包括普通文件,又包括目录文件),包括文件类型、inode值、权限、所属用户、Uid、所属用户组、Gid、文件大小、最后访问时间 atime,最后修改时间 mtime,最后改变时间 ctime等 ,这三个时间经常配合find命令对文件进行操作,那么什么是atime,mtime和ctime,又有什么命令会影响他们呢?
atime --> 访问时间 vi vim cat head tail more less
mtime --> 修改时间 echo vi、vim(保存退出操作,即便没有修改任何内容,如果只是强制退出 q! ,则不影响 mtime)
ctime --> 改变时间 echo vi、vim(同上) chmod chown chgrp rename (ctime 为最后一次更改 inode 信息的时间,比如更改文件名、文件权限、写入新内容(改变了文件大小)等)
这里注意,使用echo进行输出重定向或者追加内容时,并没有访问文件,所以不会改变atime。你是否想到,ls -l 命令查看文件详情时也有一个时间,那里所列出的时间是 mtime。
说完了 stat 命令和三个时间,该 find 命令登场了,不用过多介绍,来看几个例子先:
(1)请查找 / 目录下文件名为test.log的文件:
[root@localhost ~]# find / -name test.log
(2)请查找 /tmp 目录下inode号为261132的文件,并将其删除:
[root@localhost ~]# find /tmp -inum 261132 -exec rm -rf {} \; //或者
[root@localhost ~]# find /tmp -inum 261132 -delete //使用 find 自带参数 -delete
(3)请查找 /root 目录下三天前修改的所有文件,且文件名为test的文件:
[root@localhost ~]# find /root -mtime +3 -name test //或者,更宽泛一点
[root@localhost ~]# find /root -mtime +3 | grep test
(4)请查找 /var 目录下10分钟内被访问过的文件:
[root@localhost ~]# find /var -amin -10
(5)请查找 /dev 目录下文件类型为块设备的文件:
[root@localhost ~]# find /dev -type b //f,d,b,s,c,p,l,D <-- 文件类型
(6)请查找 / 目录下文件名前四位为 test ,且文件类型不是普通文件的文件:
[root@localhost ~]# find / -name "test*" -o ! -type f
注意第六个例子中的情况,当有多个查询条件时, -a 为且(默认, and), -o 为或(or), ! 为非 (not)。
上面几个例子列出来find命令比较常用的一些查询条件,比如文件名称,inode值,atime,amin,ctime,cmin,mtime,mmin,文件类型,这些条件能够组合使用,对查询结果进行操作使用-exec,格式为-exec 操作命令 {} \; 。
补充:既然说到 stat 命令,就顺便提一下 file 命令。file 命令专门用来查看文件的类型,看几个例子:
[root@localhost ~]# file /dev/sda1
/dev/sda1: block special
[root@localhost ~]# file /tmp/learn/wrong.log
/tmp/learn/wrong.log: ASCII English text
[root@localhost learn]# file yasuo.tar.gz
yasuo.tar.gz: gzip compressed data, from Unix, last modified: Thu Mar 12 22:52:35 2015
[root@localhost learn]# file /tmp/learn/
/tmp/learn/: directory
虽然stat也能显示文件类型,但是file在这方面更详细也更精确。比如使用stat查看上例中的yasuo.tar.gz文件时,类型显示为regular file,归类相对宽泛一些(经试验,stat 命令只有在检查压缩文件、打包文件和打包压缩文件时有些宽泛,对其他类型文件使用时结果和file 命令结果相同)。
第一篇写了不少了,不过也只总结了一小部分,下一遍咱们继续总结,see you~~~