linux常识01
第1章 前言
跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。
阿铭出此书的目的就是为了帮助新人快速进入这个行业,市面上很多类似书籍都是重理论少实战,而且很复杂,因为这样才能体现写书人的本领,一个命令也能给你讲几页纸,而阿铭这个教程会让你学的很轻松,因为阿铭会帮你过滤掉很多用不上的知识,你能学到的都是你以后工作当中要用到的,第一版教材《跟阿铭学Linux》截止目前已下载10000多次,阅读量阿铭实在没法统计,阿铭真心感谢他们的支持,是他们让我再有动力去更新这本书。也许在不久的将来阿铭还会出视频教程,欢迎大家前来捧场!早在一年前就有很多朋友建议我出第2版,但由于工作太忙迟迟未能如愿以偿。两年后的今天,阿铭下定决心重新改进我的教程,让更多的Linux爱好者收益!阿铭只想帮助那些对Linux感兴趣,并且想快速入门的朋友。
阿铭在第一版中,曾提过写这本书的目的是为了写给我第一个学生,让其快速成长。两年过去了,我的这个学生早已经成为公司里不可或缺的核心技术人员,当然薪水也已经上万啦!不瞒大家,我的第一位学生是个女生,虽然毕业于计算机专业,但是她在看我的书之前,对于Linux一点都不懂!是这本书带她入门,改变了她的职业生涯。阿铭写这些,只是为了给大家打打气,Linux入门不难,阿铭有信心带你入门,甚至让你成为一名高级的Linux系统工程师!你是不是计算机专业不重要,你有没有高学历也不重要,重要的是你能够坚持下去,认真的跟阿铭做完书中提到的每一个小实验。
最后,衷心地祝愿所有看这本书的读者朋友,学有所成!
教程答疑: 请移步这里.
欢迎你加入 阿铭学院 和阿铭一起学习Linux,让阿铭成为你Linux生涯中永远的朋友吧!
第2章 关于Linux的历史
学习Linux请加QQ群: 群1(163262181) 群2(148412746) 群3(246401509) 群4(173884211)
跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。
很多关于Linux的书籍在前面章节中写了一大堆东西来介绍Linux,可惜读者看了好久也没有正式开始进入Linux的世界,这样反而导致了他们对Linux失去了一些兴趣,而把厚厚的一本书丢掉。
Linux的历史确实有必要让读者了解的,但是不了解也并不会影响你将来的Linux技术水平。哈哈,阿铭其实就不怎么了解Linux的历史,所以对于Linux的历史在本教程中不会涉及到。如果你感兴趣的话,那你去网上搜一下吧,一大堆呢足够让你看一天的。虽然我不太想啰嗦太多,但是关于Linux最基本的认识,我还是想简单介绍一下的。也算是我对Linux的创始人Linus Torvalds 先生的尊重。
在介绍Linux的历史前,我想先针对大家如何对Linux的发音说一下。我发现我身边的朋友对Linux的发音大致有这么几种: “里那克斯”与 “里泥克斯”“里扭克斯”等。其实官方的标准发音为 [‘li:nэks],因为这个发音是创始人Linus的发音。如果你不认识这个音标,那么就读成“里那克斯”。而阿铭习惯发音成“里泥克斯”,当然你发音成什么,并没有人会说你,完全是一个人的习惯而已。
也许有的读者已经了解到,Linux和unix是非常像的。没错,Linux就是根据unix演变过来的。当年linus就是因为接触到了unix而后才自己想开发一个简易的系统内核的,他开发的简易系统内核其实就是Linux。当时linus把开发的这个系统内核丢到网上提供大家下载,由于它的精致小巧,越来越多的爱好者去研究它。人们对这个内核添枝加叶,而后成为了一个系统。也许你听说过吧,Linux是免费的。其实这里的免费只是说Linux的内核免费。在Linux内核的基础上而产生了众多Linux的版本。
Linux的发行版说简单点就是将Linux内核与应用软件做一个打包。较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE、TurboLinux、BluePoint、RedFlag、Xterm、SlackWare等
而阿铭常用的就是Redhat 和 CentOS,这里有必要说一下,其实CentOS是基于Redhat的,网上有人说,Centos是Redhat企业版的克隆。阿铭所在公司的服务器全部都是安装CentOS系统,并且相当稳定。CentOS较之于Redhat 可以免费使用yum 下载安装所需要的软件包,这个是相当方便的。而Redhat要想使用yum必须要购买服务了。
阿铭只是简单的介绍了一下Linux,如果你想详细了解Linux的历史,那么请自己去查询一下相关的资料吧。
教程答疑: 请移步这里.
如果你已经成为阿铭论坛的vip会员了,请访问(http://www.aminglinux.com/bbs/thread-5385-1-1.html)进一步学习吧。阿铭欢迎你成为成为阿铭学院的一员,和阿铭共同进步!详情请点击(http://www.aminglinux.com)
第3章 对Linux系统管理员的建议
学习Linux请加QQ群: 群1(163262181) 群2(148412746) 群3(246401509) 群4(173884211)
跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。
Linux系统和windows系统有太多不一样的地方,我相信99%的读者朋友最早接触电脑肯定不是Linux系统,要么是windows要么是苹果操作系统。所以,当你刚刚使用Linux操作系统时,肯定有诸多不习惯的地方,但不要因为这些不习惯而放弃学习Linux. 阿铭最早接触Linux的时候也是感觉诸多不习惯,但是我对Linux的痴迷心使我不仅坚持一直使用Linux,还使我找到了一份和Linux息息相关的工作。可以说,现在我的世界已经离不开Linux.
要安装什么版本的Linux操作系统
上一章节中,阿铭已经提到过,目前比较流行的Linux有很多种,Redhat,CentOS,Ubuntu,Debain 等等。不管你选择哪一种使用,其实都无所谓,阿铭介绍的知识点大多都是通用的。但是,阿铭建议你安装CentOS,因为这个版本的Linux在中国来说用在服务器上的最多,而且它和Redhat是一样的。另外,最主要的原因是因为阿铭在后续章节中所做的所有实验都是在CentOS上来实现的。
图形界面还是命令窗口
刚刚学习Linux的朋友,使用图形界面是在所难免的,也许是处于对它的好奇心也许是因为不习惯。阿铭早期学习Linux时,安装的Linux操作系统也是从使用图形界面开始的。但是后来意识到Linux的图形界面运行起来远远没有windows或者IOS(苹果操作系统)流畅,所以就不再使用图形界面了。随着阿铭参加工作,使用Linux越来越多,阿铭发现,公司的服务器上根本就没有安装图形界面支持,这是因为,图形界面在Linux操作系统中是作为一个软件来跑的,而且它比较耗费内存。更何况,如果远程连接图形的话还比较耗费带宽,既然命令行能完成的事情为什么还要搞个吃力不讨好的图形支持。最后,阿铭建议读者朋友,从一开始学习Linux起就应该使用命令窗口。
养成安全严谨的习惯
作为Linux系统管理员,你面对的是服务器而不是自己的计算机。我们在日常管理工作中,做任何一件事情都有可能引起重大事故,所以你一定要养成严谨的习惯。
- 养成备份的习惯
服务器上跑的数据的重要性是不言而喻的,所以,一定要注意数据的安全。我们在做任何操作之前,一定要想清楚,这样做是否是可逆的(操作之后,是否还可以恢复到操作之前的样子)如果不可以,一定要既得备份数据,否则,一旦出错你会后悔死,阿铭在日常工作中就遇到过这样的事故!
- 尽量少使用root
在后面章节中,阿铭还会介绍root这个超级账户,在这里先一笔带过。root相当于windows里面的adminstrator, 它任何权限都有,所以为了避免引起不必要的事故,阿铭劝你还是使用普通用户吧。能用普通用户完成的任务,尽量不要使用root。
- 敲命令不是越快越好
如果你使用了一段时间的Linux, 我相信你会越来越熟练各种命令,敲命令的速度肯定也会越来越快。但是,并不是越快越好,每个人都会有疏忽的时候,一旦敲错了命令那产生的后果是不可预知的。所以,阿铭劝你还是慢点敲键盘吧,如果快也没有关系,但是敲回车的时候一定要检查一下当前的命令是否是你想要的。
- 不要把服务器密码信息记录在文档里
有的朋友会把登陆服务器的密码记录在文档里,而且还存到U盘或者移动硬盘里,这是一件多么不安全的事情,如果U盘或者移动硬盘丢了,被别有用心的人捡到,那后果不堪设想。阿铭给你的建议是,设置一个只有你自己记得住的密码,密码要包含大小写字母和数字,长度要大于8位。不要把密码存到文档里,要记在脑袋里。当然服务器少还好,要是多怎么办?后续章节阿铭会推荐给你一个存密码的工具,而不是记录在文档里。
教程答疑: 请移步这里.
欢迎你加入 阿铭学院 和阿铭一起学习Linux,让阿铭成为你Linux生涯中永远的朋友吧!
第4章 安装Linux操作系统
学习Linux请加QQ群: 群1(163262181) 群2(148412746) 群3(246401509) 群4(173884211)
跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。
目前我们安装Linux操作系统是为了更好的了解和学习Linux操作系统。如果你有条件,最好是把Linux安装在一台真正的计算机上,如果你的电脑不允许你安装成Linux,那也没有关系。阿铭教你使用虚拟机来安装Linux操作系统。
安装虚拟机
当前流行的虚拟机有好多种,阿铭用的是vmware虚拟机。目前最新版本已经到版本v9.0了,但阿铭一直在使用v6.0.1, 如果你不想去下载最新版,那直接使用阿铭提供的链接下载v6.0.1吧,下载地址(含注册机):点这里 下载后安装一下vmware6.0.1, 安装完后需要输入注册码才可以使用,阿铭提供的注册机很好用,直接生成一个即可。近期发现,很多朋友反馈这个6版本的虚拟机不能顺利安装centos,所以阿铭再提供一个10.0的版本,下载地址是http://pan.baidu.com/s/1eQxOVPC。
如果你觉得vmware不好用,你也可以选择VirtualBox,它是完全免费的,官方下载地址:https://www.virtualbox.org/wiki/Downloads
下载Linux操作系统镜像文件
安装虚拟机的好处就是,可以直接把镜像文件当成光盘使用。阿铭在前面提到,在后续章节中做的所有实验都是依据CentOS来做的,所以你也需要下载一个32位的 [1] CentOS的镜像。下载地址:http://iso.aminglinux.com/,下载那个大小为4G的dvd1即可。
安装CentOS (图形化安装)
前面的准备工作可能需要很久,因为CentOS的镜像文件太大了。下载好后,就可以跟着阿铭一起安装CentOS了。在这一版教程里,阿铭不再插入图片了,因为在后面阿铭会录制视频来帮助大家更好的学习,这也许会对你的学习造成一点点障碍,但阿铭尽可能的讲清楚给大家,如果你实在不明白就请加一下QQ群(148412746),到群里咨询阿铭吧。阿铭先介绍如何图形化安装CentOS,然后介绍以文本模式的方式安装CentOS.
- 创建安装Linux的虚拟机
打开vmware workstation软件,在右侧的Home标签中点 “New Virtual Machine” –> 点 “下一步” –> 选择Custom 继续点 “下一步” –> 继续点 “下一步” –> 选择 “Linux” –> 点 “下一步” –> Location 这里选择一个空间大的盘符,比如阿铭选择 “E:CentOS” 点 “下一步” –>Processors 数量选择One, 继续点 “下一步” –> 内存建议修改为1024M或者更大,前提是你的真机内存足够大(不能太小,否则图形安装界面出不来)然后点 “下一步” –> Network Connection 保持默认,点 “下一步” –>继续点 “下一步” –> 继续 “下一步” –> Vitual disk type 选择 “IDE”, 点 “下一步” –> Disk size 改为16.0 (如果你的计算机磁盘空间太小,那就改小一点,但不要低于5G)点 “下一步”–> 最后点 “完成”
- 配置虚拟光驱
此时还不能安装CentOS,还需要配置一下刚刚建立的虚拟机。点 “Edit virtual machine settings” –> 选择Floppy那一项,点下面的 “Remove”, 因为用不到软盘了,所以直接删除掉; CD-ROM 这一项是关键,需要在 “Use ISO image:” 前面点一下,然后点Browse, 选择你刚刚下载的CentOS镜像文件,最后点ok.
- 开始安装CentOS
点 “Start this vitrual machine” –> 鼠标点一下虚拟机的界面,进入虚拟机,否则不能进行后续操作(要想退出,需要同时按Alt + Ctrl),然后选择 “Install system with basic video driver” 回车 –> Disk Found 这是问你是否需要检测镜像文件,因为是从官方站点下载的镜像,肯定没有问题,所以我们选择 “skip” –> 点 “Next” –> 这一步是让我们选择在接下来的安装过程中需要使用的语言,我们选择 “chinese(simplified)(中文(简体))”,点 “Next” (到这里如果你发现,和阿铭的不一样,那肯定是你的虚拟机不支持图形显示,那么请直接跳到下一小节参考如何文本模式安装吧) –> 键盘这一项我们保持默认,即美国英式键盘, 点 “下一步” –> 使用的设备保持默认,点 “下一步” –> 如果弹出一个窗口提示 “处理驱动器时出错”,则需要我们选择 “重新初始化(R)”, 然后点 “下一步” –> 看一下时区是不是 “亚洲/上海”,如果是则点 “下一步”,否则就选择 “亚洲/上海”,点 “下一步” –> 输入根密码(root账户的密码), 你一定要记住哦,否则你进不了系统,反正是做实验,阿铭建议你输入123456, 点 “下一步” –> 接下来会问我们 “进行哪种类型的安装”,我们选择最后一项 “创建自定义布局”,即我们自定义分区,点 “下一步”
- 分区
此时就该分区 [2] 了,阿铭的虚拟机总共有一块16G的磁盘,我会这样划分:(1) /boot分区分100M (2) swap分区分2G (3) 剩余划分给 /分区。下面看看阿铭如何操作吧,先点 “创建”, 然后选择 “标准分区”, 再点 “生成”, 挂载点选/boot, 大小改为100, 最后点 “确定”,这样就创建成功了一个/boot分区 –> 依此类推,创建swap分区,创建时先不用选择挂载点,直接选择文件系统类型为swap,然后大小改为2048, 最后点 “确定” –> 最后创建一个/ 分区,挂载点选择 /, 大小不管,其他大小选项选择 “使用全部可用空间”, 最后点 “确定”,这样就按照阿铭先前构想的方案创建好分区了。然后点 “下一步”。 此时弹出警告,格式化会删除掉磁盘上的所有数据,我们选择 “格式化”, 然后又一次弹出警告,点击 “将修改写入磁盘(W)”
- 选择安装包
格式化完磁盘后,出现引导装载程序的选项,保持默认点击 “下一步” –> 目前的安装方案会最小化安装CentOS, 为了让大家更能详细了解安装过程,所以阿铭带大家选择 “现在自定义”,点 “下一步” –> “基本系统”这一项,在右侧选择 “基本”,其他不用勾选 –> web服务、开发、弹性存储、数据库、服务器、系统管理、虚拟化、负载平衡器、高可用这几项一个都不用选 –> 桌面这一项阿铭也不会选择任何一项,但如果你对图形界面好奇,或者想用一用Linux的图形界面,那你就把右侧的几个项全部勾选了吧 –> 应用程序这一项把 “Tex支持”勾选上 –> 语言支持这一项默认就已经把 “中文支持” 勾选上了,所以我们也不用修改它,接着点 “下一步”,接下来就是漫长的等待安装系统了。安装时间的长短取决你勾选的包的多少以及你的电脑的性能,阿铭的虚拟机安装了8分钟就搞定了。等安装完所有的包后会提示我们,需要 “重新引导”,重启后登陆root账户,进入CentOS系统。
安装CentOS (文本模式安装)
首先是安装虚拟机、配置虚拟机,步骤和上一小节的一样,不同的是光驱启动,进入安装界面后,我们不再选择 “Install system with basic video driver” 而是选择第一行 “Install or upgrade an existing system”. 回车后出现 Disk Found提示,问我们是否要检测镜像文件,我们选择 “skip”.
- 等会弹出欢迎页: Welcome to CentOS! 直接回车。
- 选择语言,因为使用的是文本模式,选择中文也没有用,所以直接回车。
- 键盘也保持默认,直接回车。
- 此时出现警告,提示说磁盘设备可能需要重新初始化,选择 “Re-initialize”.
- Time Zone Selection 这一项是时区设置选项,System clock uses UTC 前面的
*要去掉(按空格即可以去掉),因为中国的时区是CST,然后按 “Tab” 键光标移动到下方,按向下箭头找到 “Asia/Shanghai”, 然后按 “Tab” 选择OK 回车。 - Root Password 这一栏是给root用户设置密码。阿铭建议你输入一个简单的容易记住的,不然等会忘记是什么就麻烦了。比如阿铭设置的密码是 ‘123456’, 输入完后按 “Tab” 再次输入一遍,然后按 “Tab” 选中OK回车。
- 此时会提示,说密码太弱了,让我们设置一个复杂的,这也是出于安全考虑友善提示用户的,不过咱们是做实验,无所谓了。所以选择 “Use Anyway” 回车。
- 弹出 “Partition Type” (分区类型) 窗口, 分为三种模式:Use entire drive 意思是说使用全部的磁盘; Replace existing Linux system 意思是替换现有的Linux系统; Use free space 意思是使用剩余空间。 由于我们是全新安装,所以无所谓选择哪一项。 阿铭选择的是第一项 “Use entire drive”. 下面的一行是让我们选择哪个磁盘,如果你的机器上有多块磁盘,这里会显示多行,阿铭的虚拟机只有一个磁盘,所以使用 “Tab” 选择Ok回车。
- 弹出提示说,将要把存储配置写入磁盘里。我们选择 “Write changes to disk” 回车。
- 剩下的就是自动安装了,大概3分钟左右就完成了安装。
也许你会问,那分区、自定义软件包的步骤跑哪里去了?是呀,阿铭一开始也有疑问,当我查了好久资料后,才知道,原来是官方为了某个bug而屏蔽了自定义分区和自定义安装包的功能。所以,想自定义分区的朋友,只能通过图形化安装喽!
第4章扩展学习: http://www.aminglinux.com/bbs/thread-5386-1-1.html
教程答疑: 请移步这里.
欢迎你加入 阿铭学院 和阿铭一起学习Linux,让阿铭成为你Linux生涯中永远的朋友吧!
| [1] | 讲到这里,阿铭有一个小知识点需要向你分享一下,首先要声明这个知识点是需要你掌握的。Linux操作系统或者windows、apple 等操作系统都有两种版本: i386 和 X86_64, 这两种版本的区别在于,前者是32位后者是64位。不知道你有没有遇到过这样的问题,32位windows操作系统内存如果安装4G或者更高它是不识别的,只认到3G多,而64位操作系统没有这个影响。同样的,Linux操作系统也是有这样的问题,阿铭提供的下载地址是32位的,因为我们是在做实验,分配1G内存足够了。如果你要是在大于4G的计算机上安装Linux操作系统,那么就需要安装64位的操作系统。 |
| [2] |
关于Linux的分区,往往Linux系统管理员都有些讲究,肯定不能像阿铭在虚拟机上这样简单分区。以后的你也许会做系统管理员,所以如何分区是需要你掌握的。阿铭就给大家一个万能的分区方案吧:(1) /boot分区给100M; (2) swap分区大小为内存的2倍,如果你的机器内存非常大(大于8G时)给16G就够了,给多了也是浪费磁盘资源,8G或者8G以下就给内存大小的2倍;(3)/usr/分区20G; (4) / 分区给20G; (5)剩下的给/data/分区或者随便你自定义一个挂载点。 第5章 初步认识Linux学习Linux请加QQ群: 群1(163262181) 群2(148412746) 群3(246401509) 群4(173884211) 跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。 安装完CentOS后,相信你会迫不及待的要登陆进系统里看看这神秘的Linux到底是个什么东西?如果你安装了图形界面,相信你进入系统后会不知所措,总是想点击鼠标的右键去刷新桌面,阿铭最早也是这样的,毕竟用了很久的windows,突然换个操作系统不习惯了。有的朋友也许没有安装图形界面,输入用户名(root)以及密码(123456)后进去,发现更不知所错了。没有关系,随着阿铭逐渐深入的讲解,你会学到越来越多的知识。 CentOS6是如何启动的Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而Linux启动时我们会看到许多启动信息,例如某个服务是否启动。Linux系统的启动过程大体上可分为五部分:内核的引导、运行init、系统初始化、建立终端、用户登录系统。
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。紧接着由启动设备上的grub程序开始引导Linux,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的,我们就当它是一个黑匣子,反正是Linux内核做了一系列工作,最后内核调用加载了init程序,至此内核引导的工作就完成了。交给了下一个主角init.
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动等。 而所有的动作都会通过 init的配置文件/etc/inittab来规划,而inittab 内还有一个很重要的设定内容,那就是默认的 runlevel (开机运行级别)。先来看看运行级别Run level,Linux就是通过设定run level来规定系统使用不同的服务来启动,让Linux的使用环境不同。我们来看看这个inittab文件里面的支持级别。 # inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
inittab配置文件格式和之前老版本CentOS5或者更老版本比有很大改动。Runlevels共七个级别,0表示关机,1表示单用户,2表示没有网络的命令行级别,3命令行级别(大多服务器都用这个级别),4为保留级别,5为图形化级别,6为重启。这个文件中除了最后一行外,其他都为注释行,也就是说最后一行才是关键,它用来指定服务器跑哪个级别,这里除了可以设置2,3,5外其他级别都不能设置。在该文件的前面部分,可以看到很多行都提及到某个配置文件,而所有配置文件都是在/etc/init/目录下。
系统初始化,就是去执行/etc/init/下的各个配置文件。inittab配置文件中有这么一行 “System initialization is started by /etc/init/rcS.conf” 也就是说系统初始化会先执行/etc/init/rcS.conf 而该配置文件中又有一行 “exec /etc/rc.d/rc.sysinit” 所以,重心又转移到了这个rc.sysinit文件上,它会做如下工作:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。当rc.sysinit程序执行完毕后,将返回init继续下一步,又到了/etc/init/rc.conf, 在这个配置文件里,最关键的一行为 “exec /etc/rc.d/rc $RUNLEVEL” 而$RUNLEVEL是在/etc/inittab中定义的(最下面的那一行),以阿铭的/etc/inittab为例,表示$RUNLEVE=3, 所以此时会执行 “/etc/rc.d/rc 3” 此时实际上是把/etc/rc.d/rc3.d/ 下的脚本都给执行了,随后/etc/rc.d/rc.local也会被执行,通常我们会把开机启动执行的命令放到这个脚本下。服务执行完,系统初始化也就完成了。接下来该建立终端了。
建立终端是由配置文件/etc/init/tty.conf, /etc/init/serial.conf和/etc/sysconfig/init等配置文件来完成的。在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户身份。
对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入KDE、Gnome等窗口管理器。而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。 Linux的账号验证程序是login,login会接收mingetty传来的用户名作为用户名参数。然后login会对用户名进行分析:如果用户名不是root,且存在 “/etc/nologin” 文件,login将输出nologin文件的内容,然后退出。这通常用来系统维护时防止非root用户登录。只有 “/etc/securetty” 中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。”/etc/usertty” 文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。 在分析完用户名后,login将搜索 “/etc/passwd” 以及 “/etc/shadow” 来验证密码以及设置账户的其它信息,比如:主目录是什么、使用何种shell。如果没有指定主目录,将默认为根目录;如果没有指定shell,将默认为 “/bin/bash”。 login程序成功后,会向对应的终端在输出最近一次登录的信息(在 “/var/log/lastlog” 中有记录),并检查用户是否有新邮件(在 “/usr/spool/mail/” 的对应用户名目录下)。然后开始设置各种环境变量:对于bash来说,系统首先寻找 “/etc/profile” 脚本文件,并执行它;然后如果用户的主目录中存在 图形界面与命令行界面切换Linux预设提供了六个命令窗口终端机让我们来登录。默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。 学会使用快捷键
学会查询帮助文档 — man这个man 通常是用来看一个命令的帮助文档的。格式为 ” man 命令 ” 例如输入命令: man ls
则会显示如下结果: LS(1) User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options
too.
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
这样可以查看 “ls” 这个命令的帮助文档,进入后按 ‘q’ 键退出。 Linux 系统目录结构登录系统后,在当前命令窗口下输入: ls /
你会看到 [root@localhost ~]# ls /
bin dev home lost+found mnt proc sbin srv tmp var
boot etc lib media opt root selinux sys usr
在讲目录结构之前,阿铭先介绍一下这个 “ls” 命令是干什么的, “ls” 其实就是英文单词 ‘list’ 的缩写,它的作用是列出指定目录或者文件,刚刚在上一节中提到的 “man ls” 可以查看其具体的使用方法。对于 “ls” 这个最常用的命令,阿铭举几个简单例子让你快速掌握。 Example: [root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog
[root@localhost ~]# ls -a
. anaconda-ks.cfg .bash_profile .cshrc install.log.syslog
.. .bash_logout .bashrc install.log .tcshrc
[root@localhost ~]# ls -l
总用量 36
-rw-------. 1 root root 980 5月 7 18:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 19305 5月 7 18:00 install.log
-rw-r--r--. 1 root root 5890 5月 7 17:58 install.log.syslog
[root@localhost ~]# ls install.log
install.log
[root@localhost ~]# ls /var/
account crash empty lib lock mail opt run tmp
cache db games local log nis preserve spool yp
讲解
好了,关于”ls” 阿铭就讲这几个例子,当然它的可用选项还有很多哦,不过阿铭只给介绍最常用的。因为阿铭不想一股脑灌输给你太多知识点,那样没有什么用,但你也不用担心学不全,阿铭讲的知识点足够你日常工作和学习中用的了。如果实在是遇到不懂的选项,直接用 “man” 来查帮助文档吧。下面咱们回到先前的话题,接着讨论Linux的目录结构。
在Linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ 目录下的。值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用账户),而/sbin, /usr/sbin 则是给root使用的指令。 /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。 如何正确关机、重启其实,在Linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。 Linux和windows不同,在 Linux 底下,由于每个程序(或者说是服务)都是在在背景下执行的,因此,在你看不到的屏幕背后其实可能有相当多人同时在你的主机上面工作,例如浏览网页啦、传送信件啦以 FTP 传送档案啦等等的,如果你直接按下电源开关来关机时,则其它人的数据可能就此中断!那可就伤脑筋了!此外,最大的问题是,若不正常关机,则可能造成文件系统的毁损(因为来不及将数据回写到档案中,所以有些服务的档案会有问题!)。 如果你要关机,必须要保证当前系统中没有其他用户在线。可以下达 who 这个指令,而如果要看网络的联机状态,可以下达 netstat -a 这个指令,而要看背景执行的程序可以执行 ps -aux 这个指令。使用这些指令可以让你稍微了解主机目前的使用状态!(这些命令在以后的章节中会提及,现在只要了解即可!)
最后总结一下,不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。关机的命令有 shutdown -h now, halt, poweroff 和 init 0 , 重启系统的命令有 shutdown -r now, reboot, init 6. 忘记root密码怎么办以前阿铭忘记windows的管理员密码,由于不会用光盘清除密码最后只能重新安装系统。现在想想那是多么愚笨的一件事情。同样Linux系统你也会遇到忘记root密码的情况,如果遇到这样的情况怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可。如何进入呢。
3秒钟内,按一下回车键。此时你会看到如下提示信息: GNU GRUB version 0.97 .......
CentOS (2.6.32-358.el6.i686)
阿铭没有写完全提示信息,相信你肯定能进入到这一界面。此时CentOS (2.6.32-358.el6.i686) 这一行是高亮的,即我们选中的就是这一行,这行的意思是Linux版本为CentOS,后面小括号内是内核版本信息。 另外在这个界面里,我们还可以获取一些信息,输入 ‘e’ 会在启动前编辑命令行; 输入 ‘a’ 会在启动前更改内核的一些参数; 输入 ‘c’ 则会进入命令行。而我们要做的是输入 ‘e’.
输入 ‘e’ 后,界面变了,显示如下信息: root (hd0,0)
kernel /vmlinuxz-2.6.32-358.el6.i686 ro root=UUID=......(此处省略)
initrd /initramfs-2.6.32-358.el6.i686.img
暂时你不用管这些都代表什么意思,你只要跟着阿铭做即可。按一下向下的箭头键,选中第二行,输入 ‘e’,出现如下提示: <_NO_DM rhgh quiet
你只需要在后面加一个 “single” 或者 “1” 或者 “s” <_NO_DM rhgh quiet single
然后先按回车然后按 ‘b’,启动后就进入单用户模式。
输入修改root密码的命令 ‘passwd’: [root@localhost /]# passwd
Changeing password for user root.
New password:
Retry new password:
passwd: all authentication tokens updated successfully.
修改后,重启系统 [root@localhost /]# reboot
使用系统安装盘的救援模式救援模式即rescue ,这个模式主要是应用于,系统无法进入的情况。如,grub损坏或者某一个配置文件修改出错。如何使用rescue模式呢?
阿铭做实验用的是vmware虚拟机,设置光盘启动的步骤也许和你的不一样,但道理是一样的,相信聪明的你一定不会在这里出问题。开机启动,按F2进入bios设置,按方向键选择 “Boot” 那一项,然后使用上下方向键和+/-号来移动,最终让CD-ROM Drive 挪动到最上面一行。最后按F10, 再按回车进入光盘启动界面。
光盘启动后,使用上下方向键选择 ‘Rescue installed system’ 回车
此时还不能操作Linux系统上的文件,因为目前还在光盘上的系统上,你有没有使用过windows PE系统?其实目前我们所在的环境就类似于windows上的PE系统。要想修改原来Linux系统上的文件还需要执行一个命令: bash-4.1# chroot /mnt/sysimage
sh-4.1#
你会发现命令行前后有一处变化:原来的 “bash-4.1” 变成了 “sh-4.1”, 此时我们才可以像在原来的Linux系统上做一些操作,比如更改root密码或者修改某个文件等等。 本章内容阿铭讲的有点罗嗦,另外建议你再扩展学习一下吧(http://www.aminglinux.com/bbs/thread-5396-1-1.html). 教程答疑: 请移步这里. 欢迎你加入 阿铭学院 和阿铭一起学习Linux,让阿铭成为你Linux生涯中永远的朋友吧!
第6章 Linux系统的远程登陆学习Linux请加QQ群: 群1(163262181) 群2(148412746) 群3(246401509) 群4(173884211) 跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。 Linux大多应用于服务器,而服务器不可能像PC一样放在办公室,它们是放在IDC机房的,所以阿铭平时登录Linux系统都是通过远程登录的。Linux系统中是通过ssh服务实现的远程登录功能。默认sshd服务开启了22端口,而且当我们安装完系统时,这个服务已经安装,并且是开机启动的。所以不需要我们额外配置什么就能直接远程登录Linux系统。sshd服务的配置文件为 /etc/ssh/sshd_config,你可以修改这个配置文件来实现你想要的sshd服务。比如你可以更改启动端口为11587. 如果你是windows的操作系统,则Linux远程登录需要在我们的机器上额外安装一个终端软件。目前比较常见的终端登录软件有SecureCRT, Putty, SSH Secure Shell等,很多朋友喜欢用SecureCRT因为它的功能是很强大的,而阿铭喜欢用Putty,只是因为它的小巧以及非常漂亮的颜色显示。不管你使用哪一个客户端软件,最终的目的只有一个,就是远程登录到Linux服务器上。这些软件网上有很多免费版的,你可以下载一个试着玩玩。 你不妨跟着阿铭一起来用一用Putty这个小巧的工具。 下载Putty阿铭建议你到Putty的官方站点去下载英文版原版的putt. 网上曾经报过,某个中文版的Putt被别有用心的黑客给动了手脚,给植了后门。所以,阿铭提醒各位,以后不管下载什么软件尽量去官方站点下载。阿铭给出下载地址: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 连接远程Linux服务器的工具只需要下载putty.exe即可 http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe 下载后直接双击运行就可以了不需要安装。 给你的Linux配置IP要想远程连接Linux服务器,首先需要知道服务器的IP。因为阿铭用的虚拟机,而且虚拟机所跑的真机是自动获得的ip,所以虚拟机也可以自动获得ip。如果你是一步一步跟阿铭装的Linux那么你的Linux目前肯定是没有IP的,下面阿铭教你几种配置IP的方法:
只有一种情况可以自动获取IP地址,那就是你的Linux所在的网络环境中有DHCP服务。[1] 总之,只要你的真机可以自动获取IP,那么安装在虚拟机的Linux同样也可以自动获取IP. 方法很简单,只需要运行一个命令。 [root@localhost ~]# dhclient
运行这条命令后,会出现一大堆信息,你不用关心是什么。然后运行 ‘ifconfig’ 命令查看IP是什么: [root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:D9:F0:52
inet addr:10.72.137.85 Bcast:10.72.137.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed9:f052/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:27135 errors:0 dropped:0 overruns:0 frame:0
TX packets:53 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3488498 (3.3 MiB) TX bytes:7550 (7.3 KiB)
Interrupt:18 Base address:0x1080
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
通过这个命令可以查看系统有几块网卡和网卡的IP,阿铭的系统eth0的IP是 10.72.137.85. 如果你的Linux有多块网卡,那么在Linux中它会显示成eth1, eth2 依此类推。
如果你的虚拟机不能自动获取IP,那么只能手动配置,配置方法为: [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
使用vi 命令打开 “/etc/sysconfig/network-scripts/ifcfg-eth0” 这个配置文件。关于命令 IPADDR=10.72.137.85
NETMASK=255.255.255.0
GATEWAY=10.72.137.1
请注意,由于阿铭不知道你的网络具体环境,所以也不晓得你应该配置什么样的IP,请不要直接照搬阿铭给出的例子,这样配置肯定是不行的,请配置成和你的真机(windows)在同一个网段的IP。关于netmask以及gateway的概念请自行在网上查询,这是关于网络技术的基础知识。另外还需要把光标移动到 “ONBOOT=no” 这一行,改为: ONBOOT=yes
“BOOTPROTO=dhcp” 改为: BOOTPROTO=none
之后按一下键盘左上角的 “ESC”键,然后输入 [root@localhost ~]# service network restart
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
这样网络重启后,eth0 的IP就生效了。使用 “ifconfig eth0” 命令查看一下: [root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:D9:F0:52
inet addr:10.72.137.85 Bcast:10.72.137.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed9:f052/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:27135 errors:0 dropped:0 overruns:0 frame:0
TX packets:53 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3488498 (3.3 MiB) TX bytes:7550 (7.3 KiB)
Interrupt:18 Base address:0x1080
接下来请检测一下你配置的IP是否可以ping通。阿铭使用的windows7系统,所以使用cmd打开命令窗口,进行检测。打开cmd的快捷键是 C:\Users\Administrator>ping 10.72.137.85
正在 Ping 10.72.137.85 具有 32 字节的数据:
来自 10.72.137.85 的回复: 字节=32 时间=1ms TTL=64
来自 10.72.137.85 的回复: 字节=32 时间<1ms TTL=64
来自 10.72.137.85 的回复: 字节=32 时间<1ms TTL=64
来自 10.72.137.85 的回复: 字节=32 时间<1ms TTL=64
10.72.137.85 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 1ms,平均 = 0ms
这一部分内容,阿铭曾经在论坛里写过一个帖子 http://www.aminglinux.com/bbs/thread-626-1-1.html 如果你已经配置好IP且可以ping通,这一部分设置则不需要再做了,但有必要了解一下,也许有一天你会用到。这一部分配置适合这样的场景:你的办公网不能通过dhcp获得IP,或者你不想让你的Linux处在和办公网一个网段,而且也想让Linux上网。
如果你遇到类似这样的问题:重启网络服务后,发现/etc/resolv.conf中设置的DNS地址消失了,你可以参考这个帖子解决你的问题:http://www.aminglinux.com/bbs/thread-5548-1-1.html 用putty登陆你的Linux上一小节阿铭带你设置IP,就是给这一部分做铺垫,没有IP是没有办法远程连接Linux的。双击先前下载的putty.exe文件,这个小工具特别小巧仅仅有几百K,但是你可不要小看它,功能可是不少呢,而且这个工具的帮助文档够你看好几天的了,关键是全都是英文。如果你的英文能力差一些也没有关系,相信随着你用Linux越来越多,你的英文能力也会越来越强。
使用密钥认证机制远程登录LinuxSSH服务支持一种安全认证机制,即密钥认证。所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密;另一个称为密钥(privatekey),只有拥有者才能看到,用于解密。通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。 ssh的密钥认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和密钥。如何使用密钥认证登录linux服务器呢?
在本章前面阿铭提供的putty下载地址里,你一定看到了很多可以下载的东西,不过阿铭只让你下载了一个putty.exe. 因为当时只用到这一个工具,其实完整的putty程序包含很多个小工具的,所以这次阿铭建议你直接下载个完整包 http://the.earth.li/~sgtatham/putty/latest/x86/putty.zip 下载后解压,其中puyttygen.exe就是咱们这一小节中所要用到的密钥生成工具。
关于密钥的工作原理,如果你感兴趣可以到网上查一查,阿铭不想介绍太多无关知识点,不过,了解一下也没有什么不好。双击puttygen.exe, 右下角 “Number of bits in a generated key” 把 “1024” 改成 “2048”, 然后点 “Generate”, 这样就开始生成密钥了,请来回动一下鼠标,这样才可以快速生成密钥对,大约十几秒后就完成了。 “Key comment:” 这里可以保持不变也可以自定义,其实就是对该密钥的简单介绍; “Kye passphrase:” 这里用来给你的密钥设置密码,这样安全一些,当然也可以留空,阿铭建议你设置一个密码;”Confirm passphrase:” 这里再输入一遍刚刚你设置的密码。
点 “Save private key”, 选择一个存放路径,定义一个名字,点 “保存”。请保存到一个比较安全的地方,谨防丢掉或被别人看到。
回到刚才生成密钥的窗口,在 “Key” 的下方有一段长长的字符串,这一串就是公钥的内容了,把整个公钥字符串复制下来。然后粘贴到你的Linux的 [root@localhost ~]# mkdir /root/.ssh
[root@localhost ~]# chmod 700 /root/.ssh
首先创建/root/.ssh 目录,因为这个目录默认是不存在的,然后是更改权限。 关于 [root@localhost ~]# vi /root/.ssh/authorized_keys
回车后,按一下 ‘i’ 进入编辑模式,然后直接点击鼠标右键就粘贴了,这是putty工具非常方便的一个功能。粘贴后,按一下 ‘Esc’ 键,然后输入
如果不关闭selinux, [3] 使用密钥登陆会提示 “Server refused our key”, 关闭方法: [root@localhost ~]# setenforce 0
这个只是暂时命令行关闭selinux, 下次重启Linux后selinux还会开启。永久关闭selinux的方法是: [root@localhost ~]# vi /etc/selinux/config
回车后,把光标移动到 “SELINUX=enforcing” 按一下 SELINUX=disabled
按 “Esc”, 输入
打开putty.exe点一下你保存好的session,然后点右侧的 “Load”, 在左侧靠下面点一下 “SSH” 前面的
保存好后session, 点一下右下方的 “Open”. 出现登陆界面,你会发现和原来的登陆提示内容有所不同了。 login as: root
Authenticating with public key "rsa-key-20130509"
Passphrase for key "rsa-key-20130509":
Last login: Thu May 9 16:17:13 2013 from 10.72.137.43
[root@localhost ~]#
现在不再输入root密码,而是需要输入密钥的密码,如果你先前在生产密钥的时候没有设置密码,你输入root后会直接登陆系统。 第6章扩展学习: http://www.aminglinux.com/bbs/thread-5401-1-1.html 教程答疑: 请移步这里. 欢迎你加入 阿铭学院 和阿铭一起学习Linux,让阿铭成为你Linux生涯中永远的朋友吧!
第7章 Linux文件与目录管理学习Linux请加QQ群: 群1(163262181) 群2(148412746) 群3(246401509) 群4(173884211) 跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。 本章主要介绍Linux系统里文本和目录的相关操作。有一句话: ‘在Linux里一切皆文件’, 是呀文件是Linux的基石,小到一个配置文件,大到一块磁盘都是用文件来控制的。这一部分内容比较基础,有较多基础命令出现,希望你多练习,多使用。用的多了自然而然就熟练了。 绝对路径和相对路径在Linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的 绝对路径:路径的写法一定由根目录 ‘/’写起,例如 相对路径:路径的写法不是由根目录 ‘/’写起,例如,首先用户进入到/, 然后再进入到home ,命令为 命令:cd 这个命令是用来变更用户所在目录的,后面如果什么都不跟,就会直接到当前用户的根目录下,我们做实验用的是 ‘root’ 账户,所以运行 [root@localhost ~]# cd /tmp/
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# cd
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /etc/passwd
-bash: cd: /etc/passwd: 不是目录
[root@localhost ~]# cd /usr/local/lib/
[root@localhost lib]# pwd
/usr/local/lib
[root@localhost lib]# cd ./
[root@localhost lib]# pwd
/usr/local/lib
[root@localhost lib]# cd ../
[root@localhost local]# pwd
/usr/local
上例中,首先进入到 命令:mkdir 用来创建目录的,这个命令在上一章节中用到过。 ‘mkdir’ 其实就是make directory的缩写。其语法为 mkdir [-mp] [目录名称] ,其中-m, -p为其选项, ‘-m’ 这个选项用来指定要创建目录的权限,不常用,阿铭不做重点解释。 ‘-p’ 这个选项很管用,先来做个试验,你会一目了然的: [root@localhost ~]# mkdir /tmp/test/123
mkdir: 无法创建目录 '/tmp/test/123': 没有那个文件或目录
[root@localhost ~]# mkdir -p /tmp/test/123
[root@localhost ~]# ls /tmp/test
123
当我们想创建 [root@localhost ~]# ls -ld /tmp/test/123
drwxr-xr-x. 2 root root 4096 5月 9 19:10 /tmp/test/123
[root@localhost ~]# mkdir /tmp/test/123
mkdir: 无法创建目录 '/tmp/test/123': 文件已存在
[root@localhost ~]# mkdir -p /tmp/test/123
[root@localhost ~]# ls -ld /tmp/test/123
drwxr-xr-x. 2 root root 4096 5月 9 19:10 /tmp/test/123
在上一章节里,阿铭已经介绍过 命令:rmdir 用来删除空目录,后面可以是一个也可以是多少,多个的话用空格分隔。该命令阿铭很少使用,因为它只能删除目录,不能删除文件,还有一个命令 [root@localhost ~]# ls /tmp/test
123
[root@localhost ~]# rmdir /tmp/test/
rmdir: 删除 '/tmp/test/' 失败: 目录非空
[root@localhost ~]# rmdir /tmp/test/123
[root@localhost ~]# ls /tmp/test
[root@localhost ~]#
所以,得出的结论是, ‘rmdir’ 只能删除空目录,即使加上 ‘-p’ 选项也只能删除一串的空目录,可见这个命令有很大的局限性,偶尔用下还可以。 命令:rm 这个命令是最常用的, ‘rm’ 同样也有很多选项。你可以通过 ‘-r’ : 删除目录用的选项,等同于rmdir. [root@localhost ~]# mkdir -p /tmp/test/123
[root@localhost ~]# rm -r /tmp/test/123
rm:是否删除目录 '/tmp/test/123'? y
但是和rmdir不同的是,使用 ‘-f’ : 表示强制删除,不再提示是否要删除,而是直接就删除了,而后面跟一个不存在的文件或者目录时,也不会报错,如果不加 ‘-f’ 选项会报错。 [root@localhost ~]# rm /tmp/test/123/123
rm: 无法删除 '/tmp/test/123/123': 没有那个文件或目录
[root@localhost ~]# rm -f /tmp/test/123/123
要删除一个目录时,即使加上 ‘-f’ 选项也会报错,所以删除目录一定要加 ‘-r’ 选项。 [root@localhost ~]# rm -f /tmp/test/123
rm: 无法删除 '/tmp/test/123': 是一个目录
[root@localhost ~]# rm -rf /tmp/test/123
关于rm,阿铭使用最多便是 ‘-rf’ 两个选项合用了。不管删除文件还是目录都可以。但是方便的同时也要多注意,万一你的手太快后边跟了/那样就会把你的系统文件全部删除的,切记切记。 环境变量PATH在讲环境变量之前阿铭先介绍一个命令 [root@localhost ~]# which rmdir
/bin/rmdir
[root@localhost ~]# which rm
alias rm='rm -i'
/bin/rm
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/bin/ls
‘rm’ 和 ‘ls’ 是两个特殊的命令,使用 上边提到了alias,也提到了绝对路径的/bin/rm ,然后你意识到没有,为什么我们输入很多命令时是直接打出了命令,而没有去使用这些命令的绝对路径?这是因为环境变量PATH在起作用了。请输入 echo $PATH,这里的echo其实就是打印的意思,而PATH前面的$表示后面接的是变量。 [root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
因为/bin 在PATH的设定中,所以自然就可以找到ls了。如果你将 ls 移动到 /root 底下的话,然后你自己本身也在 /root 底下,但是当你执行 ls 的时候,他就是不理你?怎么办?这是因为 PATH 没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行文件了,因此就会告诉你 ‘command not found!’ [root@localhost ~]# mv /bin/ls /root/
[root@localhost ~]# ls
-bash: /bin/ls: 没有那个文件或目录
‘mv’ 用来移动目录或者文件,还可以重命名,稍后讲解。 那么该怎么克服这种问题呢?有两个方法,一种方法是直接将 /root 的路径加入 $PATH 当中!如何增加?可以使用命令 [root@localhost ~]# PATH=$PATH:/root
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog ls
另一种方法就是使用绝对路径: [root@localhost ~]# /root/ls
anaconda-ks.cfg install.log install.log.syslog ls
命令: cp copy的简写,即拷贝。格式为 -r : 如果你要拷贝一个目录,必须要加-r选项,否则你是拷贝不了目录的, 和 ‘rm’ 类似。 [root@localhost ~]# mkdir 123
[root@localhost ~]# cp 123 456
cp: 略过目录'123'
[root@localhost ~]# cp -r 123 456
[root@localhost ~]# ls -l
总用量 44
drwxr-xr-x. 2 root root 4096 5月 10 04:05 123
drwxr-xr-x. 2 root root 4096 5月 10 04:05 456
-i : 安全选项,和 ‘rm’ 类似,如果遇到一个存在的文件,会问是否覆盖。在Redhat/CentOS系统中,我们使用的cp其实是cp -i [root@localhost ~]# which cp
alias cp='cp -i'
/bin/cp
下面简单做一个小试验,很快你就会明白-i 选项的作用了。 [root@localhost ~]# cd 123
[root@localhost 123]# ls
[root@localhost 123]# touch 111
[root@localhost 123]# touch 222
[root@localhost 123]# cp -i 111 222
cp:是否覆盖 '222'? n
[root@localhost 123]# echo 'abc' > 111
[root@localhost 123]# echo 'def' > 222
[root@localhost 123]# cat 111 222
abc
def
[root@localhost 123]# /bin/cp 111 222
[root@localhost 123]# cat 111
abc
[root@localhost 123]# cat 222
abc
例子中的 ‘touch’ 看字面意思就是 ‘摸一下’,没错,如果有这个文件,则会改变文件的访问时间,如果没有这个文件就会创建这个文件。前面说过 ‘echo’ 用来打印,在这里所echo的内容 ‘abc’ 和 ‘def’ 并没有显示在屏幕上,而是分别写进了文件 111和222, 其写入作用的就是这个大于号 ‘>’ 在linux中这叫做重定向,即把前面产生的输出写入到后面的文件中。在以后的章节中会做详细介绍,这里你要明白它的含义即可。而 ‘cat’ 命令则是读一个文件,并把读出的内容打印到当前屏幕上。该命令也会在后续章节中详细介绍。 命令: mv ‘mv’ 是move的简写。格式为 -i : 和cp的-i 一样,当目标文件存在时会问用户是否要覆盖。在Redhat/CentOS系统中,我们使用的mv其实是mv -i 该命令有几种情况: 1) 目标文件是目录,而且目标文件不存在; 2) 目标文件是目录,而且目标文件存在; 3) 目标文件不是目录不存在; 4) 目标文件不是目录存在; 目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中。否则,就直接移动了,相当于重命名。这样说也许你会觉得有点不好理解,看例子吧。 [root@localhost ~]# mkdir dira dirb
[root@localhost ~]# ls
anaconda-ks.cfg dira dirb install.log install.log.syslog
[root@localhost ~]# mv dira dirc
[root@localhost ~]# ls
anaconda-ks.cfg dirb dirc install.log install.log.syslog
目标文件为目录,并且目标目录不存在,相当于把 ‘dira’ 重命名为 ‘dirc’. [root@localhost ~]# mv dirc dirb
[root@localhost ~]# ls
anaconda-ks.cfg dirb install.log install.log.syslog
[root@localhost ~]# ls dirb
dirc
目标文件为目录,且目标目录存在,则会把 ‘dirc’ 移动到 ‘dirb’ 目录里。 [root@localhost ~]# touch filed
[root@localhost ~]# ls
anaconda-ks.cfg dirb filed install.log install.log.syslog
[root@localhost ~]# mv filed filee
[root@localhost ~]# ls
anaconda-ks.cfg dirb filee install.log install.log.syslog
[root@localhost ~]# mv filee dirb
[root@localhost ~]# ls
anaconda-ks.cfg dirb install.log install.log.syslog
[root@localhost ~]# ls dirb
dirc filee
目标文件不是目录,且不存在,则会重命名文件。 几个和文档相关的命令命令: cat 比较常用的一个命令,即查看一个文件的内容并显示在屏幕上, 后面可以不加任何选项直接跟文件名,阿铭介绍两个常用的选项: -n : 查看文件时,把行号也显示到屏幕上。 [root@localhost ~]# echo '111111111' > dirb/filee
[root@localhost ~]# echo '222222222' >> dirb/filee
[root@localhost ~]# cat dirb/filee
111111111
222222222
[root@localhost ~]# cat -n dirb/filee
1 111111111
2 222222222
上例中出现了一个 ‘>>’ 这个符号跟前面介绍的 ‘>’ 的作用都是重定向,即把前面输出的东西输入到后边的文件中,只是 ‘>>’ 是追加的意思,而用 ‘>’ 如果文件中有内容则会删除文件中内容,而 ‘>>’ 则不会。 -A : 显示所有东西出来,包括特殊字符 [root@localhost ~]# cat -A dirb/filee
111111111$
222222222$
命令: tac 和 ‘cat’ 一样,用来把文件的内容显示在屏幕上,只不过是先显示最后一行,然后是倒数第二行,最后显示的是第一行。
命令: more 也是用来查看一个文件的内容,后面直接跟文件名,当文件内容太多,一屏幕不能占下,而你用 ‘cat’ 肯定是看不前面的内容的,那么使用 ‘more’ 就可以解决这个问题了。当看完一屏后按空格键继续看下一屏。但看完所有内容后就会退出。如果你想提前退出,只需按 ‘q’ 键即可。 命令: less 作用跟more一样,后面直接跟文件名,但比more好在可以上翻,下翻。空格键同样可以翻页,而按 ‘j’ 键可以向下移动(按一下就向下移动一行),按 ‘k’ 键向上移动。在使用more和less查看某个文件时,你可以按一下 ‘/’ 键,然后输入一个word回车,这样就可以查找这个word了。如果是多个该word可以按 ‘n’ 键显示下一个。另外你也可以不按 ‘/’ 而是按 ‘?’ 后边同样跟word来搜索这个word,唯一不同的是, ‘/’ 是在当前行向下搜索,而 ‘?’ 是在当前行向上搜索。 命令: head ‘head’后直接跟文件名,则显示文件的前十行。如果加 -n 选项则显示文件前n行。 [root@localhost ~]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
[root@localhost ~]# head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
‘-n’后可以有空格也可以无空格。 命令: tail 和head一样,后面直接跟文件名,则显示文件最后十行。如果加-n 选项则显示文件最后n行。 [root@localhost ~]# head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# tail /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:'Saslauthd user':/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
[root@localhost ~]# tail -n2 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
-f : 动态显示文件的最后十行,如果文件是不断增加的,则用-f 选项。如: 文件的所属主以及所属组一个linux目录或者文件,都会有一个所属主和所属组。所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。Linux这样设置文件属性的目的是为了文件的安全。例如,test文件的所属主是user0 而test1文件的所属主是user1,那么user1是不能查看test文件的,相应的user0也不能查看test1文件。有时我们也会有这样的需求,让一个文件同时让user0和user1来查看,这怎么实现呢? 这时 ‘所属组’ 就派上用场了。即,创建一个群组users,让user0和user1同属于users组,然后建立一个文件test2,且其所属组为users,那么user0和user1都可以访问test2文件。Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user)、所属组(group)以及其他用户(others)对该文件的权限。你可以通过ls -l 来查看这些属性。 [root@localhost ~]# ls -l
总用量 40
-rw-------. 1 root root 980 5月 7 18:00 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 5月 10 05:10 dirb
linux文件属性上例中,用ls –l 查看当前目录下的文件时,共显示了9列内容(用空格划分列),都代表了什么含义呢? 第1列,包含的东西有该文件类型和所属主、所属组以及其他用户对该文件的权限。第一列共11位有的文件是10位,没有最后面的一位。 其中第一位用来描述该文件的类型。上例中,我们看到的类型有 ‘d’, ‘-‘ ,其实除了这两种外还有 ‘l’, ‘b’, ‘c’, ‘s’ 等。 ‘d’ 表示该文件为目录; ‘-‘ 表示该文件为普通文件; ‘l’ 表示该文件为链接文件(linux file),上边提到的软链接即为该类型; [root@localhost ~]# ls -l /etc/rc.local
lrwxrwxrwx. 1 root root 13 5月 7 17:54 /etc/rc.local -> rc.d/rc.local
上例中,第一列第一位是 ‘l’ 表示该文件为链接文件,稍后阿铭详细介绍。 ‘b’ 表示该文件为块设备,比如 /dev/sda 就是这样的文件。 ‘c’ 表示该文件为串行端口设备,例如键盘、鼠标。 ‘s’ 表示该文件为套接字文件(socket),用于进程间通信。 后边的9位,每三个为一组。均为rwx 三个参数的组合。其中r 代表可读,w代表可写,x代表可执行。前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。下面拿一个具体的例子来述说一下。 一个文件的属性为 ‘-rwxr-xr–.’ ,它代表的意思是,该文件为普通文件,文件拥有者可读可写可执行,文件所属组对其可读不可写可执行,其他用户对其只可读。对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有x权限才能打开并查看该目录。例如一个目录的属性为 ‘drwxr–r–.’ 其所属主为root,那么除了root外的其他用户是不能打开这个目录的。 关于第一列的最后一位的 第2列,表示为链接占用的节点(inode), [1] 为目录时,通常与该目录底下还有多少目录有关系。 第3列,表示该文件的所属主。 第4列,表示该文件的所属组。 第5列,表示该文件的大小。 第6列、第7列和第8列为该文件的最近的修改日期,分别为月份日期以及时间,也就是所谓的mtime. 第9列,文件名。 更改文件的权限
语法: [root@localhost ~]# groupadd testgroup
[root@localhost ~]# touch test1
[root@localhost ~]# ls -l test1
-rw-r--r-- 1 root root 0 5月 10 08:41 test1
[root@localhost ~]# chgrp testgroup test1
[root@localhost ~]# ls -l test1
-rw-r--r-- 1 root testgroup 0 5月 10 08:41 test1
这里用到了 ‘groupadd’ 命令,其含义为增加一个用户组。该命令在以后章节中做详细介绍,你只要知道它是用来增加用户组的即可。除了更改文件的所属组,还可以更改目录的所属组。 [root@localhost ~]# ls -l dirb/
总用量 8
drwxr-xr-x. 2 root root 4096 5月 10 05:08 dirc
-rw-r--r--. 1 root root 20 5月 10 05:37 filee
[root@localhost ~]# ls -ld dirb/
drwxr-xr-x. 3 root root 4096 5月 10 05:10 dirb/
[root@localhost ~]# chgrp testgroup dirb
[root@localhost ~]# ls -ld dirb/
drwxr-xr-x. 3 root testgroup 4096 5月 10 05:10 dirb/
[root@localhost ~]# ls -l dirb/
总用量 8
drwxr-xr-x. 2 root root 4096 5月 10 05:08 dirc
-rw-r--r--. 1 root root 20 5月 10 05:37 filee
‘chgrp’命令也可以更改目录的所属组,但是只能更改目录本身,而目录下面的目录或者文件没有更改,要想级联更改子目录以及子文件,有个选项可以实现: [root@localhost ~]# chgrp -R testgroup dirb
[root@localhost ~]# ls -l dirb
总用量 8
drwxr-xr-x. 2 root testgroup 4096 5月 10 05:08 dirc
-rw-r--r--. 1 root testgroup 20 5月 10 05:37 filee
‘chgroup’ 命令阿铭使用的不多,因为还有一个命令可以替代。
语法: 这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改。 [root@localhost ~]# mkdir test // 创建 'test' 目录
[root@localhost ~]# useradd user1 // 创建用户 'user1', 关于 'useradd' 命令会在后续章节介绍。
[root@localhost ~]# touch test/test2 // 在test目录下创建test2文件
[root@localhost ~]# chown user1 test
[root@localhost ~]# ls -l test
总用量 0
-rw-r--r-- 1 root root 0 5月 10 09:00 test2
[root@localhost ~]# ls -ld test // test目录所属主已经由 'root' 改为 'user1'.
drwxr-xr-x 2 user1 root 4096 5月 10 09:00 test
[root@localhost ~]# ls -l test // 但是test目录下的test2文件所属主依旧是 'root'.
总用量 0
-rw-r--r-- 1 root root 0 5月 10 09:00 test2
[root@localhost ~]# chown -R user1:testgroup test
[root@localhost ~]# ls -l test
总用量 0
-rw-r--r-- 1 user1 testgroup 0 5月 10 09:00 test2
chown -R user1:testgroup test //把test目录以及目录下的文件都修改成所属主为user1, 所属组为testgroup.
在linux中为了方便更改这些权限,linux使用数字去代替rwx, 具体规则为 ‘r’ 等于4, ‘w’ 等于2, ‘x’ 等于1, ‘-‘ 等于0. 举个例子: ‘-rwxrwx—’ 用数字表示就是 ‘770’, 具体是这样来的: ‘rwx’ = 4+2+1=7; ‘rwx’ = 4+2+1=7; ‘- - -‘ = 0+0+0=0.
‘-R’ 选项作用同chown,级联更改。 值得提一下的是,在linux系统中,默认一个目录的权限为 755,而一个文件的默认权限为644. [root@localhost ~]# ls -ld test
drwxr-xr-x 2 user1 testgroup 4096 5月 10 09:00 test
[root@localhost ~]# ls -l test
总用量 0
-rw-r--r-- 1 user1 testgroup 0 5月 10 09:00 test2
[root@localhost ~]# chmod 750 test
[root@localhost ~]# ls -ld test
drwxr-x--- 2 user1 testgroup 4096 5月 10 09:00 test
[root@localhost ~]# ls -l test/test2
-rw-r--r-- 1 user1 testgroup 0 5月 10 09:00 test/test2
[root@localhost ~]# chmod 700 test/test2
[root@localhost ~]# chmod -R 700 test
[root@localhost ~]# ls -ld test
drwx------ 2 user1 testgroup 4096 5月 10 09:00 test
[root@localhost ~]# ls -l test
总用量 0
-rwx------ 1 user1 testgroup 0 5月 10 09:00 test2
如果你创建了一个目录,而该目录不想让其他人看到内容,则只需设置成 ‘rwxr—–’ (740) 即可。’chmod’ 还支持使用rwx的方式来设置权限。从之前的介绍中我们可以发现,基本上就九个属性分别是(1)user (2)group (3)others, 我们可以使用u, g, o 来代表它们三个的属性,此外, a 则代表 all 亦即全部。阿铭举例来介绍他们的用法: [root@localhost ~]# chmod u=rwx,og=rx test/test2
[root@localhost ~]# ls -l test/test2
-rwxr-xr-x 1 user1 testgroup 0 5月 10 09:00 test/test2
这样可以把 ‘test/test2’ 文件权限修改为 ‘rwxr-xr-x’. 另外还可以针对u, g, o, a增加或者减少某个权限(读,写,执行),例如: [root@localhost ~]# chmod u-x test/test2
[root@localhost ~]# ls -l test
总用量 0
-rw-r-xr-x 1 user1 testgroup 0 5月 10 09:00 test2
[root@localhost ~]# chmod a-x test/test2
[root@localhost ~]# ls -l test/test2
-rw-r--r-- 1 user1 testgroup 0 5月 10 09:00 test/test2
[root@localhost ~]# chmod u+x test/test2
[root@localhost ~]# ls -l test/test2
-rwxr--r-- 1 user1 testgroup 0 5月 10 09:00 test/test2
命令: umask 上边也提到了默认情况下,目录权限值为755, 普通文件权限值为644, 那么这个值是由谁规定呢?追究其原因就涉及到了 ‘umask’. umask语法: 查看umask值只要输入 ‘umask’ 然后回车。 [root@localhost ~]# umask
0022
umask预设是0022,其代表什么含义?先看一下下面的规则: 1)若用户建立为普通文件,则预设 ‘没有可执行权限’, 只有’rw’两个权限。最大为666 (‘-rw-rw-rw-‘). 2)若用户建立为目录,则预设所有权限均开放,即777 (‘drwxrwxrwx’). umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限。所以目录的权限为 [root@localhost ~]# umask 002
[root@localhost ~]# mkdir test2
[root@localhost ~]# ls -ld test2
drwxrwxr-x 2 root root 4096 5月 10 09:44 test2
[root@localhost ~]# touch test3
[root@localhost ~]# ls -l test3
-rw-rw-r-- 1 root root 0 5月 10 09:45 test3
可以看到创建的目录权限默认变为775, 而文件默认权限变为664. 然后再把umask改回来。 [root@localhost ~]# umask 022
[root@localhost ~]# touch test4
[root@localhost ~]# ls -l test4
-rw-r--r-- 1 root root 0 5月 10 09:45 test4
umask 可以在
命令 : chattr
‘+-=’ : 分别为增加、减少、设定 ‘A’ : 增加该属性后,文件或目录的atime将不可被修改; ‘S’ : 增加该属性后,会将数据同步写入磁盘中; ‘a’ : 增加该属性后,只能追加不能删除,非root用户不能设定该属性; ‘c’ : 自动压缩该文件,读取时会自动解压; ‘i’ : 增加后,使文件不能被删除、重命名、设定链接接、写入、新增数据; [root@localhost ~]# chattr +i test2
[root@localhost ~]# touch test2/test1
touch: 无法创建'test2/test1': 权限不够
[root@localhost ~]# chattr -i test2
[root@localhost ~]# touch test2/test1
[root@localhost ~]# chattr +i test2
[root@localhost ~]# rm -f test2/test1
rm: 无法删除'test2/test1': 权限不够
对 ‘test2’ 目录增加 ‘i’ 权限后,即使是root账户也不能在 ‘test2’ 里创建或删除test1文件。 [root@localhost ~]# chattr -i test2
[root@localhost ~]# touch test2/test3
[root@localhost ~]# ls test2
test1 test3
[root@localhost ~]# chattr +a test2
[root@localhost ~]# rm -f test2/test1
rm: 无法删除 'test2/test1': 不允许的操作
[root@localhost ~]# touch test2/test4
[root@localhost ~]# ls test2
test1 test3 test4
test2目录增加 ‘a’ 权限后,只可以在里面创建文件,而不能删除文件。文件同样可以适用这些权限。 [root@localhost ~]# chattr +a test2/test1
[root@localhost ~]# echo '11111' > test2/test1
-bash: test2/test1: 不允许的操作
[root@localhost ~]# echo '11111' >> test2/test1
[root@localhost ~]# cat test2/test1
11111
[root@localhost ~]# chattr +i test2/test3
[root@localhost ~]# echo '11111' >> test2/test3
-bash: test2/test3: 权限不够
[root@localhost ~]# echo '11111' > test2/test3
-bash: test2/test3: 权限不够
[root@localhost ~]# rm -f test2/test3
rm: 无法删除'test2/test3': 权限不够
命令 : lsattr 该命令用来读取文件或者目录的特殊权限,语法为 ‘-a’ : 类似与ls 的-a 选项,即连同隐藏文件一同列出; ‘-R’ : 连同子目录的数据一同列出 [root@localhost ~]# lsattr test2
-----a-------e- test2/test1
----i--------e- test2/test3
-------------e- test2/test4
[root@localhost ~]# lsattr -aR test2
----i--------e- test2/.
-----a-------e- test2/test1
-------------e- test2/..
----i--------e- test2/test3
-------------e- test2/test4
在linux下搜一个文件在windows下有一个搜索工具,可以让我们很快的找到一个文件,这是很有用的。然而在linux下搜索功能更加强大。
在前面已经用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件。这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which 一下很容易就知道了。
‘-b’ : 只找binary 文件 ‘-m’ : 只找在说明文件manual路径下的文件 ‘-s’ : 只找source来源文件 ‘-u’ : 没有说明档的文件 说明:whereis 阿铭几乎很少用到,如果你感兴趣请深入研究。
后边直接跟文件名。如果你的linux没有这个命令,请安装软件包 ‘mlocate’, 这个软件包在你的系统安装盘里,后缀名是RPM,随后介绍的find命令会告诉你如何查找这个包。如果你装的CentOS你可以使用这个命令来安装 [root@localhost ~] # locate passwd
locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory
这是因为系统还没有生成那个文件列表库。你可以使用
语法 : ‘-atime +n/-n’ : 访问或执行时间大于/小于n天的文件 ‘-ctime +n/-n’ : 写入、更改inode属性(例如更改所有者、权限或者链接)时间大于/小于n天的文件 ‘-mtime +n/-n’ : 写入时间大于/小于n天的文件 [root@localhost ~]# find /tmp/ -mtime -1
/tmp/
/tmp/.ICE-unix
/tmp/test
[root@localhost ~]# find /tmp/ -atime +10
[root@localhost ~]# find /tmp/ -atime +1
/tmp/yum.log
/tmp/.bash_history
看到这里,你对这三个time是不是有些晕了,那阿铭就先给你介绍一下这三个time属性。 文件的 Access time也就是 ‘atime’ 是在读取文件或者执行文件时更改的。文件的 Modified time也就是 ‘mtime’ 是在写入文件时随文件内容的更改而更改的。文件的 Change time也就是 ‘ctime’ 是在写入文件、更改所有者、权限或链接设置时随inode的内容更改而更改的。 因此,更改文件的内容即会更改mtime和ctime,但是文件的ctime可能会在 mtime 未发生任何变化时更改,例如,更改了文件的权限,但是文件内容没有变化。 如何获得一个文件的atime mtime 以及ctime ? ‘stat’ 命令可用来列出文件的 atime、ctime 和 mtime。 [root@localhost ~]# stat test/test2
File: 'test/test2'
Size: 0 Blocks: 0 IO Block: 4096 普通空文件
Device: 803h/2051d Inode: 261657 Links: 1
Access: (0744/-rwxr--r--) Uid: ( 500/ user1) Gid: ( 500/testgroup)
Access: 2013-05-10 09:00:36.092000531 +0800
Modify: 2013-05-10 09:00:36.092000531 +0800
Change: 2013-05-10 09:30:58.788996594 +0800
atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息。总之, 這三個 time stamp 都放在 inode 中。若 mtime, atime 修改inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟着要改了。 阿铭继续’find’常用选项: ‘-name filename’ 直接查找该文件名的文件,这个选项使用很多。 [root@localhost ~]# find . -name test2
./test/test2
./test2
‘-type filetype’ 通过文件类型查找。文件类型在前面部分已经简单介绍过,相信你已经大体上了解了。filetype 包含了 f, b, c, d, l, s 等。 [root@localhost ~]# find /tmp/ -type d
/tmp/
/tmp/.ICE-unix
/tmp/test
[root@localhost ~]# find /tmp/ -type f
/tmp/yum.log
/tmp/.bash_history
/tmp/ip.txt
linux的文件系统简介搞计算机的应该都知道windows的系统格式化硬盘时会指定格式,fat 或者 ntfs。而linux的文件系统格式为Ext3,或者Ext4 。早期的linux使用Ext2格式,目前的linux都使用了Ext3, 而CentOS6已经使用了Ext4. Ext2文件系统虽然是高效稳定的。但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了,因为Ext2文件系统是非日志文件系统。这在关键行业的应用是一个致命的弱点。Ext3文件系统是直接从Ext2文件系统发展而来,Ext3文件系统带有日志功能,可以跟踪记录文件系统的变化,并将变化内容写入日志,写操作首先是对日志记录文件进行操作,若整个写操作由于某种原因 (如系统掉电) 而中断,系统重启时,会根据日志记录来恢复中断前的写操作,而且这个过程费时极短。目前Ext3文件系统已经非常稳定可靠。它完全兼容Ext2文件系统。用户可以平滑地过渡到一个日志功能健全的文件系统中来。这实际上了也是ext3日志文件系统初始设计的初衷。 而现在我们使用的Ext4文件系统,较Ext3文件系统又有很多好的特性,最明显的特征是,Ext4支持的最大文件系统容量和单个最大文件大小,详细的区别阿铭不再介绍,这需要你到网上搜一下以丰富你的知识点。 Linux文件系统在windows中是不能识别的,但是在linux系统中你可以挂载的windows的文件系统,linux目前支持MS-DOS,VFAT,FAT,BSD等格式,如果你使用的是Redhat或者CentOS,那么请不要妄图挂载NTFS格式的分区到linux下,因为它不支持NTFS。虽然有些版本的linux支持NTFS,但不建议使用,因为目前的技术还不成熟。但有时,的确会有这方面的需求,你可以安装ntfs-3g软件包来解决这个问题。 Ext3文件系统为早期版本Redhat/CentOS默认使用的文件系统,目前Ext4为默认文件系统,除了Ext3/Ext4文件系统外,有些linux发行版例如SuSE默认的文件系统为reiserFS, Ext3 独特的优点就是易于转换,很容易在 Ext2 和 Ext3 之间相互转换,而具有良好的兼容性,其它优点 ReiserFS 都有,而且还比它做得更好。如高效的磁盘空间利用和独特的搜寻方式都是Ext3 所不具备的,速度上它也不能和 ReiserFS相媲美,在实际使用过程中,reiserFS 也更加安全高效,据说反删除功能也不错。 ReiserFS 的优势在于,它是基于 B*Tree 快速平衡树这种高效算法的文件系统,例如在处理小于 1k 的文件比 Ext文件系统快10倍。再一个就是ReiserFS空间浪费较少,它不会对一些小文件分配 inode,而是打包存放在同一个磁盘块 (簇) 中,Ext是把它们单独存放在不同的簇上,如簇大小为 4k,那么 2 个 100 字节的文件会占用 2 个簇,ReiserFS则只占用一个。当然ReiserFS也有缺点,就是每升级一个版本,都要将磁盘重新格式化一次。 linux文件类型在前面的内容中简单介绍了普通文件 ‘-‘,目录 ‘d’ 等,在linux文件系统中,主要有以下几种类型的文件。 1)普通文件(regular file):就是一般类型的文件,当用 2)目录(directory):这个很容易理解,就是目录,跟windows下的文件夹一个意思,只不过在linux中我们不叫文件夹,而是叫做目录。 3)链接文件(link): 4)设备(device):与系统周边相关的一些档案,通常都集中在 /dev 这个目录之下! 通常又分为两种:块(block)设备 :就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘。例如你的一号硬盘的代码是 /dev/sda1, 第一个属性为 ‘b’;另一种是字符(character)设备 :是一些串行端口的接口设备,例如键盘、鼠标等等,第一个属性为 ‘c’. Linux文件后缀名 对于后缀名这个概念,相信你不陌生吧。在linux系统中,文件的后缀名并没有具体意义,也就是说,你加或者不加,都无所谓。但是为了容易区分,我们习惯给文件加一个后缀名,这样当用户看到这个文件名时就会很快想到它到底是一个什么文件。例如1.sh, 2.tar.gz, my.cnf, test.zip等等,如果你首次接触这些文件,你也许会感到很晕,没有关系,随着学习的深入,你就会逐渐的了解这些文件了。阿铭所列举的几个文件名中1.sh代表它是一个shell script ,2.tar.gz 代表它是一个压缩包,my.cnf 代表它是一个配置文件,test.zip 代表它是一个压缩文件。 另外需要你还需知道的是,早期Unix系统文件名最多允许14个字符,而新的Unix或者linux系统中,文件名最长可以到达 256 个字符! Linux的链接文件上面阿铭多次提到链接文件的概念,相信你早就想明白到底什么是链接文件。下面阿铭就来介绍一下这个链接文件的知识点。链接文件分为两种,硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别关键点在于inode. Hard Links : 当系统要读取一个文件时,就会先去读inode table,然后再去根据inode中的信息到块区域去将数据取出来。而hard link 是直接再建立一个inode链接到文件放置的块区域。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode, hard link 有两个限制:(1)不能跨文件系统,因为不同的文件系统有不同的inode table; (2) 不能链接目录。 Symbolic Links : 跟hard link不同,这个是建立一个独立的文件,而这个文件的作用是当读取这个链接文件时,它会把读取的行为转发到该文件所link的文件上。这样讲,也许比较绕口,那么就来举一个例子。现在有文件a,我们做了一个软链接文件b(只是一个链接文件,非常小),b指向了文件a。当读取b时,那么b就会把读取的动作转发到a上,这样就读取到了文件a。所以,当你删除文件a时,文件b并不会被删除,但是再读取b时,会提示无法打开文件。而,当你删除b时,a是不会有任何影响的。 看样子,似乎 hard link 比较安全,因为即使某一个 inode 被删掉了,只要有任何一个 inode 存在,那么该文件就不会消失不见!不过,不幸的是,由于 Hard Link 的限制太多了,包括无法做目录的link ,所以在用途上面是比较受限的!反而是 Symbolic Link 的使用方向较广!那么如何建立软链接和硬链接呢?这就用到了ln 命令。 命令: ln 语法 : ln 常用的选项就一个 ‘-s’, 如果不加就是建立硬链接,加上就建立软链接。 [root@localhost ~]# mkdir 123
[root@localhost ~]# cd 123
[root@localhost 123]# cp /etc/passwd ./
[root@localhost 123]# ll
总用量 4
-rw-r--r-- 1 root root 1097 5月 10 17:08 passwd
[root@localhost 123]# du -sk
8 .
[root@localhost 123]# ln passwd passwd-hard
[root@localhost 123]# ll
总用量 8
-rw-r--r-- 2 root root 1097 5月 10 17:08 passwd
-rw-r--r-- 2 root root 1097 5月 10 17:08 passwd-hard
[root@localhost 123]# du -sk
8 .
上例中的 ‘ll’ 命令等同于 ‘ls -l’, 请使用 ‘which’ 命令查看一下。做了硬链接后,虽然两个文件大小都为 ‘1097’, 但是目录的大小并没有变化。 [root@localhost 123]# ll
总用量 4
-rw-r--r-- 1 root root 1097 5月 10 17:08 passwd-hard
[root@localhost 123]# rm -f passwd
[root@localhost 123]# du -sk
8 .
删除源文件passwd, 空间依旧不变。这说明硬链接只是复制了一份inode信息。 [root@localhost ~]# ln 123 456
ln: "123": 不允许将硬链接指向目录
硬链接不能用于目录。 [root@localhost ~]# mkdir 456
[root@localhost ~]# cd 456
[root@localhost 456]# cp /etc/passwd ./
[root@localhost 456]# ln -s passwd passwd-soft
[root@localhost 456]# ll
总用量 4
-rw-r--r-- 1 root root 1097 5月 10 17:18 passwd
lrwxrwxrwx 1 root root 6 5月 10 17:19 passwd-soft -> passwd
[root@localhost 456]# head -n1 passwd-soft
root:x:0:0:root:/root:/bin/bash
[root@localhost 456]# head -n1 passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost 456]# rm -f passwd
[root@localhost 456]# head -n1 passwd-soft
head: 无法打开"passwd-soft" 读取数据: 没有那个文件或目录
[root@localhost 456]# ll
总用量 0
lrwxrwxrwx 1 root root 6 5月 10 17:19 passwd-soft -> passwd
如果删除掉源文件,则软链接文件不能读取了,而且使用 ‘ll’ 查看发现颜色也变了。 [root@localhost ~]# ln -s 456 789
[root@localhost ~]# ls -ld 456 789
drwxr-xr-x 2 root root 4096 5月 10 17:22 456
lrwxrwxrwx 1 root root 3 5月 10 17:29 789 -> 456
目录是可以软链接的。 知识面扩展学习:http://www.aminglinux.com/bbs/thread-5406-1-1.html 教程答疑: 请移步这里. 欢迎你加入 阿铭学院 和阿铭一起学习Linux,让阿铭成为你Linux生涯中永远的朋友吧!
|

浙公网安备 33010602011771号