Linux学习笔记

更新时间:2024-02-03 14:08:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

08.VIM文本编辑器

命令行界面下的文本编辑工具,做一些文本处理的工作。在Linux中应用中Vi和VIM应用最广泛。 BIll Joy在1976年写了VI的前身ex,

在91年Bram Moolenaar基于VI进行了改进,同时发布了对VI的改进版本,即是Vim,几乎所有的系统都兼容。

VIM不是普通意义上的文本编辑器,被广泛的应用在文本编辑,文本处理,代码开发等用途。 Linux中知名的文本编辑器还有emacs,他的功能比vim还要强大。

通过Vim命令可以启动Vim

一般情况下,使用Vim 目标路径 的形式使用VIm,如果这个文件存在Vim会打开这个文件,如果这个文件不存在Vim会自动创建这个文件。

Vim拥有代码高亮的表现形式,基本上比较强大的文本编辑器都拥有代码高亮的形式。

Vim有三种模式:1.命令模式(Vim启动之后默认存在于命令模式,或者在其他模式中使用ESC,可以返回命令模式,在命令模式中可以采用复制,移动,粘贴等功能,在这个模式下只接受特定的字母) 2.插入模式(可以自由的输入内容,进入方式例如i)

3.ex模式(在命令模式下才可以进入,使用:,光标会移动到底下,可以保存或者退出之类的。)

常见的命令模式下的指令(i在光标前插入文本,o在当前行的下面插入新行,dd删除整行,yy将当前行的内容放入缓冲区(复制当前行),n+yy将n行的内容放入缓冲区(复制n行),p将缓冲区中的文本放入光标后(粘贴),u撤销上一个操作,r替换当前字符,/查找关键字)

常见的EX模式命令(:w 保存当前修改。:q退出-如果没有保存系统不会允许你退出。:q!强制退出。:x保存并推出,相当于:wq。set nu显示行号。:!系统命令 执行一个系统命令,执行系统命令后按回车则返回Vim编辑界面,:sh切换到命令行,按cirl+D则返回Vim模式)。*总结一下!很重要,!的意思就是强制执行命令。

1

11文件系统

上接笔记本

查看文件系统的相关信息-DUMPE2FS

使用命令dumpe2fs可以用来查看分区的文件系统信息

例如:dumpe2fs /dev/sda2 查看/dev/sda2下的sda2的文件系统的详细信息 PS:这个命令几乎在会在对文件系统做微调的时候才会去使用。

*(重要)JOURNAL日志系统

带日志的文件系统(ext3.ext4)又有将强的稳定性,再出现错误时可以进行恢复。

使用带日志的文件系统,文件系统会使用一个叫做“两阶段提交”的方式进行磁盘操作,当进行磁盘操作时,文件系统进行以下操作。

1文件系统将准备执行的事物的具体内容写入日志 2文件系统进行操作

3操作成功后,将事物的具体内容从日志中删除

这样做的好处是,当事务执行的时候如果出现意外(譬如断电或磁盘故障等),可以通过查询日志进行恢复操作。缺点是会丧失一定的性能(额外的日志读写操作)。在操作故障的时候可以直接读取日志进行恢复或者了解在当时都进行了什么内容的操作。(PS:个人理解:我觉得应该开启日志功能,不管怎么样,至少稳妥,一旦出了问题补救起来会比较容易。)

硬盘的标签(应该就是卷标,这个人猜测,完全不确定) 命令e2label可以用来为文件系统添加标签

e2label /dev/sda2 显示sda2的系统标签(如果没有显示则说明这个硬盘的标签是空的,没有标签,这时候我们就可以给他打上一个标签)

e2label /deb/sda2 GAILUN的系统标签设置为GAILUN(如果装了中文输入法,也可以中文,但是不建议)

PS:虽然是无所谓大小写,但是建议大写,约定俗成,而且打了标签比较容易管理。 使用FSCK来检查并修复损坏的文件系统

