Lesson 007 —— Linux 文件及系统基础
文件操作
cat
: 查看文件内容
>
: 重定向(管道)符号,将输出内容定向到其它文件,覆盖原来的内容
>>
: 重定向(管道)符号,将输出内容添加到其它文件末尾
归档压缩文件
tar
: 将文件打包
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
-p:使用原文件的原来属性(属性不会依据使用者而变)
-P:可以使用绝对路径来压缩!
-N:比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
-C:在后面跟目录,表示解压目录
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
总结
1、*.tar 用 tar -xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar -xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar -xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar -xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压
命令行中,Ctrl + a: 跳到命令首部;Ctrl + e: 跳到命令尾部
vim中,0: 跳到行首; $: 跳到行尾
系统基础
uname -r
: 内核版本
uname -a
: 内核及主机名等
cache
: 高速缓存(内存),存放 cpu 经常存取的数据(A cache is something that has been "read" from the disk and stored for later use.)
buffer
: 缓冲区(内存),存放硬盘中经常读入内存的数据,一次性大量写入硬盘或者从硬盘读取( A buffer is something that has yet to be "written" to disk.)
启动级别:
0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
2:多用户状态(没有NFS)
3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
4:系统未使用,保留
5:X11控制台,登陆后进入图形GUI模式
6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
查看运行级别用:runlevel
进入其它运行级别用:init N
另外init0为关机,init 6为重启系统
grub 加密:
1、计算grub的MD5加密密码:
#grub-md5-crypt
Password:
Retype password:
输入两遍密码进行确认以后,就会计算出你所输入密码的MD5加密值,如:$1$3VbjX/$PTzUC7OpcO3QunjIsB6LZ
复制该密码进行MD5加密后的值。
2、设置grub密码:
#vi /boot/grub/grub.conf
比如我原来的/boot/grub/grub.conf文件的内容是下面的。
default=1
timeout=10
splashimage=(hd0,7)/boot/grub/splash.xpm.gz
title Fedora Core (2.4.22-1.2061.nptl)
root (hd0,7)
kernel /boot/vmlinuz-2.4.22-1.2061.nptlro root=LABEL=/
initrd /boot/initrd-2.4.22-1.2061.nptl.img
title WindowsXP
rootnoverify (hd0,0)
chainloader +1
所以我要在/boot/grub/grub.conf中加入 password ——md5 $1$3VbjX/$PTzUC7OpcO3QunjIsB6LZ 这行,以及lock,应该加到哪呢,请看下面的更改实例;
timeout=10
splashimage=(hd0,7)/boot/grub/splash.xpm.gz
password ——md5 $1$3VbjX/$PTzUC7OpcO3QunjIsB6LZ
title Fedora Core (2.4.22-1.2061.nptl)
lock
root (hd0,7)
kernel /boot/vmlinuz-2.4.22-1.2061.nptlro root=LABEL=/
initrd /boot/initrd-2.4.22-1.2061.nptl.img
title WindowsXP
rootnoverify (hd0,0)
chainloader +1
lock的意思就是把Redhat Fedora锁住了。如果启动时会提示错误。这时就应该按P键,然后输入密码就行了。
使用password,lock命令实现几种加密方法如下:
1)单纯对GRUB界面加密,而不对被引导的系统加密在timeout一行下面加一行: password ——md5 PASSWORD
2)对GRUB界面加密,同时对被引导的系统加密在timeout一行下面加一行: password ——md5 PASSWORD 在title一行下面加一行: lock
3)同时存在多个被引导系统,针对特定的系统实例分别加密(未对GRUB操作界面加密) 在title一行下面加一行: lock 在lock一行下面紧贴着再加一行: password ——md5 PASSWORD 注:lock不能单独使用.
解密:
当Linux系统管理员密码忘记,又不能编辑grub菜单进行单用户模式重置密码,怎么办呢,只有对grub进行解密了。
1、用Linux第一张安装光盘引导系统,进入修复模式。
2、光盘引导系统,选择区域和语言,不用启动网卡。
3、出现Rescue菜单,选择Continue,再弹出一个Rescue菜单,会显示“chroot /mnt/sysimage”,OK。
4、sh-3.2#chroot /mnt/sysimage,若不执行此步,进系统不能进行改写。
5、执行passwd对用户密码进行重置,完后重启正常进入系统。
6、编辑/boot/grub/grub.conf,去掉“password --md5 $1$3VbjX/$PTzUC7OpcO3QunjIsB6LZ”这一行即可。
操作系统监控命令
top
: 动态监控系统
top视图分为两部分:操作系统资源概况信息和进程信息。首先分析资源概况中各个参数的含义,再来分析下进程信息中各个参数含义。
资源概况
操作系统时间、登录用户、负载情况-top
- 10:33:25: 操作系统当前时间
- up xx days, HH:MM: 操作系统从开机以后运行的时间,运行多少天多少时多少分
- users: 当前系统有三个用户登录在线
- load average: 1s, 5s, 15s系统平均负载
运行的任务概览-Tasks
- total: 系统当前的进程数
- running: 当前正在运行的进程数
- sleeping 当前睡眠中的进程数
CPU概览: %Cpu(s) 表示CPU使用百分比,按照时间占用计算,单位s
us: 用户空间占用CPU时间百分比,如果是多核,这个数值表示占用的平均百分比,可以按1进行多核统计和平均统计切换
sy: 内核空间占用CPU时间百分比,如果是多核,同上
ni 用户进程空间内改变过优先级的进程占用CPU时间百分比
id: 空闲时间占用CPU百分比
wa: 等待输入输出的CPU时间百分比
hi: CPU服务于硬件中断的CPU时间百分比
si: CPU服务于软件中断的CPU时间百分比
注:时间占用百分比=该种类型操作消耗CPU时间/top刷新间隔时间。top 3s刷新一次,用户空间进程在这3s内使用了CPU 1.5s,那么us等于50%=1.5s/3s
内存(Mem)概览:单位KiB
- total: 内存总量
- free: 剩余的内存数量
- used: 内存使用数量
- buff/cache: 用于缓冲的内存数量
交换区概览:单位KiB
- total: 交换区总量
- free: 空闲的交换区数量
- used: 使用的交换区数量
进程概况
进程概况的统计从多维度参数进行展示的,其中最重要的参数:
PID 进程ID,唯一标识
USER 进程所属用户
%CPU 自上一次top刷新该进程占用CPU的时间百分比
%MEM 进程消耗内存百分比
TIME+ 自进程开始以来,消耗CPU时间,单位1/100秒
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
top 命令参数
- 全局
- Enter/space: 刷新视图
- h: 帮助信息,查询各个交互式命令的含义
- 0: 是否展示在进程区域中的0值,比如%CPU是0的将全部隐藏
- A: 在全屏模式和多窗口选择模式之间切换
- d: 设置刷新的时间间隔
- E: 切换内存和交换区单位
- H: 开启/关闭线程模式,以线程的方式展示
- k: kill掉指定进程或者线程
- Z: 改变颜色配置
- q: 退出
- 概要区域
- 1: 显示CPU平均状态/分开显示各个逻辑CPU状态
- m: 切换显示内存统计的数据
- 进程区域
- x: 切换高亮行的排序位置
- z: 切换颜色
- b: 块状标记高亮行
- c: 切换显示命令/程序名和参数
- f: 显示field管理
- u: 按照指定用户显示进程
- i: 显示所有进程或者活跃的进程
- n: 设置显示的进程数
- 命令参数
- -h | -v: 显示帮助或者版本信息】
- -c: 命令行列显示程序名以及参数
- -d: 启动时设置刷新时间间隔
- -H: 设置线程模式
- -i: 只显示活跃进程
- -n: 显示指定数量的进程
- -p: 显示指定PID的进程
- -q: 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
- -u: 显示指定用户的进程
free
: 显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
命令参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
进程管理
进程: 程序的一次动态执行
守护进程: 在后台运行并提供系统服务的一些进程
父进程与子进程: 当一个进程创建另一个进程时,创建进程的进程被称为父进程,被创建的进程被称为子进程
ps
: 查看进程(process search)
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
-e 显示所有进程,环境变量
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
a 显示终端上地所有进程,包括其他用户地进程
r 只显示正在运行地进程
x 显示没有控制终端地进程
pstree
: 以树状图只显示进程的名字,且相同进程合并显示
-a:显示执行程序的命令与完整参数。
-c:取消同名程序,合并显示。
-n:以PID大小排序。
-p:显示PID。
-u:显示UID信息。
kill
: 杀死进程
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
常用的信号:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
kill PID
kill -9 PID # 强制杀死
kill %n # n: jobs 命令显示的进程工作号(序号)
1. 用kill来杀死某一个进程
2. 用killall杀死一类进程
3. 用pkill踢出某个终端
pgrep
: 通过程序的名字来查询进程
ps 参数选项 程序名
参数:
-l 列出程序名和进程ID;
-o 进程起始的ID;
-n 进程终止的ID;
linux 磁盘
fdisk
: 创建和维护分区表
fdisk [必要参数][选择参数]
必要参数:
-l 列出素所有分区表
-u 与"-l"搭配使用,显示分区数目
选择参数:
-s<分区编号> 指定分区
-v 版本信息
菜单操作说明
m :显示菜单和帮助信息
a :活动分区标记/引导分区
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
x :扩展应用,高级功能
mkfs
: 分区格式化(make filesystem)
mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
参数 :
device : 预备检查的硬盘分区,例如:/dev/sda1
-V : 详细显示模式
-t : 给定档案系统的型式,Linux 的预设值为 ext2
-c : 在制做档案系统前,检查该partition 是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
block : 给定 block 的大小
该命令用来在特定的分区创建linux文件系统,常见的文件系统有ext2,ext3,vfat等,执行mkfs命令其实是在调用:mkfs.ext3 | mkfs.reiserfs |mkfs.ext2 | mkdosfs | mkfs.msdos | mkfs.vfat
mount
: 挂载硬盘
umount
: 卸载硬盘
df
: 显示文件系统
du
: 统计目录下文件大小
硬盘用满的两种情况:
- 磁盘空间占满
- Inodes 编号号占满
链接
我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
软链接(又称符号链接,即 soft link 或 symbolic link)
ln -s old.file soft.link 特征: 1. 软链接有自己的文件属性及权限等; 2. 可对不存在的文件或目录创建软链接; 3. 软链接可交叉文件系统; 4. 软链接可对文件或目录创建; 5. 创建软链接时,链接计数 i_nlink 不会增加; 6. 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。 7. 修改源文件/链接文件,内容都改变
硬链接(hard link)
若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。
link oldfile newfile ln oldfile newfile 特征: 1. 文件有相同的 inode 及 data block; 2. 只能对已存在的文件进行创建; 3. 不能交叉文件系统进行硬链接的创建; 4. 不能对目录进行创建,只可对文件创建; 5. 删除一个硬链接文件并不影响其他有相同 inode 号的文件。 6. 修改源文件/链接文件,内容都改变
网络配置
ifconfig
: 查看网络配置及网卡信息
chkconfig
: 查看及设置服务启用与关闭
route -n
: 查看网关
ping
: 尝试连接一个 IP 地址
arping
: 尝试获取一个 IP 地址的 MAC 地址