现在的位置: 首页 > 操作系统 > 正文

鸟哥的Linux私房菜基础学习篇跳读笔记

2014年11月23日 操作系统 ⁄ 共 13398字 暂无评论 ⁄ 阅读 754 次
文章目录

第0章:计算器概论

【CPU】

CPU内又可分为两个主要的单元,分别是:算数逻辑单元与控制单元。其中算数逻辑单元主要负责程序运算与逻辑判断,控制单元则主要在协调各周边组件不各单元间的工作。

CPU其实内部已经含有一些小指令集,我们所使用的软件都要经过 CPU 内部的微指令集来达成才行。这些指令集的设计主要又被分为两种设计理念,分别是精简指令集(RISC)不复杂指令集(CISC)系统。

精简指令集的微指令集较为精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的 执行效能较佳; 但是若要做复杂的事情,就要由多个指令来完成。常用于大型工作站、手机、交换器、导航系统等。

复杂指令集的微指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂, 每条指令的长度并不相同。因为指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富,被大量使用于个人计算机。

CPU速度:

不同的微指令集会导致CPU工作效率的优劣,除了这点之外,CPU效能的比较还有CPU的频率。频率就是CPU每秒钟可以进行的工作次数,频率越高表示这颗CPU单位时间内可以作更多的事情。举例来说,Intel的Core2Duo型号E8400的CPU频率为3.0GHz,表示这颗CPU在一秒内可以进行3.0x109次工作。不同的CPU之间不能单纯的以频率来判断运算效能,这是因为每颗CPU的微指令集不相同,架构也不见得一样,每次频率能够进行的工作指令数也不同之故!所以,频率目前仅能用来比较同款CPU的速度!

所谓的外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作效能的一个倍数,两者相乘才是CPU的频率速度。我们以刚刚IntelCore2DuoE8400CPU来说,他的频率是3.0GHz,而外频是333MHz,因此倍频就是9倍!

【主板】

整个主板上面最重要的是芯片组,而芯片组通常又分为两个网桥来控制各组件的沟通,分别是:(1)北桥:负责链接速度较快的CPU、主存储器与显示适配器等组件;(2)南桥:负责连接速度较慢的周边接口,包括硬盘、USB、网络卡等等。

CPU运算的数据都是由主存储器提供的,主存储器与CPU的沟通速度靠的是外部频率。一般主板芯片组分北桥与南桥,北桥的总线称为系统总线,因为是内存传输的主要信道,所以速度较快。南桥就是输入输出(I/O)总线,主要在联系硬盘、USB、网络卡等接口设备。

【磁盘】

磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达所组成,磁盘盘上面又可细分出扇区(Sector)与磁柱(Cylinder)两种单位,其中扇区每个为512bytes,磁柱为盘面上一个圆道(由扇区组成)。

每个扇区都一样重要呢?其实整颗磁盘的第一个扇区特别的重要,因为他记录了整颗磁盘的重要信息!磁盘的第一个扇区主要记录了两个重要的信息,分别是:

  • 主要启动记录区(MasterBootRecord,MBR):可以安装开机管理程序的地方,有446bytes。
  • 分割表(partitiontable):记录整颗硬盘分割的状态,有64bytes。

分割表记录记录的数据类似“P2:100~200”,表示第2个分割槽P2所在为第101到200号磁柱的范围。若操作系统是Windows,P2的代号是D盘,打开D盘写入资料,则数据会在100~200号磁柱之间写。

由于分割表只有64bytes,最多只能容纳4笔分割记录,这四个分割的记录被称为主要(Primary)或延伸(Extended)分割槽。分割槽的最小单位为磁柱(cylinder),当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分割槽进行数据的处理。

分割有利于数据安全,如C盘重装并不会影响D盘数据;另外,也有利于系统性能,分割后数据读取搜索磁柱范围会减小,如原来要搜索101~400,现在只要搜索101~200就好了。

