Shell编程
1. bash的功能
1.tab补全 2.历史补全 3.别名alias 4通配符
2. 变量
1.环境变量
(PATH路径 HOME当前用户的工作目录 MAIL邮件设置 LANG语言LOGNAME显示用户名称)事先定义好的,可以修改
2.用户自定义变量
root#vname=“TOM_Tesson”
#echo $vname
#TOM_Tesson
注意事项:
1.名字 不能数字开头和特殊字符
2.赋值(=) =两边不能有空格,内容也不能有空格
3.用双引号 " "包含名字
4.双引号特殊字符
注意,变量名和等号之间不能有空格
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
-
使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可
-
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
-
删除变量
使用 unset 命令可以删除变量。
3.Shell 字符串
单引号
str='this is a string'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
输出结果为:
Hello, I know you are "runoob"!
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
拼接字符串
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
输出结果为:
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
获取字符串长度
string="abcd"
echo ${#string} #输出 4
提取子字符串
以下实例从字符串第 2 个字符开始截取 4 个字符:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
查找子字符串
查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。
4.Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
定义数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
读取数组
读取数组元素值的一般格式是:
${数组名[下标]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
获取数组中的所有元素
使用@ 或 * 可以获取数组中的所有元素,例如:
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
执行脚本,输出结果如下所示:
$ chmod +x test.sh
$ ./test.sh
数组的元素为: A B C D
数组的元素为: A B C D
5.Shell 注释
单行注释
以 # 开头的行就是注释,会被解释器忽略。
通过每一行加一个 # 号设置多行注释
多行注释
多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!
6.Shell 传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
$# | 传递到脚本的参数个数 |
---|---|
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与 ∗ 相 同 , 但 是 使 用 时 加 引 号 , 并 在 引 号 中 返 回 每 个 参 数 。 如 " *相同,但是使用时加引号,并在引号中返回每个参数。 如" ∗相同,但是使用时加引号,并在引号中返回每个参数。如"@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
7.Shell echo命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:
echo string
您可以使用echo实现更复杂的输出格式控制。
1.显示普通字符串:
echo "It is a test"
这里的双引号完全可以省略,以下命令与上面实例效果一致:
echo It is a test
2.显示转义字符
echo "\"It is a test\""
结果将是:
"It is a test"
同样,双引号也可以省略
3.显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh
read name
echo "$name It is a test"
以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:
[root@www ~]# sh test.sh
OK #标准输入
OK It is a test #输出
4.显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
输出结果:
OK!
It is a test
5.显示不换行
#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
输出结果:
OK! It is a test
6.显示结果定向至文件
echo "It is a test" > myfile
7.原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'
输出结果:
$name\"
8.显示命令执行结果
echo `date`
注意: 这里使用的是反引号 `, 而不是单引号 '。
结果将显示当前日期
8.Shell printf 命令
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。
9.Shell test 命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试
参数 | 说明 |
---|---|
-eq | 等于则为真 |
-ne | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于等于则为真 |
字符串测试
参数 | 说明 |
---|---|
= | 等于则为真 |
!= | 不相等则为真 |
-z 字符串 | 字符串的长度为零则为真 |
-n 字符串 | 字符串的长度不为零则为真 |
文件测试
参数 | 说明 |
---|---|
-e 文件名 | 如果文件存在则为真 |
-r 文件名 | 如果文件存在且可读则为真 |
-w 文件名 | 如果文件存在且可写则为真 |
-x 文件名 | 如果文件存在且可执行则为真 |
-s 文件名 | 如果文件存在且至少有一个字符则为真 |
-d 文件名 | 如果文件存在且为目录则为真 |
-f 文件名 | 如果文件存在且为普通文件则为真 |
-c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
-b 文件名 | 如果文件存在且为块特殊文件则为真 |
10.Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
重定向命令列表如下:
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
11.Shell 文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell 文件包含的语法格式如下:
. filename # 注意点号(.)和文件名中间有一空格
或
source filename
程序1
功能:打印输出
#vi sh1.sh
#! /bin/bash bash的命令脚本
PATH= /bin:/sbin:/usr/bin
/bin是系统的一些命令
/sbin一般是指超级用户指令
/usr/bin是你在后期安装的一些软件的运行脚本
/usr/sbin 放置一些用户安装的系统管理的必备程序
export PATH 定义环境变量
echo -e “Hello World”
read -p “input val” test1 打印输入提示,并把“input val”保存到test1中
echo $tset
exit 0
程序2
功能:求两数之和
#vi sh2.sh
test -e:是否为文件名
test -f:是否为一般文件
test -d:是否是目录
test -r:是否可读
test -w:是否可写
test -x:是否可执行
test -eq:是否相等
test -ne:是否不等
test -gt:是否大于
#vi sh2.sh
#! /bin/bash
PATH = /bin:/sbin:/usr/bin
export PATH
read -p “enter first num” num1
read -p “enter second num” num2
total = $(num1*num2)
echo -e “result is $total”
test -e $file && echo “exist” || echo “no exist”
exist 0
程序3
功能:判断文件的类型和权限类型
#vi sh3.sh
#! /bin/bash
PATH = /bin:/sbin:/usr/bin
export PATH
echo -e “input file name”
read -p fname
test -z $fname && echo “input please” && exit 0
test !-e $fname && echo “file no exist” && exit 0
test -f $fname && ftype = “regular file”
test -d $fname && ftype = “dir”
test -r $fname && perm = “readable”
test -w KaTeX parse error: Expected 'EOF', got '&' at position 7: fname &̲& perm = "perm writable"
echo “fname:$fname is $type”
echo “and permission is $perm”
程序5
功能:查看系统服务是否开启
#vi sh3.sh
#! /bin/bash
PATH = /bin:/sbin:/usr/bin
export PATH
test1 = $(netstat -tuln|grep “:80”)
if ["$test1"!=""]; then
echo “www server is running”
fi
test1 = $(netstat -tuln|grep “:22”)
if ["$test1"!=""]; then
echo “ssh is running”
fi
test1 = $(netstat -tuln|grep “:21”)
if ["$test1"!=""]; then
echo “FTP is running”
fi
Linux
Linux系统的特点
1)开源,免费
2)稳定
3)硬件要求低
4)多任务
5)软件支持不足 主要指硬件(驱动)和软件
6)操作的易用性:有图形界面
柱面与扇区
Linux以柱面分,以扇面访问
启动过程
MBR:机器启动
BIOS(启动)
Boot Loader:加载操作系统内核
PT:分区表
-
有四个分区
-
最多存一个扩展分区
-
逻辑分区在扩展分区划分
-
命名:文件fhs
1.双系统可以做到两个分区
2.虚拟机装2个系统
分区的作用
注:装系统之前要进行分区
-
方便管理
-
提高数据安全
-
提高数据的访问速度
详解:
-
内核的引导。
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
-
运行 init。
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init 程序首先是需要读取配置文件 /etc/inittab。
- SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
- Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
- Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
Linux系统有7个运行级别(runlevel):
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS)
- 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
-
系统初始化。
在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
-
建立终端 。
rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init接下来会打开6个终端,以便用户登录系统。
-
用户登录系统。
一般来说,用户的登录方式有三种:
- (1)命令行登录
- (2)ssh登录
- (3)图形界面登录
图形模式与文字模式的切换方式
Linux预设提供了六个命令窗口终端机让我们来登录。
默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56Edk64U-1572060962373)(D:\typoraImage\1571812365415.png)]
管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。
关机的命令有 shutdown –h now halt poweroff 和 init 0 , 重启系统的命令有 shutdown –r now reboot init 6。
Linux系统中常见文件系统格式
Windows常用的分区格式有三种,分别是FAT16、FAT32、NTFS格式。
在Linux操作系统里有Ext2、Ext3、Linux swap和VFAT四种格式。 FAT16: 作为一种文件名称,FAT(File Allocation Table,文件分配表)自1981年问世以来,已经成为一个计算机术语。由于时代的原因,包括Windows、MacOS以及多种Unix版本在内的大多数操作系统均对FAT提供支持。
这是MS-DOS和最早期的Windows 95操作系统中使用的磁盘分区格式。它采用16位的文件分配表,是目前获得操作系统支持最多的一种磁盘分区格式,几乎所有的操作系统都支持这种分区格式,从DOS、Windows 95、Windows OSR2到现在的Windows 98、Windows Me、Windows NT、Windows 2000、Windows XP都支持FAT16,但只支持2GB的硬盘分区成为了它的一大缺点。FAT16分区格式的另外一个缺点是:磁盘利用效率低(具体的技术细节请参阅相关资料)。为了解决这个问题,微软公司在Windows 95 OSR2中推出了一种全新的磁盘分区格式——FAT32。 FAT32: 这种格式采用32位的文件分配表,对磁盘的管理能力大大增强,突破了FAT16下每一个分区的容量只有2GB的限制。由于现在的硬盘生产成本下降,其容量越来越大,运用FAT32的分区格式后,我们可以将一个大容量硬盘定义成一个分区而不必分为几个分区使用,大大方便了对磁盘的管理。而且,FAT32与FAT16相比,可以极大地减少磁盘的浪费,提高磁盘利用率。目前,Windows 95 OSR2以后的操作系统都支持这种分区格式。但是,这种分区格式也有它的缺点。首先是采用FAT32格式分区的磁盘,由于文件分配表的扩大,运行速度比采用FAT16格式分区的磁盘要慢。另外,由于DOS和Windows 95不支持这种分区格式,所以采用这种分区格式后,将无法再使用DOS和Windows 95系统。
NTFS: 为了弥补FAT在功能上的缺陷,微软公司创建了一种称作NTFS的文件系统技术。它的优点是安全性和稳定性方面非常出色,在使用中不易产生文件碎片。并且能对用户的操作进行记录,通过对用户权限进行非常严格的限制,使每个用户只能按照系统赋予的权限进行操作,充分保护了系统与数据的安全。Windows 2000、Windows NT、以及Windows XP都支持这种分区格式。
Ext2: Ext2是GNU/Linux系统中标准的文件系统。这是Linux中使用最多的一种文件系统,它是专门为Linux设计的,拥有极快的速度和极小的CPU占用率。Ext2既可以用于标准的块设备(如硬盘),也被应用在软盘等移动存储设备上。 Ext3: Ext3是Ext2的下一代,也就是保有Ext2的格式之下再加上日志功能。Ext3是一种日志式文件系统(Journal File System),最大的特点是:它会将整个磁盘的写入动作完整的记录在磁盘的某个区域上,以便有需要时回溯追踪。当在某个过程中断时,系统可以根据这些记录直接回溯并重整被中断的部分,重整速度相当快。该分区格式被广泛应用在Linux系统中。
Linux swap: 它是Linux中一种专门用于交换分区的swap文件系统。Linux是使用这一整个分区作为交换空间。一般这个swap格式的交换分区是主内存的2倍。在内存不够时,Linux会将部分数据写到交换分区上。 VFAT: VFAT叫长文件名系统,这是一个与Windows系统兼容的Linux文件系统,支持长文件名,可以作为Windows与Linux交换文件的分区。
磁盘分区
a、磁盘的第一个扇区
主要启动记录区(Master Boot Record, MBR):可以安装启动管理程序的地方,有446 bytes
分区表(partition table):记录整颗硬盘分区的状态,有64 bytes
b、磁盘分区表
如何分区
在分区表所在的64 bytes容量中,总共分为四组记录区,每组记录区记录了该区段的起始与结束的柱面号码
详细说明
其实所谓的分区只是针对分区表进行配置而已
硬盘默认分区表仅能写入四组分区信息
这四组分区我们称为 主分区 或 拓展分区
分区最小单位为磁柱(cylinder),根据柱面的编号来进行分区
当系统要写入硬盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理
磁盘分区能够保证数据的安全和提高系统的性能
逻辑分区和拓展分区是什么
扩展分区的目的是使用额外的磁区来记录分区资讯,本身不能格式化;
拓展分区完全可以看作一块独立的磁盘,也拥有自己的分区表;
对拓展分区进行进一步的分区可以得到逻辑分区;
逻辑分区的编号从5开始,1到4被磁盘默认的分区表给保留了;
主分区、扩展分配与逻辑分区的特性
主分区和扩展分区的数量最多为4(硬盘的限制)
扩展分配最多只能有一个(操作系统的限制)
主要分区与逻辑分区可以格式化,扩展分配无法格式化
逻辑分区的数量依操作系统而不同,在Linux系统中,SATA硬盘最多有11个逻辑分区
系统安装和启动
a、linux 的启动流程
BIOS:开机第一个运行的程序,根据设置加载启动的介质(通常是硬盘);
MBR:第一个可启动装置的第一个磁区内的主要启动记录区块,内含启动管理程序;
启动管理程序(boot loader):作用是加载和运行系统内核;
核心文件:开始操作系统的功能
b、关于 boot loader 的说明
loader 的主要功能:
提供启动选择菜单(GRUB)
加载核心文件开启操作系统
启动管理转交其他loader
bootloader是由操作系统安装的,除了安装在MBR,还可以安装在每个分区的启动磁区,这也是多系统安装的基础
loader只会认识自己分区的可启动核心文件,以及其他loader
c、linux和windows双系统安装
最好先安装Windows再安装Linux,windows安装程序会强制覆盖磁盘的MBR和所在盘的启动磁区,并且不会提供启动的选择菜单
d、Linux安装磁盘分区选择
linux的文件目录树结构
文件系统与目录树的关系(挂载):所谓的挂载就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下,那个进入点的目录我们称为挂载点
安装简单分区:只分一份根分区和一个交换分区,再预留一个空白的空间以备使用
Linux文件权限与目录配置
1、文件权限
a、使用者和群组
文件拥有者(user)、群组(group)、其他人(others)的概念
相关的三个文件:/etc/passwd(用户) /etc/shadow(密码) /etc/group(群组)
b、文件权限概念
如何改变文件属性与权限
chgrp:只能修改文件所属的组
chown:文件的拥有者和所属的群组都可以修改
chmod:改变权限,可以用数字和字母两种方法进行权限的设定
数字方法:r(4)w(2)x(1)
字母方法:u、g、o、a + | - | = r、w、x
目录和文件权限
文件权限:
linux文件是否可以执行是看权限而不是后缀名;
文件的写权限是修改文件的权限而不是删除文件的权限,
文件能否删除看所属的目录是否具有 w 权限;
目录权限:目录的主要作用是记录文件名列表
目录的读权限:读文件名列表
目录的写权限:针对文件名的异动(新建、移动、删除、改名)
目录的执行权限:有执行权限就可以进入该目录,没有的话就不能进入到该目录
目录权限使用的注意点:
如果你在某目录下不具有x的权限,就无法进入该目录,也就无法执行该目录下的任何指令
开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给
c、linux文件类型
普通文件 [-]
目录文件 [d]
块设备文件 [b]:就是硬盘等存取数据的设备
字符设备文件 [c] :即串行端口的接口设备,例如键盘、鼠标等等
套接字文件 [s]:这类文件通常用在网络数据连接
管道文件 [p]:FIFO是first-in-first-out(先进先出)的缩写,它主要的目的是解决多个程序同时存取一个文件所造成的错误
链接文件 [l]:类似Windows下面的快捷方式
在linux中扩展名仅仅是来区分这是一个什么样的文件的,和是否可执行无关
2、目录配置
a、Linux目录配置规范(FHS文件系统层次结构标准)
FHS将目录定义成为四种类型:
可分享的:可以分享给其他系统挂载使用的目录,包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
不可分享的:自己机器上运行的设备文件或者是与程序有关的socket文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了;
不变的:有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等
FHS针对目录树架构规定以下三层目录下应该放置什么数据:
/ (root):根目录与开机/还原/系统修复等动作有关
/usr (unix software resource):与软件安装/执行有关
/var (variable):与系统运作过程有关
b、根目录的意义与内容
注意事项
根目录(/)所在分区应该越小越好,安装软件最好不要与根目录放在同一个分区,这样性能比较好,根目录所在的文件系统也较不容易发生问题
/etc /bin /sbin /dev /lib 这五个目录必须和根目录在同一个分区
根目录详解
/boot:包含linux内核文件(vmlinuz)、开机选项菜单、开机配置文件和GRUB
/lib:开机会调用的函数库和bin和sbin目录指令会调用的函数库
/media和/mnt:media挂载光盘,mnt挂载硬盘
/opt:第三方软件安装目录,也可以安装在/usr/local目录下
/root:管理员的家目录
/srv:网络服务所需的数据目录
其他:/proc和/sys–这两个目录都是虚拟文件系统,数据在内存中,本身不占用磁盘空间
/proc:包含系统核心、进程信息(process)、周边装置的状态及网络状态等等
/sys:包括目前已加载的核心模块与核心侦测到的硬件装置信息等等
/bin、/sbin、/usr/bin、/usr/sbin目录的区别
/bin目录: 主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill
/usr/bin目录:主要放置一些应用软件工具的必备执行档例如:c++、g++、gcc、chdrv、diff
/sbin目录: 主要放置一些系统管理(管理员)的必备程序例如:cfdisk、dhcpcd、dump、e2fsck、fdisk
/usr/sbin目录: 放置一些网络管理的必备程序例如:dhcpd、httpd、imap、in.*d、inetd
用户和管理员必备的二进制文件,就会放在/bin;系统管理员必备一般用户根本不会用到的二进制文件,就会放在 /sbin
不是用户必备的二进制文件,多半会放在/usr/bin;如果不是系统管理员必备的工具,多半会放在/usr/sbin
c、usr目录
重要的目录:/usr/bin /usr/sbin /usr/share(doc和man) /usr/local
d、var目录
/var/lib:程序运行所需的数据文件
/var/lock:上锁的文件(一次只能一个人或程序使用)
/var/log和/var/mail
/var/spool:放置一些队列数据,队列数据就是排队等待其他程序使用的数据
Linux文件与目录管理
1、目录与路径
a、相对路径与绝对路径各自的运用场景
绝对:绝对路径的正确度要比较好,shell脚本里面最好使用绝对路径
相对:相对路径的写法更加简单,有时候无法确定绝对路径,可以使用相对路径
b、目录的相关操作
几个特殊目录:
. 代表此层目录
… 代表上一层目录
-
代表前一个工作目录
-
代表当前用户家目录
~account 代表 account 这个使用者的家目录(account是个帐号名称)
目录常用命令
cd 和 pwd
mkdir:创建一个新的目录
-m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上一级目录)递回创建起来!
rmdir:删除一个空的目录(只能删除空的目录)
-p :连同上一级『空的』目录也一起删除
c、关於运行档路径的变量: $PATH
不同身份使用者默认的PATH不同,默认能够随意运行的命令也不同(如root与vbird);
PATH是可以修改的,所以一般使用者还是可以透过修改PATH来运行某些位於/sbin或/usr/sbin下的命令来查询;
使用绝对路径或相对路径直接指定某个命令的档名来运行,会比搜寻PATH来的正确;
本目录(.)最好不要放到PATH当中
2、文件与目录管理
a、文件与目录的查看: ls(-al)
关于命令的别名:alias[别名]=[指令名称]
b、复制、删除、新建与移动:cp, rm, mv
touch 新建文档
cp 命令
加上-a或-p的选项可以连同文件的权限等信息一起复制,普通用户可能无法复制user和group的信息
通过 -l 和 -s 选项可以创建文件连接(类似于快捷方式):文件连接的复制默认复制的是原始文件,d选项就是复制连接文件
多文件复制到一个目录
rm 命令:rm [-fir] 文件或目录:命令前加 \ 可以忽略确认信息
mv 命令:mv [-fiu] source destination
u选项是source比较新的话会更新des
如果有多个来源文件或目录,则最后一个目标档一定是目录
还有改名的功能rename
c、取得路径的文件名称与目录名称
basename /etc/sysconfig/network
dirname /etc/sysconfig/network
3、文件内容查阅
cat 由第一行开始显示文件内容
tac 从最后一行开始显示
nl 显示的时候,顺道输出行号
more 一页一页的显示文件内容
less 从后往前翻页,比more更加好用
搜索有高亮的标记,还支持pagedown和pageup的翻页
head 只看头几行
加 -n 指定要查看的行数
tail 只看尾巴几行
加 -f 可以动态监听文件的变化并输出
od 命令:默认是将文件以八进制输出,也可以指定用二进制或者十六进制等格式输出
od -t dCc /etc/issue
linux 文件的三个时间
修改时间(mtime):文件的内容被最后一次修改的时间,ls -l命令显示出来的文件时间就是这个时间,当用vim对文件进行编辑之后保存,它的mtime就会相应的改变(ctime也是会变化的)
访问时间(atime):对文件进行一次读操作,它的访问时间就会改变,像:cat、more等操作就会改变atime
状态时间(ctime):当文件的状态被改变的时候,状态时间就会随之改变,例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime的
touch -t 0709150202 bashrc 这个命令运行后 mtime 和 atime 都变为指定的时间,ctime 则是记录当前时间
stat filename 可以查看文件的三个时间
建立文件系统
分区表:
1.super block超级块 2.FSD文件系统的文字描述 3.block bitmap数据块位示图
4.inode bitmap索引节点位示图 5.inode table索引节点表 6.block table空闲块
VFS(虚拟文件系统)使用超级块和索引节点来描述和管理文件系统
注:linux是索引式文件系统
window是链表式文件系统
索引节点
文件的inode
文件访问权限:read write execute
文件所有者:owner group others
以上两个可组成9种指令
文件创建时间,修改时间,最近一次访问权限
文件类型
block索引
block:1K
1.直接索引 2.间接索引 3.三级索引
inode索引节点包括两部分inode和block
inode:存储数据属性信息(ls -l 结果),包含指向文件实体的指针等,唯独不包含文件名
作用: 为每个文件进行信息索引
block: 存放文件数据内容
inode与block
1. inode
是索引节点,在每个Linux存储设备或者存储设备的分区被格式化为ext4文件系统,一般生成两个部分:第一部分为inode,第二部分为block
inode:存放的是文件/目录属性信息,没有文件名
inode是一串数字,不同的文件对应的inode在文件系统中是唯一的;
inode相同的文件,互为硬链接文件(文件又一个入口)
存放着block的位置,文件名存放在上一级目录的block里面。
2. block
**实际存放数据的位置/**空间
每个block一般大小1k**,2k**,4k**,引导分区boot**是1k其他都是4k
磁盘读取数据是按block为单位读取的。
每读取一个block就会消耗一次磁盘I/O
文件大:一个文件可能占用多个block
文件小:一个block剩余空间会被浪费
总结:
inode和block
1)怎么来的
创建文件系统(格式化)
2)啥意思
- inode索引节点,存放的是文件的属性,block**的位置
- block实际存放数据
- 文件名存放在上一级目录的block里面。
特点
1)创建一个非空文件,要占用一个inode和至少一个block
2)如果两个文件的inode相同,这两个文件互为硬连接,条件这两个文件必须在同一个分区
3)block 4k ,如果存放小文件1k,剩余空间被浪费
4)inode 256字节
文件与目录组成
文件由inode、block组成
文件处理指令ls -la
文件访问权限
-
建立文件touch file1 vi file2
-
拷贝文件 cp file2
-
删除文件 rm fname
-
移动文件 mv
-
建立文件夹 mkdir
-
建立连接文件 ln -s
文件的用户信息
文件时间
文件的类型
-
-,普通文件。
-
d,目录文件,d是directory的简写。
-
l,软连接文件,亦称符号链接文件,s是soft或者symbolic的简写。
-
b,块文件,是设备文件的一种(还有另一种),b是block的简写。
-
c,字符文件,也是设备文件的一种(这就是第二种),c是character的文件。
Linux系统最原始的也只有这五种,所以第0位,只能是以上五者之一。
目录同样由inode、block组成区别在于block内容不同
block 文件名
#useradd user1 -m
-
建立一个新用户user1
-
建立user1对应的用户目录user1
/home/user1
-
自动生成与用户名一致的用户组
#usermod user1 -g grp1
#userdel user1
#users 显示当前登录系统所有的用户的用户列表
对于文件
文件是包含实际数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件等。对于文件来说,rwx权限的意义为:
r:read,可读取此文件的内容,即可以打开文件;
w:write,可编辑此文件的内容,如可以增加、删除、更改文件内容;
x:execute,可以执行此文件。
需要注意的是,文件的权限rwx都是针对文件内容来说的。比如w权限,是针对文件内容的增、删、改,而不是针对文件本身。即,某用户有针对该文件的w权限,也无法删除或重命名该文件。
对于目录
对于目录来说,rwx权限的意义为:
r:表示有读取目录内容列表的权限,即可以使用ls命令查看该目录的内容列表;
w:表示有更改目录的权限,即可以在此目录下新建文件或子目录、删除文件或子目录、重命名文件或子目录、挪动该目录内的文件或子目录等。
x:表示可以进入该目录,即可以使用cd命令进入该目录。
需要注意的,若某用户有针对该目录的w权限,则可以删除该目录下的文件,哪怕该用户对于此文件无任何权限(因为对文件的权限都是针对文件内容的)。
再需要注意的是x权限。r权限决定了用户是否可以ls出目录内容,而x权限决定了用户是否可以cd到该目录。比如我们在/tmp下创建目录test1,设置其权限为[drwxrw-r–]:
Vi的三种工作模式
命令模式、输入模式、末行模式。
在命令模式下输入a、A、i、I、o、O等命令之一可以进入输入模式,在输入模式下按Esc键回到命令模式;在命令模式下输入:进入末行模式,末行命令执行完后回到命令模式。
Linux文件与目录结构
引入:
硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等.IDE是并口设备,而SATA是串口.硬盘的物理几何结构是由盘、磁盘表面、柱面、扇区组成,一个张硬盘内部是由几张碟片叠加在一起,这样形成一个柱体面;每个碟片都有上下表面;磁头和磁盘表面接触从而能读取数据;
1、硬盘分区划分标准
硬盘的分区由主分区、扩展分区和逻辑分区组成;所以我们在对硬盘分区时要遵循这个标准;主分区(包括扩展分区)的最大个数是四个,主分区(包含扩展分区)的个数硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(GRUB,LILO,NTLOARDER等)和分区表记录。其中扩展分区也算一个主分区;扩展分区下可以包含更多的逻辑分区;所以主分区(包括扩展分区)范围是从1-4,逻辑分区是从5开始的;比如下面的例子:
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
/dev/hda10 7752 9729 15888253+ 83 Linux
通过这个例子,我们可以看到主分区有3个,从 hda1-hda3 ,扩展分区由 hda5-hda10 ;此硬盘没有主分区4,所以也没有显示主分区hda4 ;但逻辑分区不可能从4开始,因为那是主分区的位置,明白了吧
2、合理的规划分区
关于一个磁盘的分区,一个磁盘应该有四个主分区,其中扩展也算一个主分区;存在以下情况:
1)分区结构之一:四个主分区,没有扩展分区;
[主|分区1] [主分|区2] [主|分区3] [主|分区4]
这种情况,如果您想在一个磁盘上划分五个以上分区,这样是行不通的;
三个主分区 一个扩展分区;
[ 主 | 分区1 ] [ 主 | 分区2 ] [ 主 | 分区3 ] [扩展分区]
|
[逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8]
这种情况行得通,而且分区的自由度比较大;分区也不受约束,能分超过5个分区;
1.系统目录结构
linux下各文件夹的结构说明及用途介绍:
/bin:二进制可执行命令。
/dev:设备特殊文件。
/etc:系统管理和配置文件。
/etc/rc.d:启动的配 置文件和脚本。
/home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示。
/lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件。
/sbin:系统管理命令,这 里存放的是系统管理员使用的管理程序。
/tmp:公用的临时文件存储 点。
/root:系统管理员的主目 录。
/mnt:系统提供这个目录是 让用户临时挂载其他的文件系统。
/lost+found:这个 目录平时是空的,系统非正常关机而留下“无家可归”的文件就在这里。
/proc:虚拟的目录,是系 统内存的映射。可直接访问这个目录来获取系统信息。
/var:某些大文件的溢出 区,比方说各种服务的日志文件。
/usr:最庞大的目录,要用 到的应用程序和文件几乎都在这个目录。其中包含:
/usr/x11r6:存放x window的目录。
/usr/bin:众多的应用程序。
/usr/sbin:超级用户的一些管理程序。
/usr/doc:linux文档。
/usr/include:linux下开发和编译应用程序所需要的头文件。
/usr/lib:常用的动态链接库和软件包的配置文件。
/usr/man:帮助文档。
/usr/src:源代码,linux内核的源代码就放在/usr/src/linux 里。
/usr/local/bin:本地增加的命令。
/usr/local/lib:本地增加的库根文件系统。
通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要经常改动,而且包括严格的文件和一个小的 不经常改变的文件系统不容易损坏。除了可能的一个叫/vmlinuz标准的系统引导映像之外,根目录一般不含任何文 件。所有其他文件在根文件系统的子目录中。
\1. /bin目录
/bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些命 令都是二进制文件的可执行程序(bin是binary的简称),多是系统中重要的系统文件。
\2. /sbin目录
/sbin目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使 用。
\3. /etc目录
/etc目录存放着各种系统配置文件,其中包括了用户信息文件/etc/passwd, 系统初始化文件/etc/rc等。linux正是靠这些文件才得以正常地运行。
\4. /root目录
/root目录是超级用户的目录。
\5. /lib目录
/lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。 这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。
\6. /lib/modules目录
/lib/modules目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重 新引导系统所需的模块(例如网络和文件系统驱动)。
\7. /dev目录
/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用户可 以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。
\8. /tmp目录
/tmp目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用/var/tmp来 代替/tmp,因为前者可能拥有一个更大的磁盘空间。
\9. /boot目录
/boot目录存放引导加载器(bootstrap loader)使用的文件,如lilo,核心映像也经常放在这里,而不是放在根目录中。但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的 文件系统会更好一些。还有一点要注意的是,要确保核心映像必须在ide硬盘的前1024柱面内。
\10. /mnt目录
/mnt目录是系统管理员临时安装(mount)文件系统的安装点。程序并不自动支持安装到/mnt 。/mnt下面可以分为许多子目录,例如/mnt/dosa可能是使用 msdos文件系统的软驱,而/mnt/exta可能是使用ext2文件系统的软驱,/mnt/cdrom光 驱等等。
\11. /proc, /usr, /var, /home目录
其他文件系统的安装点。
目录树可以分为小的部分,每个部分可以在自己的磁盘或分区上。主要部分是根、/usr 、/var 和 /home 文件系统。每个部分有不同的目的。
每台机器都有根文件系统,它包含系统引导和使其他文件系统得以mount所必要的文件,根文件系统应该有单用户状态所必须的足够的内容。还应该包括修复损坏 系统、恢复备份等的工具。
/usr 文件系统包含所有命令、库、man页和其他一般操作中所需的不改变的文件。 /usr 不应该有 一般使用中要修改的文件。这样允许此文件系统中的文件通过网络共享,这样可以更有效,因为这样节省了磁盘空间(/usr 很容易是数百兆),且易于管理 (当升级应用时,只有主/usr 需要改变,而无须改变每台机器) 即使此文件系统在本地盘上,也可以只读mount,以减少系统崩溃时文件系统的损 坏。
/var 文件系统包含会改变的文件,比如spool目录(mail、news、打印机等用的), log文件、 formatted manual pages和暂存文件。传统上/var 的所有东西曾在 /usr 下的某个地方,但这样/usr 就不可能只读安装 了。
/home 文件系统包含用户家目录,即系统上的所有实际数据。一个大的/home 可能要分为若干文件系统,需要在 /home 下加一级名字,如/home/students 、/home/staff 等。
下面详细介绍:
/etc文件系统
/etc目录包含各种系统配置文件,下面说明其中的一些。其他的你应该知道它们属于哪个程序, 并阅读该程序的man页。许多网络配置文件也在/etc中。
\1. /etc/rc或/etc/rc.d或/etc/rc?.d:启动、或改变运行级时运 行的脚本或脚本的目录。
\2. /etc/passwd:用户数据库,其中的域给出了用户名、真实姓名、用户起始目 录、加密口令和用户的其他信息。
\3. /etc/fdprm:软盘参数表,用以说明不同的软盘格式。可用setfdprm进 行设置。更多的信息见setfdprm的帮助页。
\4. /etc/fstab:指定启动时需要自动安装的文件系统列表。也包括用swapon -a启用的swap区的信息。
\5. /etc/group:类似/etc/passwd ,但说明的不是用户信息而是组的信息。包括组的各种数据。
\6. /etc/inittab:init 的配置文件。
\7. /etc/issue:包括用户在登录提示符前的输出信息。通常包括系统的一段短说明 或欢迎信息。具体内容由系统管理员确定。
\8. /etc/magic:“file”的配置文件。包含不同文件格式的说 明,“file”基于它猜测文件类型。
\9. /etc/motd:motd是message of the day的缩写,用户成功登录后自动输出。内容由系统管理员确定。
常用于通告信息,如计划关机时间的警告等。
\10. /etc/mtab:当前安装的文件系统列表。由脚本(scritp)初始化,并由 mount命令自动更新。当需要一个当前安装的文件系统的列表时使用(例如df命令)。
\11. /etc/shadow:在安装了影子(shadow)口令软件的系统上的影子口令 文件。影子口令文件将/etc/passwd文件中的加密口令移动到/etc/shadow中,而后者只对超级用户(root)可读。这使破译口令更困 难,以此增加系统的安全性。
\12. /etc/login.defs:login命令的配置文件。
\13. /etc/printcap:类似/etc/termcap ,但针对打印机。语法不同。
\14. /etc/profile 、/etc/csh.login、/etc/csh.cshrc:登 录或启动时bourne或cshells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。
\15. /etc/securetty:确认安全终端,即哪个终端允许超级用户(root) 登录。一般只列出虚拟控制台,这样就不可能(至少很困难)通过调制解调器(modem)或网络闯入系统并得到超级用户特权。
\16. /etc/shells:列出可以使用的shell。chsh命令允许用户在本文件 指定范围内改变登录的shell。提供一
台机器ftp服务的服务进程ftpd检查用户shell是否列在/etc/shells文件 中,如果不是,将不允许该用户登录。
\17. /etc/termcap:终端性能数据库。说明不同的终端用什么“转义序列”控 制。写程序时不直接输出转义
序列(这样只能工作于特定品牌的终端),而是从/etc/termcap中查找要做的工作的 正确序列。这样,多数的程序可以在多数终端上运行。
/dev文件系统
/dev目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明。设备文件在安装时由系 统产生,以后可以用/dev/makedev描述。/dev/makedev.local 是系统管理员为本地设备文件(或连接)写的描述文稿(即如一些非标准设备驱动不是标准makedev 的一部分)。下面简要介绍/dev下 一些常用文件。
\1. /dev/console:系统控制台,也就是直接和系统连接的监视器。
\2. /dev/hd:ide硬盘驱动程序接口。如:/dev/hda指的是第一个硬 盘,had1则是指/dev/hda的第一个分区。如系统中有其他的硬盘,则依次为/dev /hdb、/dev/hdc、. . . . . .;如有多个分区则依次为hda1、hda2 . . . . . .
\3. /dev/sd:scsi磁盘驱动程序接口。如系统有scsi硬盘,就不会访问/dev/had, 而会访问/dev/sda。
\4. /dev/fd:软驱设备驱动程序。如:/dev/fd0指 系统的第一个软盘,也就是通常所说的a盘,/dev/fd1指第二个软盘,. . . . . .而/dev/fd1 h1440则表示访问驱动器1中的4.5高密盘。
\5. /dev/st:scsi磁带驱动器驱动程序。
\6. /dev/tty:提供虚拟控制台支持。如:/dev/tty1指 的是系统的第一个虚拟控制台,/dev/tty2则是系统
的第二个虚拟控制台。
\7. /dev/pty:提供远程登陆伪终端支持。在进行telnet登录时就要用到/dev/pty设 备。
\8. /dev/ttys:计算机串行接口,对于dos来说就是“com1”口。
\9. /dev/cua:计算机串行接口,与调制解调器一起使用的设备。
\10. /dev/null:“黑洞”,所有写入该设备的信息都将消失。例如:当想要将屏幕 上的输出信息隐藏起来
时,只要将输出信息输入到/dev/null中即可。
/usr文件系统
/usr是个很重要的目录,通常这一文件系统很大,因为所有程序安装在这里。/usr里 的所有文件一般来自linux发行版;本地安装的程序和其他东西在/usr/local下,因为这样可以在升级新版系 统或新发行版时无须重新安装全部程序。/usr目录下的许多内容是可选的,但这些功能会使用户使用系统更加有效。/usr可容纳许多大型的软件包和它们的 配置文件。下面列出一些重要的目录(一些不太重要的目录被省略了)。
\1. /usr/x11r6:包含x window系统的所有可执行程序、配置文件和支持文件。为简化x的开发和安装,x的文件没有集成到系统中。x window系统是一个功能强大的图形环境,提供了大量的图形工具程序。用户如果对microsoft windows比较熟悉的话,就不会对x window系统感到束手无策了。
\2. /usr/x386:类似/usr/x11r6 ,但是是专门给x 11 release 5的。
\3. /usr/bin:集中了几乎所有用户命令,是系统的软件库。另有些命令在/bin或/usr/local/bin中。
\4. /usr/sbin:包括了根文件系统不必要的系统管理命令,例如多数服务程序。
\5. /usr/man、/usr/info、/usr/doc:这些目录包含所有手册页、 gnu信息文档和各种其他文档文件。每个联机手册的“节”都有两个子目录。例如:/usr/man/man1中包含联机手册第一节的源码(没有格式化的原 始文件),/usr/man/cat1包含第一节已格式化的内容。联机手册分为以下九节:内部命令、系统调用、库函数、设备、文件格式、游戏、宏软件包、 系统管理和核心程序。
\6. /usr/include:包含了c语言的头文件,这些文件多以.h结尾,用来描述c 语言程序中用到的数据结构、
子过程和常量。为了保持一致性,这实际上应该放在/usr/lib下,但习惯上一直沿用了这 个名字。
\7. /usr/lib:包含了程序或子系统的不变的数据文件,包括一些site - wide配置文件。名字lib来源于库(library); 编程的原始库也存在/usr/lib 里。当编译程序时,程序便会和其中的库进行连接。也有许多程序把配置文件存入其中。
\8. /usr/local:本地安装的软件和其他文件放在这里。这与/usr很相似。用户 可能会在这发现一些比较大
的软件包,如tex、emacs等。
/var文件系统
/var包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化或扩充 的。原来/var目录中有些内容是在/usr中的,但为了保持/usr目录的相对稳定,就把那些需要经常改变的目录放到/var中了。每个系统是特定的, 即不通过网络与其他计算机共享。下面列出一些重要的目录(一些不太重要的目录省略了)。
\1. /var/catman:包括了格式化过的帮助(man)页。帮助页的源文件一般存在 /usr/man/catman中;有些man页可能有预格式化的版本,存在/usr/man/cat中。而其他的man页在第一次看时都需要格式化,格 式化完的版本存在/var/man中,这样其他人再看相同的页时就无须等待格式化了。(/var/catman经常被 清除,就像清除临时目录一样。)
\2. /var/lib:存放系统正常运行时要改变的文件。
\3. /var/local:存放/usr/local中 安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,
即使本地安装的程序也会使用其他/var目录,例如/var/lock 。
\4. /var/lock:锁定文件。许多程序遵循在/var/lock中 产生一个锁定文件的约定,以用来支持他们正在
使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文件。
\5. /var/log:各种程序的日志(log)文件,尤其是login (/var/log/wtmplog纪 录所有到系统的登录和注销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不确定地增长,应该定期清除。
\6. /var/run:保存在下一次系统引导前有效的关于系统的信息文件。例如,/var/run/utmp包 含当前登录的用户的信息。
\7. /var/spool:放置“假脱机(spool)”程序的目录,如mail、 news、打印队列和其他队列工作的目录。每
个不同的spool在/var/spool下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。
\8. /var/tmp:比/tmp允许更大的或需要存在较长时间的临时文件。注意系统管理 员可能不允许/var/tmp有很旧的文件。
/proc文件系统
/proc文件系统是一个伪的文件系统,就是说它是一个实际上不存在的目录,因而这是一个非 常特殊的目录。它并不存在于某个磁盘上,而是由核心在内存中产生。这个目录用于提供关于系统的信息。下面说明一些最重要的文件和目录(/proc文件系统 在proc man页中有更详细的说明)。
\1. /proc/x:关于进程x的信息目录,这x是这一进程的标识号。每个进程在 /proc下有一个名为自己进程号的目录。
\2. /proc/cpuinfo:存放处理器(cpu)的信息,如cpu的类型、制造商、 型号和性能等。
\3. /proc/devices:当前运行的核心配置的设备驱动的列表。
\4. /proc/dma:显示当前使用的dma通道。
\5. /proc/filesystems:核心配置的文件系统信息。
\6. /proc/interrupts:显示被占用的中断信息和占用者的信息,以及被占用 的数量。
\7. /proc/ioports:当前使用的i/o端口。
\8. /proc/kcore:系统物理内存映像。与物理内存大小完全一样,然而实际上没有 占用这么多内存;它仅
仅是在程序访问它时才被创建。(注意:除非你把它拷贝到什么地方,否则/proc下没有任何东西占用任何磁盘空间。)
\9. /proc/kmsg:核心输出的消息。也会被送到syslog。
\10. /proc/ksyms:核心符号表。
\11. /proc/loadavg:系统“平均负载”;3个没有意义的指示器指出系统当前 的工作量。
\12. /proc/meminfo:各种存储器使用信息,包括物理内存和交换分区 (swap)。
\13. /proc/modules:存放当前加载了哪些核心模块信息。
\14. /proc/net:网络协议状态信息。
\15. /proc/self:存放到查看/proc的 程序的进程目录的符号连接。当2个进程查看/proc时,这将会是不同
的连接。这主要便于程序得到它自己的进程目录。
\16. /proc/stat:系统的不同状态,例如,系统启动后页面发生错误的次数。
\17. /proc/uptime:系统启动的时间长度。
\18. /proc/version:核心版本。
2.linux文件存储结构
2.1 文件概念与文件类型(p39)
磁盘上的文件系统是层次结构的,由若干目录和其子目录组成,最上层的称为跟(root)目录,用"/"表示.
文件类型:普通文件,目录文件,设备文件及符号链接文件
所在的block,读出数据。 使用ls -i命令,可以看到文件名对应的inode号码
2.2硬连接与软连接(考 )
1.Linux 链接概念
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。
硬连接
硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
2.通过实验加深理解
[oracle@Linux]$ touch f1 #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1
从上面的结果中可以看出,硬连接文件 f2 与原文件 f1 的 inode 节点相同,均为 9797648,然而符号连接文件的 inode 节点不同。
[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file
[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory
通过上面的测试可以看出:当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号连接 f1 文件无效
3.总结
依此您可以做一些相关的测试,可以得到以下全部结论:
- 1).删除符号连接f3,对f1,f2无影响;
- 2).删除硬连接f2,对f1,f3也无影响;
- 3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
- 4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。
2.3#ls -al命令解析信息
----a参数与l参数结合使用,以长列表形式显示所有目录及文件详细信息。包括文件类型、文件权限、硬连接数、文件拥有者、文件所属组、文件大小、更动时间、文件名等。其中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qceaDZGu-1572060962375)(D:\typoraImage\1571768243920.png)]
第1列:第一列便是这个文件的属性:
#第一个属性表示这个文件时“目录、文件或链接文件等”:
【d】,则是目录
【-】,则是一般文件
【l】,则表示为链接文件(link file)
【b】,则表示为设备文件中可供存储的接口设备,块访问
【c】,则表示为设备文件中的串行端口设备,例如键盘、鼠标。字符访问
【p】,则表示通道
【l】,则表示链接文件
【s】,则表示socket端口
#接下来的属性中,3个为一组,且均为“rwx”3个参数组合。其中r表示可读read,w表示可写write,x表示可执行excute。
第一组为“拥有者的权限”,第二组为“同用户组的权限”,第三组为“其他非本用户组的权限”。
第2列:文件的链接数.(表示连接占用的节点(i-node))
第3、4列:拥有文件的用户及组
第5列:文件的大小。
第6列:文件最后的修改时间。(文件的创建日期或者是最近的修改日期)
第7列:文件名.(如果文件名前面有.说明是隐藏文件。如果只输入ls 前面加.的文件不会显示出来。ls -al则会显示出全部文件。)
4.inode
1.inode是什么
(1.任何一个文件最多有1个inode
2.文件容量由block大小决定)
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
2.inode的内容
(1.文件访问权限:read,write,excute
2.文件的用户信息:owner,group,others
3.文件时间
4.文件类型
目录与文件的区别:block文件内容)
inode包含文件的元信息,具体来说有以下内容:
- 文件的字节数
- 文件拥有者的User ID
- 文件的Group ID
- 文件的读、写、执行权限
- 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
- 链接数,即有多少文件名指向这个inode
- 文件数据block的位置
可以用stat命令,查看某个文件的inode信息:
stat example.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。
3.inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。
df -i
查看每个inode节点的大小,可以用如下命令:
sudo dumpe2fs -h /dev/hda | grep “Inode size”
由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
4.inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。
使用ls -i命令,可以看到文件名对应的inode号码:
ls -i example.txt
5.目录文件
Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。
目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
ls命令只列出目录文件中的所有文件名:
ls /etc
ls -i命令列出整个目录文件,即文件名和inode号码:
ls -i /etc
如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。
ls -l /etc
6. 硬链接
一般情况下,文件名和inode号码是”一一对应”关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为”硬链接”(hard link)。
ln命令可以创建硬链接:
ln 源文件 目标文件
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做”链接数”,记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的”链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的”链接数”。创建目录时,默认会生成两个目录项:”.”和”…”。前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接”;后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的”硬链接”。所以,任何一个目录的”硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的”.硬链接“。
7. 软链接
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的”软链接”(soft link)或者”符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:”No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode”链接数”不会因此发生变化。
ln -s命令可以创建软链接。
ln -s 源文文件或目录 目标文件或目录
8. inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
5.文件系统的物理结构(p158)
1.超级块(superblock)包含文件系统的大小和形式的基本信息.
2.块组描述结构.每一个块组都有一个描述它的数据结构,即块组描述结构(block group descriptor)包括数据块位示图,索引节点位示图,索引节点表,空闲块数、空闲索引节点数和已用目录数。
Linux的常用命令
cat
功能:有从磁盘创建文件的功能(但不具备编辑功能),但主要功能还是2个或者以上文件的合并。
常配合使用参数:
-n 或–number 由1 开始对所有输出的行数编号。
-b 或–number-nonblank 和-n 相似,只不过对于空白行不编号。
使用方法:
Cat –n diannaob1>diannaob2,把diannaob1里的内容加上行号以后并入diannaob2。
Cat –b diannaob1 diannaob2>>diannaob3,对diannaob1和diannaob2里的内容加上行号(空白行不加)并入diannaob3。cat
功能:有从磁盘创建文件的功能(但不具备编辑功能),但主要功能还是2个或者以上文件的合并。
常配合使用参数:
-n 或–number 由1 开始对所有输出的行数编号。
-b 或–number-nonblank 和-n 相似,只不过对于空白行不编号。
使用方法:
Cat –n diannaob1>diannaob2,把diannaob1里的内容加上行号以后并入diannaob2。
Cat –b diannaob1 diannaob2>>diannaob3,对diannaob1和diannaob2里的内容加上行号(空白行不加)并入diannaob3。
cp
cp命令主要用于复制文件或目录。
- -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
- -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
- -f:覆盖已经存在的目标文件而不给出提示。
- -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
- -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
- -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
- -l:不复制文件,只是生成链接文件。
ps
命令用于显示当前进程 (process) 的状态
df
命令完成_显示文件系统空间使用情况_____ 功能
-h 易读方式显示基本信息
du
命令完成 显示目录或文件占用磁盘空间容量____ 功能
ls
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c 输出文件的 i 节点的修改时间,并以此排序。
-d 将目录象文件一样显示,而不是显示其下的文件。
-e 输出时间的全部信息,而不是输出简略信息。
-f -U 对输出的文件不排序。
-g 无用。
-i 输出文件的 i 节点的索引信息。
-k 以 k 字节的形式表示文件的大小。
-l 列出文件的详细信息。
-m 横向输出文件名,并以“,”作分格符。
-n 用数字的 UID,GID 代替名称。
-o 显示文件的除组信息外的详细信息。
-p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通
文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套
接字(sockets)。
-q 用?代替不可输出的字符。
-r 对目录反向排序。
-s 在每个文件名后输出该文件的大小。
-t 以时间排序。
-u 以文件上次被访问的时间排序。
-x 按列输出,横向排序。
-A 显示除 “.”和“…”外的所有文件。
-B 不输出以 “~”结尾的备份文件。
-C 按列输出,纵向排序。
-G 输出文件的组的信息。
-L 列出链接文件名而不是链接到的文件。
-N 不限制文件长度。
-Q 把输出的文件名用双引号括起来。
-R 列出所有子目录下的文件。
-S 以文件大小排序。
-X 以文件的扩展名(最后一个 . 后的字符)排序。
-1 一行只输出一个文件。
--color=no 不显示彩色文件名
--help 在标准输出上显示帮助信息。
--version 在标准输出上输出版本信息并退出。
dumpe2fs
显示device中文件系统的超级块和块组信息。
dumpe2fs常用命令选项
选项 | 描述 |
---|---|
-b | 打印文件系统中的坏块 |
-o | 不常用,检查严重损坏文件系统时指定 |
-f | 强制显示所有信息,即便dumpe2fs对有些文件系统功能标识不能识别。 |
- i | 显示image文件系统信息。device指定image文件的路径 |
-h | 只显示超级块信息 |
-x | 将已分组的块的数量用十六进制显示 |
-v | 显示dumpe2fs的版本号并推出 |
useradd
useradd [option] username
[option]:
-d<登入目录> 指定用户登入时的目录。
-g<群组> 初始群组。
-G<群组> 非初始群组。
-m 自动创建用户的家目录。
-M 不要创建用户的家目录。
-N 不要创建以用户名称为名的群组。
-s 指定用户登入后所使用的shell。
文件和目录
cd:是Change Directory的缩写,用来切换工作目录,语法:cd [相对或绝对路径或特殊符号]
-
cd :进入该用户的主目录 ~(root用户为/root,其他用户为/home/用户名)
-
cd … :返回上一级目录(注意要空格)
-
cd - :返回上次所在目录
-
cd / :返回根目录 (绝对路径)
-
cd ./目录1/目录2 :进入当前目录下的子目录(相对路径)
-
pwd :显示工作路径(Print Working Directory 的缩写)
ls:是List的缩写,用于列出目录下的文件,语法:
ls [选项][目录或文件名]
-
ls -a :列出文件下所有的文件,包括以“.“开头的隐藏文件
-
*ls -lh .log :列出文件的详细信息(.log结尾,*为通配符代表任意多个字符)
-
file 文件或目录 :显示文件的类型(目录、text、zip、shell脚本等)
-
mkdir dir1 :创建目录(dir1)(mkdir为make directory的缩写)
-
mkdir -p ./dir1/dir2 :递归创建目录(-p:父目录不存在时,同时建立)
-
touch a.txt :创建文件a.txt
rm:可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉; 语法:rm (选项)(参数)(注:如果参数中含有目录,则必须加上-r选项);
-
rm 文件 :删除文件
-
rm -r 目录或文件 :删除目录(及目录下所有文件)(非空也可以)
-
rm -rf 目录或文件 :强制删除,如:rm -rf * 为删除当前目录下所有文件
-
find -inum 1842601 -exec rm -rf {} ; :删除乱码文件或目录(会提示找不到此文件或文件夹但其实已经删除了)(上传中文文件会乱码,rm命令删除不了)(先使用ls -i命令找到inode,即文件或目录前面的数字字符串,如1842601;)
mv:是move的缩写,可以用来剪切移动文件、目录或者将文件改名;
语法:mv 源文件 目标文件(改名)或目录(移动); -
mv a b :移动或者重命名一个文件或者目录(存在即移动目录或覆盖文件,不存在即改名)
-
mv /opt/git/g /opt/a :移动g到opt目录下并改名为a(a目录不存在,若存在则为移动g到a目录下)
-
mv -t ./test a.txt b.txt :移动多个文件到某目录下
cp:复制文件或目录;cp命令可以将单个或多个文件复制到一个已经存在的目录下;
常用:cp -ai 文件或目录 目标目录; -
cp -ai /opt/abc /opt/git/ :复制abc目录(或文件)到git目录下(选项a表示文件的属性也复制、目录下所有文件都复制;i表示覆盖前询问)
ln:link的缩写,用于建立硬(软)链接,常用于软件安装时建软链接(类似快捷方式)到PATH;
语法:ln [-s] 源文件 目标文件 -
ln -s /opt/a.txt /opt/git/ :对文件创建软链接(快捷方式不改名还是a.txt)
-
ln -s /opt/a.txt /opt/git/b :(快捷方式改名为b)(下面的一样可以改名)
-
ln -s /opt/mulu /opt/git/ :对目录创建软链接
-
ln /opt/a.txt /opt/git/ :对文件创建硬链接
文件权限
-
chmod [-R] 777文件或目录 :设置权限(chmod a+rwx a=chmod ugo +rwx a=chmod 777 a)
注: r(read)对应4,w(write)对应2,x(execute)执行对应1;
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改) -
chmod [{ugoa}{+-=}{rwx}][文件或目录]
:如chmod u-w,g+x,o=r test.txt为user(拥有者)去掉写权限,group(所属组)加上执行权限,other(其他人)权限等于只读; -
chown [-R] admin:root /opt/ :变更文件及目录的拥有者和所属组(-R递归处理所有文件和文件夹,admin为拥有者,root为所属者)
文件查找
- locate a.txt :在系统全局范围内查找文件名包含a.txt字样的文件(比find快);
locate:原理是updatedb会把文件系统中的信息存放到数据库databases中(但一般一天才执行一次,所以locate找不到新创建的文件,需要先手动执行updatedb,再执行locate),locate从数据库中读数据;
find:在目录结构中搜索文件,并执行指定的操作
语法:find pathname -options [-print -exec …]
pathname :为 find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录(find查找范围为目标目录及其子目录所有文件及目录);
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和;之间的空格;
-print: find命令将匹配的文件输出到标准输出;
- find /home -mtime -2 :在/home下查最近2*24小时内改动过的文件
- find . -size +100M :在当前目录及子目录下查找大于100M的文件
- find . -type f :f表示文件类型为普通文件(b/d/c/p/l/f 分别为块设备、目录、字符设备、管道、符号链接、普通文件)
- find . -mtime +2 -exec rm {} ; :查出更改时间在2*24小时以前的文件并删除它**
find . -name '\*.log' -exec grep -i hello {} \; -print
:在当前目录及子目录下查出文件名后缀为.log的文件并且该文件内容包含了hello字样并打印,-exec 命令 {} \表示对查出文件操作,-i表示不区分大小写;find . -name '\*.log'|grep hello
:在当前目录及子目录下查出文件名后缀为.log的文件并且文件名包含了hello字样(grep用来处理字符串);- grep -i ‘HELLO’ . -r -n :在当前目录及子目录下查找文件内容中包含hello的文件并显示文件路径(-i表示忽略大小写)
- which java :在环境变量$PATH设置的目录里查找符合条件的文件,并显示路径(查询运行文件所在路径)
- whereis java :查看安装的软件的所有的文件路径(whereis 只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令)
查看文件的内容
- cat [-n] 文件名 :显示文件内容,连行号一起显示
- less 文件名 :一页一页的显示文件内容(搜索翻页同man命令)
- head [-n] 文件名 :显示文件头n行内容,n指定显示多少行
- tail [-nf] 文件名:显示文件尾几行内容,n指定显示多少行,f用于实时追踪文件的所有更新,常用于查阅正在改变的日志文件(如tail -f -n 3 a.log 表示开始显示最后3行,并在文件更新时实时追加显示,没有-n默认10行)
- sed -n ‘2,$p’ ab :显示第二行到最后一行;
- sed -n ‘/搜索的关键词/p’ a.txt :显示包括关键词所在行
- cat filename |grep abc -A10 :查看filename中含有abc所在行后10行(A10)、前10行(B10)内容
- less a.txt|grep git :显示关键词所在行,管道符”|”它只能处理由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后传递给下一个命令,作为标准的输入;
- cat /etc/passwd |awk -F ‘:’ ‘{print $1}’ :显示第一列
文本处理
- ls -l>file :输出重定向>(改变原来系统命令的默认执行方式):ls -l命令结果输出到file文件中,若存在,则覆盖
- cat file1 >>file :输出重定向之cat命令结果输出追加到file文件(>表示覆盖原文件内容,>>表示追加内容)
- ls fileno 2>file : 2>表示重定向标准错误输出(文件不存在,报错信息保存至file文件);
- **cowsay :重定向标准输入’命令<文件’表示将文件做为命令的输入(为从文件读数据作为输入)
- **sed -i '4, d ′ a . t x t ∗ ∗ : 删 除 第 四 行 到 最 后 一 行 ( d' a.txt** :删除第四行到最后一行( d′a.txt∗∗:删除第四行到最后一行(表示最后一行)(sed可以增删改查文件内容)
- sed -i ‘$a 增加的字符串’ a.txt :在最后一行的下一行增加字符串
- sed -i ‘s/old/new/g’ a.txt :替换字符串;格式为sed ‘s/要替换的字符串/新的字符串/g’ 修改的文件
- vim 文件:编辑查看文件(同vi)
用户与权限
- useradd 用户名 :创建用户
- userdel -r 用户名 :删除用户:(-r表示把用户的主目录一起删除)
- usermod -g 组名 用户名 :修改用户的组
- usermod -aG 组名 用户名 :将用户添加到组
- groups test :查看test用户所在的组
- cat /etc/group |grep test :查看test用户详情:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
- passwd [ludf] 用户名 :用户改自己密码,不需要输入用户名,选项-d:指定空口令,-l:禁用某用户,-u解禁某用户,-f:强迫用户下次登录时修改口令
- groupadd 组名 :创建用户组
- groupdel 用户组 :删除组
- groupmod -n 新组名 旧组名 :修改用户组名字
- su - 用户名:完整的切换到一个用户环境(相当于登录)(建议用这个)(退出用户:exit)
- su 用户名 :切换到用户的身份(环境变量等没变,导致很多命令要加上绝对路径才能执行)
- sudo 命令 :以root的身份执行命令(输入用户自己的密码,而su为输入要切换用户的密码,普通用户需设置/etc/sudoers才可用sudo)
磁盘管理
- df -h :显示磁盘的空间使用情况 及挂载点
- df -h /var/log :(显示log所在分区(挂载点)、目录所在磁盘及可用的磁盘容量)
- du -sm /var/log/* | sort -rn : 根据占用磁盘空间大小排序(MB)某目录下文件和目录大小
- fdisk -l :查所有分区及总容量,加/dev/sda为查硬盘a的分区)
- fdisk /dev/sdb :对硬盘sdb进行分区
- mount /dev/sda1 /mnt :硬盘sda1挂载到/mnt目录(mount 装置文件名 挂载点)
- mount -t cifs -o username=luolanguo,password=win用户账号密码,vers=3.0 //10.2.1.178/G /mnt/usb :远程linux 共享挂载windows的U盘,G为U盘共享名,需设置U盘共享
- mount -o loop /opt/soft/CentOS-7-x86_64-DVD-1708.iso /media/CentOS :挂载iso文件
- umount /dev/sda1 :取消挂载(umount 装置文件名或挂载点)
压缩、解压和打包备份
单纯tar仅为打包(多个文件包成一个大文件),加上参数-j(bzip2格式.bz2)、-z(gzip格式.gz)可以备份、压缩(-c)、解压(-x),备份一般比压缩多加参数-p(保留原本文件的权限与属性),-C可以指定解压到特定目录;bzip2、gzip只能对单一文件压缩;
- file 文件名 :查文件类型(可看是用哪一种方式压缩的)
- tar -zxvf a.tar.gz -C ./test :解压tar.gz到当前目录下的test目录
- tar -zcvf /opt/c.tar.gz ./a/ :压缩tar.gz(把当前目录下的a目录及目录下所有文件压缩为 /opt/目录下的c.tar.gz,这样tar -zxvf c.tar.gz解压出来带有目录a)
- tar -jxvf a.tar.bz2 :解压tar.bz2(到当前目录)
- tar -jcvf c.tar.bz2 ./a/ :压缩tar.bz2(把当前目录下的a目录及目录下所有文件压缩到当前目录下为c.tar.gz2)
- unzip a.zip :解压zip(到当前目录)
- unzip -o mdmtest.war -d /opt/mdm :推荐使用unzip解压war包(-o覆盖原有文件,-d指定文件解压后存储的目录)
- zip -r c.zip ./a/ :压缩zip(把当前目录下的a目录及目录下所有文件压缩到当前目录下为c.zip
- bzip2 -k file1 : 压缩一个 ‘file1’ 的文件(-k表示保留源文件)(bzip2格式,比gzip好)
- bzip2 -d -k file1.bz2 : 解压一个叫做 'file1.bz2’的文件
- gzip file1 : 压缩一个叫做 'file1’的文件(gzip格式)(不能保留源文件)
- gzip -9 file1 : 最大程度压缩
- gzip -d file1.gz : 解压缩一个叫做 'file1’的文件
复习题
- 主分区+扩展分区最多4个,扩展分区最多1个,逻辑分区最多12个。扩展分区相当于逻辑分区的容器;Sdb3:第2块SCSI硬盘上第3个主/扩展分区;sdb5:第2块SCSI硬盘上第1个逻辑分区。
- 文件权限:第1位若为“d”表示目录,“b”表示设备(块文件);“-”表示普通文件;24位表示文件所有者的权限;57位表示群组内其他成员的权限;8~10位表示组外其他所有人的权限;
- 建立软链接:ln –s file linkFile
- 创建目录b,权限为777:mkdir –m 777 b
- 不提示,直接删除全部:rm -rf b
- 将a下所有目录和文件复制到b:cp –r a b
- 把/etc目录下所有后缀为conf的文件复制到a目录: cp /etc/*.conf a
- 分页显示文本文件:More:一次显示的行数:-num 多个空行替换为一行:-s 从第num行开始显示:+num
- 回卷显示文本文件:less
一
一、选择题 (每小题2分,共50分)
1.在创建Linux分区时,一定要创建( D )两个分区
A. FAT/NTFS B. FAT/SWAP C. NTFS/SWAP D.SWAP/根分区
2.在Red Hat Linux 9中,系统默认的(A)用户对整个系统拥有完全的控制权。
A. root B. guest C. administrator D.supervistor.
\3. 当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么( B )
A. NID B. PID C. UID D. CID
\4. 下面哪个命令是用来定义shell的全局变量( D )
A. exportfs B. alias C. exports D. export
\5. 哪个目录存放用户密码信息( B )
A. /boot B. /etc C. /var D. /dev
\6. 默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。
A. /usr B. /home C. /root D. /etc
\7. . 当使用mount进行设备或者文件系统挂载的时候,需要用到的设备名称位于( D )目录。
A. /home B. /bin C. /etc D. /dev
\8. 如果要列出一个目录下的所有文件需要使用命令行( C )。
A. ls –l B. ls C. ls –a(所有) D. ls –d
\9. 哪个命令可以将普通用户转换成超级用户(D )
A. super B. passwd C. tar D. su
\10. 除非特别指定,cp假定要拷贝的文件在下面哪个目录下( D )
A. 用户目录 B. home目录 C. root目录 D. 当前目录
\11. 在vi编辑器里,命令"dd"用来删除当前的( A )
A. 行 B. 变量 C. 字 D. 字符
\12. 当运行在多用户模式下时,用Ctrl+ALT+F*可以切换多少虚拟用户终端( B )
A. 3 B. 6 C. 1 D. 12
\13. Linux启动的第一个进程init启动的第一个脚本程序是( B )。
A./etc/rc.d/init.d B./etc/rc.d/rc.sysinit C./etc/rc.d/rc5.d D./etc/rc.d/rc3.d
\14. 按下(A )键能终止当前运行的命令
A. Ctrl-C B. Ctrl-F C. Ctrl-B D. Ctrl-D
\15. 下面哪个命令用来启动X Window ( C )
A. runx B. Startx C. startX D. xwin
\16. 用来分离目录名和文件名的字符是( B )
A. dash (-) B. slash (/) C. period (.) D. asterisk(*)
\17. 用 “rm -i”,系统会提示什么来让你确认( B )
A. 命令行的每个选项 B. 是否真的删除 C. 是否有写的权限 D. 文件的位置
\18. 以下哪个命令可以终止一个用户的所有进程( D )
A. skillall B. skill C. kill D. killall
19.在Red Hat Linux 9中,一般用( D )命令来查看网络接口的状态
A. ping B. ipconfig C. winipcfg D ifconfig
\20. vi中哪条命令是不保存强制退出( C )(第五章)
A. :wq B. :wq! C. :q! D. :quit
21.局域网的网络设备通常有(ABCDE )
A. 交换机 B. 路由器 C. 网桥 D. 双绞线 E. HUB
22.在下列分区中,Linux默认的分区是( B )
A. FAT32 B. EXT3 C FAT .D NTFS
23.若要将鼠标从VM中释放出来,可按 ( A )键来实现
A. Ctrl + Alt B. Ctrl +Alt +Del C. Ctrl +Alt +Enter D Ctrl +Enter
24.如果用户想对某一命令详细的了解,可用(C)
A. ls B. help (内部) C. man(列举的信息多) D dir
\25. Samba服务器的配置文件是 (D )。
A httpd.conf B inetd.conf C rc.samba D smb.conf
二、填空题 (每空1分,共10分)
\26. 在Linux系统中,以_文件的_方式访问设备 。
\27. Linux内核引导时,从文件 _/etc/fstad___中读取要加载的文件系统。
\28. Linux文件系统中每个文件用**_i节点**____来标识。
\29. 某文件的权限为:d-rw-_r–_r–,用数值形式表示该权限644,该文件属性是 目录。
\30. 静态路由设定后,若网络拓扑结构发生变化,需由**系统管理员_**修改路由的设置。
\31. 网络管理的重要任务是:控制_和监控______。
\32. 安装Linux系统对硬盘分区时,必须有两种分区类型:文件系统分区 和 **__**交换分区。
\33. 编写的Shell程序运行前必须赋予该脚本文件 **执行 **权限。
三、操作题(每小题5分,共40分)
40.简述在虚拟机中安装Red Hat Linux 9.0 的过程
答;1。下载操作系统的镜像ISO文件
2.下载虚拟机并安装
3.通过ISO文件安装操作系统
4.执行相关配置即可
二
一、选择题(单选题,每小题2分,共20分)
1.用户编写了一个文本文件a.txt,想将该文件名称改为txt.a,下列命令__D____可以实现。
A. cd a.txt xt.a B. echo a.txt > txt.a
C. rm a.txt txt.a D. cat a.txt > txt.a
2.Linux文件权限一共10位长度,分成四段,第三段表示的内容是___C___ 。
A. 文件类型 B. 文件所有者的权限
C. 文件所有者所在组的权限 D. 其他用户的权限
3.在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是___D__。
A. -m B. -d C. -f D. -p
4.下面关于i节点描述错误的是__A___ 。
A.i节点和文件是一一对应的
B.i节点能描述文件占用的块数
C.i节点描述了文件大小和指向数据块的指针
D.通过i节点实现文件的逻辑结构和物理结构的转换
5.在vi编辑器中的命令模式下,重复上一次对编辑的文本进行的操作,可使用__C____命令。
A. 上箭头 B. 下箭头 C. “.” D. “*”
6.某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为__D____ 。
A. 467 B. 674 C. 476 D. 764
7.在Redhat公司发布的Linux版本中,若要使得用户登录验证,需要修改以下__C____脚本。
A. /etc/inittab B. /etc/passwd
C. /etc/shadow D. /etc/group
8.下列不是Linux系统进程类型的是_D_____ 。
A. 交互进程 B. 批处理进程 C. 守护进程 D. 就绪进程
9.下列关于/etc/fstab文件描述,正确的是___D___ 。
A. fstab文件只能描述属于linux的文件系统
B. CD_ROM和软盘必须是自动加载的
C. fstab文件中描述的文件系统不能被卸载
D. 启动时按fstab文件描述内容加载文件系统
10.在Shell脚本中,用来读取文件内各个域的内容并将其赋值给Shell变量的命令是__D___ 。
A. fold B. join C. tr D. read
二、填空题(每题2分,共20分)
1.安装Linux系统对硬盘分区时,必须有两种分区类型:Linux原始分区(根分区) 和Linux交换分区 。
2.在Linux的两种链接文件中,只能实现对文件链接的一种方式是:软链接(符号链接)。
3.Linux主要采用了 请求调页 和 写时复制 _两种动态内存管理技术实现了物理内存以On demand方式动态分配。
4.对于System V类型的共享内存页面,Linux基于__Clock____算法决定哪些页面应当被换出物理内存。
5.在Linux与中断相关的三个核心数据结构中,用做抽象的中断控制器的数据结构是_ hw_interrupt_type _____,它包含一系列处理中断控制器特有的操作。
\6. 通过将_ request _____动态链入块设备控制结构blk_dev_struct,Linux设备管理器有效的实现了物理设备和缓冲区之间的异步读写通讯。
7.将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式__tar czvf wang.tar.gz /home/stud1/wang____。
8.对于给定的文件file,统计其中所有包含字符串”WHU”的行数的一条命令是_grep WHU file | wc -l
\9. 对于Shell脚本程序,若输入参数数量多于9个,则程序遍历每个参数可通过使用__shift__命令实现。
10.在System V进程通讯方式中,ipc_perm结构描述对一个系统IPC对象的存取权限,而用于定位IPC对象的引用标志符key可以依据键值分成_公有____和___私有___两种类型。
三、简答题(每小题5分,共20分)
1.在底半技术中把一个中断处理分为哪几部分?为什么采用这种技术?
答:在底半技术中把一个中断处理分为2部分:顶半部分和底半部分。2分
采用这种技术可以:使中断的总延迟时间最小化,加快对中断请求的响应速度,合并某些中断处理。3分
2.论述实时信号、非实时信号、可靠信号、不可靠信号四个概念。
答:实时信号目前未用,非实时信号编号1~31、0表示空信号 1分
非实时信号没有排队机制,可能丢失 1分
不可靠信号0~31、可靠信号32~63 1分
不可靠信号每次处理完信号后,都将对信号的响应设置为默认动作,需要在结尾再次安装信号;可靠信号和不可靠信号的安装函数也不同。两者的区别主要在于信号类型取值,而不在于操纵他们的API 2分
3.简要论述Kswapd核心线程的动态特性。
答:主要通过nr_async_pages参考free_pages_high和free_pages_low来判断交换数量和线程睡眠时间: 1分
Nr_async_pages大于free_pages_high时每次释放6个页面,在free_pages_high和free_pages_low之间时释放3个,小于free_pages_low时不释放 2分
若Kswapd被唤醒后发现Nr_async_pages小于free_pages_low则睡眠时间加班,反之则逐步延长睡眠时间
4.简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程。
答:Linux通过i节点表将文件的逻辑结构和物理结构进行转换 1分
i节点是一个64字节长的表,表中包含了文件的相关信息,其中有文件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。1分
在i节点表中最重要的内容是磁盘地址表。在磁盘地址表中有13个块号,文件将以块号在磁盘地址表中出现的顺序依次读取相应的块。若文件空间大于13块,则分别用1次、2次、3次间接块实现对数据块的定位。 2分
此后,Linux文件系统通过把i节点和文件名进行连接,当需要读取该文件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的i节点号,通过该i节点的磁盘地址表把分散存放的文件物理块连接成文件的逻辑结构。
四、操作题(写出完成下述功能的命令序列,每小题4分,共20分)
1.假设你的用户账号是zheng,现在你登录进入linux系统,查看当前登录到系统中的用户,查看当前系统中运行的进程,然后再退出系统。
答:login:zheng
Password:口令
$who
$ps
$Ctrl+D
2.在当前目录/home/zheng下新建一个目录back,将当前目录改为back,在back下新建2个长度为0的文件test1、test2,然后把test2移到其父目录中并改名为file12。
答:$ mkdir back
$ cd back
$ touch test1 test2
$ mv test2 …/file2
3.现在需要统计当前目录/home/zheng下普通文件的数目并显示结果,如何实现?
$find –type f | wc –l
4.假设你是系统管理员,需要增加一个新的用户账号zheng,为新用户设置初始密码,锁定用户账号uly,并删除用户账号chang。
答:.#useradd zheng
#passwd zheng
#passwd –l uly
#userdel chang
5.若给需要将/home/zheng目录下的所有文件打包压缩成/tmp/zheng.tar.gz,你准备怎么做?当需要从压缩包中恢复时,又该如何处理?
答:#tar –zcvf /tmp/zheng.tar.gz /home/zheng
#tar -zxvf /tmp/zheng.tar.gz
五、下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。(8分)
#!/bin/sh
DIRNAME=ls /root | grep bak
#(1)
if [ -z “$DIRNAME” ] ; then #(2)
mkdir /root/bak ; cd /root/bak #(3)
fi
YY=date +%y
; MM=date +%m
; DD=date +%d
#(4)
BACKETC= Y Y YY YYMM$DD_etc.tar.gz #(5)
tar zcvf $BACKETC /etc #(6)
echo “fileback finished!”
答:#(1)获取/root中名称包含bak的文件或目录
#(2)判断1结果为空
#(3)创建目录/root/bak并进入该目录
#(4)获取当前时间的年月日
#(5)按照年(2位)月(2位)日(2位)_etc方式构造压缩文件名
#(6)压缩etc目录并保存在/root/bak中 6分
程序功能:若/root/bak不存在则创建之,然后将/etc按日期打包保存于该目录中。2分
六、填写标记代码行的意义,给出功能描述和前6行程序输出。(6分)
#include <unistd.h>
#include <signal.h>
int ntimes=0;
main(int argc, char *argv[]) {
int pid,ppid;
int p_action( ), c_action( );
signal(SIGUSR1 , p_action); #(1)
switch(pid=fork( )) { #(2)
case -1: perror("fork failed?);
exit(1);
case 0: signal(SIGUSR1,c_action);
ppid=getppid( );
for ( ; ; ) ;
default: {
for( ; ; ) {
pause;
sleep(1);
kill(pid,SIGUSR1); #(3)
}
}
}
}
p_action( ) {
printf(“parent caught signal #%d\n”,++ntimes);
}
c_action( ) {
printf(“child caught signal #%d\n”,++ntimes/, ++ltimes/);
int ppid;
ppid = getppid(); #(4)
kill(ppid, SIGUSR1);
sleep(3);
}
答:#(1)在父进程中为信号SIGUSR1绑定函数p_action
#(2)创建子进程
#(3)向子进程发送信号SIGUSR1
#(4)获取父进程的PID4分
父进程无线循环向子进程发送信号,子进程收到信号后向父进程发送相同信号,父子进程之间各自记录全局变量的变化,结果如:
child caught signal #1
parent caught signal #1
child caught signal #2
parent caught signal #2
child caught signal #3
parent caught signal #32分
七、设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。(6分)
答:#!/bin/sh
i=1
groupadd class1
while [ $i -le 30 ] 1分
do
if [ $i -le 9 ] ;then
USERNAME=stu0${i} 1分
else
USERNAME=stu${i} 1分
fi
useradd $USERNAME 1分
mkdir /home/$USERNAME
chown -R U S E R N A M E / h o m e / USERNAME /home/ USERNAME/home/USERNAME 1分
chgrp -R class1 /home/$USERNAME
i= ( ( (( ((i + 1)) #或let “i=i+1” 1分
done
三
一、选择题(单选题,每小题2分,共20分)
1.Linux系统的开发模型是 B__ 。
A.教堂模型 B.集市模型 C.层次模型 D.网状模型
2.在Linux中,进程优先级的相关参数有多个,与实时进程优先级相关的参数是 D__ 。
A.policy B.counter C.priority D.rt_priority
3.B_ 属于SYSTEM Ⅴ进程间通信方式。
A.管道 B.信号量 C.软中断信号 D.锁机制
4.在Linux系统中,每个进程都有4GB的虚拟地址空间,其中内核空间占用 C_ 。
A.0~2GB-1 B.0~3GB-1 C.3GB~4GB-1 D.2GB~4GB-1
5.Linux文件系统中,文件在外存的物理地址放在 A 中。
A.i节点 B.用户打开文件表
C.系统打开文件表 D. 进程控制块
6.以长格式列目录时,若文件test的权限描述为:drwxrw-r–,则文件test的类型及文件主的权限是__A____ 。
A. 目录文件、读写执行 B. 目录文件、读写
C. 普通文件、读写 D.普通文件、读
7.当字符串用单引号(’’)括起来时,SHELL将 C__ 。
A.解释引号内的特殊字符 B.执行引号中的命令
C.不解释引号内的特殊字符 D.结束进程
8./etc/shadow文件中存放 B____ 。
A.用户账号基本信息 B.用户口令的加密信息
C.用户组信息 D.文件系统信息
9.Linux系统中,用户文件描述符0表示 __A 。
A.标准输入设备文件描述符 B.标准输出设备文件描述符
C.管道文件描述符 D.标准错误输出设备文件描述符
10.为卸载一个软件包,应使用 _B 。
A.rpm -i B.rpm -e C.rpm -q D.rpm -V
二、填空题(每空1分,共20分)
1.在Linux2.4.0版本中,进程有 6 种状态,进程使用 exit__ 系统调用后进入僵死状态。
2.在Linux 中,管道分为 2__ 种类型,若创建或打开管道时获得的描述符存放在fd中,则fd[1]是 管道写描述符 。
3.Linux为用户提供的接口有 shell、XWINDOW、系统调用
4.Linux在I386体系结构中支持 __两级____分页机构。
5.每个设备文件名由主设备号和从设备号描述。第二块IDE硬盘的设备名为 hdb__,它上面的第三个主分区对应的文件名是 hdb3__ 。
\6. 超级块是描述 文件系统属性__ 信息的数据结构,索引节点是描述 文件属性__ 信息的数据结构。
7.df命令完成_显示文件系统空间使用情况_____ 功能,du命令完成 显示目录或文件占用磁盘空间容量____ 功能。
8.命令组合(命令表)将 建立新的子进程____ 来执行命令。
\9. 磁盘限额管理可以使用 quota__ 软件工具,其中硬限额的容量应该__大于____软限额。
10.交换线程通过三种途径来缩减已使用的内存页面:减少buffer cache和page cache的大小、换出系统V类型的内存页面、换出或丢弃进程的页面
三、简答题(每小题5分,共20分)
\2. vi编辑器有哪几种工作模式?如何在这几种工作模式之间转换?
答:Vi的工作模式有三种:命令模式、输入模式、末行模式。3分
在命令模式下输入a、A、i、I、o、O等命令之一可以进入输入模式,在输入模式下按Esc键回到命令模式;在命令模式下输入:进入末行模式,末行命令执行完后回到命令模式。
\3. 什么是位置变量?shell的变量类型有哪些种?
位置变量是指命令行上传递给程序的参数。1分
Shell变量可以分为:用户自定义变量、环境变量、位置变量、特殊变量 4分
4.从内核实现的角度说明Linux进程共享文件的方式有哪几种?举例说明什么情况下会产生对应的共享情况?
答:进程通过多个file结构共享一个inode,进程共享一个file结构。 2分
五、下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。(8分)
#!/bin/bash #(1)
dir=$1 #(2)
if [ -d $dir ] #(3)
then
cd $dir #(4)
for file in *
do
if [-f $file ] #(5)
then
cat $file #(6)
echo “end of file $file”
fi
done
else
echo “bad directory name $dir”
fi
答:#(1)使用/bin/bash解释脚本
#(2)将位置变量1赋值给变量dir
#(3)如果dir所指为目录
#(4)将当前目录改为dir
#(5)如果循环变量file所指是普通文件
#(6)显示文件file的内容 6分
程序功能:若命令行参数是一个合法目录则显示该目录下所有普通文件的内容,否则显示错误的目录名信息。2分
六、在Linux系统中运行下面程序,最多可产生多少个进程?画出进程家族树。(6分)
main()
{
fork();
fork();
fork();
}
答:最多可以产生7个进程 3分
家族树如右 3分
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xU6X4p0m-1572060962379)(D:\typoraImage\wps1.png)]七、试编写一个SHELL程序,该程序能接收用户从键盘输入的100个整数,然后求出其总和、最大值及最小值。(6分)
答:#!/bin/sh
read max
min=$max
sum=$max
i=1
while [$i –lt 100]
do
read x
sum=expr $sum + $x
if [ $max –lt $x ]
then
max=$x
fi
if [ $ x –lt $min ]
then
min=$x
fi
i=expr $i + 1
done
echo "sum = $sum ; max = $max min = $min "
四
1.若当前目录为/home,命令ls –l 将显示home目录下的( )。
A.所有文件 B.所有隐含文件
C.所有非隐含文件 D.文件的具体信息
2.下面关于文件 "/etc/sysconfig/network-scripts/ifcfg-eth0"的描述哪个是正确的? ( )。
A.它是一个系统脚本文件 B.它是可执行文件
C.它存放本机的名字 D.它指定本机eth0的IP地址
\3. 如何快速切换到用户John的主目录下?( )
A.cd @John B.cd #John C.cd &John D.cd ~John
4.启动DNS服务的守护进程( )
A. httpd start B.httpd stop C. named start D. named stop
\5. 若URL地址为http://www.nankai.edu/index.html,请问哪个代表主机名( )。
A.nankai.edu.cn B.index.html
C.www.nankai.edu/index.html D.www.nankai.edu
6.RED HAT LINUX 9默认使用的文件系统类型为( )
A.ext2 B.ext3 C.FAT D.swap
7.在LINUX中,要查看文件内容,可使用( )命令。
A.more B.cd C.login D.logout
8.光盘所使用的文件系统类型为( )。
A.ext2 B.ext3 C.swap D.ISO 9660
9.以下命令中,可以将用户身份临时改变为root的是( )。
A.SU B.su C.login D.logout
10.LINUX所有服务的启动脚本都存放在( )目录中。
A./etc/rc.d/init.d B./etc/init.d C./etc/rc.d/rc D./etc/rc.d
11.若要使用进程名来结束进程,应使用( )命令。
A.kill B.ps C.pss D.pstree
12.RED HAT LINUX所提供的安装软件包,默认的打包格式为( )。
A…tar B…tar.gz C…rpm D…zip
13.若要将当前目录中的myfile.txt文件压缩成myfile.txt.tar.gz,则实现的命令为( )。
A.tar –cvf myfile.txt myfile.txt.tar.gz
B.tar –zcvf myfile.txt myfile.txt.tar.gz
C.tar –zcvf myfile.txt.tar.gz myfile.txt
D.tar –cvf myfile.txt.tar.gz myfile.txt
14.LINUX交换分区的格式为( )。
A.ext2 B.ext3 C.FAT D.swap
15.以下文件中,只有root用户才有权存取的是( )
A.passwd B.shadow C.group D.password
16.usermod命令无法实现的操作是( )
A.账户重命名 B.删除指定的账户和对应的主目录
C.加锁与解锁用户账户 D.对用户密码进行加锁或解锁
17.LINUX用于启动系统所需加载的内核程序位于( )
A./ B./lib/modules/2.4.20_8/kernel C./boot D./proc
18.init进程对应的配置文件名为( ),该进程是LINUX系统的第一个进程,其进程号PID始终为1。
A./etc/fstab B./etc/init.conf C./etc/inittab.conf D./etc/inittab
19.在LINUX运行的7个级别中,X—WINDOWS图形系统的运行级别为( )。
A.2 B.3 C.5 D.6
20.若在文字界面下,需要键入何种指令才能进入图形界面(Xwindow)。( )
A. reboot B.startx
C.startwindow D.getinto
二、 填空题(每空2分,共20分)
1.在Linux系统中,以( 文件 )方式访问设备 。
\2. Linux内核引导时,从文件(/etc/fstab )中读取要加载的文件系统。
3.链接分为: 硬链接和( 软链接 )。
4.某文件的权限为:drw-r–r--,用数值形式表示该权限,该文件属性是( 目录 ) 。
5.前台起动的进程使用 ( ctrl+c )终止。
\6. 设定限制用户使用磁盘空间的命令是( quota )。
\7. 在Linux系统中,用来存放系统所需要的配置文件和子目录的目录是(/etc )。
8.将前一个命令的标准输出作为后一个命令的标准输入,称之为( 管道 )。
9.为脚本程序指定执行权的命令及参数是( chmod a+x filename )。
10.进行字符串查找,使用( grep )命令。
三、写出完成以下功能的命令(每题2分,共10分)
1.在其父目录不存在时先创建父目录的命令。 mkdir –p
2.要使得名为fido的文件具有如下权限-r-xr-x—x的命令。chmod 551 fido
3.在/root文件夹下查找后缀为.cpp的文件。find /root –name *.cpp
4.关闭linux系统(不重新启动)使用的命令 halt
5.将光盘/dev/hdc卸载的命令 。umount /dev/hdc
四、简答和shell编程题(每题10分,共30分)
\1. 若下达rmdir命令来删除某个已存在的目录,但无法成功,请说明可能的原因。
参考答案:
此目录可能不存在,
或者目录不为空,或者目录中有隐含文件存在,
或者目录被设置了权限,
解决方法就是先修改权限,在使用rm –r 命令删除。
2.简述解决忘记root密码的办法。
参考答案:
1)用RedHat标准安装盘启动系统
当出现提示符时敲入:linux rescue
就会以修复模式启动系统
2)系统启动完毕后,会将硬盘mount到/mnt/sysimage,届时会有提示
3)进入提示符后,敲入命令:
chroot /mnt/sysimage
4)敲入命令:
passwd
更改密码
5)连续敲入两次exit,即重起系统,将光盘拿出,按正常模式启动系统
除了用光盘引导rescue模式,还有一种方法是用启动装载器来进入单用户模式:
(1) grub
进入启动画面之后,敲入“e”,把光标移动到kernel …那一行,再敲入“e”,在kernel 一行的最后加上空格single,回车
敲入“b”,启动系统,即进入单用户模式,
这个时候就可以用passwd命令改密码了。
(2) lilo
进入lilo命令行模式,敲入linux single,即进入单用户模式。
passwd …
如果grub/lilo设了密码,一定要记住才行。要是忘了grub/lilo的密码,就只有用rescue模式了。
3.创建一个shell 脚本,它从用户那里接收10个数,并显示已输入的最大的数。
参考程序:
#! /bin/bash
max=0
for((count=1 ; count <= 10 ; count = count+1))
do
echo -n "Enter number $count : "
read value
if [ $max -lt $value ]
then
max=$value
fi
done
五
一、单项选择题(每题2分,共40分)
当安装linux操作系统时将选择下列那一个操作? ( )
A. 选择 “图形登录方式” 设定系统开始运行级为4
B. 选择 “文本登录方式” 设定系统开始运行级为3
C. 选择 “文本登录方式” 设定系统开始运行级为5
D. 选择 “图形登录方式” 设定系统开始运行级为3
2.Linux通过VFS支持多种不同的文件系统。Linux缺省的文件系统是( )
A.VFAT B.ISO9660 C.Ext系列 D.NTFS
3.关闭linux系统(不重新启动)可使用( )命令。
A.ctrl+alt+del B.halt C.shutdown -r D.reboot
4.修改以太网mac地址的命令为( )。
A.ping B.ifconfig C.arp D.traceroute
5.在vi编辑器中的命令模式下,键入( )可在光标当前所在行下添加一新行。
A. B. C. D.a
\6. 以下选项中,哪个命令可以关机? ( )
A. init 0 B. init 1 C. init 5 D. init 6
7.请选择关于 /etc/fstab 的正确描述。 ( )
A. 系统启动后,由系统自动产生
B. 用于管理文件系统信息
C. 用于设置命名规则,是否使用可以用 TAB 来命名一个文件
D. 保存硬件信息
8.你使用命令“vi /etc/inittab”查看该文件的内容,你不小心改动了一些内容,为了防止系统出问题,你不想保存所修改内容,你应该如何操作( )
A.在末行模式下,键入:wq B.在末行模式下,键入:q!
C.在末行模式下,键入:x! D.在编辑模式下,键入“ESC”键直接退出vi
9.删除文件命令为( )****
****A.mkdir B.move C.mv D.rm
10.显示已经挂装的文件系统磁盘inode使用状况的命令是( ) ?
A.df –i B.su –I C.du –I D.free –i
11.网络管理员对www服务器可进行访问、控制存取和运行等控制,这些控制可在( )文件中体现。A.httpd.conf B.lilo.conf C.inetd.conf D.resolv.conf
12.如果想在Linux下实现热启,应当修改/etc/inittab下的哪一行( )。
A.#Trap CTRL-ALT-DELETE
B.#ca::ctrlaltdel :/sbin/shutdown -t3 -r now
C.#id:3:initdefault:
D.#10:3:wait:/etc/rc.d/rc 3
13.启动samba服务器进程,可以有两种方式:独立启动方式和父进程启动方式,其中后者是在( )文件中以独立进程方式启动。
A./usr/sbin/smbd B./usr/sbin/nmbd C.rc.samba D./etc/inetd.conf
14下列哪个命令在建立一个 tar归档文件的时候列出详细列表( )。
A.tar -t b)tar -cv c)tar -cvf d)tar –r
15.假设文件fileA的符号链接为fileB,那么删除fileA后,下面的描述正确的是( ) 。
A.fileB也随之被删除
B.fileB仍存在,但是属于无效文件
C.因为fileB未被删除,所以fileA会被系统自动重新建立
D.fileB会随fileA的删除而被系统自动删除
16.一个bash shell脚本的第一行是( )?
A.#/bin/csh B.#/bin/bash
C./bin/bash D.#!/bin/bash
17.改变文件所有者的命令为( )?A.chmod B.touch C.chown D.cat
18.在给定文件中查找与设定条件相符字符串的命令为( )。
A.grep B.gzip C.find D.sort
19.建立一个新文件可以使用的命令为( )。
A.chmod B.more C.cp D.touch
\20. 存放Linux基本命令的目录是什么( )?
A. /bin B. /tmp C. /lib D. /root
二、 填空题(每空2分,共20分)
1.将前一个命令的标准输出作为后一个命令的标准输入,称之为( 管道 )。
2.在shell编程时,使用方括号表示测试条件的规则是:方括号两边必有( 空格)。
3.在Linux系统下,第二个IDE通道的硬盘(从盘)被标识为( hdb )。
4.当系统管理员需升级内核版本和改变系统硬件配置时,应(重新编译内核 )。
5.在Linux系统中,测试DNS服务器是否能够正确解析域名的的客户端命令,使用命令( nslookup )。
6.启动进程有手动启动和调度启动两种方法,其中调度启动常用的命令为 at 、batch 和( crontab ) 。
7.在Linux操作系统中,设备都是通过特殊的(文件 )来访问。
8.shell不仅是(用户命令的解释权 ),它同时也是一种功能强大的编程语言。
9.在Windows9.x环境下共享Unix/Linux中的用户目录的一个工具是(samba )服务器。
10.结束后台进程的命令是(kill )。
三、写出完成以下功能的命令(每题2分,共10分)
1.在/home目录下查找文件名为。Profile的文件,找到后删除
2.将test.tar.gz文件解压缩
3.升级安装wu-ftpd软件包
4.创建一个用户,用户名为user02,所属私有组和标准组为stuff,用户家目录为/home/user2,用户登陆shell为/bin/bash。
5.赋予所有用户读和写backup.tar.gz文件的权限:
参考答案:
1.find /home –name .profile -exec rm{ } ;
2.tar -xzvf test.tar.gz
3.rpm –Uvh wu-ftpd-2.6.2-8.i386.rpm
4.useradd –g stuff –G stuff -d /home/user2 -s /bin/bash user02
5.Chmod a+rw back.tar.gz
四、简答和shell编程题(每题10分,共30分)
\1. Linux内核主要由哪几部分组成?每部分的作用?
参考答案:
Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程;内存管理(MM)允许多个进程安全的共享主内存区域;虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统;网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持;进程间通讯(IPC) 支持进程间各种通信机制。
2.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
参考答案:
(1)第一种方法:
用户应使用crontab –e 命令创建crontab文件。格式如下:
0 0 * * sun cp –r /user/backup /tmp
(2)第二种方法:
用户先在自己目录下新建文件file,文件内容如下:
0 * * sun cp –r /user/backup /tmp
然后执行 crontab file 使生效。
3.写一个shell 脚本,检查给出的串是否为回文(palindrome)。
参考程序:
#! /bin/bash
echo “Enter string”
read str
len=echo $str | wc -c
len=expr $len - 1
l=expr $len / 2
ctr=1
flag=0
while test $ctr -le $l
do
a=echo $str | cut -c$ctr
b=echo $str | cut -c$len
if test $a -ne $b
then flag=1
break
fi
ctr=expr $ctr + 1
len=expr $len - 1
done
if test $flag -eq 0
then echo “String is palindrome”
else echo “String not a palindrome”
fi
六
*一、填空题(2 X 10 分)*
1.全部Redhat 9.0系统安装最大大约需要多大磁盘空间 ( 5G ).
2.Redhat 9.0默认的文件系统类型为 ( ext3 )
3.输入了Shell命令的部分字符后按什么键可补全其余部分? ( tab )
4.要显示内存用量用什么命令? ( free )
5.完全删除/tmp下的所有文件用什么命令及参数? ( rm –r /tmp )
6.若从任一目录用什么命令可快速转到用户家目录? ( cd ~ )
7.要强制杀死某个进程用什么命令 ( kill -9 PID )
8以192.168.6.0/255.255.255.0代表的系列计算机是 ( 192.168.6.1-192.168.6.254 )
9.改变命令提示符的环境变量是 ( PS1 )
10.要查找文件除了用find命令外还可以用什么命令? ( locate )
*二、叙述题 (70分)*
1.叙述Linux操作系统的三个主要部分及其功能。(6分)
内核:内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。
命令解释层:是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
文件结构:是文件存放在磁盘等存储设备上的组织方法,文件结构的相互关联性使共享数据变得容易。
2. 分别叙述linux对IDE硬盘和usb接口的移动硬盘的各个分区如何表示?(6分)
hdxx,sdxx,
3.叙述什么是shell? 什么是X window?Redhat的默认shell和X window是什么?(6分)
Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。是一个命令解释器,它可以用来启动、挂起、停止、甚至编写程序。
Xwindow 选择shell如何进行任务控制。是否支持命令行编辑。是否支持命令行历史记录,环境变量有哪些,什么是它的开机启动文件或者配置文件,支持什么样的编程框架?
是UNIX和Linux系统上的图形用户界面系统。
3 Linux的默认shell是bash,默认XWindow是XFree86
4.执行命令 ls –l 时,某行显示如下: (8分)
-rw-r–r-- 1 chris chris 207 jul 20 11:58 mydata
(1)用户chris 对该文件具有什么权限? (2)执行命令useradd Tom后,用户Tom对该文件具有什么权限?
(3)如何使任何用户都可以读写执行该文件?(4)如何把该文件属主改为用户root ?
1 读写
2 只读
3 chmod 777 mydata
4 chown root mydata
5.关于Samba服务器:(1)叙述该服务器的功能;(2)配置该服务器时对安全性选项卡中的验证模式有哪几种选项?(5分)
Samba服务器的功能是在既有windows也linux操作系统的局域网中提供计算机间的文件共享。
配置该服务器时对安全性选项卡中的验证模式有域、服务器、共享、用户四种选项
6. 利用vsftp配置FTP服务器,要求:(1)匿名用户可以下载上传文件;(2)本地用户不允许登陆。写出详细的配置过程和配置选项。(8分)
(1)主要配置文件是/etc/lvsftpd/vsftpd.conf;将vsftpd.conf文件中的#anon-upload-enalle=Yes 前的“#“删掉,并将/var/ftp/pub目录设为同组和其它可写权限。chmod go+w /var/ftp/pub↓
(2)用service vsftpd start(stop)(restart)命令启动(关闭)(重启)服务器。
7.如何在两台Linux系统的计算机上实现文件共享?写出该服务器的配置细节以及在客户端的执行命令。(8分)
(1) Linux的NFS服务器的功能是向系统中的Linux计算机提供共享文件系统。
(2)使用NFS服务器配置工具配置NFS,选择[主菜单]/[系统设置]/[服务器设置]/[NFS服务器]命令。添加NFS共享目录及允许共享的主机名(而不是提供共享的主机名)读写权限等内容
(3) Mount IP:/NetDirectory localDerctory
8. 假设linux分配给光驱的设备名是/dev/cdrecord,叙述Linux如何在这个光驱上使用光盘。写出详细的命令步骤解释。(7分)
(1) 插好U盘,用fdisr –l /dev/sda/ 命令查看U盘分区情况
(2) 建立挂袋目录:mkdir /mnt/usb
(3) 挂载U盘:mount –tvfat /dev/sda1 /mnt/usb
(4) 用文件管理器或命令行方式浏览文件
(5) 卸载U盘:umount/mnt/usb
(6) 卸去U盘。
挂载
Mount /dev/cdrecord /mnt/cdrom
*卸载 umount /mnt/cdrom*
9.叙述Linux如何使用Windows系统硬盘(设备名为/dev/hda3,分区类型为fat32)上的文件,如何实现开机自动挂载windows硬盘。写出详细的步骤。(8分)
(1) 用fdisk -l /dev/had 命令查看硬盘分区中情况及文件系统情况,决定要挂装Windows分区
(2) 建立挂装目录 mkdir /mnt/dos
(3) 挂装Windows系统 mount –tvfat /dev/had/ /mnt/dos
(4) 浏览Windows文件系统 ls /mnt/dos
(5) 卸载:umount /mnt/dos
(6) 打开/etc/fstab 添加一行
/dev/hda3 /mnt/hd vfat defaults 0 0
七
*一、填空题(20%)*
\1. 默认情况下,超级用户和普通用户的登录提示符分别是:“#”和“$”。
\2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。
\3. Linux系统下经常使用的两种桌面环境是:GNOME和KDE。
\4. 链接分为: 硬链接 和 符号链接 。
\5. Linux系统中有三种基本的文件类型:普通文件、目录文件和设备文件。
\6. 某文件的权限为:drw-r–r--,用数值形式表示该权限,则该八进制数为: 644 ,该文件属性是 目录 。
\7. 在超级用户下显示Linux系统中正在运行的全部进程,应使用的命令及参数是 ps -aux 。
\8. 将前一个命令的标准输出作为后一个命令的标准输入,称之为 管道 。
\9. /sbin 目录用来存放系统管理员使用的管理程序。
\10. 观察当前系统的运行级别可用命令:who -r实现。
\11. grep -E ‘[Hh]enr(y|ietta)’ file的功能是:(在文件File中查找Henry、henry、Henrietta或 henrietta)
\12. 设C语言程序my.c
A. 生成目标文件my.o的命令是(gcc -c my.c)。
B. 生成汇编语言文件my.s的命令是(gcc -S my.c)。
C. 生成可执行程序myp的命令是(gcc -o myp my.c)。
\13. 设有两个C语言程序模块c1.c和c2.c(不含main函数)
A. 由c1.c和c2.c生成静态库libmyar.a的命令是(gcc -o libmyar.a -c c1.c c2.c)。
B. 由c1.c和c2.c生成共享库libmyar.so的命令是(gcc -shared -o libmyvar.so -c f1.c f2.c)。
\14. 在某Makefile内有以下语句:
SRC = f1.c f2.c f3.c
TGT = $(SRC:.c=.d)
SRC += f4.c
则TGT=________ f1.o f2.o f3.o ____________
SRC=_______ f1.c f2.c f3.c f4.c _________
*二、选择题(40%)*
\1. 关于Linux内核版本的说法,以下错误的是( )。
A.表示为主版本号.次版本号.修正号 B.1.2.3表示稳定的发行版
C.1.3.3表示稳定的发行版 D.2.2.5表示对内核2.2的第5次修正
\2. 自由软件的含义是( )。
A.用户不需要付费 B.软件可以自由修改和发布
C.只有软件作者才能向用户收费 D.软件发行商不能向用户收费
\3. 系统引导的过程一般包括如下几步:a.MBR中的引导装载程序启动;b.用户登录;c.Linux内核运行;d.BIOS自检。正确的顺序是( )。
A.d,b,c,a B.d,a,c,b C.b,d,c,a D.a,d,c,b
\4. 字符界面下使用shutdown命令重启计算机时所用的参数是( )。
A.-h B.-t C.-k D.-r
\5. 下列设备属于块设备的是( )。
A.键盘 B.终端
C.游戏杆 D.硬盘
\6. cd命令可以改变用户的当前目录,当用户键入命令“cd”并按Enter键后,( )。
A.当前目录改为根目录 B.当前目录不变,屏幕显示当前目录
C.当前目录改为用户主目录 D.当前目录改为上一级目录
\7. 在UNIX/Linux系统添加新用户的命令是( )
A. groupadd B. usermod
C. userdel *D. useradd*
\8. 添加用户时使用参数( )可以指定用户目录。
A. -d B. -p
C. -u D. -c
\9. 修改用户自身的密码可使用( )
A. passwd B. passwd -d mytest
C. passwd mytest D. passwd -l
\10. 设用户所使用计算机系统上有两块IDE硬盘,Linux系统位于第一块硬盘上,查询第二块硬盘的分区情况命令是:( )
A. fdisk -l /dev/hda1 B. fdisk -l /dev/hdb2
C. fdisk -l /dev/hdb D. fdisk -l /dev/hda
\11. 统计磁盘空间或文件系统使用情况的命令是:( )
A. df B. dd
C. du D. fdisk
\12. 用于文件系统直接修改文件权限管理命令为:( )
A. chown B. chgrp
C. chmod D. umask
\13. 若使pid进程无条件终止使用的命令是( )。
A. kill -9 B. kill -15
C. killall -1 D. kill -3
\14. 显示系统主机名的命令是( )
A. uname -r B. who am i
C. uname -n D. whoami
\15. 查询已安装软件包dhcp内所含文件信息的命令是( )
A. rpm -qa dhcp B. rpm -ql dhcp
C. rpm -qp dhcp D. rpm -qf dhcp
\16. Linux系统中用于打印队列查询的命令是( )。
A. lp B. lprm
C. lpr D. lpstat
\17. 202.196.100.1是何类地址( )
A、A类 B、B类
C、C类 D、D类
\18. 当IP地址的主机地址全为1时表示:( )
A、专用IP地址 B、对于该网络的广播地址
C、本网络地址 D、回送地址
\19. 路由器最主要的功能是:( )
A、将信号还原为原来的强度,再传送出去B、选择信息包传送的最佳路径
C、连接互联网 D、集中线路
\20. FTP传输中使用哪两个端口( )?
A、23和24 B、21和22
C、20和21 D、22和23
*三、判断题(10%)*
\1. RedHat LINUX安装时自动创建了根用户。正确
\2. 在安装RedHat Linux时要以图形化模式安装,直接按Enter 。正确
\3. LINUX中的超级用户为root,登陆时不需要口令。错误
\4. Linux不可以与MS-DOS、OS/2、Windows等其他操作系统共存于同一台机器上。错误
\5. Linux的特点之一是它是一种开放、免费的操作系统。 正确
\6. redhat系统中,默认情况下根口令没有字符长短的的限制,但是必须把口令输入两次;如果两次输入的口令不一样,安装程序将会提示用户重新输入口令。 错误
\7. 确定当前目录使用的命令为:pwd。 正确
\8. RedHat默认的 Linux 文件系统是ext3。正确
\9. RedHat Linux使用 ls -all 命令将列出当前目录中的文件和子目录名。 错误
\10. 在RedHat中cd ~ 这个命令会把你送回到你的家目录。正确
\11. 在字符界面环境下注销LINUX,可用exit或ctrl+D。正确
\12. 虚拟控制台登陆就是使用文本方式登陆虚拟控制台登陆就是使用文本方式登陆。正确
*四、简答题(20%)*
1.什么是Linux?其创始人是谁?Linux操作系统的诞生、发展和成长过程始终依赖着的重要支柱都有哪些?
答:Linux是一个功能强大的操作系统,同时它是一个自由软件,是免费的、源代码开放的,可以自由使用的类UNIX产品。其创始人是Linus。Linux操作系统的诞生、发展和成长过程始终依赖着的重要支柱有以下几点:(1)UNIX操作系统;(2)MINIX操作系统;(3)GNU计划;(4)POSIX标准;(5)Internet网络。
\2. 试述如何创建一个用户。
答:可使用命令useradd创建新用户,但不能在系统中随便创建用户,需经相关部分批准后方能创建。对于长期或暂时不使用的用户,应将其从系统中删除或锁定起来,以防非法使用。创建新用户时可以使用命令useradd -d home newuser指定用户家目录,若不指定则使用默认的家目录/home/newuser。一般情况下,当一个用户被创建之后,只有超级用户为它设置密码后才能被启用或登录使用。
\3. Linux系统有几种类型文件?它们分别是什么?有哪些相同点和不同点?
答:3类。分别是普通文件,目录文件和设备文件。相同是它们都是文件,都有一个文件名和i节点号。不同点是,普通文件的内容为数据,目录文件的内容为目录项或文件名与i节点对应表,设备文件不占用磁盘空间,通过其i节点信息可建立与内核驱动程序的联系。
\4. 综述Linux系统的文件权限及其管理。
答:Linux用文件存取控制表来解决存取权限的控制问题。存取控制表以文件为单位,把用户按某种关系画分为若干组,同时规定每组用户的存取权限。每个文件都有一张存取控制表。在实现时,该表存放在文件说明中,也就是i节点的文件权限项。
就某个文件而言,它只对三类用户(文件主,同组人,其它人)分配权限。权限的修改或分配可通过命令chmod来实现。当然chmod和chgrp等命令也有着权限控制作用,因为文件的主和组变了,它相应的权限也会随之改变。
\5. 在UNIX/Linux系统中,环境变量是非常重要,在字符界面下试说明:
(1) PATH变量的作用,如何得到PATH的值?
(2) 在UNIX/Linux系统的超级用户的环境变量PATH中允许包含当前目录吗?
(3) 若在超级用户的当前目录内有可执行文件mypro,如何执行它(写出执行时键盘输入内容)?
(4) 如何使用该命令在后台执行(写出执行时键盘输入内容)?
答:(1) PATH为命令搜索路径,可用echo $PATH命令显示;(2)UNIX/Linux的PATH变量内不允许包含当前路径(.);(3)./mypro;(4)./mypro &
*五、综合编程题(10%)*
1、设计一个shell程序计算n的阶乘。要求:
(1) 从命令行接收参数n;
(2) 在程序开始后立即判断n的合法性,即是否有参数,若有是否为正整数,若非法请给错误提示;
(3) 最后出计算的结果。
参考代码:
#!/bin/sh
if [ $# -eq 0 ]; then echo -e “$0 no Params.\a\n”; exit 0; fi
x=echo $1 | awk '/[^[:digit:]]/ { print $0 } '
if [ “x$x” != “x” ] ; then echo -e “Input: $* error!\a”; exit 1; fi
fact=1;tmp=1
while [ $tmp -le $1 ]
do
fact= ( ( f a c t ∗ t m p ) ) ; t m p = ((fact*tmp));tmp= ((fact∗tmp));tmp=((++tmp));
done
echo “fact=$fact”
\2. 阅读Makefile文件:
all : libmys.so
SRC = f1.c f2.c f3.c
TGT = $(SRC:.c=.o)
%.o : %.c
cc -c $?
libmys.so : $(TGT)
cc -shared -o $@ $(TGT)
clean:
rm -f $(TGT)
回答以下问题:
(1) 此Makefile文件的主要功能是什么?
(2) 此Makefile文件包含多少个规则?它们分别是什么?
(3) 使用此Makefile文件可以生成目标文件f2.o吗?为什么?
参考答案:
(1)生成共享库文件libmys.so;
(2) 4个。分别是:all,%.o,libmys.so和clean。
(3) 可以。因为规则%.o : %.c已经定义了*.o与*.c的关系和生成方法。
八
1.以下哪一个是linux内核的稳定版本( B )
A.2.5.24 B. 2.6.17 C. 1.7.18 D. 2.3.20
2.怎样显示当前目录( A )。
A. pwd B. cd C. who D. ls
3.欲把当前目录下的 file1.txt 复制为 file2.txt,正确的命令是( D )。
A. copy file1.txt file2.txt B. cp file1.txt | file2.txt
C. cat file2.txt file1.txt D. cat file1.txt > file2.txt
\4. 如果您想列出当前目录以及子目录下所有扩展名为“.txt”的文件,那么您可以使用的命令是( B )。
A. ls *.txt B. find . –name “.txt” C. ls –d .txt D. find . “.txt”
\5. 如何删除一个非空子目录 /tmp( B )。
A. del /tmp/* B. rm -rf /tmp C. rm -Ra /tmp/* D. rm –rf /tmp/*
\6. 存放用户帐号的文件是( C )。
A. shadow B. group C. passwd D. Gshadow
7.下面哪个系统目录中包含Linux使用的外部设备( B )。
A. /bin B. /dev C. /boot D. /home
8.一个文件名字为rr.Z,可以用来解压缩的命令是( D )
A.tar B. gzip C. compress D. uncompress
9. Linux通过VFS支持多种不同的文件系统。Linux缺省的文件系统是( C )
A.VFAT B. ISO9660 C. Ext系列 D. NTFS
10. 在vi编辑器中的命令模式下,键入( B )可在光标当前所在行下添加一新行
A. O B. o C. i D. a
11.在vi编辑器中的命令模式下,重复上一次对编辑的文本进行的操作,可使用( C )命令。
A.上箭头 B. 下箭头 C. . D. *
12.删除文件命令为(D)
A.mkdir B. move C. mv D. rm
13.如果想在Linux下实现热启,应当修改/etc/inittab下的哪一行( B )
A.#Trap CTRL-ALT-DELETE
B. ca::ctrlaltdel:/sbin/shutdown -t3 -r now
C. id:3:initdefault:
D. 10:3:wait:/etc/rc.d/rc 3
14.假设文件fileA的符号链接为fileB,那么删除fileA后,下面的描述正确的是( B)
A.fileB也随之被删除
B. fileB仍存在,但是属于无效文件
C. 因为fileB未被删除,所以fileA会被系统自动重新建立
D. fileB会随fileA的删除而被系统自动删除
15.在给定文件中查找与设定条件相符字符串的命令为( A )
A.grep B. gzip C. find D. sort
16.从后台启动进程,应在命令的结尾加上符号( A )
A.& B. @ C. # D. $
\17. 如果执行命令 #chmod 746 file.txt,那么该文件的权限是( A )。
A. rwxr–rw- B. rw-r–r-- C. --xr—rwx D. rwxr–r—
\18. Linux有三个查看文件的命令,若希望在查看文件内容过程中可以用光标上下移动来查看文件内容,应使用命令( C )
A.cat B. more C. less D. menu
\19. 若一台计算机的内存为128MB,则交换分区的大小通常是( C )
A.64MB B. 128MB C. 256MB D. 512MB
\20. 在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是( B )
A.-m B. -p C. -f D.-d
\21. 用ls –al 命令列出下面的文件列表,是符号连接文件的是( D )
A.-rw-rw-rw- 2 hel-s users 56 Sep 09 11:05 hello
B.-rwxrwxrwx 2 hel-s users 56 Sep 09 11:05 goodbey
C.drwxr–r-- 1 hel users 1024 Sep 10 08:10 zhang
D.lrwxr–r-- 1 hel users 7 Sep 12 08:12 cheng
\22. 文件exer1的访问权限为rw-r–r--,现要增加所有用户的执行权限和同组用户的写权限,下列命令正确的是( A )
A.chmod a+x, g+w exer1 B.chmod 765 exer1
C.chmod o+x exer1 D.chmod g+w exer1
\23. 关闭linux系统(不重新启动)可使用-命令( C )
A.ctrl+alt+del B.shutdown -r C.halt D.reboot
24.对文件进行归档的命令为(B )
A.gzip B.tar C.dump D.dd
\25. NFS是( C )系统
A.文件 CbPLinux联盟B 磁盘 CbPLinux联盟C.网络文件 CbPLinux联盟D.操作
\26. 下列那一个指令可以设定使用者的密码( C )
A.pwd B.newpwd C.passwd D.password
\27. 下列那一个指令可以切换使用者身份( D )
A.passwd B.log C.who D.su
\28. 下列那一个指令可以显示目录的大小( C )
A.dd B.df C.du D.dw
\29. 下列那一个不是压缩指令( D )
A.compress B.gzip C.bzip2 D.tar
\30. 下列那一个指令可以用来切换至不同的 runlevels( B )
A.tel CbPLinux联盟B telinit CbPLinux联盟C.goto CbPLinux联盟D.reboot
\31. 欲查询 bind 套件是否有安装,可用下列那一指令( D )
A.rpm -ivh bind*.rpm B.rpm -q bind*.rpm
C.rpm -U bind*.rpm D.rpm -q bind
\32. 欲安装 bind 套件, 应用下列那一指令( A )
A.rpm -ivh bind*.rpm B.rpm -ql bind*.rpm
C.rpm -V bind*.rpm D.rpm -ql bind
\33. 欲移除 bind 套件,应用下列那一指令( D )
A.rpm -ivh bind*.rpm B.rpm -Fvh bind*.rpm
C.rpm -ql bind*.rpm D.rpm -e bind
\34. 下列那一个指令可以用来查看系统负载情形( A )
A.w B.who c C.load D.ps
\35. 档案权限 755 , 对档案拥有者而言, 何义( A )
A.可读,可执行, 可写入 CbPLinux联盟B 可读 CbPLinux联盟C.可读,可执行 CbPLinux联盟D.可写入CbPLinux联盟CbPLinux联盟
36.下面哪个系统目录中存放了系统引导、启动时使用的一些文件和目录
( D )。
A./root B. /bin C. /dev D. /boot
\37. 如何删除目录 /tmp下的所有文件及子目录( D )。
A. del /tmp/* B. rm -rf /tmp C. rm -Ra /tmp/* D. rm –rf /tmp/*
38.可以用来对文件xxx.gz解压缩的命令是( C )
A.compress B. uncompress C. gunzip D. tar
39.对文件重命名的命令为(C)
A.rm B. move C. mv D. mkdir
\40. 一下哪个环境变量表示当前路径( B )。
A. PATH B. PWD C. HOME D.ROOT
*二、填空题********:*
1. /Sbin 目录用来存放系统管理员使用的管理程序
2.在Linux系统下,第二个IDE通道的硬盘(从盘)被标识为 hdb
3.vi编辑器具有三种工作模式,即:命令模式、文本编辑模式和 行编辑模式
4.linux文件系统中每个文件用 i节点 来标识
5.前台启动的进程使用复合键 CTRL+C 终止。
\6. 结束后台进程的命令是 kill
7.将前一个命令的标准输出作为后一个命令的标准输入,称之为 管道
8.增加一个用户的命令是 useradd
9.成批添加用户的命令是 newuser
\10. 检查已安装的文件系统/dev/had5是否正常,若检查有错,则自动修复,其命令及参数是
Fsck –a /dev/had5
11.把文件file1和file2合并成file3的命令是 cat file1 file2>file3
12.在/home目录中查找所有的用户目录的命令是 find /home –type d
\13. top 命令能够实时地显示进程状态信息。
\14. 利用管道技术统计当前目录下有多少个文件,该命令是 ls ./|wc –w
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yt3sQflg-1572060962385)(D:\typoraImage\wps1.jpg)]15.以下为 u盘插入usb接口后执行fdisk –l的结果。则要将该u盘挂装到/mnt/usb下的命令是 mount /dec/sdb1 /mnt/usb
\16. 在 Linux 系统中,压缩文件后生成后缀为.gz文件的命令是 gzip
\17. RPM有5种基本操作模式,即: 安装、查询、校验、升级、删除
18.将当前目录下的文件man.config 压缩为man.config.bz2 的命令是 bzip2 –z man.config
19.将/home/stu目录下所有的.gz压缩文件解压缩,包括子目录,命令是 gunzip –r /home/stu
20.将当前目录下的bin目录和hello、hello.c文件备份并压缩为binzxj.tar.gz文件的命令是 tar –czvf binzxj.tar.gz bin hello hello.c
\21. 将/home/ixdba目录做归档压缩,压缩后生成ixdba.tar.bz2文件,并将此文件保存到/home目录下,实现此任务的tar命令格式 tar -cjvf /home/ ixdba.tar.bz2 /home/ixdba
22.如下为命令终端下的一个截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ykue0nwZ-1572060962386)(D:\typoraImage\wps2.jpg)]
则,以下两句的执行结果是: the home path is $HOME
path=‘the home path is $HOME’
echo $path
\23. 以下为程序名为prog的程序内容。则 sh prog a b c d的执行结果为 C
set A B C D
shift
shift
echo $1
\24. RPM有5种基本操作模式,即: 。
\25. shell脚本程序test(具有可执行权限)只有如下两条语句,则sh test 5的运行结果是50.00
price=$10.00
echo $price
*三.简答题:*
1. 简述linux的几个运行级别及其相应的含义。
0-关机模式,
1-单用户模式,单用户只有系统管理员可以登录。
2-多用户模式,但是不支持文件共享,例如不支持NFS服务.这种模式不常用。
3-完全的多用户模式,支持NFS服务.最常用的用户模式,默认登录到系统的字符界面。
4-保留模式。
5-完全多用户模式,默认登录到X-window系统,也就是登录到linux图形界面。
6-重启模式,也就是执行关闭所有运行的进程,然后重新启动系统。
2.什么是链接?符号链接与硬链接的区别是什么?
链接是指用一个i节点对应多个文件名。硬链接是把文件的i节点号指向该i节点,
且链接计数器值加1。删除链接文件时计数器值减1,当其值为0时,i节点被释放。
符号链接是只有文件名的一个链接文件,并不指向一个真正的i节点。
在删除符号链接文件时与硬链接文件有区别。
3.使用进程调度启动,指定30分钟后(或在2008年12月28日晚上20点30分)将/home/stu目录里的文件备份并压缩为stu.tar.gz,并放到/home/temp目录里(当前/home/temp目录并不存在)。
(1) 编辑一个文件,如:atfile,内容如下:
mkdir /home/temp
tar –czvf /home/temp/stu.tar.gz /home/stu/*
(2) 执行at命令
at –f atfile now +30 minutes
解答2:
(1) 执行at命令
at now +30 minutes
(2) 回车出现at>提示符后,继续输入要做的命令
at> mkdir /home/temp
at> tar –czvf /home/temp/stu.tar.gz /home/stu/*
at>
4.Shell程序中,对用户变量赋值有哪些方式?简要说明每种赋值方式的使用方法。
(1) 等号赋值
1)在等号前后均不能有空格。
2)当需要将一个包含空格的字符串赋给用户变量时,应用单引号将该字符串括起来。
(2) 键盘赋值
由read命令来实现的。用法为:read 用户变量名
当shell程序执行到该行时,将等待用户从键盘输入,
当用户按下回车键时shell把你输入的内容赋给用户变量。
(3) 命令替换赋值
用法为:用户变量=命令
该语句将首先执行反向单引号之间的命令,
然后将其执行后输出的内容赋给该用户变量,在这种赋值方式中,
等号前后同样不能有空格,而且必须用反向单引号(即重音号)把命令括起来。
*四、综合应用:*
1.编写1个弹出式菜单的shell程序并实现其简单的菜单功能:
* MENU *
* 1.copy 2.rename *
* 3.remove 4.find *
* 5.exit *
即用户按下数字1,则提示用户输入源和目的文件名后执行复制;输入数字2,则提示用户输入要更名的文件或目录后执行更名操作;输入数字3,则提示用户输入要删除的文件并执行删除操作;输入数字4,则提示用户输入要查找的文件并执行查找操作;输入数字5,则退出该菜单shell程序的执行。
#! /bin/sh -
clear
while [ 0 ]; do
echo “************************************************”
echo " menu "
echo " 1.copy 2.rename "
echo " 3.remove 4.find "
echo " 5.exit "
echo “************************************************”
echo
echo -n " select:"
read choice
echo
case $choice in
1)
echo -n “source file:”
read src
echo
echo -n “destination fold:”
read des
cp -arf $src $des
if $?; then
echo “copy sucessful!”
else
echo " copy fail"
fi;;
2)
echo -n “the file to be renamed:”
read src
echo
echo -n “the new file:”
read des
mv $src $des
if $?; then
echo “rename sucessful!”
else
echo " rename fail"
fi;;
3)
echo -n “the file to be removed:”
read src
rm -rf $src
if $?; then
echo “remove sucessful!”
else
echo " remove fail"
fi;;
echo -n “the file to be found:”
read src
find $HOME -name $src;;
5) exit;;
*) echo “Invalid option”;;
esac
done
\2. 编写shell程序,实现自动删除50个用户账号的功能。账号名为stud1至stud50
#!/bin/sh
i=1
while [ $i -le 50 ]
do
userdel -r stud${i}
i= ( ( (( ((i+1 ))
done
echo “remove sucessful!”
else
echo " remove fail"
fi;;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7cIIiMdc-1572060962388)(D:\typoraImage\wps3.jpg)]3.用shell编写小九九乘法表程序,程序执行结果如下:
#! /bin/sh –
for i in 1 2 3 4 5 6 7 8 9
do
for j in 1 2 3 4 5 6 7 8 9
do
if ( test $j -le $i ) then
echo -ne expr $i \* $j
“\t”
else
echo
break
fi
done
done