权当开篇――Linux学习之路(一)

   以第一篇博文大概总结一下通过预习第三期课程学到的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~~~

   

你可能感兴趣的:(linux,服务器,基本知识)