虽然分割表只能记录4组数据,但并不意味着一颗硬盘最多只能有4个分割槽。因为我们可以利用其他扇区记录更多的分割信息,这就是延伸分割。如P1:1~100、P2:101~400、P3和P4无记录,则P2可以作为延伸分区,在P2的一个扇区再记录该分割槽再分割的信息,如L1:101~160、L2:161~220等。在装置名上,P1编号是dev/hda1,P2是2,第一个逻辑分区却是5,这是因为3和4为P3、P4保留的。

延伸分割最多只能有一个,而主分区最多有四个(有延伸分区时最多3个,因为第一扇区最多4条记录嘛)。由延伸分割继续切出来的分割槽,就被称为逻辑分割槽(logical partition)。同时注意一下,由于逻辑分割槽是由延伸分割继续分割出来的,所以他可以使用的磁柱范围就是延伸分割所设定的范围!

每个分割槽都拥有自己的启动扇区(bootsector),所以一个磁盘上可以安装多个系统。若Linux和Windows都安装,最好先装Windows再装Linux,因为Windows不支持分割槽管理会覆盖掉Linux所在分割槽。

【操作系统】

操作系统(OperatingSystem,OS)其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。如,定位内存区、分配内存区、数据写入内存等。

操作系统的功能就是让CPU可以开始判断逻辑与运算数值、让主存储器可以开始加载/读出数据与程序代码、让硬盘可以开始被存取、让网络卡可以开始传输数据、让所有周边可以开始运转等等。总之,硬件的所有动作都必须要透过这个操作系统来达成。

操作系统只是管理整个硬件资源,包括CPU、内存、输入输出装置及文件系统文件。如果没有其他的应用程序辅助,操作系统只能让计算机主机准备妥当,并不具有特定的功能。要实现特定的功能,则需要有特定的应用程序。特定的应用程序只能在特定的操作系统上使用,因为应用程序的开发都要参考操作系统提供的开发接口,所以该应用程序只能在该操作系统上面运作而已,不可以在其他操作系统上面运行。

并不是任何硬件都是可以被操作系统支持的,操作系统给硬件提供了接口,而硬件则要有相应操作系统的驱动程序,给Windows提供的驱动程序不能用于Linux环境。驱动程序由硬件厂商提供,与操作系统开发者无关。

【应用程序】

应用程序是参考操作系统提供的开发接口所开发出来软件,这些软件可以让用户操作,以达到某些计算机的功能利用。举例来说,图像处理软件主要是让用户用来处理影音资料的;浏览器软件主要是让用户用来上网浏览用的等等。

第3章:主机规划与磁盘分区

【文件系统与目录树的关系(挂载)】

Linux内的所有数据都是以档案的形态来呈现的,使用的是目录树架构,但是我们的档案数据其实是放置在磁盘分区槽当中的。目录树的架构与磁盘分区槽的结合就是挂载(mount)。

挂载就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下;也就是说,进入该目录就可以读取该分割槽的意思。这个动作我们称为挂载,那个进入点的目录我们称为挂载点。由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分割槽的。至于其他的目录则可依用户自己的需求来给予挂载到不同的分割槽。我们以下图来作为一个说明:

linux1

上图中假设我的硬盘分为两槽,partition1是挂载到根目录,至于partition2则是挂载到/home这个目录。这也就是说,当我的数据放置在/home内的各次目录时,数据是放置到partition2的,如果不是放在/home底下的目录,那么数据就会被放置到partition1了!

【重要热键】

Tab:命令及文件名补全键。

Ctrl+C:强制中断运行。

Ctrl+D:相当于Exit。

man:manual(操作说明),如,man date就会显示date这个命令的操作说明了。在man出来的信息,使用/可两只下查询关键字,?可向上查询关键字,q退出man page。

第6章:Linux的文件权限与目录配置

在ls –al命令列出的档案详情中,一行从前到后字段的含义分别为:权限、连结数、拥有者、群组、档案容量、修改日期、档案名。

权限详解:

在权限中,如drwxrwxrwx,第1个字符是档案类型,然后3个是拥有者权限,然后3个是群组权限,最后3个是其他人权限。

第1个字符,为d则表示是目录,为-则表示为文件,为l则表示为连结档(link file,快捷方式),为b则表示为装置文件里面的可供储存的接口设备(可随机存取装置),为c则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来3个一组的权限,如rwx,其中,[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[-]。当权限为r--时,表示只能读到(看到)这一文件,但并不具有x执行权限,也就不能打开目录或文件。

权限更改:

  • chgrp(change group):改变档案所属群组,语法:chgrp [-R] grp_name dir/file_name。其中,-R表示递归(recursive)修改,限目录下所有目录、文件群组都更改。
  • chown(change owner):改变档案拥有者,甚至可以连同群组一起修改,语法:chown [-R] own_name[:grp_name] dir/file_name。其中,群组前“:”也可用“.”,不过通常用“:”,因为“.”可能造成系统误判。更改群组也可使用该命令,只需要把前面的own省略即可。
  • chmod:改变档案权限,在更改权限时也可以使用数字,其对应关系为r:4、w:2、x:1。如777(4+2+1=7)权限就是rwxrwxrwx,740就是rwxr-----,其他人权限为0即文件对其他人不可见。语法:chmod xxx dir/file_name,其中xxx表示数字权限。若要同时更改own、group和other权限,则可分别指定身份。身份u为own权限、g为group权限、o为other权限、a为所有人权限,如:chmod u=rwx,g=rx,o=rx filename,或者chmod u=rwx,go=rx filename。这语句中“=”代表将指定身份设定为特定权限,我们也可以替换为“+”或“-”,代表给特定身份增加或去除特定权限。如,chmod a+x filename,表示给所有人增加可执行权限。

群组、拥有者更改多用于cp文件以后,因为cp会复制执行者的属性与权限,当档案要提供给他人使用时,就需要更改了。

第7章:Linux档案与目录管理

目录路径相关符号:

  • .:代表此层目录;
  • ..:代表上层目录;
  • -:代表前一个工作目录;
  • ~:代表当前用户的家目录;

目录操作常用指令:

【cd】(change directory):变换目录,常见用法如下:

  • cd ~user,到user用户的家目录;
  • cd ~,回到当前用户的家目录;
  • cd,也是回到当前用户的家目录;
  • cd ..,回到上层目录;
  • cd -,回到刚才的目录;
  • cd /dir1/dir2/dir3,到指定的绝对路径;
  • cd ../dir1,到当前路径上层目录下的dir1目录;

【pwd】(print working directory):显示当前目录;

【mkdir】(make directory):创建新目录,语法:mkdir [-mp] dir_name,-p在建立多层目录时使用,-m指定目录权限,若不指定则使用umask权限,如755,查看umask权限使用指令:umask –S。umask权限可以自己设定,后面跟3位数字,如002则表示拿掉other的2权限,即写权限。

【rmdir】删除一个空目录,若目录下有内容则无法删除,语法:rmdir [-p] dir_name,-p在删除多层空目录时使用;

【$PATH】指令执行文件路径变量。

为什么我可以在任何地方执行/bin/ls这个指令呢?为什么我在任何目录下输入ls就一定可以显示出一些信息而不会说找不到该/bin/ls指令呢?这是因为环境变量PATH的帮助所致!如,当我们在执行一个指令ls的时候,系统会依照PATH的设定去每个PATH定义的目录下搜寻文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先搜寻到的同名指令先被执行!

【ls】列出当前目录下档案,常用选项:

  • -a,列出全部档案,连同隐藏档(开头为.的档案);
  • -A,列出全部档案,但不包含.与..这两个目录;
  • -d,仅列出目录本身,而不是列出目录内的档案数据;
  • -f,直接列出结果,不排序(默认排序);
  • -h,档案容量以人易读方式列出(如GB、KB);
  • -i,列出inode号码;
  • -l,列出详细信息,包含总容量、属性、权限等;
  • -n,列出UID和GID而非拥有者和群组名;
  • -R,连同子目录内容一起列出;
  • -r,反向排序;
  • -t,以时间排序(默认以档案名);
  • -S,以档案容量大小排序;
  • --color=[never|always|auto],分别为依据档案特色不着色、着色和系统自己判断;

cp】(copy),复制文件或目录,语句:cp [选项] source destination,常用选项:

  • -a,相当于-pdr,完全按来源文件,包括其属性及子目录文件等一并复制;
  • -d,若来源文件为链接文件的属性,则复制链接文件属性而非档案本身;
  • -i,若目录文件已存在,覆盖时会先询问;
  • -l,进行硬式连结的连结档建立,而非复制档案本身;
  • -p,连同档案的属性一起复制过去,而非使用默认属性;
  • -r,递归复制,目录下所有内容复制;
  • -s,复制成为快捷方式档案;
  • -u,虽目标文件存在,若来源文件比目录文件新则覆盖更新;

使用时,有时目录是一个“.”则表示将来源文件复制到当前目录。

rm】删除文件或目录,语法:rm [选项] dir/file_name,常用选项:

  • -f,就是force的意思,忽略不存在的档案,不会出现警告信息;
  • -i,互动模式,在删除前会询问使用者是否执行;
  • -r,递归删除,将目录下所有内容删除;

mv】移动文件或目录,或重命名,语法:mv [选项] source destination,常用选项:

  • -f:force强制的意思,如果目标档案已经存在,不会询问而直接覆盖;
  • -i:若目标档案(destination)已经存在时,就会询问是否覆盖!
  • -u:若目标档案已经存在,且source比较新,才会更新(update)

bashname|dirname】获取路径的文件名或目录部分;

touch】新建文件,文件umask默认权限为644(文件没有1权限),目录umask默认权限为755;

查找】通常先使用whereis或locate,若未找到再使用find。因为前两者利用数据库来搜索数据速度较快并不搜索硬盘,较省时间和资源;而find则速度慢,且搜索硬盘。

第8章:Linux磁盘与文件系统管理

Linux系统的档案有权限(rwx)和文件属性(拥有者、群组、时间参数等),这些数据放置在inode中,而实际数据则放在data block中。每个inode和block都有编号,其具体含义如下:

  • superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
  • inode:记录记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block号码。
  • block:实际记录档案的内容,若档案太大时,会占用多个block。

挂载点一定是目录,该目录为进入该文件系统的入口。因此并不是你有任何文件系统都能使用,必项要挂载到目录树的某个目录后,才能够使用该文件系统的。

df】列出文件系统的整体磁盘使用量,语法:df [选项] file/dir_name,常用选项:

  • -k,以KB的容量显示文件系统;
  • -m,以MB的容量显示文件系统;
  • -h,以人易识别的容易显示文件系统,如GB、MB、KB;
  • -H,以M=1000K取代M=1024K的进位读方式;
  • -T,连同该partition的filesystem名称也列出;
  • -i,不用硬盘容量,而以inode的数据来显示;

如:df –h /etc,这样就可以知道etc目录已用容量和可用容量等。

du】评估文件系统的磁盘使用量(帯用在推估目录所占容量),语法:du [选项] file/dir_name,常用选项:

  • -h,以人易识别的GB、MB格式显示;
  • -s,列出总量而不列个别目录容量;
  • -k和-m,以KB和MB显示;

与df不一样的是,du这个指令其实会直接到文件系统内去搜寻所有的档案数据。

第9章:文件与文件系统的压缩与打包

文件压缩原理:目前我们使用的计算机系统中都是使用bytes单位来计量的,不过计算机最小的计量单位应该是bits才对,1 byte = 8bits。假设1记录在1byte中,其实只有1bit记录了1,其他都是用0填充。压缩就是把这些没有使用的空间拿出来,让档案占用的空间变小,这就是压缩原理!

Linux上常见的压缩指令是gzip和bzip,而compress基本被淘汰了。gzip的开发基本取代了compress,而bzip则较gzip更胜一筹。不过,早期gzip和bzip只能针对一个档案来压缩与解压缩。tar指令可以将很多档案“打包”成一个档案,不过tar只提供打包功能并不提供压缩。

gzip】压缩文档,语法:gzip [选项] filename,常用选项:

  • -d,解压缩参数,解压后删除原压缩文件;
  • -v,显示压缩比例;
  • -#,压缩等级,-1最快但压缩比最差,-9最慢但压缩比最好,默认-6;
  • zcat可以读取压缩的文件.gz。

bzip2】比gzip更好的压缩,语法:bzip2 [选项] filename,常用选项:

  • -d,解压缩参数;
  • -k,保留源文件,不删除压缩前文件(默认是删除的);
  • -z,压缩参数;
  • -v,显示压缩比信息;
  • -#,压缩等级与gzip相同;
  • bzcat用于读取压缩的文件.bz2;

tar】将多个目录或文档打包成一个大档案,语法:tar [-j|-z] [选项] [-f filename],常用选项:

  • -j,使用bzip2进行压缩或解压;
  • -z,使用gzip进行压缩或解压;
  • -v,在压缩/解压的过程中,将正在处理的文件名显示出来;
  • -c,打包;
  • -x,解包;
  • -t,查看包内文件名;
  • -f,要处理的文件名,打包后的文件名、查看的文件名、解压的文件名;
  • -C,指定解压到的特定目录;
  • -p,保留原档案的权限和属性;
  • 压缩,tar -jcv -f filename.tar.bz2 要被压缩的档案或目录名称
  • 查询,tar -jtv -f filename.tar.bz2
  • 解压缩,tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

第10章:vim程序编辑器

vi】vi共分为三种模式,分别是一般模式、编辑模式与指令列命令模式。

  • 在一般模式下可以移动光标、删除、复制和粘贴,但无法编辑文件内容。
  • 在编辑模式下可以编辑文件内容,按i、o、a、r等可进入编辑模式,按Esc则退出编辑模式回到一般模式。
  • 在一般模式,按:、/、?中任意一个都可以将光标移动到最底一行进入指令列模式,在该模式下可以执行搜索、读取、存盘、离开vi等动作,同样,Esc可以回到一般模式。

语法:vi filename,就可以进入一般模式操作文件了。进入vi后界面分两部分,上部分显示文档内容,其中~表示没有任何东西,下部分为最后一行,显示文档状态。

光标移动

  • hjkl分别代表左下上右,也可以移动多行,如30j表示向下移动30行。
  • ctrl+f|b,向下|上一页;ctrl+d|u,向下|上半页。
  • num+空格,向右移动num个字符。
  • num+Enter键,向下移动num行。
  • 0或Home键,移动到本行最前面字符处;$或End键,移动到本行最后字符。
  • H|M|L,光标移动到屏幕最上、中、下一行的第一个字符。
  • G,移动到档案的最后一行。
  • nG,移动到档案的第n行,如20G则表示移动到档案的第20行,1G表示移动到档案第一行。
  • gg,移动到档案第一行。

删除:

  • x|X,x为向后删除一个字符(相当于del),X为向前删除一个字符(相当于backspace)。
  • nx,向后删除n个字符。
  • d$,删除光标所在处到该行最后一个字符。
  • d0,删除光标所在到该行第一个字符。
  • dd,删除光标所在行。
  • ndd,删除光标所在的向下n行。
  • dG,删除光标所在到最后1行。
  • d1G,删除光标所在到第1行。

复制:

  • yy,复制光标所在行。
  • y0,复制光标所在到该行第1个字符。
  • y$,复制光标所在到该行最后1个字符。
  • nyy,复制光标所在向下n行。
  • yG,复制光标所在到最后一行。
  • y1G,复制光标所在到第一行。

粘贴:

  • p|P,p在光标所在行下一行开始粘贴,P在光标所在行上一行开始粘贴。

撤销与重做:

  • u,撤销上一步操作。
  • Ctrl+r,重复上一步操作。

搜索:

  • /word,向光标下搜索指定字符串word。
  • ?word,向光标上搜索指定字符串word。
  • n,重复前一个搜索动作。
  • N,反向前一个搜索。

替换:

  • :num1,num2s/word1/word2/g,在num1行到num2行之间搜索word1将之替换为word2。
  • :1,$s/word1/word2/g,从第1行到最后一行搜索word1将之替换为word2。
  • :1,$s/word1/word2/gc,从第1行到最后一行搜索word1替换为word2,在替换前询问用户是否执行替换。

编辑模式切换:

  • i|I,i为在当前光标所在处插入,I为在光标所在行行首开始插入。
  • a|A,a为在当前光标下一个字符开始插入,A为在光标所在行行尾开始插入。
  • o|O,o为在光标所在行下一行插入新行开始插入,O为在光标所在行上行插入新行插入。
  • r|R,r只会替换光标所在的那个字符一次然后在其后开始插入,R一直替换后面的字符直到Esc切换模式。

存储离开:

  • :w,将编辑数据存盘。
  • :w!,强制写入,跟用户权限有关。
  • :q,退开vi。
  • :q!,离开且不存储修改。
  • :wq,存储编辑数据然后退出vi。
  • ZZ,大写Z,若文件未更改则不存储离开,若更改则存储离开。
  • :w filename,另存为指定文件。
  • :n1,n2 w filename,将n1到n2行的内容另存为指定文件。
  • :r filename,读取指定文件内容加到游标所有行之后。

显示行号:

  • :set nu,显示行号。
  • :set nonu,不显示行号。

第11章:认识与学习bash

在bash shell中,默认会记忆最近1000个操作过的指令,记录存储在家目录内.bash_history。不过该文件记录的是本次登录之前所执行过的命令,本次登录执行的命令被暂存在内存中,当注销系统后该指令记忆才会记录到.bash_history当中!

变量:

  • Linux中有很多变量,可以使用echo命令读取其值,如echo $HOME,echo $PATH等。
  • Linux中变量赋值使用=号,=号两边不能有空格,变量中若有空格需要使用单引号或双引号将变量内容括起来。
  • 若该变量为扩增变量内容时,则可用”$变量名称”累加内容,如:PATH=”$PATH”:/home/bin。
  • 通常我们可以约定,将系统变量都定义为大写,而自定义变量用小写。
  • 转义字符\可以将特殊符号变为一般字符,如Enter、空格、’等。当行过长,可以使用\然后直接Enter换行。此时,Enter前有\转义,将不再具有执行意义了,只是换行。
  • 取消变量设定,使用unset $var_name。

命令别名:

  • 使用alias可以将指令串命名为自定义字符,例如,想知道多个目录底下的所有档案(包含隐藏档)及所有的文件属性,那么就必须反复要下达ls -al这样的指令串。现在,利用alias就可以实现不需要每次都输入这样的指令串。指令语句:alias ll=’ls –al’,然后我们每次只要输入ll就相当于完全指令ls –al,需要注意的是,ll后没有空格,=后也没有空格。
  • 查看别名命令,直接输入alias然后Enter执行即可。
  • 取消别名命令,使用unalias后跟要取消别名的命令即可。

输入输出:

  • 标准输入(stdin):代码为0,使用<或<<,其中<<为结束输入字符设定,并不是追加输入,需要注意。
  • 标准输出(stdout):代码为1,使用>或>>。>的输出若文件不存在则新建,存在则先清空内容再写入;>>的输出若文件不存在则新建,存在则追加。
  • 标准错误输出(stderr):代码为2,使用2>或2>>;

指令传递:

  • &&:cmd1&&cmd2表示若cmd1执行完毕且正确,则执行cmd2;若cmd1执行完毕且错误则cmd2不执行。
  • ||:cmd1&&cmd2表示若cmd1执行完毕且正确,则cmd2不执行;若cmd1执行完毕且错误则执行cmd2。
  • |:管线命令,传递处理指令数据流。

cut】根据域分隔符取出行中指定域数据,使用语法:传入数据|cut [选项],常用选项:

  • -d:后面跟分隔字符,用单引号括起,跟-f一起使用;
  • -f:依据-d的分隔符将行切割,然后取出-f后指定域的字符;
  • -c:取出-c指定的字符区间,如12-20,12-;

grep】在输入中搜索指定内容,若含有该内容则取出行,使用语法:grep [选项] [着色] ‘搜索字符串’ fliename,常用选项:

  • -c:计算找到‘搜索字符串’的次数;
  • -i:忽略大小写;
  • -n:输出行号;
  • -v:反向选择,输出不包含‘搜索字符串’的行;

着色:

--color=auto,可以将找到的关键字部分着色显示。

sort】将输入进行排序,使用语法:sort [选项] file,常用选项:

  • -b:忽略最前面空格部分;
  • -f:忽略大小写;
  • -n:以纯数据形式排序(默认以文本形式);
  • -u:相同数据排序仅出现一行;
  • -r:反向排序;
  • -M:以月份排序;
  • -t:指定分隔符(默认tab);
  • -k:根据分隔域,以指定域排序;

uniq】对排序后的内容进行去重,常用选项:

  • -i,忽略大小写;
  • -c,对重复次数进行计算;

wc】统计行、字、字符,常用选项:

  • -l:仅统计行;
  • -w:仅统计单词数(英文);
  • -m:仅统计字符数;
  • 若不加任何选项则三项全统计;

tee】屏幕、文件双输出,选项,-a,以追加形式写入文件。

tr】删除或替换字符,常用选项:

  • -d:删除字符串;
  • -s:取代掉重复的字符;
  • 不加选项可用于替换,如tr ‘[a-z]’ ‘A-Z’,表示将所有小写替换为相应大写;

sed】数据替换、删除、新增、搜索等,语法:sed [选项] ‘[动作]’,常用选项:

  • -e:多个动作,则每个动作前要有-e。
  • -n:使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
  • -f:执行指定文档的动作。直接将sed的动作写在一个档案内,-f filename则可以执行filename内的sed动作。
  • -r:sed的动作支持的是延伸型正则表示法的语法。(预设是基础正则表示法语法)
  • -i:直接修改读取的档案内容,而不是由屏幕输出。

动作可仅到指定行进行,如“[n1][,n2] action”,10,20 动作,是动作仅作用于10到20行。常用动作(注意前面没有-,动作整体用单引号):

  • a:新增。a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)。
  • i:插入。i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行),在新增多行时,可以用\然后换行继续输入。
  • c:全替换。c的后面可以接字符串,这些字符串可以取代n1,n2之间的行!
  • s:指定替换。通常搭配正则进行指定替换,如:1,20s/old/new/g。当然,若我们把new不写任何内容,这个句子就成删除指定字符了。
  • d:删除行。
  • p:输出。亦即将某个选择的数据印出,通常p会与参数sed –n搭配。

awk】sed常将数据作为行进行编辑处理,而awk则将行分成“字段”进行数据处理。语法:awk '条件类型1 {动作1} 条件类型2 {动作2}...' filename。

注意:

  • awk的条件判断及动作都在引号内;
  • awk的动作在大括号内,有几个大括号就是有几个动作;
  • 内置变量使用大写,且不需要$变量符号;

awk的处理流程:

  • 读入一行数据,依据分隔符将其填入变量$0、$1、$2…等中,其中$0是全行数据。
  • 依据“条件类型”的限制,判断是否需要进行后面的动作,若无条件类型则表示动作执行前不做判断。
  • 做为所有的条件判断及动作,然后重复执行下面的行。

awk内置变量:

  • NF:每一行拥有的字段总数;
  • NR:目前awk所处理的是第几行数据;
  • FS:目前的分隔符,默认为空格;

条件与赋值:

  • 条件比较可用,“>、<、>=、<=、==、!=”,需要注意的是等于是==,而一个=是赋值。
  • 设定分隔符就相当于一个动作,而设定就相当于一个赋值,如:awk '{FS=”:”} $3<10 {print $1 “\t” $3}',其中,第一个动作就是设定分隔符。需要注意的是,这种写法并不处理第一行,原因很简单,根据awk流程,先读入,采用默认分隔符分隔,然后赋给变量,再交给动作处理的。在读第二行时,分隔符才被在第一行修改为“:”。要想改变这种情况,就要利用初始化关键字BEGIN作为条件放在动作前。
  • 若动作中有多个指令,则指令间使用“;”隔开。

