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.

  1. 创建安装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)点 “下一步”–> 最后点 “完成”

  1. 配置虚拟光驱

此时还不能安装CentOS,还需要配置一下刚刚建立的虚拟机。点 “Edit virtual machine settings” –> 选择Floppy那一项,点下面的 “Remove”, 因为用不到软盘了,所以直接删除掉; CD-ROM 这一项是关键,需要在 “Use ISO image:” 前面点一下,然后点Browse, 选择你刚刚下载的CentOS镜像文件,最后点ok.

  1. 开始安装CentOS

点 “Start this vitrual machine” –> 鼠标点一下虚拟机的界面,进入虚拟机,否则不能进行后续操作(要想退出,需要同时按Alt + Ctrl),然后选择 “Install system with basic video driver” 回车 –> Disk Found 这是问你是否需要检测镜像文件,因为是从官方站点下载的镜像,肯定没有问题,所以我们选择 “skip” –> 点 “Next” –> 这一步是让我们选择在接下来的安装过程中需要使用的语言,我们选择 “chinese(simplified)(中文(简体))”,点 “Next” (到这里如果你发现,和阿铭的不一样,那肯定是你的虚拟机不支持图形显示,那么请直接跳到下一小节参考如何文本模式安装吧) –> 键盘这一项我们保持默认,即美国英式键盘, 点 “下一步” –> 使用的设备保持默认,点 “下一步” –> 如果弹出一个窗口提示 “处理驱动器时出错”,则需要我们选择 “重新初始化(R)”, 然后点 “下一步” –> 看一下时区是不是 “亚洲/上海”,如果是则点 “下一步”,否则就选择 “亚洲/上海”,点 “下一步” –> 输入根密码(root账户的密码), 你一定要记住哦,否则你进不了系统,反正是做实验,阿铭建议你输入123456, 点 “下一步” –> 接下来会问我们 “进行哪种类型的安装”,我们选择最后一项 “创建自定义布局”,即我们自定义分区,点 “下一步”

  1. 分区

此时就该分区 [2] 了,阿铭的虚拟机总共有一块16G的磁盘,我会这样划分:(1) /boot分区分100M (2) swap分区分2G (3) 剩余划分给 /分区。下面看看阿铭如何操作吧,先点 “创建”, 然后选择 “标准分区”, 再点 “生成”, 挂载点选/boot, 大小改为100, 最后点 “确定”,这样就创建成功了一个/boot分区 –> 依此类推,创建swap分区,创建时先不用选择挂载点,直接选择文件系统类型为swap,然后大小改为2048, 最后点 “确定” –> 最后创建一个/ 分区,挂载点选择 /, 大小不管,其他大小选项选择 “使用全部可用空间”, 最后点 “确定”,这样就按照阿铭先前构想的方案创建好分区了。然后点 “下一步”。 此时弹出警告,格式化会删除掉磁盘上的所有数据,我们选择 “格式化”, 然后又一次弹出警告,点击 “将修改写入磁盘(W)”

  1. 选择安装包

格式化完磁盘后,出现引导装载程序的选项,保持默认点击 “下一步” –> 目前的安装方案会最小化安装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、系统初始化、建立终端、用户登录系统。

  1. 内核引导

当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。紧接着由启动设备上的grub程序开始引导Linux,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的,我们就当它是一个黑匣子,反正是Linux内核做了一系列工作,最后内核调用加载了init程序,至此内核引导的工作就完成了。交给了下一个主角init.

  1. 运行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/目录下。

  1. 系统初始化

系统初始化,就是去执行/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也会被执行,通常我们会把开机启动执行的命令放到这个脚本下。服务执行完,系统初始化也就完成了。接下来该建立终端了。

  1. 建立终端

建立终端是由配置文件/etc/init/tty.conf, /etc/init/serial.conf和/etc/sysconfig/init等配置文件来完成的。在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户身份。

  1. 用户登陆系统

对于运行级别为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” 脚本文件,并执行它;然后如果用户的主目录中存在 .bash_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 切换至命令窗口。

学会使用快捷键

  1. Ctrl + C:这个是用来终止当前命令的快捷键,当然你也可以输入一大串字符,不想让它运行直接Ctrl + C,光标就会跳入下一行。
  2. Tab: 这个键是最有用的键了,也是阿铭敲击概率最高的一个键。因为当你打一个命令打一半时,它会帮你补全的。不光是命令,当你打一个目录时,同样可以补全,不信你试试。
  3. Ctrl + D: 退出当前终端,同样你也可以输入exit。
  4. Ctrl + Z: 暂停当前进程,比如你正运行一个命令,突然觉得有点问题想暂停一下,就可以使用这个快捷键。暂停后,可以使用fg 恢复它。
  5. Ctrl + L: 清屏,使光标移动到第一行。

学会查询帮助文档 — 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

讲解

  1. 不加任何选项也不跟目录 [1] 名或者文件名
会列出当前目录下的文件和目录,不包含隐藏文件。 [2]
  1. 加 “-a” 选项不加目录名或者文件名
会列出当前目录下所有文件和目录,含有隐藏文件。
  1. 加 “-l” 选项不加目录名或者文件名
会列出当前目录下除隐藏文件外的所有文件和目录的详细信息,包含其权限、所属主、所属组、以及文件创建日期和时间。
  1. 后面不加选项只跟文件名
会列出该文件,其实这样没有什么意思,通常都是加上一个 “-l” 选项,用来查看该文件的详细信息。
  1. 后面不加选项只跟目录名
会列出指定目录下的文件和目录

