shell -me-强化-1

使用反引号``或者$()都可以取得命令的执行结果。(( ))是 Shell 数学计算命令。

如果被替换的命令的输出内容包括多行(也即有换行符),或者含有多个连续的空白符,那么在输出变量时应该将变量用双引号包围,否则系统会使用默认的空白符来填充,这会导致换行无效,以及连续的空白符被压缩成一个。

shell的强大之处在于输入输出的重定向,和能直接使用linux的命令。

shell的内部命令和外部命令,用type 命令,可以查看是否外部命令,外部命令是path路径的可执行文件。

执行外部命令时不但会触发磁盘 I/O还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前 Shell 进程的一个函数

重定向和管道的区别:

重定向操作符>将命令与文件连接起来,用文件来接收命令的输出;而管道符|将命令与命令连接起来。


 yum 是改进型的 RPM 软件管理器,它很好的解决了 RPM 所面临的软件包依赖问题。yum 在服务器端存有所有的 RPM 包,并将各个包之间的依赖关系记录在文件中,当管理员使用 yum 安装 RPM 包时,yum 会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的 RPM 包并进行安装。 
使用 yum 安装软件包之前,需指定好 yum 下载 RPM 包的位置,此位置称为 yum 源。换句话说,yum 源指的就是软件安装包的来源。
使用 yum 安装软件时至少需要一个 yum 源。yum 源既可以使用网络 yum 源,也可以将本地光盘作为 yum 源。接下来就给大家介绍这两种 yum 源的搭建方式。
--网络 yum 源配置文件位于 /etc/yum.repos.d/ 目录下,文件扩展名为"*.repo"(只要扩展名为 "*.repo" 的文件都是 yum 源的配置文件)。 
yum 安装软件包的命令基本格式为: yum -y install 包名  yum remove 包名。

由于 Linux 操作系统开放源代码,因此在其上安装的软件大部分也都是开源软件,例如 Apache、Tomcat 和 PHP 等。开源软件基本都提供源码下载,可采用源码安装的方式安装软件。
本节使用的源码包,指的是软件所有源代码的压缩包,其后缀名为 ".tar.gz" 或 ".tar.bz2";而 SRPM 源码包本质上属于 RPM 包,也就是源码的RPM包,其文件后缀为 ".src.rpm"。虽然都叫源码包,但不是一码事。

软件的源代码,也就是软件的原始数据,任何人都可以通过源代码查看该软件的设计架构和实现方法,但软件源代码无法再计算机中直接运行安装,需要将源代码通过编译转换为计算机可以识别的机器语言,然后才可以安装。

Linux源码包安装软件:
本节仍然以安装 apache 为例,安装过程分为如下几步:
下载 apache 源码包。该软件的源码包可通过官方网站 http://httpd.apache.org/download.cgi#apache24 下载,得到的源码包格式为压缩包( ".tar.gz" 或 ".tar.bz2" )。

将各种文件分门别类保存在对应的目录中,应该成为合格 Linux 管理员约定俗成的习惯。Linux 系统中用于保存源代码的位置主要有 2 个,分别是 "/usr/src" 和 "/usr/local/src",其中 "/usr/src" 用来保存内核源代码,"/usr/local/src" 用来保存用户下载的源代码。
将源码包进行解压缩,使用命令如下: 
[root@localhost ~]#tar -zxvf httpd-2.2.9.tar.gz|more
进入解压目录,执行如下命令: 
[root@localhost ~]# ls
anaconda-ks.cfg httpd-2.2.9 httpd-2.2.9.tar.gz install.log install.log.syslog
[root@localhost ~]# cd httpd-2.2.9
./configure 软件配置与检查。这一步主要完成以下 3 项任务: 
检测系统环境是否符合安装要求。
定义需要的功能选项。通过 "./configure--prefix=安装路径" 可以指定安装路径。注意,configure 不是系统命令,而是源码包软件自带的一个脚本程序,所以必须采用 "./configure" 方式执行("./" 代表在当前目录下)。