命令fsck用来检查并修复损坏的文件系统(检查前文件系统必须卸载内部挂在的文件 fsck /dev/sda2

使用-y参数不提示而直接进行修复

默认fsck会自动判断文件系统类型,如果文件系统损坏较为严重,请使用-t参数指定文件系统类型。

2

对于识别为文件的损坏数据(即文件系统无记录),fsck会将该文件放入lost+found目录(每一个格式化了的磁盘都会有一个Lost +found,用于存放已经恢复但找不到记录的数据)。(PS:这个不是很懂,还需要进一步看视频和读书来补完对峙一部分的理解) 系统启动时会对磁盘进行fsck操作。

*12挂载(十分重要)

磁盘或分区创建好文件系统后,需要挂载到一个目录才能使用。

Windows或Mac系统会进行自动挂载,一旦创建好文件系统后就会自动挂载到系统上,windows上称之为C盘、D盘等。

Linux需要手工进行挂载操作或配置系统进行自动挂载。挂在在根目录下的mnt目录。 通过mount命令将格式化好的磁盘或分区挂载到一个目录上(需要root权限) 例如:sdb1

(已经创建好文件系统的磁盘) 命令:mount /dev/sdb1 /mnt/

可以用不带参数的命令查看已经挂载好的磁盘(例如:/dev/sdb2 on /(挂载的位置-本磁盘使用的是/所以表示直接挂载在根分区上了) type ext4(rm))

常用参数:-t指定文件系统的类型;-o 指定挂载选项(ro-只读,rw-读写以只读或读写形式挂载(例如:mount -o remount重新挂载,多个命令使用逗号分隔 ro只读形式 /dev/sdb1 /mnt/挂载目录位置),默认是rw,

sync代表不使用缓存,而是对所有操作直接写入磁盘,async代表使用缓存,默认是async

,noatime代表每次访问文件时不更新文件的访问时间,atime代表每次访问文件时更新文件的访问时间,remount重新挂载文件系统) 挂载的卸载或弹出

使用umount命令用来卸载已挂载的文件系统 命令格式:umount 文件系统/挂载点

umount /dev/sda3(文件系统) == umount /mnt(挂载点)

如果出现device is budy报错,则表示该文件系统正在被使用,无法卸载,可以通过以下命令查看使用文件的进程: fuser –m /mnt

也可使用命令lsof查看正在被使用的文件: lsof /mnt自动挂载

配置文件/etc/fstab用来定义需要自动挂载的文件系统,fstab中每一行代表一个挂载配置,格式如下: /dev/sda3

/mnt ext4 defaults 0 0

挂载点

文件系统

挂载选项 dump、fsck相关选项

需要挂载的设备

如果写了卷标也可以使用卷标来代替需要挂载的设备

3

PS:对磁盘进行任何操作的时候一定要将挂载取消掉,不能再挂载状态下对磁盘文件系统或参数进行修改

*14Linux的用户和组(十分重要)

当我们使用Linux时,需要以一个用户的身份登录,一个进程也需要以一个用户的身份运行,用户限制使用者或进程可以使用、不可以使用那些资源。 组用来方便组织管理用户。

·每个用户拥有一个UserID,操作系统实际使用的是用户ID,而非用户名。

·每个用户属于一个主组,属于一个或多个附属组。(主组和附属组其实并不会有太大的区别) ·每个组拥有一个GroupID。

·每个进程以一个用户身份运行,并受该用户可访问的资源限制。(用户可以访问,进程就可以访问) ·每个可登录用户拥有一个指定的shell(命令行,图形界面,一般来说默认为BASH)。

用户的ID是32位的,从0开始,但是为了和老操作系统16位兼容而言,用户的ID通常限制在60000以下

用户分为3种类型:root(ID为0,root不一定非要叫Root,但是ID为0的用户就是Root用户) 系统用户(ID:1-499)为某些程序或者某些服务而创建的,没有也不需要登陆shell,作为进程去使用的

普通用户(ID:500以上)

系统中的文件都有一个所属用户及所属组。 (使用ID命令可以显示当前的用户信息,PS:uid用户ID,gid组ID,groups=附属组ID) 使用passwd命令可以修改当前用户密码。

和用户信息相关的配置文件(root用户权限才能自由的修改)

/etc/passwd -保存用户信息 (很多用户都会读取Passwd文件,所以将用户密码单独列出成为了一个文件,文件内容分很多部分,每一部分用:隔开,第一部分是用户名,第二部分是用户密码,第三部分是用户ID,四组ID 五描述信息有的地方会写电话号码六用户的家目录六登陆的shell) /etc/shadow -保存用户密码(加密后的,第一部分是用户名,第二部分是密码,如果是!!表明该用户没有设置密码,通过暴力破解可以说没有绝对安全的密码,但是相对比较安全) /etc/group -保存组信息 (组名,组密码 现在基本已经不用了)

查看登录的用户(有约定俗称的习惯,命令越长显示的信息越短,命令越短信息越多) 命令whoami显示当前用户

命令who显示有哪些用户已经登录系统

命令w显示有哪些用户已经登录并且在干什么 (能显示正在寻运行的程序或进程) 如何创建一个用户

4

使用 useradd 用户名 例如useradd che 则该叫che的用户已经创建了 这个命令会执行以下操作:

1、在/etc/passwd中添加用户信息

2、如果使用passwd命令创建密码,则将密码加密保存在/etc/shadow中 3、为用户建立一个新的家目录/home/che

4、将/etc/skel中的文件复制到用户的家目录中 (通常会放一些用户配置文档或说明手册) 5、建立一个与用户用户名相同的组,新建用户默认属于这个同名组

*(万分重要)命令useradd支持以下参数 (用户分组这个部分是更加的重要)

-d 家目录 -s 登录shell

-u userid

-g 主组

-G 附属组(最多31个,用”,”分割)

也可通过直接修改/etc/passwd的方式实现,但是不建议 (因为有可能会出错从而造成系统不稳定) ·命令usermod用来修改用户信息 usermod 参数 username ·命令usermod支持以下参数:

-l 新用户名 -G 用户所属附属组 -u 新userid -L 锁定用户使其不能登录

-d 用户家目录位置 -U 解除锁定 -g 用户所属主组 ·命令userdel用以删除指定用户: userdel che (保留用户的家目录)

userdel –r che (同时删除用户的同时删除的家目录)

几乎所有操作系统都有组的概念, 通过组,我们可以更加方便的归类、管理用户。一般来讲,我们使用部门、职能或地理区域的分类方式来创建使用组。 ·每个组都有一个组ID ·组信息保存在/etc/group中

·每个用户拥有一个主组,同时还可以拥有最多31个附属组 命令groupadd用以创建组: groupadd linuxcast 命令groupmod用以修改组信息

groupmod –n newname oldname 修改组名

5

groupmod –g newGid oldGid 修改组ID 命令groupdel用以删除组: groupdel linuxcast

*15Linux权限管理(用户组以及用户权限管理分配的地方需要仔细看看,极度重要)

权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以对特定文件进行什么样的操作。

每个进程都是以某个用户的身份运行,所以进程的权限与该用户的权限一样,用户的权限大,该进程拥有的权限就大。

Linux中,每个文件拥有三中权限:

目录必须具有x权限(浏览权限),否则无法查看其内容,也就是说如果没有X权限其他的存在没有意义。 Linux的权限管理UGO

Linux权限基于UGO模型进行控制:

· U代表User(所属用户的权限), G该表Group(所属组的权限), O代表Other(其他) · 每一个文件的权限基于UGO进行设置

· 权限三个一组(rwx),对应UGO分别设置 (总共9个权限设置 )

· 每一个文件拥有一个所属用户和所属组,对应UG,不属于该文件所属用户或所属组的使用O权限 命令 ls –l可以参看当前目录下文件的详细信息:

Ls -l命令反馈信息:drwxr-xr- -(UGO)2(连接数量) che(所属用户) training(所属组) 208(大小) Oct 1 13:50(创建或修改时间) chehl(文件名)

UGO权限显示分析:d(文件类型)rwx(U权限-读 写 执行)r-x(G权限-读 执行)r--(O权限-读)(PS:三个字符一组 -代表没有权限)

修改文件所属用户、组(需要增加具体的命令格式) 命令chown用以改变文件的所属用户:

chown chehl(新所属用户)che(旧所属用户)

PS:命令只是修改当前这一个文件或文件夹的所属用户,文件夹内部的文件不会被修改,如果想要都修改要增加 –R参数

-R 参数递归的修改目录下的所有文件的所属用户

6

命令chgrp用以改变文件的所属组: chgrp chehl(新所属组)che(旧所属组) -R 参数递归的修改目录下的所有文件的所属组 修改权限

·命令chmod用以修改文件的权限: chmod 模式 文件 ·模式为如下格式:

· u、g、o分别代表用户、组和其他 · a可以代指ugo

· +、-代表加入或删除对应权限 · r、w、x代表三种权限 ·模式示例:

· chmod(命令) u(修改用户)+(加入权限)rw(读写) che(文件名) · chmod g-x che (给这个文件的所属组删除执行权限) · chmod go+r che (给这个文件的所属组或其他增加r权限) · chmod a-x che (给这个文件的所有删除执行权限) 递归的修改目录下的所有文件的权限需要在命令后增加 –R参数

以数字的形式修改权限 使用数字表示权限时,每组权限分别为对应数字之和:

-r = 4 (2^2) rw- = 4+2+0 = 6 -w = 2 (2^1) rwx = 4+2+1 = 7 -x = 1 (2^0) r-x = 4+0+1 = 5 所以,使用数字表示ugo权限使用如下方式表示:

Chmod(命令) 660(u读写 g读写 o没有权限) che(文件名) == rw-(读写)rw-(读写)---(无权限)

chmod 775 che == rwxrwxr-x

7

16.默认权限和扩展权限

每一个终端都有一个umask属性,来确定新建文件、目录的默认权限。

umask使用数字权限方式表示,如:022(对应UGO权限)实际上应该是4位,出去这三位是代表UGO权限之外还有一位是代表特殊权限。

目录的默认权限是: 777 – umask (即777-022=755) 文件的默认权限是: 666 – umask (即666-022=644)

一般,普通用户的默认umask是002,root用户的默认umask是022。 也就是说,对于普通用户来讲: 新建文件的权限是: 666 – 002 = 664 新建目录的权限是: 777 – 002 = 775 通过umask命令用以查看设置umask值

通过使用umask命令再加umask值可以修改umask值 例如:umask 022 (普通用户的umask值也修改为022) 特殊权限

除了普通权限外,还有三个特殊权限,也就是数字显示的四位编码的第一位,该编码一共为12字节,后三位的UGO每个字母包含3个字节,开头的数字代表特殊权限,也是3个字节

·设置suid:(用户) chmod u+s linuxcast.net ·设置sgid:(组)

chmod g+s linuxcast.net ·设置sticky:(O权限部分) chmod o+t linuxcast.net

·与普通权限一样,特殊权限也可以用数字的方式表示:

-SUID = 4 -SGID = 2 -Sticky = 1 所以我们可以通过以下命令设置:

8

chmod 4755 linuxcast.net

17.网络基础

网络编址(功能是为了唯一的定位一台设备)

网络编址可能会有很多种(现在使用最广泛的IP编址技术,IP编址就是一种网络编址方案) IP编址是一个双层编址方案,一个IP地址标识一个主机(或一个网卡接口)

现在应用最为广泛的是IPv4编址,已经开始逐渐向IPv6编址切换 (IPv4地址为32位长,IPv6地址为128位长 )

一个IPv4地址分为两个部分:网络部分和主机部分 (网络部分和主机部分长度不固定,网络部分用来标识你在哪里,主机部分标识的是你在这一片区域中的某个设备,也就是网络部分用来标识所属区域、主机部分用来标识该区域中的哪台主机 )

IPv4地址共32位,通常使用点分十进制方式表示 整个IP地址分为4个部分,每个部分8位 例: 192 . 168 . 1 . 1 (十进制) 11000000 . 10101000 . 00000001 . 00000001 (二进制) 子网掩码

·IPv4地址的32bit分为网络部分和主机部分 (子网实际上就是指网络部分的意思,作用就是用来确定在这个IP地址中网络部分的位数)

子网掩码和IP地址一样,拥有32bit,每一位与IP地址中的每一位一一对应(子网掩码和IP地址必须成对出现)

IP地址中相对应子网掩码中为1的部分为网络部分 (PS:IP地址和子网掩码基本上都是成对出现的)

注释:也就是说192.168.1.1这个IP地址中的192.168.1是定义是属于哪一个网段,后面的.1则是主机部分

9

证明此IP地址前24位是网络部分,也就是说,与此IP地址处在同一个网络的其他主机的IP地址前

24位相同,以证明他们在同一网络

例子:如图所示比如北京的192.168.1.0/24这个24代表的的就是子网掩码也就是有多少位是网络部分,24代表着有24位是网络部分也就是说子网掩码是

255.255.255.0,而上海地区的10.0.0.0/8就是说只有8位的子网掩码是代表的网络部分,那么子网掩码应该是255.0.0.0。

同一个网络主机之间的通信

在同一个网络主机之间的通信还要增加一个新的地址即是MAC地址(也就是网卡上的固化地址,也是网卡的硬件地址,MAC地址是一个二层地址,IP地址我们成为三层地址)(注释:ARP:地址解析协议)主机之间相互通信一定需要ARP协议, 不同网络之间的通信

通过路由器进行转发(普通的家用路由器,企业及路由器,居右路由功能的主机)只要是我们需要访问不同网段的信息,都需要路由器给我们进行转发。有的数据需要进过几个或者几十个路由器进行转发才能收到数据,在不同网络之间传输数据的功能叫做录用功能,一般有多个接口,连接到不同的网络中,并且通过路由表进行数据转发。

10

比如说192.168.1.0想要访问172.16.1.0,通过网关发现二者并不是出于相同的网段(PS:路由器和网关一般情况下是指同一个东西)

路由功能的实现是通过网关来进行实现的 网关的功能就是用来做跨区域通信的。

域名

IP地址往往难以记忆,所以我们一般使用域名进行管理 域名分为三个部分,用”.”分割:

-类型 标识此域名的类型(com普通盈利性公司, net网路公司, org免费组织,edu学校 gov政府组织等,约定俗称的习惯,没有一定的规定) -域名 域名城 (租,或者购买) -主机名 该域中的某台主机名称就是www 例如:www(主机名).baidu(域名).net(类型)

最简单的域名就是只有域名和类型的例如126.com,PS主机名是可以随便起的,大家都用www是因为大家约定俗成www是网页服务器,网页服务器也可以不叫这个名字,没有硬性规定 DNS

每个域名代表一个IP,而DNS服务就是来在IP与域名之间进行转换的

DNS的功能就是将域名转换成为IP地址,或者把IP地址转换成为域名 DNS服务由DNS服务器提供,DNS服务器通常是由电信运营商来进行提供

比如说我们能上QQ但是打不开网页,这种情况通常是我们的DNS挂了,这种情况下我们就要自行配置DNS地址就可以了

要配置一个局域网通信的计算机: -IP地址 -子网掩码

要配置一个跨网段通信的计算机: -IP地址

-子网掩码 -网关

·要配置一个可上网(涉及到域名)的计算机: -IP地址 -网关 -子网掩码 -DNS

11

18.Linux网络基本配置方式

·在linux中,以太网接口被命名为:eth0、eth1等,0、1代表网卡编号

·通过lspci命令可以查看网卡硬件信息(如果是USB网卡,则可能需要使用lsusb命令) ·命令ifconfig用来查看接口信息

ifconfig -a 查看所有接口 (lo是所有的系统都有的环回接口) ifconfig eth0 查看特定接口 (这个命令是查看网卡接口eth0) 命令ifup、ifdown用来启动、禁用一个接口

使用setup (在CentOS7.0版本使用nmtui,所以由于本台计算机使用的系统是CentOS6.5,所以使用setup命令)命令可以配置网络信息,setup可以配置的信息真的很多)(基于命令行界面下的伪图形界面)(配置时注意关闭网卡接口) ·网卡配置文件

