209.VFS虚拟文件系统。
(1)整个Linux系统都是通过VFS的内核功能去读取文件系统的,也就是说,整个Linux认识的文件系统其实都是VFS在进行管理,我们用户并不知道每个分区上头的文件系统是什么,VFS会主动帮我们做好读取的操作。省去我们需要自行设置读取文件系统的定义。
210.df 的相关用法。
(1)-i 不显示硬盘的容量,而是显示inode的数量。
212.du的相关用法。
(1)评估文件系统的磁盘使用量(常用于评估目录所占容量)
(2)du 在不加入任何参数的时候,只会显示目录的使用容量和总是用容量,不会显示文件的使用容量。
(3)和df 不一样的是,du 这个命令其实会直接到文件系统内去查找所有的文件数据。
213.多个文件名对应到同一个inode号码,hard link 的意义。
(1)注意说的是文件名对应一个inode号码,一个文件只能对一个inode号码。
(2)这个就是hard link 使用过后的效果,hard link 只是在一个目录下新建一个文件名连接到某inode号码的关联记录而已。既不会增加inode也不会耗用block。
(3)如果你将一个文件名删除,其实inode与block都还是存在的,此时你可以通过另一个文件名来读取到正确的文件数据。也就是说当一把hard link 的源文件删除了,hard link文件还是可以使用的,但是symbolic link 就不可以了。
214.block的使用限制。
(1)不能跨文件系统。
(2)不能连接到目录。
215.ln 的用法。
(1)ln 源文件 目标文件 这个就是hard link
(2)ln -s 源文件 目标文件 这个就是 symbolic link
215.硬链接和软连接的主要区别。、
(1)硬链接链接的是inode 。
(2)软连接连接的是文件名。
(3)软连接可以连接目录。
216.当新建一个目录时连接数问题。
(1)当我们在新建一个新的目录时,新的目录的连接数为2,而上层目录的链接数则会增加一。
/tmp/testing为例。
在目录下面有 . 和 .. ,其中/tmp/testing/ . 代表的就是/tmp/testing ,而/tmp/testing/.. 代表的是/tmp ,所以说 目录的inode 链接这 /tmp/testing 和 /tmp/testing/. 这两个文件名。/tmp/testing/.. 和 /tmp 链接着同一个inode 所以/tmp 的数字会加一。
217.如何找出一个目录所在的磁盘。
(1)df / 就会显示/所在的磁盘及其分区。
220.在使用fdisk 的时候。
(1)在进行新分区的时候,在指定大小的时候。
1--5005 default 5005 : +512M
这个时候可以直接指定大小。
226.如何检查一个硬盘或软盘扇区是否有坏轨。
(1)badblocks -sv /dev/sdc6
229.如果挂载参数要改变或者/根目录出现“只读”状态的时候,如何处理。
(1)重新挂载 ; mount -o remount ,rw,auto / : 将根重新挂载。当你进入单用户维护模式的时候,你的根目录会被系统挂载为只读,如果这个时候需要修改/里的东西,那就要这样重新挂载了。
230.将一个目录挂载到另一个目录上。
(1)mount --bind /home /mnt/home
看起来,其实链接到同一个inode,通过这个mount --bind 的功能,你可以将某个目录挂载到其他目录去,而并不是整个文件系统,所以从此进入/mnt/home 就是进入/home的意思。
230.卷标名的查询。
(1)dumpe2fs -h /dev/sdc2 (会显示磁盘的superblock信息,显示的第一行就是卷标名)
231.使用卷标名挂载。
(1)mount -L “卷标名” /mnt/hc
232.修改卷标名。
(1)e2label /dev/sdb1 “my_test”
232.tune2fs 的用法。
(1)-l : 类似dump2fs -h 的功能,将super block的信息打印出来。
(2)-L : 类似e2label -L 的功能,可以修改文件系统的卷标名。
233.hdparm 的用法。
(1)hdparm -i /dev/sdb2 : 将内核检测到的硬盘参数显示出来。
(2)hdparm -Tt /dev/sdb2 : 测试硬盘的读写性能。
236./etc/fstab的语法是不可以错的。
(1)如果这个文件写错了,则你的Linux很可能将无法顺利的开机完成,所以修改完/etc/fstab的内容后必须要进行的命令 mount -a
(2)/etc/fstab是开机时的配置文件,不过,实际文件系统的挂载是记录到/etc/mtab和/proc/mounts这两个文件的,每次我们在改动文件系统的挂载的时候,也会同时更动这两个文件,但是,一旦你的/etc/fstab 文件的数据有误,导致无法开机成功,而进入单用户维护模式当中,那个时候/可是只读的状态,当然你就无法修改/etc/fstab ,也就无法更新/etc/mtab ,这个时候我们可以用下面的命令。
mount -n -o remount,rw / -n 表示不写入 /etc/mtab 怕出现问题。
241.关于一个文件系统的boot sector 和 superblock 的安装。
(1)当文件系统的一个block的大小是1024bytes (1k)时。
一个superblock的大小是1024bytes ,一个boot sector(启动扇区,内有MBR和引导加载程序) 的大小是1024bytes 。
所以boot sector 和 superblock 会各自占用一个block 。
(2)当文件系统的一个block的大小大于1024bytes (2k,4k)时。
boot sector 和 superblock 会安装在同一个block中,就是第一块block 。
(3)所以我们说在比较大的block尺寸中,我们可以说你能够将引导加载程序安装到superblock所在的block所在的号码中,就是0号,但是事实是还是安装到该文件系统的最前面的1024bytes 中,也就是启动扇区中。
(4)boot sector 中安装的是MBR和分区表,boot sector 剩余空间安装引导加载程序,一个boot sector 1024bytes ,一个MBR是446bytes ,一个分区表是64bytes
245.删除一个分区的时候的注意事项。
(1)删除一个分区之前,一定要将这个分区卸载。
(2)在/etc/fstab 如果有关于这个分区的内容,一定要删除掉。
(3)如果删除的是swap ,那要先进行swapoff 。
246.如果你想要将/home 单独挂载到一个独立的磁盘上。
(1)插入磁盘。
(2)格式化磁盘。
(3)将磁盘挂载到 /my-disk 。
(4)cp /home/* /my-disk 。
(5)将磁盘卸载。
(6)mount 磁盘名 /home 。
246.如果扇区/dev/hda3 有问题,但是他是挂载着的。
(1)umount /dev/hda3 。
(2)fsck /dev/hda3 。
246.如果有两个文件,file1和file2,这两个文件互为硬链接文件,将file1删除,然后用vim重新建立一个同名的file1文件,请问如果修改file1文件的内容,file2的内容是否会被改变。
(1)答案是不会,因为当新建一个文件的时候,文件系统会重新分配inode 和 block 。不会和之前的有联系。
249.压缩文件技术简介。
(1)在计算机存储中,一个字符会占一个字节(byte),也就是8位二进制数,由于我们记录的数字是十进制的1,考虑计算机所谓的二进制,1会在最右边占据1个bit(一个二进制位数), 而其他的7个bit会被自动填上0。其实在这样的例子中,那7个bit应该是“空的”,不过,为了要满足目前我们的操作系统的访问,所以就会将该数据转为byte的形式来记录了,也就是会记录8位,而一些比较聪明的就利用一些复杂的计算方式,将这些没有使用到的空间“丢”出来,以让文件占用的空间变小,这就是压缩的技术。
(2)还有一种压缩技术,如果你的数据为“11111.......” ,共有100个1 ,那么压缩技术会记录“100个1”,而不是真的有100个1存在。
289.中文乱码的问题。
原因都有哪些
(1)你的Linux系统默认支持的语系数据:这与/etc/sysconfig/i18n有关。
(2)你的终端接口(bash)的语系,这与LANG这个变量有关。
(3)你的文件原本的编码。
(4)打开终端的软件,例如xshell 。
294.shell的意义。
(1)你必须要“输入”一个命令后,硬件才会通过你执行的命令来工作,那么硬件如何知道你执行的命令呢,那就是kernel的控制工作了,也就是说,我们必须要通过“shell”将我们输入的命令与内核通信,好让你内核可以控制硬件来正确无误的工作。
(2)其实shell的功能只是提供用户操作系统一个接口,因此这个shell需要调用其他软件才好,shell也被称为解释器,man chmod chown vi fdisk mkfs 等命令,这些命令都是独立的应用程序,但是我们可以通过shell(就是命令行模式)来操作这些应用程序。
300.影响bash环境操作的变量。
(1)所有的执行都需要一个执行码,你真正与Linux通信是在登录Linux之后,这个时候你就有了一个bash的执行程序,也才可以正真经由bash与系统通信。而在进入shell之前,由于系统需要一些变量来提供数据的访问(或者是一些环境的设置参数值,例如是否要显示彩色等),所以就有了一些所谓的 环境 变量需要读入系统了。
301.双引号和单引号对于变量的区别。
(1)echo “lang is $LANG”
lang is en_US.UTF8
(2)echo ‘lang is $LANG’
lang is $LANG
302.变量的两种用法。
(1)name=”Vbird’s name ”
(2)name=Vbird \’s \ name
用\ 将特殊的字符转义。
302.子进程的概念。
(1)在我目前这个shell的情况下,去打开另一个新的shell,新的那个shell就是子进程,在一般情况下,父进程的自定义变量是无法在子进程内使用的,但是通过export 将变量变成环境变量后,就能够在子进程下面应用了。
306.关于shell的PID号。
(1)“$”本省也是一个变量,这个代表的是目前这个shell的线程代号,即是所谓的PID号。
(2)echo $$ : 输出的数字就是shell的PID。
307.子进程的实现。
(1)我们在原本的bash下面执行另一个bash ,结果操作的环境接口会跑到第二个bash中去(就是子进程),那原本的bash就会处于暂停的情况(就是sleep)。
310.环境变量和bash的操作环境的区别。
(1)举个例子,PS1并不是环境变量,但是PS1会改变提示符的内容。
(2)个人理解,如果把bash想成一个圆,那么环境变量就是圆内的东西,bash的操作环境就是在外面控制着这个圆的那个东西。
311.在bash环境中,1/3的值是什么。
(1)bash环境中数值计算,默认只能到达整数类型,所以1/3的值是0.
311.数组。
(1)数组的定义
var[0]=”small min”
var[1]=”big min”
var[2]=”nice min”
(2)数组的输出
echo ${var[0]} ${var[1]} ${var[2]}
319.同一个账号同时登陆的history写入。
(1)如果root这个账号有多个人同时登陆,因为等到注销的时候linux才会更新记录文件,所以其他的bash的操作命令都不会被记录,只有最后一个bash的操作命令会被记录,(其实有被记录,只是被后来的最后一个bash所覆盖更新了)
320.路径与命令查找顺序。
(1)以相对路径或者绝对路径执行命令,例如“/bin/ls”或“./ls”
(2)由alias找到该命令来执行。
(3)由bash内置的(builtin)命令来执行。
(4)通过$PATH这个变量的顺序找到的第一个命令来执行。
(5)type -a ls 会显示ls 被执行的查找顺序。
(6)/bin/ls 和 ls 执行的结果是有不同的,/bin/ls 的显示结果没有颜色的区分,但是ls 有颜色的区分。执行ls 之后,首先找到的是命令的别名,执行/bin/ls,首先通过PATH找到的是/bin/ls 。
321.记录登录时的提示消息和登录后提示消息的文件。
(1)/etc/issue 在文字端的登录接口处,控制提示信息。
(2)/etc/motd 在登录之后,会显示出的信息。
直接在里面写信息就可以
323.login 与 non-login的区别。
(1)login ,登录的时候取得的是login shell , 当你输入账户和密码以登录的时候就是login。
login shell 读取设置文件的顺序
/etc/profile -----> /root/.bash_profile -------> 开始操作bash
/etc/inputrc /root/.bashrc
/etc/profile.d/* /etc/bashrc
/etc/sysconfig/i18n
(2)/etc/profile :这个文件中的是系统整体的设置,这个配置文件可以利用用户的标识符来决定很多重要的变量数据,这个也是login 读取bash时一定会读取的文件。
bash 的login shell 情况下所读取的整体环境配置文件(/etc/下的文件)其实只有/etc/profile ,但是/etc/profile 还会调用其他的配置文件。
(3)/root/.bash_profile
bash 在读完了整体环境设置文件后,接下来就会读取个人配置文件,在login shell的bash 环境中所读取的个人偏好配置文件其实主要有3个。
/root/.bash_profile
/root/.bash_login
/root/.profile
其实bash 的 login shell 设置只会读取上面文件中的一个,如果/root/.bash_profile 存在,那么其他两个文件就不会被读取了。
(4)设置bash的配置文件后,如果想要立即生效,用什么命令。
source /root/.bash_prifile
source 读入环境配置文件的命令
(5)non-login shell 读取的文件。
/root/.bashrc 调用/etc/bashrc 调用/etc/profile.d/*
/etc/bashrc 的意义。
依据不同的UID规定umask的值。
依据不同的UID规定提示符(就是PS1变量)
(6)/etc/skel/ 这个目录中有一些设置的文件的模板。
(7)/etc/.bash_logout 这个文件记录的是当我注销bash 的时候系统帮我做完什么操作之后离开。默认情况下,注销的bash只是会帮我们清掉屏幕的信息而已。
329.输出的类型。
(1)标准输入(stdin):代码为0,使用< 或者<<
(2)标准输出(stdout):代码为1 , 使用>或者>>
(3)错误输出(stderr):代码为2, 使用2>或者2>>
349.使用正则表达式的时候注意事项。
(1)使用正则表达式的时候,需要特别留意当时环境的语系为何,否则可能会发现与别人不相同的选取结果
349.正则表达式中的特殊符号代表的意义。
(1)[:alnum:] 代表英文大小写字符及数字即 0-9 a-z A-Z
(2)[:alpha:] 代表任何英文字母 a-z A-Z
(3)[:upper:] 代表任何大写英文字母A-Z
(4)[:digit:] 代表任何数字 0-9
使用例子;
grep ‘[[:digit:]]’ /etc/passwd , 要在外面加一个[]
注意
ls find 用的是通配符
find / -name ‘????.txt’ 找到/下名字中有四个字符的txt文件
ls /root/????.txt 找到/root下面的名字中有四个字符的txt文件
grep egrep 用的是正则表达式、扩展正则表达式
egrep -n ‘go?d’ 文件 文件中o出现了0次或者是1次,并且左边是g右边是d的行。
369.关于语系的注意问题。
(1)由于编码系统的不同,不同的语系(LANG)会造成正则表达式选取数据的区别,因此可利用特殊符号如[:upper:] 来替代编码范围较佳。
374.如果一行的内容太多。
(1)至于如果一行的内容太多,则可以使用 \ 然后回车,来扩展至下一行。
vim test.sh
echo “aaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
bbbbbbbbbbbbbbbbbbbbbbbbbbbbb\
cccccccccccccccccccccc”
执行脚本之后,内容会显示在一行。
(2)至于 \t \n 的使用,要使用echo -e
376.在脚本中exit 命令。
(1)在程序中,如果我们要退出当前的脚本,就使用exit 这个命令。
exit后面可以加数字,exit会将这个数字回传给系统,echo $? 会显示这个值。
#vim test.sh
exit 2
#./test.sh
#echo $?
2
378.变量的特殊定义
(1)file1=$filename$date1
定义file1这个变量
379.当执行脚本时候
(1). test.sh 和 source test.sh 会在当前进程中执行,也就是说,在脚本中定义的变量也会在命令行中生效。
(2)bash test.sh 和 sh test.sh 和 /root/test.sh 和 ./test.sh ,会在当前进程中开启一个子进程,也就是说,在脚本中定义的变量在命令行中无效,父进程会进入休眠状态。
383.在脚本中的变量。
(1)./test.sh one two three four five
(2)$0 代表的是脚本的文件名,/root/test.sh
(3)$1 代表的是在执行脚本的时候在后面加上第一个参数。
(4)$2 第二个参数。
(5)$# 代表后接的参数的个数
(6)$@ 代表 “$1”、”$2”、”$3”、”$4”,每个变量是独立的
(7)$* 代表”$1c$2c$3c$4” 其中c 为分割字符,默认为空格键
(8)$@ 和$* 的意思就是将在脚本后面加上的参数都输出出来。
385.脚本中判断条件。
(1)[ -e test.sh -a -e test.txt ]
相当于
[ -e test.sh ]&&[ -e test.txt ]