好了,关于”ls” 阿铭就讲这几个例子,当然它的可用选项还有很多哦,不过阿铭只给介绍最常用的。因为阿铭不想一股脑灌输给你太多知识点,那样没有什么用,但你也不用担心学不全,阿铭讲的知识点足够你日常工作和学习中用的了。如果实在是遇到不懂的选项,直接用 “man” 来查帮助文档吧。下面咱们回到先前的话题,接着讨论Linux的目录结构。

  • /bin bin是Binary的缩写。这个目录存放着最经常使用的命令。
  • /boot这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev dev是Device(设备)的缩写。该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
  • /etc这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /media Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下。
  • /mnt系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
  • /opt 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /selinux 这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
  • /srv 该目录存放一些服务启动之后需要提取的数据。
  • /sys 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs ,sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统种被创建。
  • /tmp这个目录是用来存放一些临时文件的。
  • /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
  • /usr/bin 系统用户使用的应用程序。
  • /usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src 内核源代码默认的放置目录。
  • /var这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

在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 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
  • shutdown -h 10 ‘ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。
  • shutdown -h now 立马关机
  • shutdown -h 20:25 系统会在今天20:25关机
  • shutdown -h +10 十分钟后关机
  • shutdown -r now 系统立马重启
  • shutdown -r +10 系统十分钟后重启
  • reboot 就是重启,等同于 shutdown -r now
  • halt 关闭系统,等同于shutdown -h now 和 poweroff

最后总结一下,不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。关机的命令有 shutdown -h now, halt, poweroff 和 init 0 , 重启系统的命令有 shutdown -r now, reboot, init 6.

忘记root密码怎么办

以前阿铭忘记windows的管理员密码,由于不会用光盘清除密码最后只能重新安装系统。现在想想那是多么愚笨的一件事情。同样Linux系统你也会遇到忘记root密码的情况,如果遇到这样的情况怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可。如何进入呢。

  1. 重启系统

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’.

  1. 进入单用户模式

输入 ‘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’,启动后就进入单用户模式。

  1. 修改root密码

输入修改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模式呢?

  1. 光盘启动

阿铭做实验用的是vmware虚拟机,设置光盘启动的步骤也许和你的不一样,但道理是一样的,相信聪明的你一定不会在这里出问题。开机启动,按F2进入bios设置,按方向键选择 “Boot” 那一项,然后使用上下方向键和+/-号来移动,最终让CD-ROM Drive 挪动到最上面一行。最后按F10, 再按回车进入光盘启动界面。

  1. 进入rescue模式

光盘启动后,使用上下方向键选择 ‘Rescue installed system’ 回车

  • 语言我们默认,直接回车
  • 键盘类型,也默认,直接回车
  • Rescue Method 也保持默认,因为我们使用的就是光驱里的光盘,回车
  • 这一步问我吗是否在使用rescue模式的时候启用网络,这个根据实际情况,在这里阿铭选择NO(使用tab键) 回车
  • 接下来这一步,提示我们Rescue 环境将会找到我们已经安装的Linux系统,并将其挂载到/mnt/sysimage 下,这一步阿铭将会选择 ‘Continue’ 然后回车
  • 回车后,将会看到一个小提示框,它告诉我们Linux系统挂载到了 “/mnt/sysimage” . 如果想获得root 环境,需要执行命令 “chroot /mnt/sysimage” 继续回车
  • 继续回车
  • 此时又出现一个框,有三种模式可以选择:shell 模式会直接进入命令行,可以进行的操作有编辑文件、修改用户密码等; fakd 是诊断模式; reboot 会直接重启; 这一步阿铭选择第一个shell模式,然后回车
  1. 进入root环境

此时还不能操作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生涯中永远的朋友吧!


[1] Linux下的目录其实就是windows里的文件夹,但通常我们都叫做目录,而不叫文件夹,希望你也要改一下这个习惯。
[2] Linux下的隐藏文件是通过文件名来控制的,所有的隐藏文件的文件名都是以 . 开头的,比如 .1.txt 这样1.txt就是隐藏文件了。

第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的方法:

  1. 自动获取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 依此类推。

  1. 手动配置IP

如果你的虚拟机不能自动获取IP,那么只能手动配置,配置方法为:

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

使用vi 命令打开 “/etc/sysconfig/network-scripts/ifcfg-eth0” 这个配置文件。关于命令 vi 阿铭会在后续章节详细介绍,暂时你只要了解这个命令是用来编辑文件的即可。输入上述命令后回车,打开了该配置文件。使用方向键的向下箭头让光标移动到最后面一行,然后按字母键 ‘o’,进入编辑模式,增加如下内容:

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”键,然后输入 :wq , 它会显示在屏幕的左下方,然后按回车,这样就保存该配置文件了。之后,需要重启一下网络服务:

[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的快捷键是 windows r.

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
  1. 利用vmware的NAT给Linux配置IP

这一部分内容,阿铭曾经在论坛里写过一个帖子 http://www.aminglinux.com/bbs/thread-626-1-1.html 如果你已经配置好IP且可以ping通,这一部分设置则不需要再做了,但有必要了解一下,也许有一天你会用到。这一部分配置适合这样的场景:你的办公网不能通过dhcp获得IP,或者你不想让你的Linux处在和办公网一个网段,而且也想让Linux上网。

  • 设置虚拟机上的nat
Edit –> Virtual Network setting –> NAT –> Vmnet 8 Gateway IP address : 192.168.205.2 Netmask : 255.255.255.0 NAT service: Started –> 确定
  • 修改虚拟机的网卡设置
双击虚拟机右下角的网卡小图标,鼠标移动过去后会显示 “Ethernet: ...” Device status 那两项都需要打对钩; Network connection 需要选择最后一项(Custom:Specific virtual network) 选择Vmnet8(NAT) 最后点ok
  • 到你的电脑上 [2]
右击”网上邻居” –> 属性 –> 右击 “VMware Network Adapter VMnet8” –> 属性 –> 双击 “Internet 协议(TCP/IP)” –> 手动设置IP为 192.168.205.1 子网掩码为 255.255.255.0 网关 和 dns 都设置为 192.168.205.2 –> 确定 –> 确定
  • 设置你虚拟机IP

在你的Linux上编辑eth0的配置文件 vi  /etc/sysconfig/network-scripts/ifcfg-eth0 内容如下:

DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0C:29:33:F7:3A
ONBOOT=yes
IPADDR=192.168.205.3
NETMASK=255.255.255.0
GATEWAY=192.168.205.2
  • 设置DNS地址

运行命令 vi  /etc/resolv.conf 内容如下:

nameserver 192.168.205.2
  • 重启网络服务
运行命令 service  network  restart

如果你遇到类似这样的问题:重启网络服务后,发现/etc/resolv.conf中设置的DNS地址消失了,你可以参考这个帖子解决你的问题:http://www.aminglinux.com/bbs/thread-5548-1-1.html

用putty登陆你的Linux

上一小节阿铭带你设置IP,就是给这一部分做铺垫,没有IP是没有办法远程连接Linux的。双击先前下载的putty.exe文件,这个小工具特别小巧仅仅有几百K,但是你可不要小看它,功能可是不少呢,而且这个工具的帮助文档够你看好几天的了,关键是全都是英文。如果你的英文能力差一些也没有关系,相信随着你用Linux越来越多,你的英文能力也会越来越强。

  • 填写远程Linux基本信息

Host Name (or IP address) 这一栏填写你在上一小节刚刚配置的IP,阿铭的Linux IP为 “10.72.137.85”.

Port 这一栏保持默认不变。

Connection type 也保持默认。

Saved Sessions 这里自定义一个名字,主要用来区分主机,因为将来你的主机会很多,写个简单的名字即方便记忆又能快速查找。

  • 定义字符集
计算机里最烦人的就是字符集了,尤其是Linux,搞不好就会乱码。阿铭在第3章教你安装CentOS时已经安装了中文语言支持,所以安装好的系统是支持中文的,在putty这里设置也要支持中文。点一下左侧的 “Window” –> “Translation”, 看右侧的 “Character set translation on received data”, 选择UTF-8. 之后再点一下左侧的 “Session”, 然后点右侧的 “save”.
  • 远程连接你的Linux

保存session后,点最下方的 “Open”. 初次登陆时,都会弹出一个友情提示,它的意思是要打开的Linux还未在本机登记,问我们是否要信任它。如果是可信任的,则点 ‘是’ 登记该主机,否则点 ‘否’ 或者 ‘取消’,我们当然要点 ‘是’. 之后弹出登陆提示:

login as: root
root@10.72.137.85's password:
Last login: Wed May  8 08:02:17 2013 from 10.72.137.89

输入用户名以及密码后,就登陆Linux系统了。登陆后会提示最后一次登陆系统的时间以及从哪里登陆。

使用密钥认证机制远程登录Linux

SSH服务支持一种安全认证机制,即密钥认证。所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密;另一个称为密钥(privatekey),只有拥有者才能看到,用于解密。通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。 ssh的密钥认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和密钥。如何使用密钥认证登录linux服务器呢?

  1. 下载生成密钥工具

在本章前面阿铭提供的putty下载地址里,你一定看到了很多可以下载的东西,不过阿铭只让你下载了一个putty.exe. 因为当时只用到这一个工具,其实完整的putty程序包含很多个小工具的,所以这次阿铭建议你直接下载个完整包 http://the.earth.li/~sgtatham/putty/latest/x86/putty.zip 下载后解压,其中puyttygen.exe就是咱们这一小节中所要用到的密钥生成工具。

  1. 生成密钥对

关于密钥的工作原理,如果你感兴趣可以到网上查一查,阿铭不想介绍太多无关知识点,不过,了解一下也没有什么不好。双击puttygen.exe, 右下角 “Number of bits in a generated key” 把 “1024” 改成 “2048”, 然后点 “Generate”, 这样就开始生成密钥了,请来回动一下鼠标,这样才可以快速生成密钥对,大约十几秒后就完成了。 “Key comment:” 这里可以保持不变也可以自定义,其实就是对该密钥的简单介绍; “Kye passphrase:” 这里用来给你的密钥设置密码,这样安全一些,当然也可以留空,阿铭建议你设置一个密码;”Confirm passphrase:” 这里再输入一遍刚刚你设置的密码。

  1. 保存私钥

点 “Save private key”, 选择一个存放路径,定义一个名字,点 “保存”。请保存到一个比较安全的地方,谨防丢掉或被别人看到。

  1. 复制公钥到Linux

回到刚才生成密钥的窗口,在 “Key” 的下方有一段长长的字符串,这一串就是公钥的内容了,把整个公钥字符串复制下来。然后粘贴到你的Linux的 /root/.ssh/authorized_keys 文件里。下面请跟着阿铭一起来做操作:

[root@localhost ~]# mkdir /root/.ssh
[root@localhost ~]# chmod 700 /root/.ssh

首先创建/root/.ssh 目录,因为这个目录默认是不存在的,然后是更改权限。 关于 mkdir 和 chmod 两个命令,阿铭会在后续章节详细介绍,暂时你只要知道是用来创建目录和更改权限的就行了。然后是把公钥内容粘贴进 /root/.ssh/authorized_keys 文件。

[root@localhost ~]# vi /root/.ssh/authorized_keys

回车后,按一下 ‘i’ 进入编辑模式,然后直接点击鼠标右键就粘贴了,这是putty工具非常方便的一个功能。粘贴后,按一下 ‘Esc’ 键,然后输入 :wq 回车保存退出该文件。

  1. 关闭Selinux

如果不关闭selinux, [3] 使用密钥登陆会提示 “Server refused our key”, 关闭方法:

[root@localhost ~]# setenforce 0

这个只是暂时命令行关闭selinux, 下次重启Linux后selinux还会开启。永久关闭selinux的方法是:

[root@localhost ~]# vi /etc/selinux/config

回车后,把光标移动到 “SELINUX=enforcing” 按一下 i 键,进入编辑模式,修改为

SELINUX=disabled

按 “Esc”, 输入 :wq 回车,然后重启系统

  1. 设置putty通过密钥登陆

打开putty.exe点一下你保存好的session,然后点右侧的 “Load”, 在左侧靠下面点一下 “SSH” 前面的 + 然后选择 “Auth”, 看右侧 “Private key file for authentication:” 下面的长条框里目前为空,点一下 “Browse”, 找到我们刚刚保存好的私钥,点”打开”。此时这个长条框里就有了私钥的地址,当然你也可以自行编辑这个路径。然后再回到左侧,点一下最上面的 “Session”, 在右侧再点一下 “Save”.

  1. 使用密钥验证登陆Linux

保存好后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生涯中永远的朋友吧!


[1] DHCP服务,是自动分配IP的服务,我们平时所在的办公室网络环境里,都有DHCP服务。另外家用的路由器像Tplink 或者 dlink 都有DHCP服务的功能。
[2] 这一部分阿铭是在windows XP上配置的,windows7 的配置道理也是一样的。
[3] selinux是Redhat、CentOS特有的安全机制,这个东西很复杂,我们从来都不要开启它,因为selinux开启后,会产生诸多莫名其妙的bug. 在后续章节中,阿铭会详细介绍它的。

第7章 Linux文件与目录管理

学习Linux请加QQ群: 群1(163262181) 群2(148412746) 群3(246401509) 群4(173884211)

跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。

本章主要介绍Linux系统里文本和目录的相关操作。有一句话: ‘在Linux里一切皆文件’, 是呀文件是Linux的基石,小到一个配置文件,大到一块磁盘都是用文件来控制的。这一部分内容比较基础,有较多基础命令出现,希望你多练习,多使用。用的多了自然而然就熟练了。

绝对路径和相对路径

在Linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 这就是一个文件的路径。如果你告诉系统这个文件的路径,那么系统就可以找到这个文件。在Linux的世界中,存在着绝对路径和相对路径。

绝对路径:路径的写法一定由根目录 ‘/’写起,例如 /usr/local/mysql 这就是绝对路径。

相对路径:路径的写法不是由根目录 ‘/’写起,例如,首先用户进入到/, 然后再进入到home ,命令为 cd/home 然后 cd  test 此时用户所在的路径为 /home/test 第一个cd命令后跟 ‘/home’ 第二个cd命令后跟 ‘test’, 并没有斜杠,这个 ‘test’ 是相对于 ‘/home’ 目录来讲的,所以叫做相对路径。

命令:cd

这个命令是用来变更用户所在目录的,后面如果什么都不跟,就会直接到当前用户的根目录下,我们做实验用的是 ‘root’ 账户,所以运行 cd 后,会进入root账户的根目录 ‘/root’. 后面跟目录名,则会直接切换到指定目录下:

[root@localhost ~]# cd /tmp/
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# cd
[root@localhost ~]# pwd
/root

pwd 这个命令打印出当前所在目录,cd 后面只能是目录名,而不能是文件名,如果跟了文件名会报错:

[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

上例中,首先进入到 /usr/local/lib/ 目录下,然后再进入 ./ 其实还是进入到当前目录下,用 pwd 查看当前目录,并没有发生变化,然后再进入 ../ 则是进入到了 /usr/local/ 目录下,即 /usr/local/lib 目录的上一级目录。

命令: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

当我们想创建 /tmp/test/123 目录,可是提示不能创建,原因是 /tmp/test 目录不存在,你会说,这个Linux怎么这样傻,/tmp/test 目录不存在就自动创建不就OK了嘛,的确Linux确实很傻,如果它发现要创建的目录的上一级目录不存在就会报错。然而Linux并不是那么傻,因为它也为我们想好了解决办法,即 ‘-p’ 选项,这个选项可以帮我们创建一大串级联目录,这个选项还有一个好处,那就是当你创建一个已经存在的目录时,不会报错:

[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

在上一章节里,阿铭已经介绍过 ls 命令,但是并没有向你介绍它的 ‘-d’ 选项,这个选项是针对目录的,通常都是和 ‘-l’ 同时使用写成 ‘-ld’. 它可以查看指定目录的属性,比如在本例中,它可以查看 ‘/tmp/test/123’ 目录的创建时间。 mkdir -p 后面跟一个已经存在的目录名时,它不会做任何事情,只是不报错而已。

命令:rmdir

用来删除空目录,后面可以是一个也可以是多少,多个的话用空格分隔。该命令阿铭很少使用,因为它只能删除目录,不能删除文件,还有一个命令 rm 既可以删除目录又可以删除文件,阿铭用的比较多。rmdir 有一个和mkdir一样的选项 ‘-p’, 同样可以级联删除一大串目录,但是级联的目录中其中一个目录里还有目录或者文件时就不好用了。

[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’ 同样也有很多选项。你可以通过 man rm 来获得详细帮助信息。在这里阿铭只介绍最常用的两个选项。

‘-r’ : 删除目录用的选项,等同于rmdir.

[root@localhost ~]# mkdir -p /tmp/test/123
[root@localhost ~]# rm -r /tmp/test/123
rm:是否删除目录 '/tmp/test/123'? y

但是和rmdir不同的是,使用 rm -r 删除目录时,会问一下是否删除,如果输入 ‘y’ 则会删除,输入 ‘n’ 则不删除。当然 rm -r 也不会向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

在讲环境变量之前阿铭先介绍一个命令 which, 它用来查找某个命令的绝对路径。

[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 命令做了别名。我们用的 ‘rm’ 实际上是 ‘rm -i’ 加上 ‘-i’ 选项后,删除文件或者命令时都会问一下是否确定要删除,这样做比较安全。 ‘alias’ 可以设置命令的别名也可以设置文件的别名,阿铭会在以后章节中详细介绍。 ‘which’ 这个命令阿铭平时只用来查询某个命令的绝对路径,不常使用。

上边提到了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 当中!如何增加?可以使用命令 PATH=$PATH:/root:

[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的简写,即拷贝。格式为 cp  [选项]  来源文件 [目的文件] ,例如我想把test1 拷贝成test2 ,这样即可 cp test1 test2,以下介绍几个常用的选项:

-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的简写。格式为 mv  选项 [源文件] [目标文件] 下面介绍几个常用的选项。

-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’ 一样,用来把文件的内容显示在屏幕上,只不过是先显示最后一行,然后是倒数第二行,最后显示的是第一行。

[root@localhost ~]# tac dirb/filee
222222222
111111111

命令: 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 选项。如:tail -f /var/log/messages 该选项特别特别常用,请熟记。

文件的所属主以及所属组

一个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外的其他用户是不能打开这个目录的。

关于第一列的最后一位的 .,阿铭要说一下,之前的CentOS 5 是没有这个点的,这主要是因为新版本的ls把selinux或者acl的属性加进来了,当文件或者目录只使用了selinux context的属性,这里是一个点。如果设置了acl,后面将是一个加号 ‘+’. 关于selinux 和 acl 阿铭不再详细介绍,你只要了解是怎么回事即可,如果你感兴趣可以网上搜索相关知识也可以通过阿铭在本章后面提供的扩展学习链接进行学习。

第2列,表示为链接占用的节点(inode), [1] 为目录时,通常与该目录底下还有多少目录有关系。

第3列,表示该文件的所属主。

第4列,表示该文件的所属组。

第5列,表示该文件的大小。

第6列、第7列和第8列为该文件的最近的修改日期,分别为月份日期以及时间,也就是所谓的mtime.

第9列,文件名。

更改文件的权限

  1. 更改所属组 chgrp

语法:chgrp  [组名]  [文件名]

[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’ 命令阿铭使用的不多,因为还有一个命令可以替代。

  1. 更改文件的所属主 chown

语法: chown -R 账户名 文件名 chown -R 账户名:组名 文件名

这里的-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.

  1. 改变用户对文件的读写执行权限 chmod

在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.

chmod 语法: chmod [-R] xyz 文件名 (这里的xyz,表示数字)

‘-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  xxx (这里的xxx代表三个数字)

查看umask值只要输入 ‘umask’ 然后回车。

[root@localhost ~]# umask
0022

umask预设是0022,其代表什么含义?先看一下下面的规则:

1)若用户建立为普通文件,则预设 ‘没有可执行权限’, 只有’rw’两个权限。最大为666 (‘-rw-rw-rw-‘).

2)若用户建立为目录,则预设所有权限均开放,即777 (‘drwxrwxrwx’).

umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限。所以目录的权限为 'rwxrwxrwx' '----w--w-' 'rwxr-xr-x',普通文件的权限为 'rw-rw-rw-' '----w--w-' 'rw-r--r--'. umask的值是可以自定义的,比如设定umask 为 002,你再创建目录或者文件时,默认权限分别为'rwxrwxrwx' '-------w-' 'rwxrwxr-x' 和 'rw-rw-rw-' '-------w-' 'rw-rw-r--'.

[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 可以在 /etc/bashrc 里面更改,预设情况下,root的umask为022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限。

  1. 修改文件的特殊属性

命令 : chattr

语法: chattr  [+-=][ASaci [文件或者目录名]

‘+-=’ : 分别为增加、减少、设定

‘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

该命令用来读取文件或者目录的特殊权限,语法为 lsattr  [-aR] [文件/目录名]

‘-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下搜索功能更加强大。

  1. ‘which’ 用来查找可执行文件的绝对路径。

在前面已经用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件。这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which 一下很容易就知道了。

  1. ‘whereis’ 通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件。

语法: whereis [-bmsu]  [文件名称]

‘-b’ : 只找binary 文件

‘-m’ : 只找在说明文件manual路径下的文件

‘-s’ : 只找source来源文件

‘-u’ : 没有说明档的文件

说明:whereis 阿铭几乎很少用到,如果你感兴趣请深入研究。

  1. ‘locate’ 类似于’whereis’, 也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里。

后边直接跟文件名。如果你的linux没有这个命令,请安装软件包 ‘mlocate’, 这个软件包在你的系统安装盘里,后缀名是RPM,随后介绍的find命令会告诉你如何查找这个包。如果你装的CentOS你可以使用这个命令来安装 yum install -y  mlocate 前提是你的CentOS能连网。至于yum这个命令如何使用,到后续章节你自然会明白。如果你刚装上这个命令,初次使用会报错。

[root@localhost ~] # locate passwd
locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory

这是因为系统还没有生成那个文件列表库。你可以使用 updatedb 命令立即生成(更新)这个库。如果你的服务器上正跑着重要的业务,那么你最好不要去运行这个命令,因为一旦运行,服务器的压力会变大。这个数据库默认情况下每周更新一次。所以你用locate命令去搜索一个文件,正好是在两次更新时间段内,那你肯定是得不到结果的。你可以到/etc/updated.conf 去配置这个数据库生成(更新)的规则。’locate’所搜索到的文件列表,不管是目录名还是文件名,只要包含我们要搜索的关键词,都会列出来,所以’locate’不适合精准搜索,这个命令阿铭使用的也并不多,你只要明白有这么一个工具即可,用到时再去深究其用法吧。

  1. ‘find’ 这个搜索工具是阿铭用的最多的一个,所以请你务必要熟悉它。

语法 : find  [路径] [参数] 下面介绍几个阿铭经常用的参数

‘-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):就是一般类型的文件,当用 ls -l 查看某个目录时,第一个属性为 ‘-‘ 的文件就是正规文件,或者叫普通文件。正规文件又可分成纯文字文件(ascii)和二进制文件(binary)。纯文本文件是可以通过cat, more, less等工具直接查看内容的,而二进制文件并不能。例如我们用的命令/bin/ls 这就是一个二进制文件。

2)目录(directory):这个很容易理解,就是目录,跟windows下的文件夹一个意思,只不过在linux中我们不叫文件夹,而是叫做目录。ls -l 查看第一个属性为 ‘d’.

3)链接文件(link):ls -l 查看第一个属性为 ‘l’, 类似windows下的快捷方式。这种文件在linux中很常见,而且阿铭在日常的系统运维工作中用的很多,所以你要特意留意一下这种类型的文件。在后续章节阿铭会介绍。

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]  [来源文件]  [目的文件]

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生涯中永远的朋友吧!


[1]

inode 译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间信息、文档名、属主以及属组等。Inode是Unix操作系统中的一种数据结构,本质是结构体,inode是随文件系统创建时生成的,它的个数有限。在Linux下,可以通过 df -i 来查看各个分区的inode数量。

第8章 Linux系统用户及用户组管理

学习Linux请加QQ群: 群1(163262181) 群2(148412746) 群3(246401509) 群4(173884211)

跟阿铭学Linux邀请函 (http://www.aminglinux.com),猿课已上线,请加微信aminglinux84索要配套视频教程。

关于这部分内容,阿铭在日常的linux系统管理工作中用到的并不多,但这并不代表该内容不重要。毕竟linux系统是一个多用户的系统,每个账号都干什么用,你必须了如指掌。因为这涉及到一个安全的问题。

认识/etc/passwd和/etc/shadow

这两个文件可以说是linux系统中最重要的文件之一。如果没有这两个文件或者这两个文件出问题,则你是无法正常登录linux系统的。

[root@localhost ~]# cat /etc/passwd | head
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

你是不是对上面的命令有点不知所以,”head” 前面的 “|” 我们叫做管道符,它的作用是把前面的命令的输出再输入给后面的命令。管道符会在后面章节中提及,这个符号用的也是蛮多的,请掌握它的用法。

‘/etc/passwd’ 由 ‘:’ 分割成7个字段,每个字段的具体含义是:

1)用户名(如第一行中的root就是用户名),代表用户账号的字符串。用户名字符可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。

2)存放的就是该账号的口令,为什么是 ‘x’ 呢?早期的unix系统口令确实是存放在这里,但基于安全因素,后来就将其存放到 ‘/etc/shadow’ 中了,在这里只用一个 ‘x’ 代替。

3)这个数字代表用户标识号,也叫做uid。系统识别用户身份就是通过这个数字来的,0就是root,也就是说你可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。通常uid的取值范围是0~65535(但实际上已经可以支持到4294967294),0是超级用户(root)的标识号,1~499由系统保留,作为管理账号,普通用户的标识号从500开始,如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于500的。

4)表示组标识号,也叫做gid。这个字段对应着/etc/group 中的一条记录,其实/etc/group和/etc/passwd基本上类似。

5)注释说明,该字段没有实际意义,通常记录该用户的一些属性,例如姓名、电话、地址等等。不过,当你使用finger的功能时就会显示这些信息的(稍后做介绍)。

6)用户的家目录,当用户登录时就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,这个字段是可以自定义的,比如你建立一个普通用户test1,要想让test1的家目录在/data目录下,只要修改/etc/passwd文件中test1那行中的该字段为/data即可。

7)shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有很多种sh, csh, ksh, tcsh, bash等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash.

再来看看/etc/shadow这个文件,和/etc/passwd类似,用 ‘:’ 分割成9个字段。

[root@localhost ~]# cat /etc/shadow |head -n 3
root:$6$Wo0kPkgm$OAp0Wl2AsaE4ei4YVbxo3DIU5OBSYxn1y7qxB5Jns70Yk91AvzElsR5GmoGCC8DUXkKzK7vyiV8wXNeaWNm861:15832:0:99999:7:::
bin:*:15628:0:99999:7:::
daemon:*:15628:0:99999:7:::

每个字段的含义是:

1)用户名,跟/etc/passwd对应。

2)用户密码,这个才是该账号的真正的密码,不过这个密码已经加密过了,但是有些黑客还是能够解密的。所以,该文件属性设置为000,但是root账户是可以访问或更改的。