/etc/sysconfig/network-scripts/ifcfg-enp0s3(CentOS 7) /etc/sysconfig/network-sctipts/ifcfg-eth0(CentOS 7以前)

·DNS配置文件 /etc/resolv.conf ·主机名配置文件

/etc/sysconfig/network(PS:虽然使用hostname命令可以查看和修改,但是修改名不是永久的而是暂时的,想要永久更改的化应该是用下面的方式,直接修改主机名称的配置文件,才能做到永久的修改)

·实时修改主机名:

hostname train.linuxcast.net 网络测试 ·测试网络连通性:

12

ping 192.168.1.1 ping www.linuxcast.net ·测试DNS解析

host www.linuxcast.net (解析,只要能够返回值就说明DNS配置时正确的) dig www.linuxcast.net (具体介绍去找DNS命令的具体课程) ·显示路由表 ip route

·追踪到达目标地址的网络路径: traceroute www.linuxcast.net

·使用mtr进行网络质量测试(结合了traceroute和ping) mtr www.linuxcast.net 故障排查

网络故障排查遵循从底层到高层、从自身到外部的流程进行 ·先查看网络配置信息是否正确:(是否有书写错误) -IP地址 -子网掩码 -网关 -DNS

·查看到达网关是否连通: ping 网关IP地址

