Linux入门基础之 下
Posted duncan1863
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux入门基础之 下相关的知识,希望对你有一定的参考价值。
八、Linux 管道、重定向及文本处理
8.1、Linux 多命令协作:管道及重定向
8.1.1 开源文化
- 开源文化的核心理念之一就是不要重复发明轮子,很多的开源软件都是现有软件、代码、功能的重新组合,就好像通过零件装配机器一样,源代码的开放和共享让这成为了可能,同时也大大的提高了效率和生产力。
8.1.2 管道和重定向
- 在 Linux 系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现或一个或几个很简单的功能,我们可以通过将不同功能的命令组合在一起使用,以达到完成某个复杂功能的目的。
- Linux 中,几乎所有命令的返回数据都是纯文本的(因为命令都是运行在 CLI 下),而纯文本形式的数据又是大多数命令的输入格式,这就让多命令协作称为可能
- Linux 的命令向我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。
- 命令行 shell 的数据流有以下定义:
名称 | 说明 | 编号 | 默认 |
---|---|---|---|
STDIN | 标准输入 | 0 | 键盘 |
STDOUT | 标准输出 | 1 | 终端 |
STDERR | 标准错误 | 2 | 终端 |
- 命令通过 STDIN 接收参数或数据,通过 STDOUT 输出结果或通过 STDERR 输出错误
- 通过管道和重定向我们可以控制 CLI 的数据流
分类 | 关键字 | 定义 | 例子 |
---|---|---|---|
重定向 | > | 将STDOUT重定向到文件(覆盖) | echo "linuxcast.net" > outfile ls -l > outfile |
重定向 | >> | 将STDOUT重定向到文件(追加) | echo "linuxcast.net" >> outfile data >> outfile |
重定向 | 2> | 将STDERR重定向到文件(覆盖) | ls nothere 2> errorout |
重定向 | 2>&1 | 将STDERR 与 STEOUT 结合 | ls nothere 2>&1 alloutput |
重定向 | < | 重定向STDIN | grep linuxcast < /etc/passwd |
管道 | | | 将一个命令的 STDOUT 作为另一个命令的 STDIN | ls -l | grep linuxcast find / -user linuxcast | grep video find / -user linuxcast 2> /dev/null | grep video |
- 管道通常用来组合不同的命令,以实现一个复杂的功能
- 重定向通常用来保存某命令的输出信息或错误信息,可以用来记录执行结果或保存错误信息到一个指定的文件夹
8.2、Linux 命令行文本处理工具
8.2.1 文件浏览
- cat 查看文件内容
- more 以翻页形式查看文件内容(只能向下翻页)
- less 以翻页形式查看文件内容(可上下翻页)
- head 查看文件的开始10行(或指定行数)
- tail 查看文件的结束10行(或指定行数)
8.2.2 基于关键字搜索
- 命令 grep 用以基于关键字搜索文本,如:
- grep ‘linuxcast‘ /etc/passwd 单个关键字可以不使用‘’
- find / -user linuxcast | grep Video
- find / -user linuxcast 2> /dev/null | grep Video
- grep 常用参数:
- -i 在搜索的时候忽略大小写
- -n 显示结果所在行数
- -v 输出不带关键字的行
- -Ax 在输出的时候包含结果所在行之后的指定行数
- -Bx 在输出的时候包含结果所在行之前的指定行数
8.2.3 基于列处理文本
- 命令 cut 用以基于列处理文本内容
- cut -d: -f1 /etc/passwd
- grep linuxcast /etc/passwd | cut -d: -f3
- 常用参数:
- -d 指定分隔字符(默认是 Tab)
- -f 指定输出的列号
- -c 基于字符进行切割 : cut -c2-6 /etc/passwd
8.2.4 文本统计
- 命令 wc 用以统计文本信息(word count)
- wc linuxcast
- 常用参数:
- -l 只统计行数
- -w 只统计单词
- -c 只统计字节数
- -m 只统计字符数
8.2.5 文本排序
- 命令 sort 用以对文本内容进行排序
- sort linuxcast
- 常用参数:
- -r 进行倒序排序
- -n 基于数字进行排序
- -f 忽略大小写
- -u 删除重复行
- -tc 使用 c 作为分隔符分隔为列进行排序
- -kx 当进行基于指定字符分隔为列的排序是,指定基于哪个列排序
8.2.6 删除重复行
- 命令 sort -u 可以用以删除重复行
- 命令 uniq 用以删除重复的相邻行
8.2.7 文本比较
- 命令 diff 用以比较两个文件的区别
- diff linuxcast linuxcast.net
- 常用参数:
- -i 忽略大小写
- -b 忽略空格数量的改变
- -u 统一显示比较信息(一般用以生成 patch (补丁)文件)
- diff -u linuxcast linuxcast-new > final.patch
8.2.8 拼写检查
- 命令 aspell 用以显示检查英文拼写
- aspell check linuxcast
- aspell list < linuxcast
8.2.9 处理文本内容
- 命令 tr 用以处理文本内容 (translator)
- 删除关键字:tr -d ‘TMD‘ < linuxcast
- 转换大小写:tr ‘a-z‘ ‘A-Z‘ < linuxcast
8.2.10 搜索替换
- 命令 sed 用户搜索并替换文本
- sed ‘s/linux/unix/g‘ linuxcast
- sed ‘1,50s/linux/unix/g‘ linuxcast
- sed -e ‘s/linux/unix/g‘ -e ‘s/nash/nash_su/g‘ linuxcast
- sed -f sededit linuxcast ( 是将 ‘s/linux/unix/g‘ 搜索替换文件保存在 sededit 文件中,然后使用 -f 参数去调用这个文件 )
九、Linux 系统启动详解
9.1、Bios
- BIOS (Basic Input Output System) 我们称之为基本输入输出系统,一般保存在主板上的 BIOS 芯片中
- 计算机启动的时候第一个运行的就是 BIOS ,BIOS 负责检查硬件并且查找可启动设备
- 可启动设备在 BIOS 设置中进行定义,如 USB、CDROM、HD
9.2、MBR
- BIOS 找到可启动设备后执行其引导代码
- 引导代码为 MBR 的前446字节
9.3、GRUB
- Grub 是现在 Linux 使用的主流引导程序
- 可以用来引导现在几乎所有的操作系统
- Grub 的相关文件保存在 /boot/grub 目录中
- Grub 配置文件为 /boot/grub/grub.conf
- 配置格式:
title CentOS
root (hd0,1)
kernel /boot/vmlinuz-2.6.32-279.e16.i686 ro root=UUID=77272833-B6BB-4D53-B043-9541D1102EBD
initrd /boot/initramfs-2.6.32-279.e16.1688.img
9.4、KERNEL
- MBR 的引导代码将负责找到并加载 Linux 内核
- Linux 内核保存在 /boot/vmlinuz-2.6.32-279.e16.i686
- 一般还会加载内核模块打包文件 :/boot/initrammfs-2.6.32-279.e16.i686.img
- Linux 为何保持 kernel 的精简将一些不常用的驱动、功能编译成为模块,在需要的时候动态加载,而这些模块被打包保存为一个 initramfs 文件
- 早期版本 Linux 使用 initrd 文件,initfamfs 是 initrd 的替代优化版本,比 initrd 更加节省空间,更加灵活
- 命令 dmesg 可以查看本次启动时内核的输出信息
9.5、INIT
- init 是 Linux 系统中运行的第一个进程
- 调用 /etc/rc.d/rc.sysinit 负责对系统进行初始化,挂载文件系统,并且根据运行级别启动相应服务
- Linux 运行级别:
- 0 关机
- 1 单用户模式
- 2 不带网络的多用户模式
- 3 多用户模式
- 4 未使用
- 5 X11 图形化模式
- 6 重新启动
- 可以通过 /etc/inittab 配置文件修改默认的运行级别
- 每个级别对应的启动服务保存在 /etc/rc.d/rc[0123456].d 中
- 命令 runlevel 可以显示当前及上一个运行级别
- 命令 init 可用以改变当前运行级别
- init 3
- init 5
9.6、单用户修改 ROOT 密码
- 为内核传递参数 “ 1 ” 或 “ single ” 可系统进入单用户模式
- 单用户模式下不启动任何服务
- 单用户模式直接以 root 用户登录,并且不需要密码
- 可以使用 passwd 修改 root 密码
- 启动时在引导页面按上下键暂停,可以按 e 键编辑引导页,选择 kernel 一行,再按 e 键就可以编辑,默认光标在最后,输入 1 后回车,然后按 b 启动,这是内核就被强制以单用户模式启动了,启动完成之后就可以更改 root 用户密码,更改完成后输入 exit 回车后系统就退出单用户模式按正常模式启动了
- 这种方式也有一个安全隐患,只要任何人任何用户能够物理的接近计算机,他就只需要将计算机重启,然后引导的时候给内核传入参数能够修改 root 密码,这样很危险,为了防止这样的任何人只要能接近计算机就能够修改密码的事情发生,grub 就加入了一个加密的操作。
9.7、GRUB 加密
- 通过在 grub.conf 中的启动配置中加入如下参数即可对 grub 进行加密:
- password --md5 +加密密码
- 加密后的密码可以通过 grub-md5-crypt 生成
- root 用户下输入 grub-md5-crypt ,回车后会生成一个加密后的密码,复制所有密码(包括最后的 . ,但不要复制多的空格),然后 vi /boot/grub/grub.conf ,最好是在第一行插入:password --md5 + 加密密码,保存退出。
- 配置加密后 grub 再在引导的菜单上想修改的话就必须输入密码,正常引导是不需要的,但是你要修改内容的话就需要密码。
- 如果 grub 密码也忘了,那就基本无法破解了,只能卸下硬盘,挂载到其他机子上,然后把硬盘的根分区启动文件夹 boot 文件所在的分区挂载到另一个机子上的 Linux 系统里面,然后把配置删除掉,然后就能进去了。其实这样还是有安全隐患的,硬盘被偷走后别人还是能进到你的系统里面去。如果想要保护数据,只能对根分区进行分区级别的加密。
十、Linux 软件管理基础:RPM、YUM
10.1、源代码形式
- 绝大多数开源软件都是直接以源代码形式发布
- 源代码一般会被打包成 tar.gz 的归档压缩文件
- 源代码程序需要编译成为二进制形式之后才能够运行使用
- 源代码基本编译流程:
- 1- ./configure 检查编译环境、相关库文件以及配置参数并生成 makefile
- 2- make 对源代码进行编译,生成可执行文件
- 3- make install 将生成的可执行文件安装到当前计算机中
- 源代码形式的软件使用起来较为麻烦,但是兼容性及可控制性较好
- 开源软件一般都会大量使用其他开源软件的功能,所以开源软件会有大量的依赖关系(使用某软件需要先安装其他软件)
10.2、RPM
10.2.1 RPM 设计目标
- 源代码形式的缺点:操作复杂、编译时间较长,极容易出现错误
- 源代码形式的优点:适用所有系统,可定制
- 为了方便使用,Erik Troan 和 Marc Ewing 开发了 RPM(Redhat Package Manager)
- RPM 通过将源代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理
- RPM 设计目标如下:
- 使用简单
- 使用单一软件包格式文件发布( .rpm 文件)
- 可升级
- 追踪软件依赖关系
- 基本信息查询
- 软件验证功能
- 支持多平台
10.2.2 RPM 软件包常用命名规范:
- linuxcast-1.2.0-30.e16.i686.rpm
- linuxcast : 软件名
- 1.2.0-30 : 版本号,有大版本号,也有小版本号
- e16 : 对应的系统,e16 代表红帽的 enterprise 16
- i686 : 代表是 32位的平台,如果是64位的一般是 x86_64
10.2.3 RPM 基础命令:
- 安装软件:rpm -i software.rpm
- 卸载软件:rpm -e software (没有后面的 .rpm)
- 升级形式安装:rpm -U software-new.rpm
rpm 支持通过 http、ftp 协议安装软件:rpm -ivh http://www.linuxcast.net/software.rpm
- 可以加入以下参数:
- -v 显示详细信息
- -h 显示进度条
10.2.4 RPM 查询
- 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 文件包含的文件
10.2.5 RPM 验证
- 软件在传播的过程中可能会被恶意的修改,所以为了安全起见,现在系统都加入了对软件的验证功能
- 验证一般使用非对称加密算法,所以需要一个秘钥
- 导入秘钥:
- rpm --Import RPM-GPG-KEY-CentOS-6
- 验证 rpm 文件:
- rpm -K software.rpm
- 验证已安装的软件:
- rpm -V software
10.3 YUM
- RPM 软件包形式管理软件虽然方便,但是需要手工解决软件包的依赖关系,很多时候安装一个软件需要首先安装1个或多个(有时多达上百个)其他软件,手工解决时很复杂。使用 YUM 可以解决这个问题。
10.3.1 YUM
- YUM( Yellowdog Updater, Modified )是一个 RPM 的前端程序,主要目的是设计用来自动解决 RPM 的依赖关系问题。其特点如下:
- 自动解决依赖关系
- 可以对 RPM 进行分组,并基于组进行安装操作
- 引入仓库概念,支持多个仓库
- 配置简单
10.3.2 YUM 仓库
- YUM 引入了仓库(repo)的概念,仓库用来存放所有现有的 rpm 软件包,当使用 yum 安装一个 rpm 软件的时候,如果存在依赖关系,会自动在仓库中查找依赖软件并安装
- 仓库可以是本地的,也可以通过 HTTP、FTP 或 NFS 形式使用集中的、统一的网络仓库
- 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/
enabled = 1
gpgcheck = 1
- 仓库可以使用 file、http、ftp、nfs 方式
- yum 配置文件必须以 .repo 结尾
- 一个配置文件内可以保存多个仓库的配置信息
- /etc/yum.repos.d/ 目录下可以存在多个配置文件
- 实践:查看系统安装时默认集成的 yum 仓库
- cd /etc/yum.repos.d/
- cat CentOS-Base.repo
10.3.3 YUM 基本命令
- yum 管理软件的常用命令:
- yum install software-name 安装指定软件
- yum remove software-name 卸载指定软件
- yum update software-name 升级指定软件
- 实践:使用 yum 命令安装 tigervnc.x86_64
- yum install tigervnc.x86_64
10.3.4 YUM 查询
- 通过以下命令使用 yum 进行查询操作:
- yum search keyword 搜索
- yum list (all | installed | recent | updates) 列出全部、安装的、最近的、软件更新
- yum info packagename 显示指定软件的信息
- yum whatprovides filename 查询哪个 rpm 软件包含目标文件
- 实践:查询所有包含 ‘ vnc ‘ 的 rpm 包
- yum search vnc
10.3.5 创建 YUM 仓库
- 可以通过以下方式手工创建 yum 仓库:
- 1 将所有 rpm 文件拷贝到一个文件夹中(ls -l | wc -l 可以查看行数,也就是软件包个数)
- 2 通过 rpm 命令手工安装 createrepo 软件
- 3 运行命令 createrepo -v /rpm-directory
- 4 如果有分组信息,则在运行命令的时候使用 -g 参数指定分组文件
createrepo -g /tmp/*comps.xml /rpm-directory
CentOS/RHEL 的分组信息保存在光盘 repodata/ 目录下,文件名以 comps.xml 结尾的 xml 文件
- 创建好之后本机可以通过 file 方式直接使用,如果需要作为对外的 YUM 仓库服务器,可以通过 HTTP、FTP 或 NFS 协议共享出去
10.3.6 YUM CACHE
- YUM 为了提高速度通常会缓存很多信息,但是有时候缓存会造成一些故障,可以通过以下命令来清除缓存:
- yum clean all
- 每次运行安装或查询类命令会重建 yum 缓存
以上是关于Linux入门基础之 下的主要内容,如果未能解决你的问题,请参考以下文章
Linux入门第五天——shell脚本入门(下)基础语法之循环与调试
Linux入门第五天——shell脚本入门(下)基础语法之调试debug