第14章:Linux账号管理与ACL权限设置

虽然我们登入Linux主机的时候,输入的是我们的账号,但是其实Linux主机并不会直接认识你的账号名称,他仅认识ID(ID就是一组号码)。由于计算机仅认识0与1,所以主机对于数字比较有概念;至于账号只是为了让人们容易让忆而已。

ID分两种,使用者ID(User ID,简称UID)和群组ID(Group ID,简称GID),UID相关信息放在etc/passwd中,GID相关信息放在etc/group中。

密码验证流程:

  • 先找寻/etc/passwd里面是否有输入的账号,如果没有则跳出,如果有的话则将该账号对应的UID与GID(在/etc/group中)读出来,另外,该账号的家目录与shell训定也一并读出。
  • 再来则是核对密码表啦!这时Linux会进入/etc/shadow里面找出对应的账号与UID,然后核对一下你刚刚输入的密码与里头的密码是否相符。
  • 如果一切都OK的话,就进入Shell控管的阶段!

新建用户:

语法:useradd [选项] 账号名,常用选项:

  • -u:后面接UID,指定特定UID,非系统UID在500以后(0为系统管理员,1~499为系统账号);
  • -g:指定群组(默认加入一个与账号名一样的组名);
  • -G:该账号还可以加入的群组;
  • -M|m:强制不建立|建立用户家目录(默认建立家目录);
  • -d:指定家目录;
  • -e:账号过期日期;
  • -f:密码有效性,0为失效,-1为永不失效;
  • -r:建立一个系统账号;

设定密码:

使用useradd新建账号后,默认该账号是被封锁的,需要使用passwd设定密码。语法:passwd [选项] 账号,常用选项:

  • -l:意为Lock,使密码失效;
  • -u:与-l相对,意为unlock;
  • -nxwi:分别为不久修改密码天数、必须修改密码天数、密码过期前警告天数、密码失效日期。
  • 大量建账号且不想重复输入密码可使用—stdin,如:echo “abc543CC” | passwd –stdin vbird2

删除用户:

userdel,删除用户的时间删除其所有相关数据,如帐号密码群组、家目录数据等。语法:userdel [-r] 账号,-r表示连家目录也一起删除。

查阅用户信息:

finger,语法:finger [选项] 账号,选项有:

  • -s:仅列出用户的账号、全名、终端机代号与登入时间等等;
  • -m:列出与后面接的账号相同者,而不是利用部分比对(包括全名部分);

只输入finger则找出目前在系统上面登入的用户与登入时间。

IDid这个指令则可以查询某人或自己的相关UID/GID等等的信息,只输入ID则查自己,ID后跟账号则查该账号的。

新增群组:groupadd,语法:groupadd [选项] 组名,常用选项有:

  • -g:指定群组GID;
  • -r:建立系统群组;

使用者身份切换:

su,使用时后跟-账号,若不跟账号只跟-则表示切换到root账号。而使用root时则不需要任何密码就可以切换到其他任何账户。

查询使用者:

w、who、last、lastlog、id、finger都可以查询用户相关信息。

使用者对话:

write、mesg、wall可实现Linux主机用户间对话。

write语法:write 对方账号 [对方终端接口] 内容(ctrl+d结束输入),终端接口可用who命令来查询。write可直接传递信息给对方,但会直接打断对方的工作。

当然,可以自己设定开启或关闭信息功能,使用的就是mesg命令了,mesg n表示不接收信息,mesg y表示接收信息。

对系统上所有用户发送信息使用wall,直接在wall后跟信息内容即可。

声明:该笔记转载自《鸟哥的Linux私房菜》,仅用于个人学习,若侵犯到您的版权敬请告知!

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?