·参看DNS解析是否正常(多测几个): host www.linuxcast.net host www.163.com host www.douban.com

13

19.Linux多命令协作管道及重定向

不要重复发明轮子

开源文化的核心理念之一就是不要重复发明轮子,很多的开源软件都是现有软件、代码、功能的重新组合,就好像通过零件装配机器一样,源代码的开放和共享让这成为了可能,同时也大大提高了效率和生产力。 管道和重定向

在Linux系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或几个简单的功能,我们可以将不同功能的命令组合在一起使用,以达到完成某个复杂功能的目的。 Linux中,几乎所有命令的返回数据都是纯文本的(因为命令都是运行在命令行模式下),而纯文本形式的数据又是绝大多数命令的输入格式,这就让多命令协作成为了可能。

Linux的命令行为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。 管道和重定向

命令行shell的数据流有以下定义:

命令行通过STDIN接收参数或数据,通过STDOUT输出结果或通过STDERR输出错误 通过管道和重定向我们可以控制CLI的数据流

>将标准输出重定向到文件,也就是将正确的输出的反馈重新建立一个文本,并保存在当前或者指定目录下

>>功能是和上面是相通的,但是建立的文本上面的是覆盖形式 只有这次操作的记录 而这个是追加的,都有。 2>功能和上方类似,只是这个文件保存的是标准错误。 2>&1是将标准错误和标准输出相结合也就是标准错误和标准