[root@localhost ~]# ls -l /etc/shadow
---------- 1 root root 719 5月  10 09:02 /etc/shadow

3)上次更改密码的日期,这个数字是这样计算得来的,距离1970年1月1日到上次更改密码的日期,例如上次更改密码的日期为2012年1月1日,则这个值就是 ‘365 x (2012-1970) + (2012-1970)/4 + 1 = 15341’. 因为如果是闰年,则有366天。

4)要过多少天才可以更改密码,默认是0,即不限制。

5)密码多少天后到期。即在多少天内必须更改密码,例如这里设置成30,则30天内必须更改一次密码,否则将不能登录系统,默认是99999,可以理解为永远不需要改。

6)密码到期前的警告期限,若这个值设置成7,则表示当7天后密码过期时,系统就发出警告告诉用户,提醒用户他的密码将在7天后到期。

7)账号失效期限。你可以这样理解,如果设置这个值为3,则表示:密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,则这个账号就失效了,即锁定了。

8)账号的生命周期,跟第三段一样,是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号作废。

9)作为保留用的,没有什么意义。

新增/删除用户和用户组

  1. 新增一个组

命令 : groupadd

语法 : groupadd [-g GID] groupname

[root@localhost ~]# groupadd grptest1
[root@localhost ~]# tail -n1 /etc/group
grptest1:x:502:

不加 “-g” 选项则按照系统默认的gid创建组,跟用户一样,gid也是从500开始的。

[root@localhost ~]# groupadd -g 511 grptest2
[root@localhost ~]# tail -n2 /etc/group
grptest1:x:502:
grptest2:x:511:

“-g” 选项可以自定义gid.

  1. 删除组

命令 : groupdel

[root@localhost ~]# groupdel grptest2
[root@localhost ~]# tail -n3 /etc/group
testgroup:x:500:
user1:x:501:
grptest1:x:502:

该命令没有特殊选项,但有一种情况不能删除组:

[root@localhost ~]# groupdel user1
groupdel: cannot remove the primary group of user 'user1'

这是因为user1组中包含user1账户,只有删除user1账户后才可以删除该组。

  1. 增加账户

命令 : useradd

语法 : useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]

‘-u’ 自定义UID

‘-g’ 使其属于已经存在的某个组,后面可以跟组id, 也可以跟组名

‘-d’ 自定义用户的家目录

‘-M’ 不建立家目录

‘-s’ 自定义shell

[root@localhost ~]# useradd test10
[root@localhost ~]# tail -n1 /etc/passwd
test10:x:500:503::/home/test10:/bin/bash
[root@localhost ~]# tail -n1 /etc/group
test10:x:503:

‘useradd’ 不加任何选项直接跟用户名,则会创建一个跟用户名同样名字的组。

[root@localhost ~]# useradd -u510 -g 513 -M -s /sbin/nologin user11
useradd: group '513' does not exist
[root@localhost ~]# useradd -u510 -g 502 -M -s /sbin/nologin user11
[root@localhost ~]# useradd -u511 -g grptest1 user12
[root@localhost ~]# tail -n2 /etc/passwd
user11:x:510:502::/home/user11:/sbin/nologin
user12:x:511:502::/home/user12:/bin/bash
[root@localhost ~]# tail -n2 /etc/group
grptest1:x:502:
test10:x:503:

‘-g’ 选项后面跟一个不存在的gid会报错,提示该组不存在。刚刚上面说过 ‘-M’ 选项加上后则不建立用户家目录,但是在/etc/passwd文件中仍然有这个字段。但是你使用 ls /home/user11 查看一下会提示该目录不存在。所以 ‘-M’ 选项的作用只是不创建那个目录。

[root@localhost ~]# ls /home/user11
ls: 无法访问/home/user11: 没有那个文件或目录
  1. 删除账户

命令 : userdel

语法 : userdel [-r] username

[root@localhost ~]# ls -ld /home/user12
drwx------ 3 user12 grptest1 4096 5月  11 07:12 /home/user12
[root@localhost ~]# userdel user12
[root@localhost ~]# ls -ld /home/user12
drwx------ 3 511 grptest1 4096 5月  11 07:12 /home/user12
[root@localhost ~]# ls -ld /home/test10/
drwx------ 3 test10 test10 4096 5月  11 07:09 /home/test10/
[root@localhost ~]# userdel  -r test10
[root@localhost ~]# ls -ld /home/test10/
ls: 无法访问/home/test10/: 没有那个文件或目录

‘-r’ 选项的作用只有一个,就是删除账户的时候连带账户的家目录一起删除。

chfn 更改用户的finger (不常用)

阿铭几乎没有用过这个功能,只简单介绍一下即可,而你也许了解一下即可。前面内容中提到了findger,即在/etc/passwd文件中的第5个字段中所显示的信息,那么如何去设定这个信息呢?

[root@localhost ~]# chfn user11
Changing finger information for user11.
Name []: user11
Office []: user11's office
Office Phone []: 12345678
Home Phone []: 123456789

Finger information changed.
[root@localhost ~]# grep 'user11' /etc/passwd
user11:x:510:502:user11,user11's office,12345678,123456789:/home/user11:/sbin/nologin

‘chfn’ 命令可以修改用户的findger信息,比如name, office, office phone 以及 Home phone.修改完后,就会在/etc/passwd文件中的user11的那一行第五个字段中看到相关信息了,默认是空的。 在本例中,阿铭使用了 “grep” 命令,它是用来过滤指定关键词的行,阿铭会在以后的章节中详细介绍它的用法。

创建/修改一个用户的密码

命令 : passwd

语法 : passwd [username]

等创建完账户后,默认是没有设置密码的,虽然没有密码,但该账户同样登录不了系统。只有设置好密码后方可登录系统。为用户创建密码时,为了安全起见,请尽量设置复杂一些。你可以按照这样的规则来设置密码:

  1. 长度大于10个字符;
  2. 密码中包含大小写字母数字以及特殊字符 ‘*’, ‘&’, ‘%’ 等;
  3. 不规则性(不要出现root, happy, love, linux, 7758520, 111111等等单词或者数字);
  4. 不要带有自己名字、公司名字、自己电话、自己生日等。
[root@localhost ~]# passwd
更改用户 root 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

“passwd” 后面不加username则是修改当前账户的密码。如果你登陆的是root账户,后面可以跟普通账户的名字,意思是修改指定账户的密码。

[root@localhost ~]# passwd user11
更改用户 user11 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

只有root才可以修该其他账户的密码,普通账户只能修改自己的密码,其他账户的密码是不可以修改的。

命令 : mkpasswd

这个命令阿铭经常用来生成密码,省的自己去想。默认你的Linux是没有这个命令的,需要安装一个包 “expect”, 如果你的CentOS可以上网,请使用命令 yum install -y expect 即可完成安装。安装好后,输入命令:

[root@localhost ~]# mkpasswd
HXut8oy*8

生成的随机字符串就可以作为一个密码,只不过这个密码不容易记忆,没有关系,阿铭等会介绍一个小工具来帮你记录密码,而且很安全。

用户身份切换

Linux系统中,有时候普通用户有些事情是不能做的,除非是root用户才能做到。这时就需要临时切换到root身份来做事了。下面阿铭带你做一个小实验,创建 “test” 账户,并修改其密码,这样我们就可以使用test账户登陆Linux了。

[root@localhost ~]# useradd test
[root@localhost ~]# passwd test
更改用户 test 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

然后用test账户登陆Linux.

login as: test
test@10.72.137.78's password:
[test@localhost ~]$ whoami
test

登陆后,使用 “whoami” 命令可以查看当前用户是谁。

命令su

语法 : su [-] username

后面可以跟 ‘-‘ 也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样可以su到普通用户。 ‘-‘ 这个字符的作用是,加上后会初始化当前用户的各种环境变量,关于环境变量这部分内容阿铭放在后面的章节中讲解。 下面阿铭做个简单的实验来说明加与不加 ‘-‘ 的区别:

[test@localhost ~]$ pwd
/home/test
[test@localhost ~]$ su
密码:
[root@localhost test]# pwd
/home/test
[root@localhost test]# exit
exit
[test@localhost ~]$ su -
密码:
[root@localhost ~]# pwd
/root

