赞
踩
第1章Linux概述
1.1 Linux简介
1.1.1 Linux是什么
Linux是一套免费使用操作系统,是一个基于多用户、多任务、支持多线程和多CPU的操作系统。它支持32位和64位硬件,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间),是由芬兰人Linus Benedict Torvalds(李纳斯.托沃兹,如图1-1所示)创造的。Linux存在着许多不同的Linux发行版本,经典的发行版本有CentOS、Red Hat红帽子、Debian、Ubuntu等,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核。
1.1.2 Linux的特色
基本思想
Linux的基本思想有两点:第一,一切都是文件。第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。
完全免费
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
完全兼容
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
多用户、多任务
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
良好的界面
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。
支持多种平台
Linux可以运行在多种硬件平台上,如具有x86、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。
1.1.3 linux发行版本介绍
Linux操作系统,也即是由Linux内核与各种常用软件的集合产品,全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和目标人群,所以绝不能一概而论谁是第一,谁是第二。
1.RHEL红帽
Red hat,应该称为Redhat系列,Redhat是国内使用人群最多的Linux版本,以至于有的人将Redhat等同于Linux,而有些老手更是只用这一个版本的Linux。所以有什么不明白的地方,很容易找到人来问,而且网上的Linux教程基本都是以Redhat为例来讲解。
2.CentOS
社区企业操作系统(Community Enterprise Operating System,Centos),来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。
CentOS 是RHEL源代码再编译的产物,而且在RHEL的基础上修正了不少已知的 Bug ,相对于其他 Linux 发行版,其稳定性值得信认。
Centos根据RHEL的源代码进行二次编译,并去掉RHEL相关的图标等具有商业版权的信息后形成与RHEL版本相对应的 CentOS发行版。虽然 CentOS是根据RHEL源代码编译而成的,但 CentoS与RHEL仍有许多不同之处:
RHEL中包含了红帽子自行开发的闭源软件(如红帽集群套件等),这些软件并未开放源代码,因此也就未包含在 CentoS发行版中。
CentoS发行版通常会修改RHEL中存在的一些bug,并提供了一个yum源以便用户
与RHEL提供商业技术支持不同, Centos并不提供任何形式的技术支持,用户遇到的问题需要自行解决,因此 CentOS对技术人员的要求更高。
RHEL与 CentOS还有许多不同之处,此处不一一列举,感兴趣的读者可以参考相关资料了解。值得注意的是2014年初, CentOS与 Red Hat同时宣布, CentoS将加入 Red Hat,共同打造 CentOS,业界普遍希望此举能让 CentOS操作系统更加强大。
虽然 CentOS的技术门槛更高,但其稳定、安全、高效等特点吸引了一大批经验丰富的IT管理人员加入,从近些年来的使用情况来看,其发展非常迅猛。许多IT企业都在使用CentOS,其中不乏像淘宝、网易等IT巨头。
3.Debian
应该称为Debian 系列,包括Debian和Ubuntu等。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。提供了接近十万种不同的开源软件支持,在国外用于很高的认可度和使用率。对于各类内核架构支持性良好,稳定性、安全性强更有免费的技术支持。
4.Ubuntu
Ubuntu是一款基于Debian派生的操作系统(严格来说不能算一个独立的发行版本),对新款硬件具有极强的兼容能力。 特点是界面非常友好,容易上手,对硬件支持非常全面,是最适合做桌面系统的Linux发行版本,同时Ubuntu也可用于服务器领域。
Ubuntu的目标在于为一般用户提供一个最新的,同时又相对稳定的主要自由软件构建而成的操作系统。Ubuntu具有强大的社区力量,用户可以方便地从社区获取帮助。
1.1.4 Linux的体系架构
Linux系统一般由以下几个主要部分组成:硬件(Computer Resources)、内核(Kernel)、Shell、文件系统(File System)和应用程序。内核,Shell和文件系统一起构成基本的操作系统结构,用户可以运行程序,管理文件和使用系统。层次结构如下图:
1.1.5 Linux的主要应用领域
由于Linux开放源代码,降低了对封闭源代码软件潜在安全性的忧虑,这使得Linux操作系统拥有广泛的应用领域。目前,Linux的应用领域主要包括以下几个方面。
1. 桌面应用领域
目前,Windows操作系统在桌面应用中一直占据绝对的优势,但是随着Linux操作系统在图形用户界面和桌面应用软件方面的发展,Linux在桌面应用方面也得到了显著的提高,越来越多的桌面用户转而使用Linux。事实也证明,Linux已经能够满足用户办公,娱乐和信息交流的基本需求。不过,Linux在桌面应用市场上的占有率不高。如今新版本的Linux系统特别在桌面应用方面进行了改进,达到了更高的水平,完全可以作为一种集办公应用,多媒体应用,网络应用等多方面功能于一体的图形界面操作系统。
2. 高端服务器领域
Linux在服务器领域扮演者领军者角色,这在很大程度上得益于它具有稳定性,安全性,开放源代码,总体拥有成本较低等优点。根据调查,Linux操作系统在服务器市场上占有率已经超过50%。由于Linux可以提供企业网络环境所需的各种网络服务,加上Linux服务器可以提供虚拟专用网络(VPN)或充当路由器与网关,因此在不同操作系统互相竞争的情况下,企业只需要掌握Linux技术并配合系统整合与网络等技术,便能够享有低成本,高可靠性的网络环境。
3. 嵌入式应用领域
在通常情况下,嵌入式及信息家电的操作系统支持所有的运算功能,但是需要根据实际应用对其内核进行定制和裁剪,以便为专用的硬件提供驱动程序,并在此基础上开发应用。目前,能够支持嵌入式的常见操作系统有Palm OS,嵌入式Linux,Android和Windows CE等。虽然Linux在嵌入式领域刚刚起步,但是Linux的特性正好符合产品的操作系统,稳定,实时和多任务等需求,而且Linux开放源代码,不必支付许可证费用。
4. 文件服务器系统
网络文件系统是由SUN公司制定的一种文件服务标准,它能实现基于Linux/UNIX的网络文件共享服务。应用Linux的NFS服务,可以很好地解决企业的Linux/unix环境文件共享问题。
Linux提供了安全高效的Windows文件服务器系统-Samba,可以将Windows和Linux有效的整合到一起。Samba基于SMB协议,可提供不同计算机之间的打印共享,文件共享,域管理等服务。
5. 企业门户网站
所谓企业门户网站,就是为企业提供全面信息咨询和服务的行业性网站。在Linux下组建企业的门户网站,可以选择的方案很多,如著名的LAMP方案(Linux+Apache+MySQL+PHP/Python/Perl),LAMP网站架构是目前国际流行的WEB框架,其组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采用此架构,与JAVA架构相比,LAMP具有web资源丰富,轻量,快速开发等特点。
6. 数据备份
对于企业来说,数据就是它的财产,因此数据备份的重要性不言而喻。
Linux是非常安全的操作系统。在Linux最新版本中,广泛采用日志文件系统, 如EXT3。它可以有效降低服务器在突然断电,死机等情况下,对数据可能造成的损失。
在Linux下,还有许多高效率的数据备份工作。如tar,cpio还原备份和dump转储。同时,Linux还有大量的第三方软件包(包括自有软件和商业软件)可以提供数据备份的功能。
1.2 虚拟机的安装
学习Linux,最先需要学习如何安装Linux。我们可以先在Windows上安装虚拟机软件,虚拟机可以看做一台虚拟的电脑,然后再在虚拟机上安装Linux。VMware是最常见的虚拟机软件。
1.2.1 VMware介绍
VMware Workstation 是一个虚拟PC的软件,利用VMware工作站,可以在现有的操作系统上虚拟出一个或多个新的硬件环境,相当于模拟出多台新的PC,以此来实现在一台机器上同时运行多个独立的操作系统。
VMware Workstation 是一种虚拟机管理软件,安装该软件后,可以创建多个虚拟机(即虚拟PC),然后在虚拟机上安装操作系统即可,每台虚拟机本身就像一台真正地电脑一样。
1.2.2 VMware 的主要特点:
(1)可以在同一台机器上同时运行多个操作系统。
(2)本机系统可以与虚拟机系统进行网络通信。
(3)可以随时修改虚拟机系统的硬件环境。
1.2.3 VM安装的详细步骤
显示Vmware Workstation PRO程序安装界面。
点击下一步
勾选“我接受许可协议中的条款”,点击下一步
更改安装路径,并点击下一步。比如:安装在F盘下的VMware workstation目录下。
点击下一步
点击下一步,选择您要放入系统的快捷方式。
点击安装按钮,显示VMware Workstation Pro安装向导。
最后点击完成按钮。
如果有许可证密钥,单击许可证按钮就可以打开许可证密钥输入窗体,用于输入密钥。
1.3 Centos 6.5安装
本书将在Windows环境下使用VMware Workstation12虚拟机下安装Centos6.5。
2点击“文件”菜单中的“新建虚拟机”子菜单
点击下一步,初学者使用“典型配置”。
点击浏览,选择CentOS6.5的ISO镜像文件
选择镜像文件
打开虚拟机向导
填写用户信息
注意:写上全名,用户名,密码 (用户名是用来登录Linux系统的,配合密码可以完成登录。全名只是对用户名的一个备注说明。创建的用户账户和根账户root均使用此密码)。
8 设置虚拟机磁盘容量
磁盘容量默认即可 20G已够用
9安装完成
10 启动虚拟机
虚拟机已开始启动
等待几分钟
启动完成
1.4 习题
第2章Linux基本操作
2.1 系统登录
Linux是一个多用户的操作系统,用户要使用该系统,首先必须登录系统。用户登录系统时,为了使系统能够识别自己,必须输入用户名和密码,经系统验证无误后方能进入系统。在系统安装过程中可以创建两种帐号:
root–超级用户帐号,使用这个帐号可以在系统中做任何事情。
普通用户–这个帐号供普通用户使用,可以进行有限的操作。
一般的Linux使用者均为普通用户,而系统管理员一般使用超级用户帐号完成一些系统管理的工作。如果只需要完成一些由普通帐号就能完成的任务,建议不要使用超级用户帐号,以免无意中破坏系统。
用户登录分两步进行:
第一步,输入用户的登录名,系统根据该登录名来识别用户;
第二步,输入用户的口令,该口令是用户自己选择的一个字符串,对其他用户是保密的,是在登录时系统用来辨别真假用户的关键字。
在Linux系统中,系统管理员在为用户建立新帐号时赋给用户一个用户名和一个初始的口令。另外,Linux系统给计算机赋予一个主机名。主机名用于在网络上识别独立的计算机(即使用户的计算机没有联网,也应该有一个主 机名)。Linux系统给出的缺省主机名为localhost。在下面的例子中,我们假设用户名为"wah",系统的主机名为"localhost"。
1 超级用户登录
超级用户的用户名为root,密码在安装系统时已设定。系统启动成功后,点击Other…(Other…的意思就是换别的用户登录),屏幕显示下面的提示:
这时输入超级用户名"root",然后键入回车键。此时,用户会在屏幕上看到输入口令的提示:
这时,需要输入口令。输入口令时,口令不会在屏幕上显示出来。如果用户输入了错误的口令,就会在屏幕上看到下列信息:
这时需要重新输入。当用户正确地输入用户名和口令后,就能合法地进入系统。屏幕显示:
此时说明该用户已经登录到系统中,可以进行操作了,右上角是用户名全名。
2 普通用户登录
普通用户登录建立了普通用户帐号以后,就可以进行登录了。
在登录时,用户会在屏幕上看到类似下面的提示:
这时依旧点击Other…,并在username中输入用户名"jiangtao",然后键入回车键。此时,需要输入口令。如果用户输入了错误的口令,就会在屏幕上看到下列信息:
这时需要重新输入。当用户正确地输入用户名和口令后,就能合法地进入系统。
此时说明该用户已经登录到系统中,可以进行操作了。
2.1.1虚拟机终端
虚拟机终端又称为控制台。Linux是一个真正的多用户操作系统,这表示它可以同时接受多个用户登录。Linux还允许一个用户进行多次登录,这是因为Linux提供了虚拟机控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。
虚拟机控制台可使用户同时在多个控制台上工作,例如,开发软件时,可以在一个控制台上进行编辑,在另一个控制台上进行编译,在第三个控制台上查阅信息。
打开虚拟机控制台可以在屏幕空白处,鼠标右击,会显示下图。
点击open in Terminal,会显示如下图,表示已经进入控制台。
另外一种在图形模式下进入终端模式可以使用ctrl+alt+F2,显示如下界面。
按ctrl+alt+F7退出终端模式,显示图形界面。
2.1.2 Linux系统目录结构
双击Conmputer,如下图显示
此时双击Filesystem(文件系统),打开系统目录结构图,如下图显示。
2.1.3 系统目录结构说明
目录名称 目录说明
/ 根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/bin,/boot,/etc、/dev、/lib、/sbin等等都是放置在根目录下。
/bin 该目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含命令解释器。
/boot 引导目录,主要放置开机时会使用到的文件。该目录中存放系统的内核文件和引导装载程序文件。
/dev dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
/etc 系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件,修改配置文件之前记得备份。该目录下的文件由系统管理员来使用,普通用户对大部分文件有只读权限。
/home 系统默认的用户主目录,除了root外的用户主目录都存放在此目录下,方便用户存放私有数据。在Linux下,可以使用#cd ~切换至自己的主目录。
/lib lib是library的缩写。系统使用的函数库的目录。程序在执行过程中,需要调用一些额外的功能时需要函数库的协助,该目录下存放了各种编程语言库。典型的linux系统包含了C、C++和FORTRAN语言的库文件。其他的库文件则大部分存放在/usr/lib,/usr/local/lib目录下。
/lost+found 在linux文件系统中,当系统意外崩溃或机器意外关机,产生的一些文件碎片放在这里。在系统启动的过程中,系统工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方法来修复,或者移动文件到运来的位置上。
/mnt mnt目录一般用于存放挂载存储设备的挂载目录,它是安装软盘、光盘、U盘的挂载点(挂载点实际上就是Linux中磁盘文件系统的入口目录,类似于Windows中不同分区的C、D、E盘符)。
/opt 主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样当你尝试完想删掉firefox的时候,你就可以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在这个目录下面。
/usr 该目录是系统存放程序的目录,其空间比较大。例如/usr/src中存放Linux内核的源码,/usr/bin中存放几乎所有的可执行文件.有些程序在/bin 或/usr/local/bin 中。/usr/sbin中存放系统管理程序。
/proc 它是存放在内存中的一个虚拟的文件夹,是启动Linux系统时创建的,里面的文件都是当前系统的实时状态信息,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间。
/root 系统管理员root的主目录。
/sbin 放置系统管理员使用的可执行命令,如shutdown(关机命令)等。与/bin不同的是,这个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。
/tmp 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。/var/tmp目录和这个目录类似。
/srv 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内。
/var 放置系统执行过程中产生的文件,这个目录的内容经常变动。如随时更改的日志文件 /var/log。
2.2 Linux系统配置
1.配置文件
Linux系统中存在一些配置文件,这些配置文件在系统引导时被调用,用来构建系统工作的基础环境。下面的表格是系统引导时需要读取的部分配置文件。
配置文件 描述
/boot/grub/menu.lst 存储计算机上可用的操作系统信息,由Bootloader读取并引导操作系统
/etc/inittab 设定Linux的运行级别
/etc/profile 适用于所有用户的全局配置文件。当第一次登录系统时,该文件被读取
/etc/bashrc 适用于所有用户的全局配置文件。当bash被打开时,该文件被读取(Linux上的Shell种类很多。Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。)
~/.bash_profile 用户用于自定义信息的配置文件,可扩展或重写/etc/profile中的配置
[slave1@localhost ~]$ ls -al | grep .bash
~/.bashrc 用户用于自定义信息的配置文件,可扩展或重写/etc/bashrc中的配置
以上配置文件可能会因为 Linux发行版本的不同。其实Linux引导时需要读取的配置文件远不止上表中列出这些,这里仅选取其中数要的几个来解释配置文件的作用。我们按下电源到 Linux准备好为用户工作这一段时间,系统发生了以下一系列事情。
配置好IP信息后,使用service network restart命令重启网络服务。然后使用ifconfig命令查看网络配置情况。
[root@localhost 桌面]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:4F:E4:76
inet addr:192.168.86.141 Bcast:192.168.86.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe4f:e476/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:158 errors:0 dropped:0 overruns:0 frame:0
TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:19191 (18.7 KiB) TX bytes:12895 (12.5 KiB)
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:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1152 (1.1 KiB) TX bytes:1152 (1.1 KiB)
eth0和lo是以太网卡和本地网卡。然后测试网络是否正常,使用ping命令。
[root@localhost 桌面]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125: icmp_seq=1 ttl=128 time=26.3 ms
64 bytes from 61.135.169.125: icmp_seq=2 ttl=128 time=23.8 ms
64 bytes from 61.135.169.125: icmp_seq=3 ttl=128 time=24.3 ms
3. 防火墙
防火墙(Firewall),也称防护墙,是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网(US5606668(A)1993-12-15)。防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙是系统的第一道防线,其作用是防止非法用户的进入。
查看防火墙关闭状态
[root@hadoop Desktop]# service iptables status
关闭Linux的防火墙,执行命令:
[root@hadoop Desktop]# service iptables stop
如果需要永久关闭防火墙,执行命令:
[root@hadoop Desktop]# chkconfig iptables off
注意:
从CentOS7开始,默认不安装iptables,使用一个新组件firewalld。
上面的命令必须使用root用户,否则无法显示。
4.系统日志
Linux系统运行和运行在Linux上的应用程序都会产生日志。日志在排查文件的时候至关重要,在Linux上一般跟系统相关的日志默认都会放到/var/log下面。
1、/var/log/boot.log
一般包含系统启动时的日志,包括自启动的服务。
2、/var/log/btmp
记录所有失败登录信息。非文本文件,可以使用last -f /var/log/btmp进行查看。
3、/var/log/cron
cron计划任务的日志,每当cron任务(cron是一个Linux下的定时执行工具,无需人工干预)被执行的时候都会在这个文件里面记录。
4、/var/log/dmesg
包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以直接查看这个文件或者使用dmesg这个命令查看。
5、/var/log/lastlog
记录所有用户的最近信息。非文本文件,可以使用lastlog进行查看。
6、/var/log/maillog
包含来着系统运行电子邮件服务器的日志信息。
7、/var/log/message
包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
8、/var/log/secure
包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。
下面我们使用grep命令。grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
语法:
grep [选项] ”模式“ [文件]
[root@localhost log]# grep “java” /var/log/yum.log
Apr 21 22:56:57 localhost java: gkr-pam: couldn’t update the ‘login’ keyring password: no old password was entered
Apr 21 23:45:39 localhost java: gkr-pam: couldn’t update the ‘login’ keyring password: no old password was entered
Apr 22 02:20:37 localhost java: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
Apr 22 02:20:38 localhost java: ROOT LOGIN ON tty2
Apr 22 02:20:40 localhost java: pam_unix(login:session): session closed for user root
2.3 常用命令
打开虚拟机控制台,如图所示。
在虚拟机控制台可以看到如下字符。
[slave1@bogon Desktop]$
slave1代表当前用户名,bogon代表主机名,Desktop代表当前工作目录,KaTeX parse error: Expected 'EOF', got '#' at position 25: …注意:root用户命令提示符为#̲,普通用户命令提示符为)。
我们可以尝试date命令,可以显示当前日期时间。
cd命令可以切换工作目录,~目录是当前用户目录,cd ~命令表示切换工作目录到当前用户目录。
在#符后面去输入命令,有的时候命令后面还会跟着“选项”(英文options)或“参数”(英文arguments)。即Linux中命令格式为:
command [选项] [参数]
中括号代表是可选的,即有些命令不需要选项也不需要参数,但有的命令在运行时需要多个选项或参数。
1.选项
选项是调整命令执行行为的开关,即,选项不同决定了命令的显示结果不同,选项可以分为短选项和长选项。
短选项(-):只能修饰一个字符的选项。
比如: ls -a,当然多个短选项可以合并,比如tar -cvf
短选项使用一个字母表示,但如果能更清楚的表达含义,可以使用一个单词来表达选项。如ls命令都有size选项,表示显示文件的大小。如果写成-size的话,会被误解为-s、-i、-z、-e4个选项。所以这时使用长选项。另外,许多命令的选项都提供长短两种选项,如
长选项(–):可以修饰单个字符,也可以修饰一个单词。
[root@localhost home]# ls -s;ls --size
总用量 12
4 master 4 myuser1 4 zhangjie
总用量 12
4 master 4 myuser1 4 zhangjie
比如:chkconfig --list
2.参数
参数是指定命令的作用对象或者为命令提供数据。
输出结果是/home目录下的所有目录和文件。
[root@localhost home]# ls -al /home
总用量 20
drwxr-xr-x. 5 root root 4096 4月 21 23:45 .
dr-xr-xr-x. 22 root root 4096 4月 22 17:20 …
drwx------. 25 master master 4096 4月 22 00:36 master
drwx------. 4 myuser1 user 4096 4月 21 22:41 myuser1
drwx------. 4 zhangjie zhangjie 4096 4月 21 23:45 zhangjie
和选项一样,命令的参数可以有多个。例如cat命令同时输出多个文件。
[root@localhost usr]# cat /usr/a.txt /usr/b.txt
hello a
hello b
3.获取帮助
Linux命令的选项和参数的使用很灵活,可以使用0个或多个选项和参数。另外,某些命令没有任何参数,如clear命令(清除屏幕)。有些命令必须有固定个数的参数,如mv命令(为文件或目录改名、或将文件或目录移入其它位置)必须有两个参数。Linux命令有数千个命令,我们在学习Linux时没有必要记住每个命令的使用,可以查找Baidu或相关帮助手册。man命令可以查询某个命令的帮助信息。
语法 man [选项] 命令名
[root@localhost usr]# 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
其中NAME介绍命令的基本功能,SYNOPSIS介绍命令的格式。ls [OPTION]… [FILE]…,介绍了选项和参数的使用方法。[]里的内容表示可选的,…表示前面的内容可以使用多次。DESCRIPTION是各选项的介绍。
下面我们使用man mv命令
SYNOPSIS
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
mv的参数没有[],说明mv命令至少需要2个参数。第三个写法中-t也没有[],说明必须要有。第三个写法中,第一个参数表示目录,第二个参数是源文件。
4.常用技巧
关机命令
语法 shutdown -h now
[user@bogon ~]$ shutdown -h now
其中h是选项表示时间,now 表示立刻,这个命令即立刻关机的意思。
重启命令
语法 reboot
[user@bogon ~]$ reboot
退出命令
语法 exit
[user@bogon ~]$ exit
修改密码
语法 passwd
为了更好的保护用户帐号的安全,Linux允许用户随时修改自己的口令,修改口令的命令是passwd
[user@bogon ~]$ passwd
敲下回车,会提示你输入新的密码。
此时,输入新的密码(友情提示:新密码输入后是看不到的,输入完新密码直接敲回车即可)。然后,会提示您再次输入新的密码。此时再次输入新的密码(两次输入的密码一定要相同,否则修改失败),并敲下回车,可以看到如图所示提示,密码已经修改成功。
操作流程如图:
切换目录
语法 cd 目录名
cd命令用来切换工作目录, 工作目录可为绝对路径或相对路径。
例如:切换到/usr/src目录
[user@bogon ~]$ cd /usr/src
当前目录是/usr/src,切换到/usr目录
[user@bogon src]$ cd …
切换到当前用户的home目录
[user@bogon usr]cd ~
显示目录列表
ls(list)命令是用户最常见的命令之一。对于目录,ls命令将输出该目录下的所有子目录和文件。对于文件,ls命令将输出其文件名以及要求的其他信息。该命令类似于dos下的dir命令。默认情况下,输出条目按字母顺序排序。
语法: ls [选项]
常用的选项有
选项 说明
-a 显示所有文件及子目录,包括隐藏文件。
-C 多列显示输出结果。这是默认选项
-l 以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等。
在控制台上输入命令 ls –a ,如图所示
此时敲下回车,会展示出来当前etc目录下的所有目录及文件,如图所示
ls 输出的文件,不同颜色代表不同的类型。
例如
黑色:表示普通文件,例如filesystems,fstab。
蓝色:表示目录,例如fonts,foomatic。
绿色:表示可执行文件。
浅蓝色:链接文件
黄色:设备文件
如用长格式显示/usr/lib目录下所有的文件,包括隐藏文件,如下所示:
[user@bogon ~]$ ls -al /usr/lib
7 新建目录
语法 : mkdir 目录名称
当前目录是/tmp目录,创建dzqc目录,再显示目录信息
[user@bogon tmp]$ mkdir dzqc
[user@bogon tmp]$ ls -a
在用户目录下创建p1目录和p1目录下的p2目录,也就是连续创建两个目录。
-p这个参数很实用。输入mkdir /tmp/test/hello命令并运行,系统提示错误,无法创建。
加上-p参数的命令,系统将不再报错。
[user@bogon ~]$ mkdir –p /mkdir/p1/p2
8. 删除一个文件或目录
在Linux系统中,可以使用rm命令将无用文件删除。该命令的功能是删除一个目录中的一个或者多个文件,也可以将某个目录及其下的所有文件及子目录均删除。
语法 rm [选项] 文件名/目录名
常用的选项
选项 说明
-i 删除前逐一询问确认
-f 强制删除,忽略不存在的文件,从不给出提示。
-r 递归的删除目录下面文件以及子目录下文件。
例如,在/usr/tmp目录下创建demo1目录,再删除demo1目录和hello.txt文件。最后使用ls显示。
[user@bogon Desktop]$ cd /usr/tmp
[user@bogon tmp]$ ls
hello.txt
[user@bogon tmp]$ mkdir demo1
[user@bogon tmp]$ ls -a
. … demo1 hello.txt
[user@bogon tmp]$ rm -rf demo1
[user@bogon tmp]$ rm -rf hello.txt
rm: remove regular file ‘hello.txt’?y
[user@bogon tmp]$ ls -a
. …
2.3 习题
第3章 Linux 用户管理
3.1 理解Linux的单用户多任务,多用户多任务概念
用户使用Linux时,需要以一个用户的身份进入,一个进程也需要以一个用户的身份运行,系统使用用户的概念来限制使用者或进程可以使用哪些资源。Linux 是一个多用户、多任务的操作系统,我们应该了解单用户多任务和多用户多任务的概念。
3.2 用户(user)和用户组(group)概念
用户使用Linux时,需要以一个用户的身份进入,一个进程也需要以一个用户的身份运行,系统使用用户的概念来限制使用者或进程可以使用哪些资源。用户组用来方便组织管理用户。实现用户账号的管理,要完成的工作主要有如下几个方面:用户账号的添加、删除与修改;用户口令的管理;用户组的管理。
3.2.1 用户(user)的概念
通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)。比如我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的。
当然用户(user)的概念理解还不仅仅于此,在Linux系统中还有一些用户是用来完成特定任务的,比如nobody和mysql 等,我们访问LinuxSir.Org 的网页程序,就是nobody用户。我们匿名访问mysql时,会用到用户mysql或nobody 。如果您想了解Linux系统的一些帐号,请查看 /etc/passwd 。
[root@localhost ~]# cat /etc/passwd
每个用户都有一个唯一的用户名和口令,同时系统会为每个用户分配一个用户ID(uid)来标识用户。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
根据用户ID的不同,在Linux系统中,用户可分为3种类型。
1.root用户:又称为超级用户,id为0,拥有最高权限。
2.系统用户:有称为虚拟用户、伪用户或假用户,不具备登录Linux系统的能力,但却是系统运行不可缺少的用户,一般id为1499。Centos7为1999。
3.普通用户:id在500以上,Centos7为1000以上。可以登录Linux系统,但是使用的权限有限,由管理员创建。
在终端输入id可以查看用户ID的相关信息。如当前用户是jiangtao,uid是用户ID,gid是用户所在组的标识符。
[jiangtao@bogon Desktop]$ id
uid=500(jiangtao) gid=500(jiangtao) groups=500(jiangtao) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
3.2.2 用户组(group)的概念
用户组(group)就是具有相同特征的用户(user)的集合体。比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的。
举例:我们为了让一些用户有权限查看某一文档,比如是一个时间表,而编写时间表的人要具有读写执行的权限,我们想让一些用户知道这个时间表的内容,而不让他们修改,所以我们可以把这些用户都划到一个组,然后来修改这个文件的权限,让用户组可读,这样用户组下面的每个用户都是可读的。
3.2.3 用户和用户的关系
用户和用户组的对应关系是:一对一、多对一、一对多或多对多。
一对一:某个用户可以是某个组的唯一成员。
多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如beinan和linuxsir两个用户只归属于beinan用户组。
一对多:某个用户可以是多个用户组的成员;比如beinan可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员。
多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组,其实多对多的关系是前面三条的扩展,理解了上面的三条,这条也能理解。
3.3 linux用户管理
用户管理的常用命令包括:useradd、passwd、usermod、userdel、cat。useradd用来添加用户,passwd修改用户口令,usermod修改用户信息,userdel删除用户。Linux系统中只有root用户才有用户管理权限,所以要进行添加、删除、修改用户信息的操作,需要首先切换到root用户。
显示当前用户的命令是whoami
[root@localhost usr]# whoami
root
3.3.1 查看当前系统所有用户
语法 : cat /etc/passwd
[jiangtao@bogon Desktop]$ cat /etc/passwd
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
ftp❌14:50:FTP User:/var/ftp:/sbin/nologin
jiangtao❌500:500:姜涛:/home/jiangtao:/bin/bash
zhaoyun❌502:0:赵云:/home/zhaoyun:/bin/bash
xinkong❌503:503:星空:/home/xinkong:/bin/bash
其中cat 的命令含义是查看。cat 目录/文件,即查看文件中的内容,显示的文件内容从左至右分别表示。
用户名,密码,用户id,用户组id,备注,用户主目录,Shell命令所在目录(第七章讲) 。
3.3.2 添加新的用户
添加用户就是在系统中创建一个新账号,并为新账号分配用户ID、用户组、主目录、登录Shell等资源。
语法 useradd [选项] 用户名
其中各选项含义如下:
选项 说明
-c 指定一段注释性描述。
-d 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 指定用户所属的用户组。
-G 指定用户所属的附加组。
-s 指定用户的登录Shell。
-u 指定用户的uid,如果同时有-o选项,则可以重复使用其他用户的标识号。
举例如图,在控制台敲出以下命令, 创建用户sunlei,并且分配到root用户组中。
[user@bogon Deskop]$su root // 切换到root
Password: // 输入密码
[root@bogon Desktop]# useradd sunlei –g root //指定用户组
[root@bogon Desktop]# cat /etc/passwd
xinke❌503:503::/home/xinke:/bin/bash
sunlei❌504:0::/home/sunlei:/bin/bash
在useradd命令后添加-d参数指定主目录。
[root@localhost /]# useradd -d /usr/zhangsan zhangsan
[root@localhost /]# cat /etc/passwd
sunlei❌501:0::/home/sunlei:/bin/bash
zhangsan❌502:502::/usr/zhangsan:/bin/bash
添加user用户组,-g和-G参数指定用户所在组和附加组。下面myuser1用户属于user用户组,同时也属于root组,主组为user。503是主组的组ID。
[root@localhost /]# groupadd user
[root@localhost /]# useradd -g user -G root myuser1
[root@localhost /]# cat /etc/passwd
myuser1❌503:503::/home/myuser1:/bin/bash
3.3.3 修改用户
修改用户就是更改用户的属性,如用户ID、主目录、用户所在组、登录Shell等。
语法: usermod [选项] 用户名
选项 说明
-c 指定一段注释性描述。
-d 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 指定用户所属的用户组。
-G 指定用户所属的附加组。
-s 指定用户的登录Shell。
-u 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
-l 修改用户登录名称
如下修改lisi的登录名为wangwu,并查看是否修改成功。-l选项表示修改登录名称,选项后先跟的是新的用户名,再是旧的用户名。
[root@localhost /]# cat /etc/passwd | grep zhangsan // 查看用户名
zhangsan❌502:502::/usr/zhangsan:/bin/bash
[root@localhost /]# usermod -l zhangfei zhangsan // 将用户zhangsan名称修改为zhangfei
[root@localhost /]# cat /etc/passwd
zhangfei❌502:502::/usr/zhangsan:/bin/bash
3.3.4 修改用户口令
使用passwd命令修改口令。root用户可以修改自己和其他用户的口令,普通用户只能修改自己的口令。为了系统安全起见,用户应该选择比较复杂的口令,如最好使用8位长的口令,如果口令的长度小于8位,则会提示“BAD PASSWORD:The password is shorter than 8 characters”,但是对口令的设置不影响,仍可以修改成功。
语法:passwd [选项] [用户名]
[root@localhost /]# passwd sunlei
更改用户 sunlei 的密码 。
新的 密码:输入新口令
重新输入新的 密码:重复输入新口令
passwd: 所有的身份验证令牌已经成功更新。
3.3.5 删除用户
如果一个用户的账号不再使用,可以从系统中删除。删除用户就是删除与用户有关的系统配置文件中的记录(如/etc/passwd)。
语法 userdel [选项] 用户名
常用的选项是-r,它的作用是把用户的主目录一起删除。
删除sunlei用户,并查看sunlei是否已经删除 。在/etc/passwd文件中已经看不到sunlei用户的记录,说明已经删除。
[root@localhost home]# userdel -r sunlei
[root@localhost home]# cat /etc/passwd | grep sunlei
3.3.6 切换用户
su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。
语法 su [参数] 用户
切换用户为jiangtao
[root@localhost usr]# su jiangtao
[jiangtao@localhost usr]$
切换用户为 root 并在执行 date 指令后退出变回原使用者。
[root@localhost usr]# su -c date root
切换用户为jiangtao,并改变工作目录至 jiangtao 的家目录(home dir)
[root@localhost usr]# su - jiangtao
[jiangtao@localhost ~]$ pwd
/home/jiangtao
3.4 Linux系统用户组的管理
用户组是具有相同特征用户的集合。每个用户都至少属于一个用户组,系统可以对一个用户组中的所有用户进行集中管理。例如,同时赋予多个用户相同的权限,就可以把用户都定义到同一个用户组,指定用户组的权限,就可以让用户组下的所有用户具备同样的权限。当我们创建一个用户时,会自动创建一个同名的用户组。用户组的管理涉及用户组的添加、删除和修改。常用命令有:groupadd、groupmod、groupdel、cat。
3.4.1查看用户组
查看/etc/group文件,可以查看到用户组信息。显示结果从左至右依次表示用户组,用户组密码,用户组id,用户组的所有用户。
[root@localhost 桌面]# cat /etc/group
root❌0:myuser1
bin❌1:bin,daemon
daemon❌2:bin,daemon
sys❌3:bin,adm
master❌500:
zhangsan❌502:
user❌503:
3.4.2 新增用户组
语法: groupadd [选项] 用户组
选项说明:
选项 说明
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
创建一个名为mysql的组,并使用grep命令在/etc/group中查找与mysql组有关的记录。
[root@bogon Desktop]# groupadd mysql
[root@bogon Desktop]# grep mysql /etc/group
mysql❌1005:
添加组名为myGroup1的用户组,并指定组标识号为1999,并使用grep命令在/etc/group中查找与myGroup1组有关的记录。
[root@bogon Desktop]# groupadd -g 1999 myGroup1
[root@bogon Desktop]# grep myGroup1 /etc/group
3.4.3 修改用户组
语法: groupmod [选项] 用户组
选项说明:
选项 说明
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
-n 将用户组的名字改为新名字。
把mysql组名改为mysql3306,并查看是否修改成功。
[root@bogon Desktop]# groupmod –n mysql3306 mysql
[root@bogon Desktop]# grep mysql3306 /etc/group
例如把mysql组的标识号改为1998
[root@bogon Desktop]# groupmod -g 1998 mysql
3.4.4 删除用户组
语法 groupdel 用户组
例如删除mysql3306,并查看是否删除成功。
[root@bogon Desktop]# groupdel mysql3306
[root@bogon Desktop]# grep mysql3306 /etc/group
3.4.5 用户及用户组权限案例
在实际生产中,我们一般使用用户和用户组权限,来对服务器进行管理。例如,服务器中使用了redis缓存,为了方便管理,用redis用户组来对redis进行管理,现在公司新来了一名员工小刚,我们来创建一个用户(用户名为名字的汉语拼音),并设置密码为(123456),并把该用户分配给 redis用户组来管理,具体实现如下。
[root@localhost 桌面]# groupadd redis
[root@localhost 桌面]# useradd zhangjie
[root@localhost 桌面]# passwd zhangjie
更改用户 zhangjie 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
下面把zhangjie用户分配给用户组redis。
[root@localhost 桌面]# usermod -g redis zhangjie
[root@localhost 桌面]# cat /etc/group
redis❌2000: // redis组的组编号为2000
[root@localhost 桌面]# cat /etc/passwd
zhangjie❌504:2000::/home/zhangjie:/bin/bash
3.5 用户配置文件
在3.3与3.4小节中,对用户和用户组管理的操作都是通过命令来完成的,而这些命令实际是修改有关的系统文件,因此直接修改用户的配置文件可以完成对用户管理的相关操作。与用户相关的系统配置文件主要有3个文件。分别是/etc/passwd、/etc/shadow、/etc/ group, /etc/passwd文件保存用户信息,/etc/shadow文件保存加密的用户密码,/etc/ group文件保存用户组信息。
3.5.1 /etc/passwd文件
系统中所有的用户信息都会记录到 /etc/passwd文件中,是系统识别用户的一个文件。当用户登录时,系统首先读取/etc/passwd文件。假设用户名为user,则会etc/ passwd文件中查看是否有该账号,然后确定user的uid,通过uid确认用户和身份。在 etc/passwd文件中,每一行都表示一个用户的信息。每行有7个字段,字段间通过“:”分隔,如果某个字段没有值可以直接使用“::”。具体内容信息如下(在此只列出/etc/passwd中的两行)
[root@localhost 桌面]# cat /etc/passwd
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
myuser1❌503:503::/home/myuser1:/bin/bash
zhangfei❌502:502::/usr/zhangsan:/bin/bash
zhangjie❌504:2000::/home/zhangjie:/bin/bash
下表是/etc/passwd每行中的字段含有。
字段 含义
第一字段 用户名(登录名)
第二字段 口令(密码),x只是占位的功能,真正的密码被映射到/etc/shadow文件中
第三字段 用户标识符(uid)
第四字段 用户所在组的组标识(gid)
第五字段 注释性描述,是可选的。可以写用户住址、姓名、电话等。上面的myuser1、zhangfei、zhangjie3个用户空缺这个字段。
第六字段 用户的主目录
第七字段 用户所属的Shell类型
3.5.2 /etc/shadow文件
/etc/shadow和/etc/passwd文件是互补的,由于/etc/passwd文件所有用户都可以访问,为保证安全,将密码和其他/etc/passwd文件不能包括的信息(如有效期限)单独保存在 etc/shadow中,此文件只有root用户有权查看。例如,用master用户查看该文件时,会出现提示“Permission denied(权限不足)”。
[master@localhost 桌面]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
在/etc/shadow文件中,每个用户的信息有9个字段,字段之间通过“:”分隔,具体格式如下。
[root@localhost 桌面]# cat /etc/shadow
root:
1
1
1q5sWzLb1$JTzmxQXpqc8CdYSuWjiuZ0:18003:0:99999:7:::
zhangfei:!!:18008:0:99999:7:::
zhangjie:
1
1
1f9QFdlOW$nxdCZXPdE3p73Z2/kXsyx0:18008:0:99999:7:::
字段 含义
第一字段 用户名(登录名),与/etc/passwd文件的第一个字段相同
第二字段 密码(已被加密),若此字段为x,表示密码为空
第三字段 最后一次修改密码的时间,从1970年1月1日至最后一次修改密码的时间相隔的天数
第四字段 两次修改密码间隔的最少天数,即用户必须间隔多少天才能修改其密码。若该字段为0,则表示禁用此功能
第五字段 两次修改密码间隔的最多天数
第六字段 提前多少天警告用户密码将过期
第七字段 密码过期多少天后禁用此用户
第八字段 用户账户到期时间。若该字段为空,则该用户永久可用
第九字段 保留字段,目前为空,以备将来Linux发展之用
3.5.3 /etc/group文件
/etc/group文件是用户组的配置文件,可以直观看出用户组中包括哪些用户。每个用户组是一条记录,每个记录包含4个字段,字段之间通过“:”分隔,具体内容如下每个字段的具体含义如下表所示。
[root@localhost 桌面]# cat /etc/group
root❌0:myuser1
bin❌1:bin,daemon
redis❌2000:
zhangjie❌504:
字段 含义
第一字段 用户组名称
第二字段 用户组口令
第三字段 组标识符gid
第四字段 组内用户列表,多个用户之间用“,”分隔
3.6 文件权限管理
权限是操作系统用来限制对资源访问的机制(如能否使用某个设备,CPU资源等),权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组。通过这样的机制来限制哪些用户、哪些组可以对特定文件进行什么样的操作。
有3种类型的用户可以访问文件或目录:文件所有者、同组用户、其他用户。所有者一般是文件的创建者,对该文件的访问权限拥有控制权。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。
文件有三种权限,读权限(r权限),写权限(w权限),执行权限(x权限)如下表。
权限标识符 对文件的影响 对目录的影响
-r 可读取文件内容 可列出目录内容
-w 可修改文件内容 可在目录中创建、删除文件
-x 可作为命令执行 可访问目录内容
3.5.1 文件权限查看:ls
语法: ls -l或者ll
直接查看文件或者目录的权限。
当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如显示/etc目录下的详细信息。
[root@bogon Desktop]# ls -l /etc
total 1820
drwxr-xr-x. 3 root root 4096 Aug 23 03:02 abrt
drwxr-xr-x. 4 root root 4096 Aug 23 03:05 acpi
-rw-r–r--. 1 root root 45 Sep 20 15:02 adjtime
-rw-r–r--. 1 root root 1512 Jan 12 2010 aliases
第一个字段表示文件的权限信息, 第一个字段的字一个字母代表文件的类型,-代表是普通文件,d代表是目录;权限一共分成3组,3个一组,分别是所有者的权限,所属组的权限,其他人的权限,此时abrt文件的第一个字母是d,所以是类型是目录。目录的权限具体是,所有者具有读写执行的权限,同组的人具有读,执行的权限,其他人具有读,执行的权限。
注意:ll不是命令,是ls -l的别名相当于windows里的快捷方式。所以"ll"和"ls -l"的功能是相同的。
3.5.2 改变文件的拥有者:chown
通过chown命令将文件的所有者修改为指定的用户,普通的用户不能将自己的文件改变成其他的拥有者,超级用户才拥有此权限。
语法 chown [选项] 用户组 文件名
例如,使用用户jiangtao在/usr/tmp目录下创建目录dir1,在dir1目录下创建空文件a,b。
[root@localhost Desktop]# su jiangtao
[jiangtao@bogon Desktop]$ cd /usr/tmp
[jiangtao@bogon tmp]$ mkdir dir1
[jiangtao@bogon tmp]# ls -al
total 12
drwxrwxrwt. 3 root root 4096 Sep 26 09:12 .
drwxr-xr-x. 21 root root 4096 Aug 23 03:05 …
drwxr-xr-x. 2 root root 4096 Sep 26 09:12 dir1
[jiangtao@bogon tmp]$ cd dir1
[jiangtao@bogon dir1]$ touch a b // 创建空文件
[jiangtao@bogon dir1]$ ls
a b
[jiangtao@bogon tmp]$ ls -al
total 8
drwxrwxr-x. 2 jiangtao jiangtao 4096 Sep 21 17:00 .
drwxrwxrwt. 3 root root 4096 Sep 21 17:00 …
-rw-rw-r–. 1 jiangtao jiangtao 0 Sep 21 17:00 a
-rw-rw-r–. 1 jiangtao jiangtao 0 Sep 21 17:00 b
切换到root用户,添加用户myUser1,修改dir1目录所属用户为myUser1
[jiangtao@bogon dir1]$ su root //切换到root用户
Password: //输入密码时不回显
[root@bogon dir1]# useradd myUser1
[root@bogon dir1]# cd /usr/tmp
[root@bogon tmp]# chown myUser1 dir1 //将dir1目录的所有者设置为myUser1
[root@bogon tmp]# ls -al
total 12
drwxrwxrwt. 3 root root 4096 Sep 21 17:00 .
drwxr-xr-x. 21 root root 4096 Aug 23 03:05 …
drwxrwxr-x. 2 myUser1 jiangtao 4096 Sep 21 17:00 dir1
3.5.3 改变文件所在组:chgrp
通过chgrp命令变更目录和文件的所在组,只有root用户拥有此权限。
语法:chgrp [选项] 组名或组ID 文件
[root@localhost dir1]# groupadd zhangjie
[zhangfei@localhost dir1]$ cat /etc/group //查看所有用户组
zhangjie❌504:
[zhangfei@localhost dir1]$ su root
密码:
[root@localhost dir1]# ls -ld a
-rw-r–r--. 1 root root 0 4月 23 19:30 a
[root@localhost dir1]# chgrp zhangjie a
[root@localhost dir1]# ls -ld a
-rw-r–r--. 1 root zhangjie 0 4月 23 19:30 a
3.5.4 文件权限修改:chmod
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。
每一个权限都可以用某一个数字代表。读权限r代表数字为4,写权限w代表数字为2,执行权限代表数字为1。
-rwxrw-r— 表示拥有者的权限是读,写,执行;同组的权限有读,写;其他人的用户是读的权限,用数字表示起来很简单 就是764
三个一组,rwx权限分别对应421相加得7,rw-对应42相加为6,r–对应4。
权限属性对目录和文件的影响
权限属性对目录和文件的影响见下表。
权限 对文件的影响 对目录的影响
r(读) 可读取文件内容 可列出目录内容
w(写) 可修改文件内容 可在目录中创建、删除文件
x(执行) 可作为命令执行 可访问目录内容
2.表达式法
语法:
chmod [who][operator][mode] , [ [who][operator][mode]…] [文件或目录]
who指的是什么用户,取值为u、g、o。若没有此参数,则表示对所有用户进行操作。operator表示增加或取消某个权限,取值为“+”或“-”。mode指的是读、写、执行权限,取值为r、w、x的任意组合。
下面是who的参数选项。
选项 说明
u 文件或目录的所有者
g 同组用户
o 其他用户
a 所有用户、默认值
[root@localhost tmp]# touch file1 // 新建文件file1
// 文件所有者有读写权,同组用户读权限,其他用户有读权限
[root@localhost tmp]# ls -ld file1
-rw-r–r--. 1 root root 0 4月 23 20:40 file1
// 文件所有者增加x权限,同组用户增加x权限,其他用户增加x权限
[root@localhost tmp]# chmod u+x,g+x,o+w file1
[root@localhost tmp]# ls -ld file1
-rwxr-xrw-. 1 root root 0 4月 23 20:40 file1
3.6 习题
第4章 Linux文件管理
4.1 Linux文件系统简介
Linux文件系统(File System)是Linux系统的核心模块。在Linux中,任何软件和I/O设备都被视为文件。和Windows不同的是Linux中的文件名要区分大小写。Linux中也没有盘符的概念,而只有目录,不同的硬件分区被挂载在不同的目录下。使用文件系统,用户可以很好地管理各项文件及目录资源。
4.1.1 Linux目录结构
在计算机系统中存在大量的文件,如何有效地组织与管理它们,并为用户提供一个使用方便的接口是文件系统的主要任务。Linux系统以文件目录的方式组织和管理系统中的所有文件。
所谓文件目录,就是将所有文件的说明信息采用树形结构组织起来。整个文件系统有一个根(root),然后在根上分叉(directory),每个分叉上都可以再分叉,或者可以生成叶子。根和分叉在Linux中称为“目录”或“文件夹”,叶子称为“文件”。
通常Linux安装后会默认创建一些系统目录,存放操作系统相关的文件。
4.1.2 Linux文件类型
一谈到文件类型,大家就能想到Windows的文件类型,比如file.txt、file.doc、file.sys、file.mp3、file.exe等,根据文件的后缀就能判断文件的类型。但在Linux一个文件的类型和后缀名没有太大的关系,主要看文件的属性有关。Linux中常用的文件类型有5种:普通文件、目录文件、链接文件、设备文件和管道文件。
当我们在某个目录下执行,看到有类似 drwxr-xr-x ,这样的文件就是目录,目录在Linux是一个比较特殊的文件。注意它的第一个字符是d。
3. 链接文件
Linux 系统链接文件有软链接和硬链接(Hard Link)两种。
软链接(Symbolic Link)
软链接又称为符号链接(Symbolic Link),可以看作是Windows中的快捷方式,可以让你快速链接到目标文件或目录。软链接实际上是指向一个真实存在的文件链接,这和Windows操作系统中的快捷方式有点相似。下面的命令就显示system-release文件的类型是symbolic link,链接目标是centos-release。
[root@localhost etc]# file /etc/system-release
system-release: symbolic link to `centos-release’
当我们查看文件属性时,会看到有类似 lrwxrwxrwx,注意第一个字符是l,这类文件是符号链接文件。
[root@localhost etc]# ls -al system-release
lrwxrwxrwx. 1 root root 14 4月 17 07:16 system-release -> centos-release
下面我们创建一个软链接。
创建软链接语法:
ln -s [源文件或目录] [目标文件或目录]
-s软链接(符号链接)
[root@localhost etc]# cd ~
[root@localhost ~]# echo “hello”>/file1
[root@localhost ~]#
// 为/file1文件创建符号链接/usr/file2,如果file1删除,则file2失效
[root@localhost ~]# ln -s /file1 /usr/file2
//查看源文件/file1和软链接文件/usr/file2,注意软链接的权限没有意义
[root@localhost ~]# ll /file1 /usr/file2
-rw-r–r--. 1 root root 6 4月 24 17:55 /file1
lrwxrwxrwx. 1 root root 6 4月 24 17:57 /usr/file2 -> /file1
硬链接
创建硬链接语法:
ln [源文件或目录] [目标文件或目录]
要想理解硬链接,必须先了解inode。当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode区和data block(实际数据放置在数据区域中)。这个inode即是(目录、档案)文件在一个文件系统中的唯一标识,需要访问这个文件的时候必须先找到并读取这个文件的 inode。 inode 里面存储了文件的很多重要参数,其中唯一标识称作 Inumber, 其他信息还有创建时间(ctime)、修改时间(mtime) 、文件大小、属主、归属的用户组、读写权限、数据所在block号等信息。
[root@localhost ~]# echo “jiang” > /etc/f1
[root@localhost ~]# cat /etc/f1
jiang
// inode编号为781837,链接次数为1
[root@localhost ~]# ll -i /etc/f1
781837 -rw-r–r--. 1 root root 6 4月 24 18:29 /etc/f1
// 创建硬链接,f1和f2文件使用同一个inode编号781837,链接次数为2。这时f1和f2两个文件互为硬链接。
[root@localhost ~]# ln /etc/f1 /usr/f2
[root@localhost ~]# ll -i /etc/f1 /usr/f2
781837 -rw-r–r--. 2 root root 6 4月 24 18:29 /etc/f1
781837 -rw-r–r--. 2 root root 6 4月 24 18:29 /usr/f2
[root@localhost ~]# ln /usr/f2 /f3 // 创建f2的硬链接f3
[root@localhost ~]# ll -i /etc/f1 /usr/f2 /f3
781837 -rw-r–r--. 3 root root 6 4月 24 18:29 /etc/f1
781837 -rw-r–r--. 3 root root 6 4月 24 18:29 /f3
781837 -rw-r–r--. 3 root root 6 4月 24 18:29 /usr/f2
[root@localhost ~]# rm -rf /usr/f2 // 删除/usr/f2
[root@localhost ~]# cat /usr/f2
cat: /usr/f2: 没有那个文件或目录
[root@localhost ~]# cat /f3
jiang
[root@localhost ~]# vim /f3 // 修改/f3内容为jiangtao
[root@localhost ~]# cat /etc/f1 // 修改/f3后,/etc/f1文件也发生了修改
jiangtao
所以,硬链接实际上将一个重要的文件做了多次备份,它们之间互为硬链接,它们之间没有源文件和目标文件的区分。删除其中的一个文件不会影响其他文件。修改其中的一个文件其他的文件也会发生变化。
硬链接需要注意以下两点
硬链接不能跨文件系统(分区)
硬链接不支持目录
[root@localhost ~]# ln /home /mnt
ln: “/home”: 不允许将硬链接指向目录
4. 设备文件
设备文件是Linux中最特殊的文件。正是由于它的存在,Linux系统可以十分方便地访问外部设备。Linux系统为外部设备提供一种标准接口,将外部设备视为一种特殊的文件。用户可以像访问普通文件一样访问任何外部设备,使Linux系统可以很方便地适应不断变化的外部设备。通常Linux系统会将设备文件放到/dev目录下。根据访问数据方式的不同,设备文件分为块(block)设备和字符(char)设备文件。
进入/dev目录,列一下文件,会看到类似如下的。
[root@localhost ~]# ls -la /dev/tty
crw-rw-rw- 1 root tty 5, 0 04-19 08:29 /dev/tty
[root@localhost ~]# ls -la /dev/hda1
brw-r----- 1 root disk 3, 1 2006-04-19 /dev/hda1
我们看到/dev/tty的属性是 crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件。比如猫等串口设备。我们看到 /dev/hda1 的属性是 brw-r----- ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备。目前在最新的Linux发行版本中,我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。
5. 管道文件
管道文件是一种很特殊的文件,主要用于不同进程的信息传递。当两个进程间需要传递数据或信息时,可以使用管道文件。一个进程将需要传递的数据或信息写入管道的一端,另一个进程则从管道的另一端取得所需的数据或信息。
4.1.3 Linux文件系统结构
Linux文件系统是一个倒置的单根树状结构,所有的文件和目录都是存在于一个根目录root下。在Linux系统中,路径使用“/”分割,而在Windows系统中,路径使用“\”分割。Linux中没有盘符的概念,不同的硬盘分区被挂载在不同目录下。
下面我们讲述Linux文件系统的几个概念。
1.当前工作目录
在Linux文件系统中,每一个Shell或系统进程都有一个当前工作目录,使用pwd命令可以显示当前的工作目录。Linux中用pwd命令来查看“当前工作目录“的完整路径。也就是说,每当在终端进行操作时,都会有一个当前工作目录。如果想查看当前目录在文件系统内的确切位置,可以使用pwd命令。
[root@bogon Desktop]# cd /usr/tmp
[root@bogon tmp]# pwd
/usr/tmp
2.文件名称
Linux系统下的文件名长度最多可到255个字符。通常情况下,文件名的字符包括:字母、数字、"."(点)、"_"(下划线)和"-"(连字符)。Linux允许在文件名中使用除上述符号之外的其它符号,但并不建议用户这样做。文件名中不能出现正斜线“/”,因为正斜线是分割符。和Windows系统不同,Linux文件系统严格区分大小写。例如,在Linux文件系统中,linuxks文件和linuxKs是两个不同的文件,但在Windows系统中这两个文件是同一个文件。以“.“开头的文件是隐藏文件。要注意的是,在Linux文件系统中文件和文件夹是没有区别的,都统称为文件。
3.绝对路径与相对路径
如何到达一个文件或目录的方式有两种,绝对路径和相对路径。绝对路径是以根目录“/”开始,递归每级目录直到目标路径。相对路径是以当前目录为起点,到达目标的路径。注意的是绝对路径不受当前所在目录限制,而相对目录受到当前所在目录的限制。”.“代表当前目录,也可以使用“./”来表示。“…”代表父目录。“.”和“…”只会出现在相对路径中。
当前目录是/var/lib,需要定位到init.d文件。使用绝对路径时,写法为/etc/init.d。使用相对目录…/…/etc/init.d。
4.2 磁盘分区
在Linux中,每一个硬件设备都映射到一个系统的文件,包括硬盘、光驱等IDE或SCSI(Small Computer System Interface,设备小型计算机系统接口,一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准,SCSI是一种智能的通用接口标准)设备。 Linux为各种IDE设备分配了一个由hd前缀组成的文件。各种SCSI设备,则被分配了一个由sd前缀组成的文件,编号方法为拉丁字母表顺序。如第一个IDE设备(如IDE硬盘或IDE光驱),Linux定义为hda;第二个IDE设备就定义为hdb;下面以此类推。而SCSI设备就应该是sda、sdb、sdc等。USB磁盘通常会被识别为SCSI设备,因此其设备名可能是sda。
在 Linux中规定,每一个硬盘设备最多能有4个主分区(其中包含扩展分区)。任何一个扩展分区都要占用一个主分区号码。在一个硬盘中,主分区和扩展分区一共最多是4个。编号方法为阿拉伯数字顺序。需要注意的是,主分区按1234编号,扩展分区中的逻辑分区,编号直接从5开始,无论是否有2号或3号主分区。对于第一个IDE硬盘的第一主分区,则编号为hdal,而第二个IDE硬盘的第一个逻辑分区编号应为hdb5。
常见的 Linux磁盘命名规则为hdxY(或者sdxY),其中X为小写拉丁字母,Y为阿拉伯数字。个别系统可能命名略有差异。
大家可以看到有两块SATA硬盘,第一块编号为sda,第二块为sdb。sda有3个主分区,分别是sda1、sda2、sda3。剩下的是扩展分区,分为2个逻辑分区,直接从5开始,分别是sda5、sda6。
我们可以使用df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。
[root@localhost usr]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 18G 3.3G 14G 20% /
tmpfs tmpfs 491M 224K 491M 1% /dev/shm
/dev/sda1 ext4 291M 34M 242M 13% /boot
第一列指定文件系统的名称,第三列指定一个特定的文件系统的总量。被使用的和可用的量使用列指定使用的内存的百分比,而最后一栏"安装在"指定的文件系统的挂载点。所谓的挂载点就是将磁盘的某个分区挂载到Linux某一个目录下以便访问。如第一个分区sda1(/dev/sda1)挂载到/boot目录下,第二个分区sda2(/dev/sda2)挂载到/目录下。
4.3目录的管理
4.3.1 文件和目录的查看
Linux ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
语法:
ls [选项] [文件或目录名]
选项 说明
-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏文件,不会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)
-F 在列出的文件名称后加一符号;例如可执行文件则加 "", 目录则加 “/”
-R 若目录下有文件,则以下之文件亦皆依序列出
列出根目录(/)下的所有目录。
[root@localhost /]# ls /
列出目前工作目录下所有名称是 sys 开头的文件,越新的排越后面。
[root@localhost /]# ls -ltr sys
将 /bin 目录以下所有目录及文件详细资料列出。
[root@localhost /]# ls -lR /bin
列出目前工作目录下所有文件及目录;目录于名称后加 “/”, 可执行档于名称后加 “*” 。
[root@localhost /]# ls -AF
4.3.2目录的创建
通过 mkdir 命令可以实现在指定位置创建目录,要创建目录的用户必须对所创建目录的父目录夹具有写权限。并且,所创建的目录不能与其父目录)中的其他文件名重名,即同一个目录下不能有同名的(区分大小写)。
语法: mkdir [选项] 目录
选项 说明
-m 建立目录的同时设置目录的权限。
-p 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
1创建一个空目录
语法:mkdir 目录名
创建一个名字为dir1的空目录
[root@bogon tmp]# mkdir dir1
[root@bogon tmp]# ls -al
total 12
drwxrwxrwt. 3 root root 4096 Sep 26 09:12 .
drwxr-xr-x. 21 root root 4096 Aug 23 03:05 …
drwxr-xr-x. 2 root root 4096 Sep 26 09:12 dir1
所有的目录都以d开头,.目录代表当前目录,…目录代表当前目录的父目录。
2创建多级目录
命令:mkdir -p 父目录/子目录
示例创建redis目录,并在redis目录下创建zhangsan目录。
[root@bogon tmp]# mkdir -p redis/zhangsan
[root@bogon tmp]# ll
total 8
drwxrw-rw-. 2 root root 4096 Sep 26 09:12 dir1
drwxr-xr-x. 3 root root 4096 Sep 26 09:41 redis
[root@bogon tmp]# cd redis
[root@bogon redis]# ll
total 4
drwxr-xr-x. 2 root root 4096 Sep 26 09:41 zhangsan
3创建权限为777(rwxrwxrwx)的目录
文件的权限分为读、写、执行三种。r表示可读(数值4),w表示可写(数值2),对于目录来说表示可在目录中新建文件。x表示可执行(数值1),对于目录来说可进入到该目录中。777 表示当前用户对该目录具有读写执行的权限,该用户同组用户对该目录具有读写执行的权限,其他组成员对该目录具有读写执行权限。
[root@bogon tmp]# mkdir -m 777 public
[root@bogon tmp]# ll
total 5
drwxrwxrwx. 4 root root 4096 Sep 24 12:45 public
绿色表示可执行文件
4创建新目录并显示目录信息
[root@bogon tmp]# mkdir -v hadoop
mkdir: created directory ‘hadoop’
显示创建了hadoop目录的信息
5一个命令创建多级目录结构
有时我们需要使用一个mkdir命令创建目录结构。例如我们创建baklog目录,baklog目录下有bin,lib,log目录。log目录下有cep,dod,testlog目录。
[root@localhost usr]# mkdir -vp baklog/{bin,lib,log/{cep,dod,testlog}}
mkdir: created directory baklog' mkdir: created directory
baklog/bin’
mkdir: created directory baklog/lib' mkdir: created directory
baklog/log’
mkdir: created directory baklog/log/cep' mkdir: created directory
baklog/log/dod’
mkdir: created directory `baklog/log/testlog’
选项v表示显示创建目录的信息,p表示创建多级目录。
4.3.3目录的删除
rmdir命令只能用来删除空目录,若目录中存在文件,就要使用rm命令删除文件后再删除目录,后面会详细介绍rm命令。
命令: rmdir [选项] 目录名称
选项 说明
-p 删除指定目录上的所有目录,这些目录都应该是空目录
-i 在删除的过程中,以询问的方式完成删除操作
例如删除product目录,命令如下
[root@localhost doc]# rmdir -p product
例如删除service/deploy/product多级目录,命令如下
[root@localhost scf]# rmdir -p service/deploy/product
例如删除/a/b目录,命令如下
[root@localhost scf]# rmdir -p /a/b
4.3.4目录的复制
目录的复制是将给出的文件或目录复制到另一个文件或目录中,类似与DOS下的copy命令。
cp [选项] 被复制的目录 目标目录路径
选项 说明
-a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d 复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f 覆盖已经存在的目标文件而不给出提示。
-i 与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l 不复制文件,只是生成链接文件。
例如把zhangsan目录下以及子目录复制到url目录下的local目录下,并查看。
[root@bogon Desktop]# cd /usr/tmp
[root@bogon tmp]# ls
zhangsan
[root@bogon tmp]# cp -r zhangsan /usr/local
例如把exam1.c复制到/usr/tmp目录下,并改名为exam2.c
[root@bogon tmp]# cp exam1.c -i /usr/tmp/exam2.c
4.3.5目录移动
用户可以使用mv命令为文件或目录改名或文件由一个目录移动到另一个目录中。该命令类似于DOS下的ren和move的组合。
命令:mv 源目录名 新目录名
例如把dir1目录的名称改为dir2目录。
[root@bogon tmp]# mv dir1 dir2
例如把/usr/jiang中的所有文件移动到当前目录中,当前目录用“.”表示。
[root@bogon tmp]# mv /usr/jiang/* .
4.4 文件的管理
文件的创建、复制、移动和删除操作在Linux系统中使用得相当频繁。
4.4.1文件的创建
touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前时间,数据保留不变。二是用来创建新的空文件。touch命令需要root权限。
命令: touch [选项] 文件名
例如创建空文件readme
[root@bogin tmp]touch readme
4.4.2文件的删除
在Linux系统中,可以使用rm命令将无用文件删除。该命令的功能是删除一个目录中的一个文件或者多个文件,也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件保持不变。
命令:rm [选项] 文件名或目录名
选项 说明
-f 强制删除文件或目录。
-i 删除已有文件或目录之前先询问用户。
-r 递归处理,将指定目录下的所有文件与子目录一并处理。
-v 显示指令的详细执行过程。
例如删除文件或目录src,如果目录下的所有文件与子目录一并处理。
[root@bogon tmp]# ls
redis.sh src
[root@bogon tmp]# rm -rf src
[root@bogon tmp]# ls
redis.sh
例如删除tmp目录下的文件f1和f2。并要求对每个文件进行确认。用户最终决定删除f1文件,保留f2文件。
[root@localhost scf]# rm -i f1 f2
rm: remove regular empty file f1'? y rm: remove regular empty file
f2’? n
4.4.3 文件的查看
cat命令是用来显示文件内容,另外还能够用来连接两个或多个文件,形成新文件。
命令:cat [选项] 文件名
选项:
选项 说明
-n 由 1 开始对所有输出的行数编号。
-b 和 -n 相似,只不过对于空白行不编号。
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行。
-E 在每行结束处显示 $。
例如查看文件redis.sh 内容并显示行号
[root@bogon tmp]# cat -n names.txt
1 jiangtao
2 tom
3 mike
4 jack
例如把文件f1和f2的内容连接起来,放入到文件f3中。并显示文件f3的内容。
[root@localhost tmp]# cat f1 f2 > f3
[root@localhost tmp]# cat f3
4.4.4文件类型的辨识
file命令用于辨识文件类型。
命令:file [选项] 文件名
例如显示文件setup.ini的文件类型。
[root@localhost etc]# file /etc/profile
/etc/profile: ASCII English text
[root@localhost etc]# file /etc/system-release
/etc/system-release: symbolic link to `centos-release’
4.4.5文件的查找
在使用linux时,经常需要进行文件查找,并执行指定的操作。其中查找的命令是find。该命令的功能是从指定的目录开始,递归地搜索各个子目录,查找满足寻找条件的文件并对其采取相关的操作。find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
find命令可以使用逻辑运算符not,and,or组成的复合条件。
逻辑运算符 功能描述
and 逻辑与,在命令中使用“-and”或“-a”
or 逻辑或,在命令中使用“-or”或“-o”
not 逻辑非,在命令中使用“!”
命令: find 查找范围 [选项] 目录名或者文件名
示例1:列出当前目录及子目录下所有文件和文件夹
[root@bogon tmp]# find .
示例2:在/home目录及子目录下查找以.txt结尾的文件名
[root@bogon tmp]# find /home -name .txt
或
[root@bogon tmp]# find /home -name ".txt"
示例3:同上,但忽略大小写
[root@bogon tmp]# find /home -iname “.txt"
示例4:当前目录及子目录下查找所有以.txt或者.pdf结尾的文件
[root@bogon tmp]# find /home -name ".txt” -or -name ".pdf"
示例5:基于正则表达式匹配文件路径,查找文件名以.txt或以.pdf结尾的文件
[root@bogon tmp]# find . -regex ".(.txt|.pdf)KaTeX parse error: Expected 'EOF', got '#' at position 44: …root@bogon tmp]#̲ find /home ! …PATH
我们可以在任何目录下执行ls命令,大家是否想过为什么在任何目录下都可以执行/bin/ls这个命令?这是因为环境变量PATH的帮助所致。当我们执行ls命令时,系统会依照PATH的设置去PATH定义的目录下查找文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查找到的同名命令先被执行。
执行命令:echo $PATH
[root@localhost bin]# echo
P
A
T
H
/
u
s
r
/
l
o
c
a
l
/
s
b
i
n
:
/
u
s
r
/
s
b
i
n
:
/
s
b
i
n
:
/
u
s
r
/
l
o
c
a
l
/
b
i
n
:
/
u
s
r
/
b
i
n
:
/
b
i
n
:
/
r
o
o
t
/
b
i
n
e
c
h
o
有
“
显
示
”
的
意
思
,
P
A
T
H
前
面
加
的
PATH /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin echo有“显示”的意思,PATH前面加的
PATH/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/binecho有“显示”的意思,PATH前面加的表示后面接的是变量。
PATH(一定是大写)这个变量的内容由一堆目录所组成,每个目录之间用冒号(:)来隔开,每个目录有顺序之分。
注意:
PATH变量中的路径不加“.”,这一点用Windows的习惯不同。
PATH是可以修改的
使用绝对路径和相对路径直接指定某个命令的文件名来执行,会比查找PATH来的正确
命令应该放到正确的目录下,执行才会比较方便
4.6 文件的压缩与解压
文件的归档和压缩其实有不同的含义。归档其实就是我们平时说的打包,是指把多个文件组合到一个文件中。归档的好处是减少文件数目,归档的好处是将多个文件作为电子邮件的附件发送或更方便的传送给他人。压缩指的是将一个大的文件通过一些压缩算法变成一个小文件,Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得将这一大堆文件先归档,然后再用压缩程序进行压缩。
4.6.1 归档程序
linux下最常用的归档程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。所以通常Linux下,保存文件都是先用tar命令将目录或文件打包成tar归档文件,然后进行压缩。
tar [选项] 文件
tar命令选项
选项 说明
-c 建立新的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip压缩和解压文件
-r 向压缩文件末尾追加文件
-u 更新原压缩包中的文件
-v 显示操作过程
-f 指定压缩文件
例如把所有.jpg的文件打成images.tar的包。
[root@bogon tmp]# tar –cf images.tar *.jpg
例如把所有.gif的文件增加到images.tar包中。
[root@bogon tmp]# tar -rf images.tar *.gif
例如更新原来tar包images.tar中title.jpg文件。
[root@bogon tmp]# tar -uf images.tar title.jpg
例如列出images.tar包中所有文件。
[root@bogon tmp]# tar -tf images.tar
例如解出images.tar包中的所有文件。
[root@bogon tmp]#tar -xf images.tar
例如把所有.jpg的文件打成images.tar的包,并显示出操作过程
[root@bogon tmp]# tar –cvf images.tar *.jpg
以上的案例只是完成了归档工作,如果tar命令需要归档的同时进行压缩,需要使用参数z。
例如把目录中的所有.jpg文件打包成images.jar,并且将用gzip压缩,生成一个gzip压缩过的包,命名为images.tar.gz。
[root@bogon tmp]# tar -czvf images.tar.gz *.jpg
tar命令解压时需要使用参数x。
例如解压images.tar包
[root@bogon tmp]# tar -xvf images.tar
例如解压images.tar.gz包,当前包是经过gzip压缩过的。
[root@bogon tmp]# tar -xzvf images.tar.gz
4.6 习题
1 创建一个目录mycat,并改名字为mycat6。
2 创建文件mybat.sh。
3 在根目录下寻找目录名为ect的命令是什么?
4 在/usr/tmp目下下,找一个文件进行压缩,压缩的格式为tar.gz结尾。
第5章Linux 文本处理
Linux系统中存在众多不同类型的文件,其中相当多的文件是文本文件。我们学习Linux,就必须学习如何编辑文本文件。本章学习如何使用文字处理器软件vim进行文本操作以awk文本分析工具。学习完本章后就可以对文本文件进行简单的处理分析。
5.1文字处理器
在Linux系统中,即使在控制台命令行状态下,也需要进行大量的文本处理工作。Linux系统中几乎所有的配置文件都是以纯文本形式存在的,我们也要对这些文件进行编辑工作。Linux上常见的文本编辑器有vi、vim、ed、gedit、emacs等。本章介绍的文本编辑器就是平常使用最多的vim文本处理器。
5.1.1 vim简介
在所有的Linux发行版系统上都有vi编辑器,因此利用简单的文字编辑软件就能够轻松地修改系统的各种配置了,非常方便。vi就是一种功能强大的文本编辑器,取visual(可视化的)单词的前两个字母进行命名。在UNIX系统中就有vi应用程序,在Linux诞生时,vi与基本UNIX应用程序一样被保留下来,成为Linux基本管理程序的一员,为用户提供了一个全屏幕的窗口编辑平台。
1991年,BramMoolenaar基于vi进行了优化,发布了vim(vi improved vi改良),vim在GUI图形用户界面上做了大量优化,但是在使用方法上和vi相同。所以我们可以把vim看做是具有图形支持的高级版的vi,不但可以用不同颜色显示文字内容或特殊信息,不但能编写普通的文本文件,还能更好的进行诸如Shell脚本、C语言、JAVA语言、Python语言程序编辑等功能,成为通用性的程序编辑器。
Linux系统中可以使用多种文字处理器,为什么我们要使用vim呢?原因有以下几点。
现在所有的Linux发行版系统上都会默认内置vim编辑器,而不一定带有其他文本编辑器,非常通用
很多软件的编辑接口都会默认调用vi
vi具有程序编辑的能力
vi程序简单,编辑速度相当快速
绝大多数Linux发行版都配备了vim,我们使用vi命令时,调用的仍然是Linux系统中的vim程序,当然你使用vim命令,也可以达到相同的结果。在终端输入vi命令,会显示图5.1的结果。
[root@bogon Desktop]# vim
5.1 启动vim程序
在此环境下,输":q"可以退回终端。
5.1.2 vim 工作模式
vi 有三种工作模式,分别是:
命令模式(或称为常规模式)
插入模式
末行模式(或称为ex模式)
图5.2 vim命令模式
命令模式下可以执行命令、保存文件、移动光标、粘贴复制等。
2 .插入模式
主要用于文本的编辑。该模式下用户输入的任何字符都被作为文件的内容保存起来,并在屏幕上显示出来。进去命令模式后,按字母i键或a键,进入插入模式。
插入模式有一个–insert–标识,在文件的下方有如图5.2的标识。
图5.2 插入模式
在插入模式下,输入Esc键会返回到命令模式。
3. 末行模式
命令模式下的命令可以完成很多功能,但要执行一些如保存当前修改并继续编辑、保存并退出vim环境、不保存修改退出vim环境、显示行号等操作还是必须要进入末行模式。在命令模式下用户可以按键盘的shift加:进入末行模式,在末行模式下我们可以进行保存修改或退出vim,也可以环境设置、列出行号、寻找字符串等对文件进行一些高级处理。
底行模式在打开vi编辑器后,文件的下面,有一个标识,如图5.3所示。
图5.3 末行模式
在末行模式下按Esc键会退回命令模式。
5.1.3 vim编辑器的使用
1命令模式
终端输入vi命令后直接进入到命令模式,可以选择编辑某个文件或直接编辑空文件。
[root@bogon Desktop]#vi
[root@bogon Desktop]#vi setup.ini
命令模式的常见命令如表5-1所示。
图5-1 命令模式下常见命令
命令 说明
yy 复制当前行
y0 复制当前字符到当前行的起始
y$ 复制当前字符到当前行的末尾
yG 复制当前行到文件末尾的内容
n+yy 复制n行
p 粘贴
x 删除当前字符
X 删除前一个字符
dd 删除当前行
d$ 删除当前字符到当前行的末尾
d0 删除当前字符到当前行的开始
dG 删除当前行到文件末尾
u 撤销上一个操作
r 替换当前字符
通过命令可以控制光标的移动(比如上下左右键),控制光标移动的。
图5-2 命令模式下光标移动命令
命令 说明
h或左方向键 左移一位
l(小写L)或右方向键 右移一位
j或下方向键 下移一位
K或上方向键 上移一位
^ 移动到光标所在行的“行首”
$ 移动到光标所在行的“行尾”
gg 移动到文件开头
G 移动到文件最后
w 移动到下个单词的开头
b 移动到上个单词的开头
e 移动到当前单词的字尾
H 移动到屏幕最上面一行
M 移动到屏幕中间一行
L 移动到屏幕最下面一行
注意:命令是区分大小写的。
2插入模式
在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面。
不过有一点要特别注意,就是您进入vi之后,是处于命令行模式,您要切换到插入模式才能够输入文字。在命令行模式下按一下字母i或a就可以进入插入模式,这时候你就可以开始输入文字了。
您目前处于插入模式,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下ESC键转到命令行模式,再删除文字。
3末行模式
在命令模式下按":“键进入末行模式。这时光标会移动到屏幕底部,在这里可以保存修改或退出vim,也可以设置编辑环境,寻找字符串、列出行号等。末行模式的常用命令操作如表5-3所示。
表5-3末行模式下命令
命令 退出方式
:w 文件名 以指定的文件名保存,并退出,类似于另存为。
:w 保存当前修改,还可以继续编辑
:wq 保存当前修改,并退出vim环境
:q 退出vim环境(如果当前文件发生修改,将无法保存)
:q! 不保存当前修改,并退出vim环境
:x 保存当前修改,并退出vim环境。相当于:wq的意思
ZZ 保存当前修改,并退出vim环境。相当于:wq的意思
:set number 显示行号,简写为:set nu。注意,vi关闭后行号将不再显示
:! 系统命令 执行一个系统命令并显示结果,如在vim下需要执行ls时,可以使用:! ls
:sh 切换到命令行
w是write的简写,表示保存的意思。q是quit的简写,是退出的意思。
表5-3中有几个命令类似,如q、q!、wq,但是它们在使用时是有区别的。q命令表示退出vim环境,但是如果执行命令前没有保存文本,就会出现错误提示,提示如下:
E37: No write since last change (add ! to override)
q!命令强制退出vim环境,即使没有保存文本,也可以成功退出。wq命令保存文本并退出vim环境。
例如我们创建一个文本文件demo。
[root@bogon Desktop]# vim demo
进入命令模式,单击i或a键切换到插入模式,输入文本。
hello world
i am jiangtao
are you ok?
按Esc键回到命令模式,再按:键进入末行模式,在冒号后输入q,系统会提出没有保存无法退出vim环境,提示信息如下:
E37: No write since last change (add ! to override)
如果事先输入:w将修改做了保存,就不会出现提示内容,下面是输入:w提示信息。
“demo” [New] 3L, 39C written
然后再输入:q,就会退出vim环境。当然,直接输入:wq可以直接保存后退出vim环境。
当文本内容很多时,我们可以显示行号,设置方式是末行模式下输入:set nu。
如果光标要跳转指定行,使用:行号。例如,跳转到第10行,使用 :10。
4查找和替换
vim具有十分强大的查找和替换功能。在vim环境下,根据搜索条件将光标移动到指定的位置,并用颜色标记出查找到的内容。需要注意,在执行文本替换时,可以控制在用户确认后才能进行替换。
例如,我们使用vim创建一个文件后查找相应内容。
[root@bogon Desktop]# vi doc1
进入命令模式下,输入i键进入插入模式输入下面文字内容。
《You Have Only One Life》
There are moments in life when you miss someone so much that you just want to pick them from your dreams and hug them for real! Dream what you want to dream;go where you want to go;be what you want to be,because you have only one life and one chance to do all the things you want to do.
内容输入完成后按Esc键,进入命令模式,输入:w保存修改内容。下面我们要在整个文件中查找on单词。在命令模式或末行模式下,输入”/",在屏幕的底部出现一个"/“符号,在”/“后输入要查找的内容,按Enter键结束,当然我们也可以在”/"键后输入正则表达式进行查找。如果我们希望查找下一个按n键,查找上一个按N键。查找到的内容会用颜色显示。
图5.3是命令模式下输入要查找的内容on,图5.4是按n或N键在查找内容间切换。
图5.3 全文查找
图5.4 全文查找切换
替换文本内容是在末行模式下进行的,即如果需要替换则输入":“末行模式。比如我们需要对doc2文件进行替换操作,将文本中的+替换为-,命令如下。
[root@bogon Desktop]# vi doc2
f=a+b+c+d+e
命令模式下输入”:"进入末行模式,输入下面内容。
:%s/+/-/g
输入完成后,按Enter键,文本中的内容变化为:
f=a-b-c-d-e
由此可以看出替换成功,+号替换-号。上述命令中各个字母的含义如表5-4所示
命令组成 含义
%s 确定操作范围,%代表从文本的第一行到最后一行
s 执行替换操作
/+/- 搜索和替换的文本(搜索字母+,替换字母-)
g 对搜索到每一行的每一个实例进行替换;如果g缺失,则只替换每一行第一个符合条件的实例。
如果替换命令变为:
%s/+/-/gc
则在每次替换前都会请求用户确认,在屏幕最下方会出现如下内容。
replace with r (y/n/a/q/l/E/Y)?
用户可以选择括号中的任一个字符进行回答,每一个字符的含义如表5-5。
表5-5 用户确认中字符的含义
字符 含义
y 执行替换
n 跳过此次替换
a 执行此次替换以及之后的所有替换
q 停止替换
l(小写L) 执行此次替换以及之后的所有替换
^E(Ctrl+E)
^Y(Ctrl+Y) ^E表示向下滚动
^Y表示向上滚动
用于查看替换处的上下文
常用的替换命令:
命令 说明
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。