输出都进行输出

<重定向标准输入,例子解释:查找etc/passwd这个文件中所有包含Linuxcast这个关键字的内容。 管道|:将一个命令的标准输出作为另一个命令的标准输入(仔细看看)

例如:ls –l(输出我当前目录下的详细信息)| grep linuxcast(把前一个命令的输入作为标准输入来查找所有包含Linuxcase的这个关键字的文件)

14

Find / -user Linuxcase 2> /dev/mull/ | grep Vidio(查找所有属于Linuxcase这个用户或者这个类型的文件并将所有的错误信息重定向到/dev/mull这个文件中,然后在这些标准输出的文件里找到所有包含Video这个关键字的文件)

管道通常用来组合不同的命令,以实现一个复杂的功能。

重定向通常用来保存某命令的输出信息或错误信息,可以用来记录执行结果或保存错误信息到一个指定的文件。

20文本行命令处理工具 基于关键字搜索

命令grep用以基于关键字搜索文本(可以使一个文件也可以是一个目录,但是一般都是一个纯文本的文件)

grep ‘linuxcast’ /etc/passwd(搜索/etc/passwd文件下包含linuxcase的行数)

find / -user linuxcast | grep video (在根目录下面查找所有Linuxcase这个用户的文件|包含 Video这个关键字,也就是说这条命令的含义是在根目录下面查找所有属于Linuxcase这个用户的并且包含Video这个关键字的文件) -i 在搜索的时候忽略大小写 -n 显示结果所在行数 -v 输出不带关键字的行

-Ax 在输出的时候包含结果所在行之后的指定行数(After) -Bx 在输出的时候包含结果所在行之前的指定行数(Before) 基于列的方式处理文件

命令cut用以基于列处理文本内容

cut -d:(使用:作为分隔符) -f1(处理完成后显示第几列,因为图中是-f1,所以显示第1列) /etc/passwd