如果不加 ‘-‘ 切换到root账户下时,当前目录没有变化,而加上 ‘-‘ 切换到root账户后,当前目录为root账户的家目录,这跟直接登陆root账户是一样的。当用root切换普通用户时,是不需要输入密码的。这也体现了root用户至高无上的权利。

命令 : sudo

用su是可以切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那岂不是系统非常的不安全?没有错,为了改进这个问题,产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用 visudo 命令去编辑相关的配置文件/etc/sudoers. 如果没有visudo这个命令,请使用 yum install -y sudo 安装。

默认root能够sudo是因为这个文件中有一行 “root ALL=(ALL) ALL” 在该行下面加入 “test ALL=(ALL) ALL” 就可以让test用户拥有了sudo的权利。使用 “visudo” 命令编辑/etc/sudoers配置文件,其实它的操作方法和前面阿铭介绍的 “vi” 命令使用方法是一样的,按 ‘i’ 进入编辑模式,编辑完成后,按 “Esc” ,再输入 ”:wq” 完成保存。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       ALL

此时可以验证一下test账户的权限了。

[root@localhost ~]# su test
[test@localhost root]$ ls
ls: 无法打开目录.: 权限不够
[test@localhost root]$ sudo ls

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for test:
123  456  789  anaconda-ks.cfg  dirb  install.log  install.log.syslog  test  test1  test2  test3

由于切换到test账户后的当前目录依旧是在/root 下,test账户没有任何权限,所以 ‘ls’ 的时候提示说权限不够,然而使用 sudo ls 输入test账户自身的密码后就有权限了。初次使用sudo 时会有上面的一大段提示,而后再次使用sudo 命令则不再提示。

如果每增加一用户就设置一行,这样太麻>烦了。所以你可以这样设置。把 “# %wheel ALL=(ALL) ALL” 前面的 ‘# ‘ 去掉,让这一行生效。它的意思是,wheel这个组的所有用户都拥有了sudo的权利。接下来就需要你把想让有sudo权利的所有用户加入到wheel这个组中即可。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

配置文件/etc/sudoers包含了诸多配置项,可以使用命令 man sudoers 来获得帮助信息。下面阿铭介绍一个很实用的案例,我们的需求是把Linux服务器设置成这个样子:只允许使用普通账户登陆,而普通账户登录后,可以不输入密码就能sudo切换到root账户。下面但是阿铭的配置:

[root@localhost ~]# visudo

然后在文件的最后面加入三行:

User_Alias USER_SU = test, test1, aming
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD: SU

保存配置文件后,使用test, test1, aming 三个账户登陆Linux后,执行命令 sudo su - 切换到root账户,获取root账户的所有权利。

[root@localhost ~]# su - test
[test@localhost ~]$ sudo su -
[root@localhost ~]# whoami
root

而不让root直接登陆,这个简单,设置一个非常复杂连自己都记不住的密码。不过这样也有一个问题,就是普通用户可以su到root,然后他再自己修改简单的密码就能直接root登陆了不是嘛?的确有这个问题,其实阿铭还有一个更好的办法,会在后面的扩展学习章节中介绍。

使用密码记录工具keepass来保存密码

在第3章,阿铭曾经给过你建议,密码不要保存在文档中,那样不安全,如果密码很多而且又很复杂,人的大脑是不可能很容易记住的,只能记录下来,如果不能记在文档中那记在哪里呢?阿铭介绍给你一款记录密码的软件,是在windows上用的哦!它就是keepass.

Keepass官网地址是: http://www.keepass.info 在官网keepass是这样被形容的: The free, open source, light-weight and easy-to-use password manager. 没错,这款软件是免费的、开源的、容易使用轻量级的密码管理工具。

我们下载最新版本的keepass,当前最新的发行版本为2.22,下载地址:http://downloads.sourceforge.net/keepass/KeePass-2.22-Setup.exe 下载后安装它。安装过程没有什么可说的,直接next一直到安装完成。

  1. 安装好后,运行keepass,首先创建一个新的密码库文件。

点菜单栏 “file” 然后选择 “new” , 为密码库文件找一个安全的地方存放。接下来,为我们的密码文件创建一个 “master password” , 这个密码以后每次我们查看密码的时候都需要输入,输入正确后才可以查看,这样的设计也是为了安全。设置好密码后连续点两个 “ok” 完成创建密码库文件。

  1. 增加一个group

鼠标选中左侧的 “NewDatebase”, 点右键选择 “Add Group”, 单击后创建新组,然后更改组名,比说叫做 “test”. 当然组下面还可以创建组,方法一样的。

  1. 创建一个Entry

鼠标左键先点一下刚才创建的组 “test” , 然后在右侧空白处右键单击,选择 “Add Entry”. 弹出一个会话窗口,Title 自定义,方便我们以后查找; User name 用来记录密码的用户是谁; Password 这个默认就存在了,也可以更改,点一下后面的 ”...” 图标可以查看密码的内容,再点一下变为不可见状态; URL 用来记录网址,方便我们跳转,比如这个密码为某个网站的某个会员的密码,那如果在这里填写了该网址地址,则可以直接跳转到那个网站,可以留空;Notes 用来写一些与这个密码相关的信息,方便我们记忆,可以留空。

  1. 修改Entry信息

在右侧窗口,选中要修改的Entry那行,鼠标移动到Title区域,双击则会跳出一个会话窗口,我们可以更改Entry的各项信息。

  1. 获取Entry密码

同样是在右侧窗口,选中要获取的密码那行,鼠标移动到Password区域,直接双击,就把密码复制到剪切板了,密码会在剪切板中保存12s,过期会失效,所以你应该在12s内把密码粘贴。

阿铭建议你最好再扩展学习一下: http://www.aminglinux.com/bbs/thread-5409-1-1.html

教程答疑: 请移步这里.

欢迎你加入 阿铭学院 和阿铭一起学习Linux,让阿铭成为你Linux生涯中永远的朋友吧!

posted @ 2016-10-16 23:09  瓜牛很牛  阅读(377)  评论(0)    收藏  举报