扫描二维码关注公众号,回复: 10157318 查看本文章

"./configure" 支持的功能选项较多,可执行 "./configure--help" 命令查询其支持的功能,例如: 
[root@localhost httpd-2.2.9]#./configure --help|more
#查询apache支持的选项功能(不是必需步骤)
把系统环境的检测结果和定义好的功能选项写入 Makefile 文件,因为后续的编译和安装需要依赖这个文件的内容。

此步具体执行代码如下:
[root@localhost httpd-2.2.9]# ./configure --prefix=/usr/local/apache2
checking for chosen layout...Apache
checking for working mkdir -p…yes
checking build system type...i686-pc-linux-gnu
checking host system type...i686-pc-linux-gnu
checking target system typa...i686-pc-linux-gnu
…省略部分输出…
--prefix 选项的含义为指定安装目录。

此命令没有加载其他功能,只是指定安装目录。需要说明的是,"/usr/local/apache2" 目录不需要手工建立,安装完成后会自动建立(这个目录是否生成也是检测软件是否正确安装的重要标志)。
make 编译。make 会调用 gcc 编译器,并读取 Makefile 文件中的信息进行系统软件编译。编译的目的就是把源码程序转变为能被 Linux 识别的可执行文件,这些可执行文件保存在当前目录下。

执行的编译命令如下: 
[root@localhost httpd-2.2.9]# make
编程过程较为耗时,需要有足够的耐心。
正式开始安装软件,这里通常会写清程序的安装位置,如果没有,则建议读者把安装的执行过程保存下来,以备将来删除软件时使用。安装指令如下: 
[root@localhost httpd-2.2.9]# make install
整个过程不报错,即为安装成功。

安装源码包过程中,如果出现“error”(或“warning”)且安装过程停止,表示安装失败;反之,如果仅出现警告信息,但安装过程还在继续,这并不是安装失败,顶多使软件部分功能无法使用。
 
注意,如果在 "./configure" 或 "make" 编译中报错,则在重新执行命令前一定要执行 make clean 命令,它会清空 Makefile 文件或编译产生的 ".o" 头文件。

+++++ more [选项] 文件名
-------more 命令选项及含义
选项
含义
-f
计算行数时,以实际的行数,而不是自动换行过后的行数。
-p
不以卷动的方式显示每一页,而是先清除屏幕后再显示内容。
-c
跟 -p 选项相似,不同的是先显示内容再清除其他旧资料。
-s
当遇到有连续两行以上的空白行时,就替换为一行的空白行。
-u
不显示下引号(根据环境变量 TERM 指定的终端而有所不同)。
+n
从第 n 行开始显示文件内容,n 代表数字。
-n
一次显示的行数,n 代表数字。
more 命令的执行会打开一个交互界面,因此读者有必要了解一些交互命令,常用的交互命令如表 2 所示。

-------表 2 more 命令交互指令及功能
交互指令
功能
h 或 ?
显示 more 命令交互命令帮助。
q 或 Q
退出 more。
v
在当前行启动一个编辑器。
:f
显示当前文件的文件名和行号。
!<命令> 或 :!<命令>
在子Shell中执行指定命令。
回车键
向下移动一行。
空格键
向下移动一页。
Ctrl+l
刷新屏幕。
=
显示当前行的行号。
'
转到上一次搜索开始的地方。
Ctrf+f
向下滚动一页。
.
重复上次输入的命令。
/ 字符串
搜索指定的字符串。
d
向下移动半页。
b
向上移动一页。


killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用.

kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作.

在操作系统中,所有可以执行的程序与命令都会产生进程。只是有些程序和命令非常简单,如 ls 命令、touch 命令等,它们在执行完后就会结束,相应的进程也就会终结,所以我们很难捕捉到这些进程。但是还有一些程和命令,比如 httpd 进程,启动之后就会一直驻留在系统当中,我们把这样的进程称作常驻内存进程。