grep linuxcast /etc/passwd | cut -d: -f3 -d 指定分割字符(默认是TAB) -f 指定输出的列号 cut –c2-6 /etc/passwd 命令wc用以统计文本信息

Wc(命令)linuxcast(文件名,文件路径) -l 只统计行数 -w 只统计单词 -c 只统计字节数 -m 只统计字符数

15

文本排序

命令sort用以对文本内容进行排序 sort linuxcast ·-r 进行倒序排序 ·-n 基于数字进行排序 ·-f 忽略大小写 ·-u 删除重复行

·-t c 使用c作为分隔符分割为列进行排序

·-k x 当进行基于指定字符分割为列进行排序时,指定基于哪个列排序 删除重复行

命令sort –u可以用以删除重复行 ·命令uniq用以删除重复的相邻行 文件比较

命令diff用以比较两个文件的区别 diff linuxcast linuxcast-new ·-i 忽略大小写 ·-b 忽略空格数量的改变

·-u 统一显示比较信息(一般用以生成patch文件) diff -u linuxcast linuxcast-new > final.patch 处理文本内容

命令tr用以处理文本内容 ·删除关键字

tr -d ‘TMD’(指定的关键词) <(重定向) linuxcast(目标文件) ·转换大小写

tr ‘a-z’ ‘A-Z’ < linuxcast 搜索替换

命令sed用以搜索并替换文本(使用正则表达式处理文件)

sed ‘s/linux/unix/g’(引号引起来的实际上是一个正则表达式,含义是找到linux的关键字并将这些个关键字替换成Unix关键字,s的意思是搜索,g的意识是说如果一行当中出现多个匹配项的时候全部进行匹配) linuxcast(后面接文件或文件路径)

sed ‘1,50s(1,50的意思是指定只替换1-50行的文本内容,s标识搜索)/linux/unix/g’ linuxcast

16

sed -e ‘s/linux/unix/g’ -e ‘s/nash/nash_su/g’ linuxcast(-e:多个替换)(在原本的替换命令之后加上-e则可以进行进一步的多个替换,例如上面的命令就是将linux全部替换成立Unix之后又把所有的nash文件替换成了nash_su)

sed –f(调用文件)sededit linuxcast(每次使用的时候为例避免过多的输入内容,我们把之前准备好的文件保存到sededit的文件中,每次使用之前进行调用就可以了。)

Linux的系统启动

系统启动流程

首先是BIOS进行启动,进行相关的自检

MBR:硬盘的引导,到这步程序我们启动的进程已经到了硬盘的引导启动了

操作系统的引导程序

加载内核这个时候操作系统的底层已经启动完成了 执行第一个进程,进程ID是1

Init根据我们当前的级别去启动各种服务和流程

BIOS (Basic Input Output System) 我们称之为基本输入输出系统,一般保存在主板上的BIOS芯片中,也就是保存在我们的硬件当中。 计算机启动的时候第一个运行的就是BIOS,BIOS负责检查硬件并且查找可启动设备。 可启动设备在BOIS设置中进行定义,如USB、CDROM、HD。主要的功能是检查报错。

MBR,BIOS找到可启动设备(第一个512字节的最后两字节是55、AA的设备)后执行其引导代码,引导代码为MBR的前446字节 Grub

Grub是现在Linux使用的主流引导程序 。可以用来引导现在几乎所有的操作系统 Grub的相关文件保存在/boot/grub目录中 Grub的配置文件为/boot/grub/grub.conf KERNEL

·MBR的引导代码将负责找到并加载Linux内核 ·Linux内核保存在/boot/vmlinuz-2.6.32-279.el6.i686

·一般还会加载内核模块打包文件:/boot/initramfs-2.6.32-279.el6.i686.img

·Linux为保持Kernel的精简,将一些不常用的驱动、功能编译成为模块,在需要的时候动态加载,而这些模块被打包保存为一个initramfs文件

·早期版本的Linux使用initrd文件,initramfs是initrd的替代优化版本,比initrd更加节省空间、更加灵活

17

·命令dmesg可以查看本次启动时内核的输出信息 INIT

·init是Linux系统中运行的第一个进程

·调用/etc/rc.d/rc.sysinit负责对系统进行初始化,挂载文件系统,并且根据运行级别启动相应服务 ·Linux运行级别: -0 关机 -1 单用户模式

-2 不带网络的多用户模式

-3 多用户模式 (用的最多,不进行运行图形界面,也就是正产操作系统的运行级别,PS:一点图形界面都没有是那种黑色的命令行界面,超级不好用,超级难看,目前我再这个界面还没有登录上过处理root用户外的其他用户,不知道为啥?) -4 未使用

-5 X11图形化模式 (图形化的多用户模式) -6 重新启动

·可以通过/etc/inittab配置文件修改默认的运行级别 ·每个级别对应的启动服务保存在/etc/rc.d/rc[0123456].d中 ·命令runlevel可显示当前及上一个运行级别 ·命令init可用以改变当前运行级别 单用户修改ROOT密码

