Linux技术文档
1.说明
研究思路:从Linux外部向内部研究,从外部工具到系统内核深入的研究思路。本文档主要针对外部工具进行实验。并赋予实验结论。
2.系统内核初识
1.系统内存管理:管理物理内存与虚拟内存(内核通过硬盘上的存储空间来时间虚拟内存,这块区域称为交换空间)
2.软件程序管理:init进程来启动其他所有进程。内核启动时,init进程会加载到虚拟内存中去。内核启动任何其他进程都会在虚拟内存中分配一块专有的区域来存储进程用到的数据和代码。用一个表来管理需要开机启动的程序。Linux有5个启动运行级
3.硬件设备管理:编译进内核的驱动代码、可插入内核的设备驱动模块。
4.文件系统管理:
3.Shell操作文件和目录
1.GUN bash shell能提供对linux系统的交互方式访问。作为普通程序运行,在用户登录终端时启动,登陆时系统启动的shell依赖于用户账户的配置。
/etc/passwd文件包含了所有系统用户账户列表以及每个用户的基本配置信息。每个条目都有7个字段,用冒号分隔开。第7个字段说明用户是否使用了shell程序。条目截图如图3.1所示。可以清晰验证这一说法。
图3.1 条目截图
Ps:CLI(命令行界面)
2.提示符显示了用户名和系统名。如图3.2所示
图3.2提示符
3.bash手册(bash手册不是学习指南,而是快速参考,也就是要有一定的使用基础)
Man命令用来访问存储在Linux系统上的手册页面,在想要查找的工具名称前面输入man命令,就可以找到那个工具相应的手册条目。如图3.3时查早ps命令的手册页面;DESCRIPTION段落主要是技术行话。显示是用分页程序(pager)来显示。操作空格、回车、箭头、q。
图3.3ps命令手册
3.Linux文件系统
Linux将文件存储在单个目录结构中,这个目录被称为虚拟目录。虚拟目录将安装在pc的所有存储设备的文件路径纳入单个目录结构中。
Linux虚拟目录结构只包含一个称为根目录的基础目录。根目录下的目录和文件会按照访问他们的目录路径一一列出。
Ps:Linux的\反斜杠用来表示转义字符。
Linux安装的第一块硬盘称为跟驱动器,跟驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。
Linux会在根驱动器上创建一些特定的目录,我们称之为挂载点。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂在点目录中,然而实际上他们却存储在另外一个驱动器上。
通常系统文件会存储在根驱动器中,而用户文件则存储在另一驱动器中。
Linux顶层虚拟目录名及内容:
/:虚拟目录的根目录,通常不会在这里存储文件
/bin:二进制目录,存放许多用户级的GUN工具
/boot:启动目录,存放启动文件
/dev:设备目录,Linux在这里创建设备节点
/etc:系统配置文件目录
/home:主目录,Linux在这里创建用户目录
/lib:库目录,存放系统和应用程序的库文件、
/media:媒体目录,可移动媒体设备的常用挂载点
/mnt:挂载目录,另一个可移动设备的常用挂载点
/opt:可选目录,常用于存放第三方软件包和数据文件
/proc:进程目录,存放现有硬件及当前进程的相关信息。
/root:root用户主目录
/sbin:系统二进制目录,存放存放许多GUN管理员级工具
/run:运行目录,存放系统运作时的运行时数据
/srv:服务目录,存放本地服务的相关文件
/sys:系统目录,存放系统硬件信息的相关目录
/tmp:临时文件,可以在该目录中创建和删除临时工作文件
/usr:用户二进制目录,大量用户级的GUN工具和数据文件都存放在这里
/var:可变目录,可以存放经常变化的文件,比如日志文件。–
4.特殊字符用于相对文件路径中
单点符(.),表示当前目录
双点符(..),表示当前目录的父目录
5.ls显示当前目录下的文件和目录;按字母列排序
-F:用于区分文件与目录
隐藏文件在ls下不显示;以点开头;ls -a可以将全部文件包括隐藏的都显示出来
-R:递归,列出来当前目录下包括的子目录文件
Ls -l 显示更多信息
文件类型:目录d 文件- 字符型文件c 块设备b
文件权限
文件的硬连接总数
文件属主的用户名
文件大小:字节为单位
文件的上次修改时间
文件名或目录名
6.过滤器与通配符
问号(?)代表一个字符
星号(*)代表0个或多个字符
2.more bash
监测程序
1.进程(process):运行在系统上的程序;ps 命令能输出运行在系统上的所有程序的许多信息
2.默认情况下,ps只显示当前控制台当前用户的进程;ps:shell命令也是系统上的一个程序
进程的进程ID
运行在哪个终端
已用的CPU时间
Ps :Linux系统中使用的GUN ps命令支持3种不同类型的命令行参数:
Unix风格的参数:前面加(-)破折号
ps -ef 查看所有进程
-e 显示所有进程
-f 显示完整格式的输出
UID:启动这些进程的用户
PID:进程ID
PPID:父进程的进程号
C:进程生命周期中的CPU利用率
STIME:进程启动时的系统时间
TTY:进程启动时的终端设备
TIME:运行进程需要的累计CPU时间
CMD:启动的程序名称
ps -l会显示一个长格式
F:内核分配给进程的系统标记
S:进程状态:O代表正在运行、S代表正在休眠、R代表可运行,正在等待、Z代表僵化,进程结束但父进程已不在、T代表停止
PRI:进程的优先级(越大的数字代表越低的优先级)
NI:谦让度值用来参与决定优先级
ADDR:进程的内存地址
SZ:假如进程被唤出,所需交换空间的大致大小
WCHAN:进程休眠的内核函数的地址
BSD风格参数:前面不加破折号
ps l长模式输出;BSD与UNIX风格输出有些许不一样
VSZ:进程在内存中的大小,KB为单位
RSS:进程在为唤出时占用的物理内存大小
STAT:代表当前进程状态的双字符状态码
<:该进程运行在高优先级上
N:该进程运行在低优先级上
L:该进程有页面锁定在内存中
s:该进程时控制进程
l:该进程时多线程
+:该进程运行在后台
GUN分割参数:前面加双破折号
--forest:能够轻松的显示进程的层级信息
3.ps命令的局限:只能显示某个特定时间点的信息;如果想要观察那些频繁换进换出的内存的进程趋势,ps做不到
4.top命令:
第一行:当前时间、系统的运行时间、登录的用户数、系统的平均负载
平均负载:1分钟、5分钟、15分钟;平均负载高于2算系统比较繁忙
下一行显示的CPU概要:top根据进程的属主、进程的状态将CPU分钟几类输出;
下下一行:说明了内存状态;第一行是物理内存:总共有多少内存、当前用了多少、还空闲了多少、最后一行说的和上一行相同,只是针对系统的交换空间
5.结束进程:kill命令
Kill命令通过进程id给进程发信号。Kill命令会向命令行中列出的全部PID发送一个TERM信号。只能通过进程号而不能用进程名结束进程
要发送进程信号,必须是进程的属主或登录为root用户
-s支持其他信号;kill发送TERM信号告诉进程停止,但是也有进程不会停止。
6.killall命令
支持进程名结束进程;支持通配符结束进程,在系统负载过大时很有用
成功kill掉
监测磁盘空间
1.mount命令
默认情况下会输出当前系统挂载的设备列表
有4部分信息
媒体的设备文件名、媒体挂载到虚拟目录的挂载点、文件系统类型、已挂载媒体的访问状态
2.手动挂载媒体设备的基本命令
Mount -t type device directory
type:指定了磁盘被格式化的文件系统类型;U盘一般时vfat文件系统
例如:手动将u盘挂载到/media/disk1下
Mount -t vfat /dev/sbd1 /media/disk1
3.umount:从系统上移除一个可移动设备:不是直接移除,而是先卸载
umount [directory | device]:卸载命令;有设备或者程序在使用设备上的文件时,不允许卸载
4.df命令
df命令会显示每个有数据的已挂载文件系统
设备的文件位置
能容纳多少个1024字节大小的块
已用了多少个1024字节大小的块
还剩多少
已用空间所占比例
设备挂载到哪个挂载点上
df -h常用
Ps:df命令显示Linux系统认为的当前值,有可能系统上运行的进程已经创建或者删除了某个文件,但是尚未释放文件,这个值不会算进闲置空间的
5.lsof命令
可以获取使用文件的进程信息
6.du命令
du可以显示某个特定目录的磁盘使用情况
默认会显示当前目录下所有的文件、目录和子目录的磁盘使用情况;会以磁盘块为单位来表明某个文件或目录占用了多大的存储空间
-c:显示所有已列出文件的总大小
-h:
处理数据文件
1.sort命令:对数据进行排序
Sort按字符进行标准的字符排序
Sort -n不会向数字进行标准的字符排序
-M:按月进行排序,日志文件有用;只能识别3字符的月份
2.grep搜索数据
-v:输出不匹配该模式的行
-n:显示匹配的所有行
-c:知道多少行含有改匹配
-e:指定多个匹配模式
3.Linux压缩工具
bzip2:扩展名.bz2;采用Burrows-Wheeler块排序文件压缩算法和霍夫曼编码
compress:扩展名.Z;最初的unix文件压缩工具
gzip:扩展名.gz;GUN压缩工具,用的Lempel-Ziv编码
gzip:用来压缩文件
gzcat:用来查看压缩过的文本文件的内容
gunzip:用来解压文件
ps:可以一次压缩多个文件,或者采用通配符压缩
zip:扩展名.zip;windows上PKZIP工具的unix实现
4.归档数据;tar命令
tar function [options] object1 object2
-A :将一个tar追加到另一个tar中
-c:创建一个新的tar归档文件
-d:检查归档文件与文件系统的不同之处
-r:追加文件到已有的归档文件末尾
-x:从已有的tar归档文件中提取文件
-c:切换到指定目录
-f:输出结果到文件或设备file
-v:在处理文件时显示文件
组合使用
创建一个归档文件:tar -cvf test.tar test/ test2/
创建名为test.tar的归档文件,含有test和test2目录内容tar -tf
列出test.tar内容:tar -xvf test.tar
tar -zxvf filename.tgz来解压
3理解shell
Shell类型
1./etc/password下标记了shell程序
Root使用的时GUN bash shell
/bin/bash是一个可执行程序
Centos包括其他shell 包括tcsh
C shell的软连接
/bin/sh 作为默认的系统shell,用于那些要在启动时使用的系统shell脚本
不一定只使用默认的交互shell可以使用所有发行版本的shell
Shell的父子关系
1. 登录某个虚拟控制器终端时启动的默认的交互shell,是一个父shell
2.输入/bin/bash生成子shell
在生成子shell进程时,只有部分父进程的环境会被复制到子shell环境中
子shell可以从父shell中创建,也可以从子shell中创建
Exit逐层退出
除了能够推出子shell,也能够退出当前虚拟控制台终端,输入exit就能推出CLI
运行shell脚本也能够创建子shell
在shell之间加入分号”;”就可以运行多条命令
添加括号生成进程列表
echo $BASH_SUBSHELL返回0则没有子shell,返回1则有子shell
Shell的内建命令
4Linux环境变量
环境变量
Bash shell用一个叫做环境变量的特性来存储有关shell会话和工作环境信息。这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到他们这也是存储持久数据的一种渐变方法
在bash shell中,环境变量分为两类;
全局变量:
对shell和子shell都是可见的,局部则只对创建他们的shell可见。这让全局环境变脸对那些所创建的子shell需要获取父shell信息的程序来说非常有用。
Env查看全局变量
Printenv显示个别环境变量
子shell也用全局变量
局部变量
基本和全局变量一样,可以自己定义局部变量,这个和全局变量不一致
Linux没有一个显示局部变量的命令
Set命令会显示一个特定进程的所有环境变量包括局部与全局
用户定义变量
在子shell中创建用户变量
1.通过等号赋值
echo $test_var
Bash shell所有的环境变量名均使用大写字母的标准管理。在自己创建的局部变量或者shell脚本时使用小写字母,这样能够避免重定义环境变量可能带来的灾难。
变量名、等号和值之间没有空格。如果有空格会把值当成当都命令
子shell的自定义环境变量在子shell的子shell中不可用;在子shell的父shell也不可用
2.设置全局变量
创建局部变量,再将局部变量导入到全局变量
修改子shell的全局变量并不会影响父shell的值。且子shell无法使用export设置全局变量
删除环境变量
3.删除环境变量
Unset命令;在使用该命令时,不要使用$
变量使用说明:如果要用到变量,使用$;如果要操作变量,不使用$
如果在子进程中删除一个全局变量,这只对子进程有效,对父进程无效
Shell环境变量
Bash shell源于当初的unix Bourne shell环境变量与其兼容,并有些自有的变量
P110-111
Ps:不是所有的默认环境变量都会在运行set命令时列出,尽管这些都是默认环境变量,但不是每个都必须有一个值。
PATH环境变量
PATH环境变量定义了用于进行命令和程序查找的目录。
如果命令或者程序没有包括在PATH中,那么如果不使用绝对路径,shell无法找到
应用程序不在PATH目录中,保证PATH环境变量包含了所有存放应用程序的目录
PATH=$PATH:/home/test(程序路径)
这种方式并不是永久的
定位系统环境变量
系统启动一个bash shell时,默认情况下bash会在几个文件中查找命令,这些文件叫做启动文件或者环境文件。Bash检查启动的检查文件取决于启动bash shell的方式。启动bash shell有3钟方式
登陆时作为默认登录shell
会从5个不同的启动文件里读取
/etc/profile
$HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile
/etc/profile文件是系统默认的bash shell的主启动文件。系统的每个用户登陆时都会执行启动文件
作为非登录shell的交互式shell
作为运行脚本的非交互shell
数组变量