通常情况下,文件系统会将文件的实际内容和属性分开存放: 文件的属性保存在 inode 中(i 节点)中,每个 inode 都有自己的编号。每个文件各占用一个 inode。不仅如此,inode 中还记录着文件数据所在 block 块的编号; 
文件的实际内容保存在 block 中(数据块),类似衣柜的隔断,用来真正保存衣物。每个 block 都有属于自己的编号。当文件太大时,可能会占用多个 block 块。 
另外,还有一个 super block(超级块)用于记录整个文件系统的整体信息,包括 inode 和 block 的总量、已经使用量和剩余量,以及文件系统的格式和相关信息等。,这种管理文件的系统称为索引式文件系统,Linux 文件系统(Ext 系列)就属于索引式文件系统。

cat 命令可以用来显示文本文件的内容(类似于 DOS 下的 type 命令),也可以把几个文件内容附加到另一个文件中,即连接合并文件。
cat [选项] 文件名
cat 文件1 文件2 > 文件3


需要注意的是,在 Linux 系统中,硬件设备也是文件,也有各自的文件名称。Linux 系统内核中的 udev 设备管理器会自动对硬件设备的名称进行规范,目的是让用户通过设备文件的名称,就可以大致猜测处设备的属性以及相关信息。 udev 设备管理器会一直以进程的形式运行,并侦听系统内核发出的信号来管理位于 /dev 目录下的设备文件。


为了方便管理和维护,Linux 系统采用了文件系统层次标准,也称为 FHS 标准,它规定了根目录下各个目录应该存在哪些类型的文件(或子目录),比如说,在 /bin 和 /sbin 目录中存放的应该是可执行文件


Linux 命令的基本格式:命令[选项][参数]

参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作

Linux 命令按照来源方式,可分为两种,分别是 Shell 内置命令和外部命令。所谓 Shell 内置命令,就是 Shell 自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,所以会有命令的执行文件。Linux 中的绝大多数命令是外部命令,而 cd 命令是一个典型的 Shell 内置命令,所以 cd 命令没有执行文件所在路径。

小豆角:
分区的格式化就是写入文件系统:

小豆角:
inode 中是不记录文件名的,那是因为文件名记录在文件所在目录的 block 中。

小豆角:
block 的大小可以是 1KB、2KB、4KB,默认为 4KB。block 用于实际的数据存储,如果一个 block 放不下数据,则可以占用多个 block。例如,有一个 10KB 的文件需要存储,则会占用 3 个 block,虽然最后一个 block 不能占满,但也不能再放入其他文件的数据。这 3 个 block 有可能是连续的,也有可能是分散的。
由此,我们可以知道以下 2 个重要的信息: 每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向; 
如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块; 

在 inode 信息中,是不会记录文件名称的,而是把文件名记录在上级目录的 block 中。也就是说,目录的 block 中记录的是这个目录下所有一级子文件和子目录的文件名及 inode 的对应;而文件的 block 中记录的才是文件实际的数据。

当我们查找一个文件,比如 /root/test 时,要经过以下步骤: 首先找到根目录的 inode(根目录的 inode 是系统已知的,inode 号是 2),然后判断用户是否有权限访问根目录的 block。 
如果有权限,则可以在根目录的 block 中访问到 /root 的文件名及对应的 inode 号。 
通过 /root/ 目录的 inode 号,可以查找到 /root/ 目录的 inode 信息,接着判断用户是否有权限访问 /root/ 目录的 block。 
如果有权限,则可以从 /root/ 目录的 block 中读取到 test 文件的文件名及对应的 inode 号。 
通过 test 文件的 inode 号,就可以找到 test 文件的 inode 信息,接着判断用户是否有权限访问 test 文件的 block。 
如果有权限,则可以读取 block 中的数据,这样就完成了 /root/test 文件的读取与访问。 

按照这个步骤,在给源文件 /root/test 建立了硬链接文件 /tmp/test-hard 之后,在 /root/ 目录和 /tmp/ 目录的 block 中就会建立 test 和 test-hard 的信息,这个信息主要就是文件名和对应的 inode 号。但是我们会发现 test 和 test-hard 的 inode 信息居然是一样的,那么,我们无论访问哪个文件,最终都会访问 inode 号是 262147 的文件信息。

这就是硬链接的原理。硬链接的特点如下: 不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的数据都会发生改变。 
不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode 号是 262147 的文件)都可以被访问。 
硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。 
硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。 
硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。 

硬链接的限制比较多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除 inode 号是一样的之外,没有其他明显的特征。这些特征都使得硬链接并不常用,大家有所了解就好。

软链接也不像硬链接的限制那样多,比如软链接可以链接目录,也可以跨分区来建立软链接。


Linux 系统能够正常运行并且为用户提供服务,需要数百个环境变量来协同工作,但是,我们没有必要逐一学习每个变量,这里给大家列举了 10 个非常重要的环境变量,如表 1 所示。

表 1 Linux系统中重要的10个环境变量环境变量名称作用
HOME             用户的主目录(也称家目录) 
SHELL            用户使用的 Shell 解释器名称 
PATH              定义命令行解释器搜索用户执行命令的路径 
EDITOR          用户默认的文本解释器 
RANDOM       生成一个随机数字 
LANG            系统语言、语系名称 
HISTSIZE        输出的历史命令记录条数 
HISTFILESIZE 保存的历史命令记录条数 
PS1                 Bash解释器的提示符 
MAIL             邮件保存路径 

Linux 作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境,因此,一个相同的环境变量会因为用户身份的不同而具有不同的值。

which 命令,它用于查找某个命令所在的绝对路径。学到这里,读者是否有这样一个疑问,为什么前面在使用 rm、rmdir、ls 等命令时,无论当前位于哪个目录,都可以直接使用,而无需指明命令的执行文件所在的位置(绝对路径)呢?其实,这是 PATH 环境变量在起作用。

首先,执行如下命令: [root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin这里的 echo 命令用来输出 PATH 环境变量的值(这里的 $ 是 PATH 的前缀符号),PATH 环境变量的内容是由一堆目录组成的,各目录之间用冒号“:”隔开。当执行某个命令时,Linux 会依照 PATH 中包含的目录依次搜寻该命令的可执行文件,一旦找到,即正常执行;反之,则提示无法找到该命令。

如果在 PATH 包含的目录中,有多个目录都包含某命令的可执行文件,那么会执行先搜索到的可执行文件。


 

使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。
指令执行后 Vim 会自动返回命令模式。如想直接返回命令模式,按 Esc 即可。

Vim 查找目标文本快捷键功能描述
/abc 从光标所在位置向前查找字符串 abc 
/^abc 查找以 abc 为行首的行 
/abc$ 查找以 abc 为行尾的行 
?abc 从光标所在为主向后查找字符串 abc 
n 向同一方向重复上次的查找指令 
N 向相反方向重复上次的查找指定 

Vim替换文本快捷键功能描述
r 替换光标所在位置的字符 
R 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束 
:s/a1/a2/g 将当前光标所在行中的所有 a1 用 a2 替换 
:n1,n2s/a1/a2/g 将文件中 n1 到 n2 行中所有 a1 都用 a2 替换 
:g/a1/a2/g 将文件中所有的 a1 都用 a2 替换 

有读者可能会问,处理文本内容,用 Vim 编辑器不是很好吗?Vim 允许我们使用键盘、鼠标来对文本内容进行交互性地修改,但在某些场景中,我们可能需要实现对文本内容做自动化的处理,而不是手工处理。

发布了241 篇原创文章 · 获赞 25 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013755520/article/details/104900538
今日推荐