为内核传递参数”1”或”single”(在系统进入引导的时候随便使用例如上下的按钮使系统进入选择模式的类似选项,按e进入编辑菜单-PS:这个步骤用于没有使用GRUE加密的用户,如果你用了GRUE加密的话,然后又忘了GRUE密码,基本上就GG了,但是你也可以通过把你自己的根目录的硬盘卸下来,安装到一个没有忘记密码的Linux机器上面,重新挂在,然后删除GRUE的密码来进行解决,如果还是不好使的话,那就真的GG了。再出现的参数最后空格加上1,然后用b继续启动就OK了,单用户模式下不启动任何服务,单用户模式直接以root用户登录,并且不需要密码 ,然后在这个时候你就可以使用passwd命令进行修改密码了,改完密码之后,使用exit命令,系统就会执行默认的启动程序了,然后进入root用户,输入新的密码就可以进入了)

GRUB加密

通过在/boot/grub/grub.conf中的启动配置中的第一行加入如下参数即可对grub进行加密: password --md5由grub-md5-crypt生成的一串加密参数

加密参数可以通过运行grub-md5-crypt命令生成(PS:在复制加密参数的时候一定一定要小心,千万不要忽略了什么符号或者是多出了个空格什么的,稍有错误就GG了) 加密后的密码可以通过grub-md5-crypt生成

18

Linux的软件管理RPM方式

在Linux的系统中,软件管理基本上有两种形式,一种是源代码,一种是RPM的方式 (PS:安装软件是一定需要管理员权限的) 源代码形式

绝大多数开源软件都是直接以源代码形式发布 源代码一般会被打包成.tar.gz的归档压缩文件

程序源代码需要编译成为二进制形式之后才能够运行使用 源代码基本编译流程:

1- ./configure 检查编译环境、相关库文件以及配置参数并生成makefile 2- make 对源代码进行编译,生成可执行文件 3- make install 将生成的可执行文件安装到当前计算机中 ·源代码形式的软件使用起来较为麻烦,但是兼容性和可控制性较好

·开源软件一般都会大量使用其他开源软件的功能,所以开源软件会有大量的依赖关系(使用某软件需要先安装其他软件) RPM(红帽包管理器)形式

源代码形式的缺点:操作复杂、编译时间较长、极容易出现错误 ·源代码形式的优点:适用所有系统、可定制

·为了方便使用,Erik Troan和Marc Ewing开发了RPM(Redhat Package Manager)

·RPM通过将源代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理

·RPM设计目标如下: -使用简单

-使用单一软件包格式文件发布(.rpm文件) -可升级

-追踪软件依赖关系(可能好需要安装其他的rpm文件) -基本信息查询 -软件验证功能

-支持多平台 (不同的平台基本会安装不同的rpm) ·RPM包常用命名规范:

Linuxcast(软件的名字)-1.2.0-30(大版本号).el6(对应系统).i686(显示是32位还是64位,如果是64位的行该是x86-64).rpm

19

·RPM基础命令:

-安装软件: rpm -i software.rpm(文件安装包,注意后面要附带。rpm) -卸载软件: rpm -d software

-升级形式安装: rpm -U software-new.rpm rpm支持通过http、ftp协议安装软件:

rpm -ivh http://www.linuxcast.net/software.rpm ·可以加入以下参数:(一般情况下我们都增加。) -v 显示相关信息 -h 显示进度条

RPM会保存软件相关的很多信息,可通过以下命令查询:

-rpm -qa 列出所有安装的rpm软件 -rpm -qf filename 查询目标文件属于哪个rpm包 -rpm -qi packagename 查询指定已安装rpm软件的信息 -rpm -ql packagename 查询指定已安装rpm软件包含的文件 -rpm -qip software.rpm 查询rpm文件的信息 -rpm -qlp software.rpm 查询rpm文件包含的文件

软件在传播的过程中可能会被恶意的修改,所以为了安全起见,现代系统都加入了对软件的验证功能 ·验证一般使用非对称加密算法,所以需要一个密钥 ·导入密钥(默认已加入rpm中):

rpm --import RPM-GPG-KEY-CentOS-6 ·验证rpm文件:

rpm -K software.rpm ·验证已安装的软件 rpm -V software

20

23yum软件管理及创建方式

基于YUM的软件管理方式或方案

rpm软件包形式管理软件虽然方便,但是需要手动解决软件包的依赖关系,很多时候安装一个软件首先需要安装1个或多个(有时多至上百个)其它软件,手工解决时很复杂。使用YUM可以解决这些问题。 YUM(Yellowdog Updater, Modified)是一个RPM的前端程序,主要目的是设计用来自动解决RPM的依赖关系问题。其特点如下:

-自动解决依赖关系 (可以自动分局依赖关系进行递归的安装依赖关系的软件,前提是仓库里面有的) -可以对RPM进行分组,并基于组进行安装操作 (可以把RPM软件进行分析组,一次安装一组多个RPM软件)

-引入仓库概念,支持多个仓库(YUM引入了仓库(repo)的概念,仓库用来存放所有现有的rpm软件包,当使用yum安装一个rpm软件时,如果存在依赖关系,会自动在仓库中查找依赖软件并安装。仓库可以是本地的,也可以通过http、ftp或NFS形式使用集中的、统一的网络仓库。) -配置简单 Yum仓库的配置

yum使用仓库保存管理rpm软件包,仓库的配置文件保存在/etc/yum.repos.d/目录下,格式如下: [LinuxCast](仓库的简写名字,用大括号括起来)

name=This is LinuxCast.net rpm soft repo(名字,也是基本描述,主要是管理员自己去看) baseurl=http://www.linuxcast.net/yum/centos/6/i386/rpms(基本路径,可以使互联网上的仓库,也可以是本地的路径)本地的协议是file

enabled=1(是否启用,1代表启动,0代表不可用)

gpgcheck=1(是否打开校验,出于安全方面考虑,主流的操作系统都会对rpm包进行签名校验,生产环境下这个选项基本上或者说是绝对上都是打开的,1带包启动) 仓库可以使用file、http、ftp、nfs方式

yum配置文件必须以.repo结尾 (名字可以随便起,如果扩展名不对yum是不会读的) 一个配置文件内可以保存多个仓库的配置信息 /etc/yum.repos.d/目录下可以存在多个配置文件 yum软件管理的常用命令:

yum install software-name 安装指定软件 (虽然是使用yum进行安装,但是实际上仍然是使用的rpm的软件包进行封装安装的,yum仅仅是一个rpm的封装前台和环境。所以一切rpm的命令仍然可以对使用yum方法安装的软件进行操作。) yum remove software-name 卸载指定软件 yum update software-name 升级指定软件 通过以下命令使用yum进行查询操作:

21

yum search keyword 搜索

yum list (all | installed | recent |updates) 列出全部、已安装、最近、软件更新 yum info packagename 显示软件信息

yum whatprovides filename 查询哪个rpm软件包含目标文件

如何创建一个yum

首先收集到大量的rpm程序包,将他们统一放置在同一个新建的目录里面,比如我们的CentOS系统光盘里面的repodatap文件夹里面就放了大量的rpm包,一般的正常的程序基本上都能够找到,然后把这些程序包拷贝到之前创建的目录里面,之后这个步骤很关键也很烦人,就是之前提到的手动安装createrepo软件,注意要解决一大堆神烦人的依赖环境问题(我再安装的过程中还遇到了warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID*****什么的问题,解决方案是百度了个rpm --import /etc/pki/rpm-gpg/RPM*的代码解决的说是由于yum安装了旧版本的GPG keys造成的,之后就需要解决神烦的各种依赖环境的问题error: Failed dependencies(依赖环境错

误):python-deltarpm(需要解决的依赖环境)is needed by createrepo-0.9.9-18.el6.noarch,挨个装吧,烦的要死,一直到统统安装完成),然后运行createrepo(createrepo –v显示详细信息 yum仓库的路径)命令进行编译,在编译之后生成一个叫做repodata的文件目录在这个文件夹里面,这里面的东西不要动,是索引文件。然后到/etc/yum.repos.d的文件夹里面建立一个文件(注意这个文件的结尾扩展名必须是.repo,不然不好使)按照指定的格式建完,然后运行yum list命令(我也不知道为什么,据我猜测应该是仓库的索引信息,然后问题出来了,识别不出来,据我分析应该是之前的yum是基于网络上的,而我的Linux上不了网,所以弄不出来,我又把原来的那些.repo的文件剪切出来放置在桌面上了,然后再次运行就OK了)

yum为了提高速度会缓存很多信息,但是有时候缓存会造成一些故障,可以通过以下命令来清除缓存: yum clean all

每次运行安装或或查询类命令会重建yum缓存 check Check for problems in the rpmdb check-update 检查是否有软件包更新 clean 删除缓存的数据 deplist 列出软件包的依赖关系

distribution-synchronization Synchronize installed packages to the latest available versions

downgrade downgrade a package

erase 从系统中移除一个或多个软件包 groupinfo 显示组的详细信息 groupinstall 向系统中安装一组软件包 grouplist 列出可安装的组 groupremove 从系统中移除一组软件包

22

help 显示用法信息

history Display, or use, the transaction history info 显示关于软件包或组的详细信息 install 向系统中安装一个或多个软件包 list 列出一个或一组软件包

load-transaction load a saved transaction from filename makecache 创建元数据缓存

provides 查找提供指定内容的软件包 reinstall 覆盖安装一个包 repolist 显示已配置的仓库

resolvedep 判断哪个包提供了指定的依赖 search 在软件包详细信息中搜索指定字符串 shell 运行交互式的 yum 外壳 update 更新系统中的一个或多个软件包

update-minimal Works like update, but goes to the 'newest' package match which fixes a problem that affects your system

updateinfo Acts on repository update information upgrade 更新软件包同时考虑软件包取代关系

version Display a version for the machine and/or available repos.

23

本文来源:https://www.bwwdw.com/article/ik5w.html

Top