您的位置:首页 > 运维架构 > Linux

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

2015-07-21 20:47 381 查看
   以第一篇博文大概总结一下通过预习第三期课程学到的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 命令查看时的第二列数值)。

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,又有什么命令会影响他们呢
b7c4

   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~~~
   
本文出自 “细桶假狗屎” 博客,请务必保留此出处http://xitongjiagoushi.blog.51cto.com/9975742/1619923
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: