当前位置 博文首页 > 路途:《Linux命令行与shell脚本大全》笔记
Linux可划分为以下四部分:
内核主要负责以下四种功能:
不公管理服务器上的可用物理内存,还可以创建和不容易理虚拟内存。
内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swap space)。
内丰存储单元按组划分成很多块,这些块称作页面(page)。内核将每个存在 页面放在物理内存或交换空间。然后, 内核 会维护一个内存页面表。指明哪些页面位于物理内存内,哪些页面被换到硬盘上。
内核会记录哪些内存页面正在使用中,并自动把一段时间未访问的内存页面复制 到交换空间区域(称为换出,swapping out_)即使不宜可用内存。当程序要访问一个已被换出的内存页面时,内核必需从物理内存换出另外一个内存页面给它让出空间,然后从交换空间换入请求的内存页面。显然,这个过程 要花时间,拖慢运行的进程。只要Linux系统在运行,为运行中的程序换出内存面对面的的过程 就不会停歇。
Linux操作系统将运行中的程序称为进程。可分为前台运行和后台运行。内核控制着Linux系统管理运行在系统上的所有进程。
内核创建了第一个进程(称为init进程)来启动系统上所有的其他进程。当内核启动时,它会将init进程加载到虚拟 内存中。内核 在启动任何其他进程时,都 会在虚拟 内存中给新进程分配 一块发你的区域 来存储该 进程用到的数据和代码。
一些Linux发行版使用一个表来管理在系统开机时要自动 启动的进程。在Linux系统上,这个表通常位于专门文件/etc/inittab中。有的系统(如Ubuntu)则采用/etc/init.d目录将开机时启动或停止某个应用的脚本 放在之个目录 下。这些脚本通过/etc/rcX.d目录下的入口 启动。X代表运行级别。
运行级别:
? 1.单用户
? 3.标准启动
? 5.X Windows
? 6.重启
内核的另一职责 是管理硬件设备。
任何Linux系统需要 与之通信的设备,都需要在内核 代码 中加入其驱动程序 代码。程序 代码相当 于应用程序 和硬件设备的中间人,允许内核 与设备之间交换数据。在Linux内核 中有两种方法用于插入设备驱动代码:
Linxu系统将硬件设备当成特殊 的文件,称为设备文件,设备文件有3种分类:
字符型 设备谁的
指处理数据时每次只能处理一个字符 的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建 的。
块设备文件
块设备是指处理数据时每次能处理大块数据 的设备,比如硬盘。
网络设备文件
是指采用数据包发送和接收数据 的设备,包括各种网卡和一个特殊 的回环设备。
Linux为系统上的每个设备都创建 一种称为节点的特殊文件。与设备的所有通信都 通过设备节点完成。每个节点都 有唯一 的数值 对供Linux内核 标识 它。数值 对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下。次设备号用于标识 主设备组下的某个特定设备。
不同于其他一些操作系统,Linux内核 支持通过不同类型的文件系统从硬盘中读写数据。如下列出了Linux系统用来读写数据的标准的文件系统。
文件系统 | 描述 |
---|---|
ext | Linux扩展文件系统,最早的Linux文件系统 |
ext2 | 第二扩展文件系统,在ext的基础上提供了更多 的功能 |
ext3 | 第三扩展文件系统,支持日志功能 |
ext4 | 第四扩展文件系统,支持高级日志功能 |
hgfs | OS/2高性能文件系统 |
ISO9660 | ISO 9660文件系统(CD-ROM) |
minix | minix文件系统 |
msdos | 微软的FAT16 |
ncp | Netware文件系统 |
nfs | 网络文件系统 |
ntfs | 支持Microsoft NT文件系统 |
proc | 访问系统信息 |
ReiserFS | 高级Linux文件系统,能提供性能和硬盘恢复功能 |
smb | 支持网络访问的Samba SMB文件系统 |
sysv | 软早期的Unix文件系统 |
ufs | BSD文件系统 |
umsdos | 建立在msdos上的类Unix文件系统 |
vfat | Windows95文件系统(FAT32) |
XFS | 高性能 64位日志文件系统 |
GNU是GNU’s Not Unix的缩写。
GNU组织开发了一套完整的Unix工具。
被称为coreutils软件包,它由三部分构成:
GNU/Linux shell 是一种特殊的交互式工具。它为用户提供了启动程序,管理文件系统中的谇反及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责交互 的部分。它允许你输入 文本命令,然后解释 命令,并在内核中执行。
你也可以将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本。
在Linux,通常有好几中Linux shell可用。不同的shell有不同的特性,有些更利于创建脚本,有些则更利于管理进程。所有Linux发行版默认的shell都是bash shell。
shell | 描述 |
---|---|
ash | 一种运行在内存受限环境中简单轻量的shell,但与bash shell完全兼容。 |
korn | 一种与Bourne shell兼容的编程shell,但关联数组和浮点运算待一些高级的编程特性。 |
tcsh | 一种将C语言中的一些元素引入 到shell脚本 中的shell |
zsh | 一种结合 了bash,tcsh和korn的特性,同时提供高级编程特性,共享 历史 文件和主题化提示符的高级shell |
不同的Linux发行版通常归类为3种:
发行版 | 描述 |
---|---|
Slackware | 最早的LInux发行版中的一员,在Linux极客中比较流行 |
Red Hat | 主要用于Internet服务器商业发行版 |
Fedora | 从Red Hat分享出的家用发行版 |
Gentoo | 为高级Linux用户设计 的发行版,公包含linux源代码 |
openSUSE | 用于商用和家用的发行版 |
Debian | 在Linux专家和商用 linux产品中流行的发行版 |
在大多数Linux发行版中,你可以使用简单按键组合访问某个Linux虚拟控制台。通常必须按下Ctrl + Alt组合键,然后按功能键F1 - F7进入要使用的虚拟控制台。
可以将终端的背景色设置成白色,其中一种方法是
setterm -inversescreen on
或
setterm -background white
setterm -foreground black
共有八种颜色可供选择,分别是black, red, green, yeallow, blue, magenta, cyan, white
选项 | 参数 | 描述 |
---|---|---|
-background | black, red, green, yellow, blue, magenta, cyan, white | 将终端的背景色改为指定颜色 |
-foreground | black, red, green, yellow, blue, magenta, cyan, white | 将终端的前景色改为指定颜色 |
-inversescreen | on或off | 交换背景色和前景色 |
-reset | 无 | 将终端外观恢复成默认设置并清屏 |
-store | 无 | 将终端当前的前景色和背景色设置成-reset选项的值 |
默认bash shell提示符是美元符号($),这个符号表明shell在等待用户输入。
大多数Linux发行版自带用以查找shell命令及其他GNU工具信息的在线手册 。
man命令用来访问存储在Linux系统上的手册的页面。
Linux手册页惯用的节名
节 | 描述 |
---|---|
Name | 显示命令名和一段简短的描述 |
Synopsis | 命令的语法 |
Configuration | 命令配置信息 |
Description | 命令的一般性描述 |
Options | 命令选项描述 |
Exit Status | 命令的退出状态指示 |
Return Value | 命令的返回值 |
Errors | 命令的错误的消息 |
Environment | 描述所使用的环境变量 |
Files | 命令用到的文件 |
Versions | 命令的版本信息 |
Conforming To | 命名所遵从的标准 |
Notes | 其他有帮助的资料 |
Bugs | 提供提交Bug的途径 |
Example | 展示命令的用法 |
Authors | 命令开以人员的信息 |
Copyright | 命令源代码 的版权状况 |
See Also | 与该 命令类型的其他命令 |
Linux手册页的内容区域
区域号 | 所涵盖的内容 |
---|---|
1 | 可执行程序或shell命令 |
2 | 系统调用 |
3 | 库调用 |
4 | 特殊文件 |
5 | 文件格式与约定 |
6 | 游戏 |
7 | 概览,约定及杂项 |
8 | 超级用户和系统管理员命令 |
9 | 内核例程 |
手册页不是唯一 的资料。还有另一种叫作info页面的信息。
另外大多数命令都可以接受-help或–help选项。
Linux路径本身并没有提供任何有关文件空间存放在哪个物理磁盘上的信息。
在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。
常见Linux目录名称
目录 | 用途 |
---|---|
/ | 虚拟目录的根目录。通常不会在这里存储文件 |
/bin | 二进制目录,存放许多用户级的GNU工具 |
/boot | 启动目录,存放启动文件 |
/etc | 系统配置文件目录 |
/home | 主目录,Linux在这里创建用户的目录 |
/lib | 库目录,存放系统和应用程序的库文件 |
/media | 媒体目录,可移动媒体设备的常用挂载点 |
/mnt | 挂载目录,另一个可移动 媒体设备的常用挂载点 |
/opt | 可选目录,常用于存放第三方软件包和数据文件 |
/proc | 进程目录,存放现有硬件及当前相关信息 |
/root | root用户的主目录 |
/sbin | 系统二进程目录,存放许多GNU管理员级工具 |
/run | 运行目录,存放系统动作时的运行时数据 |
/srv | 服务目录,存放本地服务的相关文件 |
/sys | 系统目录,存放系统硬件信息的相关文件 |
/tmp | 临时目录,可以在该目录中创建和删除临时工作文件 |
/usr | 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里 |
/var | 可变目录,用以存放经常变化的文件,比如日志文件 |
cd destination
绝对文件路径总是以正斜线作为起始,指明虚拟文件系统的根目录。
pwd
相对文件路径允许用户指定一个基于当前位置的目录文件路径。
单点(.): 表示当前目录
双点(…):表示当前目录的父目录
ls命令最基本的形式会显示当前目录下的文件和目录
参数:
-F: 可以轻松区分文件和目录,它会在目录后边加/,还会在可执行文件后边星号。
-a: 可以把隐藏文件和普通文件及目录一起显示出来。
-R: 递归选项
-l: 长列表格式输出
-i: 显示inode
会显示如下内容:
-h: 以容易识别的文件大小显示
ls xxx
touch filename
会创建一个空文件
如果只想改变文件的访问时间可以使用-a参数
touch -a filename
cp source destination
参数:
-i: 重名需要确认
-R: 递归
Linux中有两种不同类型的文件链接
ls -s source lnFile
lnFile是指向source的一个新文件,可以通过inode编号查看
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用ln命令时不再需要加入额外的参数了。
mv命令,可以将目录移动到另一个位置或重新命名
mv source destination
或
mv oldfilename newfilename
rm -i file
-i: 删除文件时需要确认一次才会删除
-f:强制删除文件
-r:级联删除文件夹
mkdir newDir
参数:
-p:创建多级目录
rm -ri
file my_file
my_file: ASCII text
cat
more
以分页的形式显示文件内容
less
tail
tail命令默认会显示文件最后10行内容
-n 2: 显示最后两行内容
-f: 使tail保持活动状态,并不断显示添加到文件中的内容
head
默认显示文件的前10行
head -num: 显示前num行内容
默认ps只会显示运行在当前控制台下的属于当前用记的进程。
Linux系统中使用的GNU ps命令支持3种不同类型的命令行参数:
Unix风格的ps命令参数
参数 | 描述 |
---|---|
-A | 显示所有进程 |
-N | 显示与指定参数不符的所有进程 |
-a | 显示除控制进程和无终端进程外的所有进程 |
-d | 显示除控制进程外的所有进程 |
-e | 显示所有进程 |
-C cmdlist | 显示包含在cmdlist列表中的进程 |
-G grplist | 显示组ID在grplist列表中的进程 |
-U userlist | 显示属主的用户ID在userlist列表中的进程 |
-g grplist | 显示会话或组ID在grplist列表 |
-p pidlist | 显示PID在pidlist列表中的进程 |
-s sesslist | 显示会话ID在sesslist列表中的进程 |
-t ttylist | 显示终端ID在ttylist列表中的进程 |
-u userlist | 显示有效用户iD在userlist列表中的进程 |
-F | 显示更多额外输出(相对于-f参数而言) |
-O format | 显示默认的输出列以及format列表指定的特定列 |
-M | 显示进程的安全信息 |
-c | 显示进程额外调试器信息 |
-f | 显示完整格式的输出 |
-j | 显示任务信息 |
-l | 显示长列表 |
-o format | 公显示由format指定的列 |
-y | 不要显示进程标记(process flag, 表明进程状态的标记) |
-Z | 显示安全标签(security context)信息 |
-H | 用层级格式来显示进程(树状,用来显示父进程) |
-n namelist | 定义了WCHAN列显示的值 |
-w | 采用宽输出模式,不限宽度显示 |
-L | 显示进程中的线程 |
-V | 显示ps命令的版本号 |
e.g.
ps -ef
显示内容:
-l参数:
多出的列:
BSD风格
主要命令参数:
参数 | 描述 |
---|---|
T | 显示跟当前终端关联的所有进程 |
a | 显示跟任意终端关联的所有进程 |
g | 显示所有的进程,包括控制进程 |
r | 仅显示运行中的进程 |
x | 显示所有的进程,甚至包括未分配任何终端的进程 |
U userlist | 显示归userlist列表中的某用户ID所有的进程 |
p pidlist | 显示PID在pidlist列表中的进程 |
t ttylist | 显示所关联的终端在ttylist列表中的进程 |
O format | 除了默认输出的列之外,还输出由format指定的列 |
X | 按过去的Linux i386寄存器格式显示 |
Z | 将安全信息添加到输出中 |
j | 显示任务信息 |
l | 采用长模式 |
o format | 公显示由format指定的列 |
s | 采用信号格式显示 |
u | 采用基于用户的格式显示 |
v | 采用虚拟内存格式显示 |
N namelist | 定义在WCHAN列中使用的值 |
O order | 定义显示信息列的顺序 |
S | 将数值信息从子进程加到父进程上,比如CPU和内存的使用情况 |
c | 显示真实的命令名称 (用以启动进程的程序名称) |
e | 显示命令使用的环境变量 |
f | 用分层格式来显示进程,表明哪些进程启动了哪些进程 |
h | 不显示头信息 |
k sort | 指定用以将输出排序的列 |
n | 和WCHAN信息一起显示出来,用数值来表示用户ID和组ID |
w | 为较宽屏幕显示宽输出 |
H | 将线程按进程来显示 |
m | 在进程后显示线程 |
L | 列出所有格式指定符 |
V | 显示ps命令的版本号 |
输出结果中的大部分的输出列跟使用Unix风格参数时的输出是一样的,只有一小部分如下:
VSZ: 进程在内存中的大小以KB为单位
RSS: 进程在未换出时占用的物理内存
STAT: 代表当前进程状态 的双字符状态码
第一个字符采用了和Unix风格S列相同的值,表明进程是在休眠,运行还是等待。
第二个参数进一步说明进程的状态
<: 该进程运行在高优先级上
N:该进程运行在低优先级上
L: 该进程有页面锁定在内存中
s: 该 进程是控制进程
l: 该进程是多线程的
+: 该进程运行在前台
GNU长参数
常用参数
参数 | 描述 |
---|---|
–deselect | 显示所有进程,命令行中列出的进程 |
–Group grplist | 显示组ID在grplist列表中的进程 |
–User userlist | 显示用户ID在userlist列表中的进程 |
–group grplist | 显示有效组ID在grplist列表中的进程 |
–pid pidlist | 显示PID在pidlist列表中的进程 |
–ppid pidlist | 显示父PID在pidlist列表中的进程 |
–sid sidlist | 显示会话ID在sidlist列表中的进程 |
–tty ttylist | 显示终端设备号在ttylist列表中的进程 |
–user userlist | 显示有效用户ID的userlist列表中的进程 |
–format format | 仅显示由format指定的列 |
–context | 显示额外的安全信息 |
–cols n | 将屏幕宽度设置为n列 |
–columns n | 将屏幕宽度设置为n列 |
–cumulative | 包含已停止的子进程的信息 |
–forest | 用层级结构显示出进程和父进程之间的关系 |
–headers | 在每页输出中都显示列的头 |
–no-headers | 不显示列的头 |
–lines n | 将屏幕高度设为n行 |
–rows n | 将屏幕高度设为n排 |
–sort order | 指定将输出按哪列排序 |
–width n | 将屏幕宽度设为N列 |
–help | 显示帮助信息 |
–info | 显示调试信息 |
–version | 显示ps命令的版本号 |
top
输出的第一部分显示的是系统的概况:
第一行显示了当前时间,系统的运行时间,登录的用户数以及系统的平均负载。
? 平均负载有3个值,最近1分钟的,最近5分钟的和最近15分钟的平均负载。值越大说明系统的负载越高。
? 通常,如果系统的负载值超过2,就说明系统比较繁忙了。
第二行显示了进程概要信息–top命令的输出中将进程叫作任务(task):
? 有多少进程处在运行,休眠,停止或僵化状态
第三行显示了Cpu的概要信息。
紧跟其后的两行说明了系统内存的状态。
? 第一行是系统的物理内存: 总共有多少内存,当前使用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间。
最后一部分显示了当前运行中的进程的详细列表。有些跟ps命令的输出类似。
默认top命令会对按昭%cpu值对进程排序。可以在top运行时使用多种交互命令重新排序。每个交互式命令都 是单字符,在top命令运行时键入可改变top的行为。键入f允许你选择对输出进行排序的字段,键入d允许你修改轮询间隔。键入q可以退出top。用户在top命令的输出上有很大的控制权。
在Linux中进程之间通过信号来通信。
Linux进程信号:
信号 | 名称 | 描述 |
---|---|---|
1 | HUP | 挂起 |
2 | INT | 中断 |
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止 |
11 | SEGV | 段错误 |
15 | TERM | 尽可能终止 |
17 | STOP | 无条件停止运行,但不终止 |
18 | TSTP | 停止或暂停,但继续在后台运行 |
19 | CONT | 在STOP或TSTP之后恢复执行 |
在Linux中有两个命令可以向运行中的进程发出进程信号
kill -option pid pid pid…
killall命令支持通过进程名而不是PID来结束进程。
killall也支持通配符。
e.g.
killall http* # 结束所有以http开头的进程
默认情况下,mount命令会输出当前系统上挂载的设备列表
默认提供如下四部分信息:
需要手动在虚拟目录中挂载设备,需要以root用户身价登录,或是以root用户身份运行sudo命令。
mount -t type device directory
如果Type是VindowsPC共用的存储设备,通常类型如下:
mount命令的参数
参数 | 描述 |
---|---|
-a | 挂载/etc/fstab文件中指定的所有文件系统 |
-f | 使用mount命令模拟挂载设备,但并不真的挂载 |
-F | 和-a参数一起使用时,会同时挂载所有文件系统 |
-v | 详细模式,将会说明挂载设备的每一步 |
-I | 不启用任何/sbin/mount.filesystem下的文件系统帮助文件 |
-l | 给ext2,ext3或XFS文件系统自动 添加文件系统标签 |
-n | 挂载设备,但不注册到/etc/mtab已挂载设备文件中 |
-p num | 进行加密挂载时,从文件描述符num中获得密码短语 |
-s | 忽略该文件系统不支持的挂载选项 |
-r | 将设备挂载为只读的 |
-w | 将设备挂载为可读写的(默认参数) |
-L label | 将设备按指定 的label挂载 |
-U uuid | 将设备按指定的uuid挂载 |
-O | 和-a参数一起使用,限制命令只作用到特定的一组文件系统上 |
-o | 给文件系统添加特定的选项 |
以下为-o常用参数
从Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载。
umount [directory | device]
用来查看所有已挂载磁盘的使用情况
命令输出格式:
常用参数:
此命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况
常用参数
常用参数: