鸟哥的Linux私房菜基础篇笔记--3

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)如果你将一个文件名删除,其实inodeblock都还是存在的,此时你可以通过另一个文件名来读取到正确的文件数据。也就是说当一把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 中,也就是启动扇区中。

4boot sector 中安装的是MBR和分区表,boot sector 剩余空间安装引导加载程序,一个boot sector 1024bytes ,一个MBR446bytes  ,一个分区表是64bytes

245.删除一个分区的时候的注意事项。

1)删除一个分区之前,一定要将这个分区卸载。

2)在/etc/fstab 如果有关于这个分区的内容,一定要删除掉。

3)如果删除的是swap ,那要先进行swapoff  

246.如果你想要将/home 单独挂载到一个独立的磁盘上。

1)插入磁盘。

2)格式化磁盘。

3)将磁盘挂载到 /my-disk

4cp  /home/*   /my-disk

5)将磁盘卸载。

6mount  磁盘名  /home

 

246.如果扇区/dev/hda3 有问题,但是他是挂载着的。

(1)umount  /dev/hda3

(2)fsck  /dev/hda3

 

246.如果有两个文件,file1file2,这两个文件互为硬链接文件,将file1删除,然后用vim重新建立一个同名的file1文件,请问如果修改file1文件的内容,file2的内容是否会被改变。

(1)答案是不会,因为当新建一个文件的时候,文件系统会重新分配inode block 。不会和之前的有联系。

 

249.压缩文件技术简介。

(1)在计算机存储中,一个字符会占一个字节(byte),也就是8位二进制数,由于我们记录的数字是十进制的1,考虑计算机所谓的二进制,1会在最右边占据1bit(一个二进制位数), 而其他的7bit会被自动填上0。其实在这样的例子中,那7bit应该是“空的”,不过,为了要满足目前我们的操作系统的访问,所以就会将该数据转为byte的形式来记录了,也就是会记录8位,而一些比较聪明的就利用一些复杂的计算方式,将这些没有使用到的空间“丢”出来,以让文件占用的空间变小,这就是压缩的技术。

(2)还有一种压缩技术,如果你的数据为11111.......” ,共有1001 ,那么压缩技术会记录“1001”,而不是真的有1001存在。

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.关于shellPID号。

(1)“$”本省也是一个变量,这个代表的是目前这个shell的线程代号,即是所谓的PID号。

(2)echo  $$  : 输出的数字就是shellPID

 

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 shellbash 环境中所读取的个人偏好配置文件其实主要有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  ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值