鸟哥的Linux私房菜(第四版)读书笔记

最佳实践

  1. 如果是在写程序 (shell scripts) 来管理系统的条件下,务必使用绝对路径的写法
  2. 如果是网络服务的问题时,请到/var/log/这个目录里头去查阅一下 log file(登录文件),这样可以几乎解决大部分的问题了
  3. 开机自动挂载可参考/etc/fstab之设置,设置完毕务必使用 mount -a 测试语法正确否;
  4. 建议您在学习 tar 时,将“ -f filename ”与其他选项独立出来,会比较不容易发生问题
  5. 如果你并不觉得时间是你的成本考虑,那么使用 xz 会比较好!如果时间是你的重要成本,那么 gzip 恐怕是比较适合的压缩软件喔!
  6. 因为断行字符以及 DOS 与 Linux 操作系统下面一些字符的定义不同,因此, 不建议你在 Windows 系统当中将文件编辑好之后,才上传到 Linux 系统,会容易发生错误问题。 而且,如果你在不同的系统之间复制一些纯文本时,千万记得要使用 unix2dos 或 dos2unix 来转换一下断行格式啊
  7. 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给
  8. 一般鸟哥在重新开机时,都会下达如下的指令喔: [root@study ~]# sync; sync; sync; reboot
  9. 过去我们在进行测试时,都会将数据移动到 /tmp 下面去练习
  10. 如果你是以 tarball 的方式来安装你的数据,那么你的 man page 可能会放置在 /usr/local/softpackage/man 里头,那个 softpackage 是你的套件名称, 这个时候你就得以手动的方式将该路径加到 /etc/man_db.conf 里头,否则使用 man 的时候就会找不到相关的说明文档啰
  11. 因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用跳脱字符 \ 来让他失去特殊意义才行

磁盘分区

  1. 你应该要通过 lsblk 或 blkid 先找到磁盘,再用 parted /dev/xxx print 来找出内部的分区表类型,之后才用 gdisk 或 fdisk 来操作系统
  2. 请注意,使用的“设备文件名”请不要加上数字,因为 partition 是针对“整个磁盘设备”而不是某个 partition 呢!所以执行“ gdisk /dev/vda1 ” 就会发生错误啦!要使用 gdisk /dev/vda 才对!
  3. 文件系统的读写要能够有最优化,最好能够搭配磁盘阵列的参数来设计
  4. 不要去处理一个正在使用中的分区

创建镜像文件

  1. mkisofs指令创建镜像文件

  2. 镜像文件可不能以数据格式烧录成为光盘/DVD的!

    你必须要使用烧录程序的功能, 将他以“镜像文件格式”烧录成为光盘或DVD才行,

    才能够进一步的使用,包括安装或更新你的 Linux 啦

whereislocate效率高的原因

  1. 因为 whereis 只找系统中某些特定目录下面的文件而已,
  2. locate 则是利用数据库来搜寻文件名,
  3. 当然两者就相当的快速, 并且没有实际的搜寻硬盘内的文件系统状态,比较省时间啦

cd在最近两个目录里切换

  1. -代表前一个工作目录 (在最近两个目录里互相切换)

转语系编码

  1. iconv -f 原本编码 -t 新编码 filename [-o newfile]
  2. 你的终端接口 (bash) 的语系: 这与 LANG, LC_ALL 这几个变量有关
  3. 你的 Linux 系统默认支持的语系数据:这与 /etc/locale.conf 有关

直接给电脑断电(小时候隐蔽自己打游戏)后,下次开机慢的原因

  1. 但若不正常关机(如跳电、死机或其他不明原因),
  2. 由于数据尚未回写到磁盘内,
  3. 因此重新开机后可能会花很多时间在进行磁盘检验,
  4. 甚至可能导致文件系统的损毁(非磁盘损毁)

linux正确关机目的

  1. 由于Linux系统使用了非同步的磁盘/内存数据传输模式,
  2. 同时又是个多用户多任务的环境,
  3. 所以你不能随便的不正常关机,关机有一定的程序喔!错误的关机方法可能会造成磁盘数据的损毁呢

得到ASCII code对照信息

  1. echo password | od -t oCc echo
  2. 可以在屏幕上面显示任何信息,而这个信息不由屏幕输出,而是传给od去继续处理!

xargs指令的用武之地

  1. 很多指令其实并不支持管线命令,
  2. 因此我们可以通过xargs 来提供该指令引用 standard input 之用!

FAT文件系统的磁盘重组目的

  1. 通过磁盘重组将同一个文件所属的 blocks 汇整在一起,这样数据的读取会比较容易啊

计算机的定义

  1. 接受使用者输入指令与数据,
  2. 经由中央处理器的数学与逻辑单元运算处理后,
  3. 以产生或储存成有用的信息

什么是SATA与SAS

  1. 个人计算机常见的磁盘接口有两种, 分别是SATA与SAS接口

为什么需要格式化(文件系统)

  1. 这是因为每种操作系统所设置的文件属性/权限并不相同,
    1. 一个文件有若干个属性,
    2. 包括读写执行(r, w, x)等基本权限,
    3. 及是否为目录 (d) 与文件 (-) 或者是链接文件 (l) 等等的属性!
    4. 要修改属性的方法在前面也约略提过了(chgrp, chown, chmod
  2. 为了存放这些文件所需的数据,因此就需要将分区进行格式化,
  3. 以成为操作系统能够利用的“文件系统格式(filesystem)”

DOS系统下文件与linux文件的区别

  1. 我们也可以利用 cat -A来观察以 DOS (Windows 系统) 创建的文件的特殊格式,
  2. 也可以发现在 DOS 使用的断行字符为 ^M$ ,我们称为 CR 与 LF 两个符号。
  3. 而在 Linux 下面,则是仅有 LF ($) 这个断行符号
    1. cat ~/passwd | tr -d ‘\r’ > ~/passwd.linux # 那个 \r 指的是 DOS 的断行字符

DOS文件与linux文件转换

  1. 将 /etc/passwd 转存成 dos 断行到 /root/passwd 中,再将 ^M 符号删除
  2. [dmtsai@study ~]$ cp /etc/passwd ~/passwd && unix2dos ~/passwd

双系统

  1. vfat:同时被Linux与Windows所支持的文件系统类型。
  2. 如果你的主机硬盘内同时存在Windows与Linux操作系统,为了数据的交换, 确实可以创建一个vfat的文件系统

-”在数据处理中的作用

  1. 在管线命令当中,
  2. 常常会使用到前一个指令的 stdout 作为这次的 stdin ,
  3. 某些指令需要用到文件名称 (例如 tar) 来进行处理时,
  4. 该 stdin 与 stdout 可以利用减号 “-” 来替代
  5. 简单的想法中,你可以将 - 想成是在内存中的一个设备(缓冲区)

操作系统作用

  1. 驱动所有的硬件,并且提供一个发展软件的参考接口来给工程师开发软件
  2. 让CPU可以开始判断逻辑与运算数值、 让内存可以开始载入/读出数据与程序码、让硬盘可以开始被存取、让网卡可以开始传输数据、 让所有周边可以开始运行

磁盘拷贝

  1. 因为 dd指令可以读取磁盘设备的内容(几乎是直接读取扇区"sector"),然后将整个设备备份成一个文件呢!

linux下的磁盘

  1. 正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境下面,为了加速,可能就会使用 /dev/vd[a-p] 这种设备文件名喔

    1. 使用侦测到的顺序来决定设备文件名,并非与实际插槽代号有关

    2. 早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master Boot Record) 格式

      新的磁盘分区格式,称为 GPT (GUID partition table)

  2. 如果磁盘已无未分区的容量,可以考虑使用大型文件取代磁盘设备的处理方式,通过 dd 与格式化功能

  3. 在默认的情况下,Linux是将光驱的数据放置到/media/cdrom里头

文件系统

  1. 文件的类型
    1. 一般正规文件 (f), 设备文件 (b, c), 目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
  2. 目录的内容在记录文件名, 一般文件才是实际记录数据内容的地方
  3. 根目录的上一层(…)与根目录自己(.)是同一个目录
  4. 主文件夹还有一个代码,那就是“ ~ ”符号

默认权限

  1. umask 的分数指的是“该默认值需要减掉的权限
  2. root 的 umask 默认是 022 , 这是基于安全的考虑啦~至于一般身份使用者,通常他们的 umask 为 002 ,亦即保留同群组的写入权力

inode与block

  1. 文件系统通常会将这两部份的数据分别存放在不同的区块,

    权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中

  2. 事实上除了第一个 block group 内会含有 superblock 之外,后续的 block group 不一定含有 superblock , 而若含有 superblock 则该 superblock 主要是做为第一个 block group 内 superblock 的备份咯

  3. 文件系统能够创建的文件数量与 inode 的数量有关

  4. inode 本身并不记录文件名,文件名的记录是在目录的 block 当中

  5. 我们可以通过判断 inode 号码来确认不同文件名是否为相同的文件喔

  6. 当你使用“ ll / ”时,出现的目录几乎都是 1024 的倍数,为什么呢?因为每个 block 的数量都是 1K, 2K, 4K

指令浅谈

  1. which寻找“可执行文件”
    1. history 是“bash 内置的指令”啦! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的啊
  2. whereis由一些特定的目录中寻找文件文件名
  3. awk后面接两个单引号并加上大括号 {} 来设置想要对数据进行的处理动作
    1. 是“以行为一次处理的单位”, 而“以字段为最小的处理单位”
  4. lsblk列出系统上的所有磁盘列表
  5. ulimit限制使用者的某些系统资源
    1. 包括可以打开的文件数量, 可以使用的 CPU 时间,可以使用的内存总量等等
    2. 若改天你一直无法创建一个大容量的文件,记得瞧一瞧 ulimit 的信息喔!
  6. awk处理每一行的字段内的数据,而默认的字段的分隔符号为 “空白键" 或 “[tab]键”
  7. date可以格式化输出,如:date +%Y/%m/%d
  8. touch目的在修改文件的时间参数,但亦可用来创建空文件
  9. locale系统是列出目前 Linux 主机内保有的语系文件, 这些语系文件都放置在: /usr/lib/locale/ 这个目录中
  10. file看看该文件是属于什么文件格式
    1. 用来判断使用 tar 包裹时,该 tarball 文件是使用哪一种压缩功能哩
  11. cat/more/less可以使用不同的方式来读取纯文本文件
  12. zcat/zmore/zless可以对应于 cat/more/less 的方式来读取纯文本文件被压缩后的压缩文件!

指令返回值

  1. 如果成功的执行该指令, 则会回传一个 0 值,
  2. 如果执行过程发生错误,就会回传“错误代码”才对!一般就是以非为 0 的数值来取代

指令搜寻的顺序

  1. 通过 type -a ls 也可以查询的到啦

PATH

  1. PATH 就是可执行文件搜寻的路径啦~
  2. 目录与目录中间以冒号(:)分隔,
  3. 由于文件的搜寻是依序由 PATH 的变量内的目录来查询,所以,目录的顺序也是重要的喔

何谓多用户 ( Multi-user ) 多任务 ( Multitask )

  1. Multiuser 指的是 Linux 允许多人同时连上主机之外,每个使用者皆有其各人的使用环境,并且可以同时使用系统的资源!
  2. Multitask 指的是多任务环境,在 Linux 系统下, CPU 与其他例如网络资源可以同时进行多项工作

指令历史

  1. ~/.bash_history 记录的是前一次登陆以前所执行过的指令,

  2. 而至于这一次登陆所执行的指令都被暂存在内存中,

  3. 当你成功的登出系统后,该指令记忆才会记录到 .bash_history 当中!

  4. 如果我想要执行上一个指令, 除了使用上下键之外,我可以直接以“ !! ” 来下达上个指令的内容,

    此外, 我也可以直接选择下达第 n 个指令,“ !n ”来执行,

    也可以使用指令标头,例如 “ !vi ”来执行最近指令开头是 vi 的命令行!

指令太长换行写

  1. 指令太长的时候,可以使用反斜线 (\) 来跳脱[Enter]符号,使指令连续到下一行。
  2. 注意!反斜线后就立刻接特殊字符,才能跳脱!

使用帮助文档

  1. man,info, /usr/share/doc/
  2. 在终端机模式中,如果你知道某个指令,但却忘记了相关选项与参数,请先善用 --help 的功能来查询相关信息;
  3. 当有任何你不知道的指令或文件格式这种玩意儿,但是你想要了解他,请赶快使用man或者是info来查询!
  4. 而如果你想要架设一些其他的服务,或想要利用一整组软件来达成某项功能时,请赶快到/usr/share/doc 下面查一查有没有该服务的说明文档喔!

硬件常识

  1. 显存
    1. 因为每个图像显示的颜色会占用掉内存, 因此显卡上面会有一个内存的容量,这个显存容量将会影响到你的屏幕分辨率与色彩深度的喔
    2. 显卡厂商直接在显卡上面嵌入一个3D加速的芯片,这就是所谓的GPU称谓的由来
  2. CPU频率
    1. 外频指的是CPU与外部元件进行数据传输时的速度,
    2. 倍频则是CPU内部用来加速工作性能的一个倍数,
    3. 两者相乘才是CPU的频率速度
      1. 例如 Intel Core 2 E8400 的内频为 3.0GHz,而外频是333MHz,因此倍频就是9倍啰!(3.0G=333Mx9, 其中1G=1000M)
  3. CPU设计
    1. 新的 CPU 设计中,已经将北桥的内存控制芯片整合到 CPU 内,
      1. 因为现在没有所谓的北桥了 (整合到 CPU 内),因此,CPU 的频率设计就无须考虑得要同步的外频,只需要考虑整体的频率即可
    2. 而 CPU 与内存、显卡沟通的总线通常称为系统总线。
      1. 内存使用系统总线带宽来与 CPU 沟通。而显卡则通过PCI-E的序列信道设计来与CPU沟通
    3. 南桥就是所谓的输入输出(I/O)总线,主要在联系硬盘、USB、网卡等周边设备
  4. ROM
    1. 这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器(Read Only Memory, ROM)。
    2. ROM是一种非挥发性的内存
  5. CMOS
    1. 记录主板上面的重要参数, 包括系统时间、CPU电压与频率、各项设备的I/O位址与IRQ等,由于这些数据的记录要花费电力,因此主板上面才有电池
  6. BIOS
    1. BIOS为写入到主板上某一块 flash 或 EEPROM 的程序(再次说明, 固件就是写入到硬件上的一个软件程序)
    2. 他可以在开机的时候执行,以载入CMOS当中的参数, 并尝试调用储存设备中的开机程序,进一步进入操作系统当中
    3. 这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了
  7. LVM与软件磁盘阵列(software raid)
    1. 这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM, RAID)
  8. 固态硬盘
    1. 固态硬盘最大的好处是,它没有马达不需要转动,而是通过内存直接读写的特性,
    2. 因此除了没数据延迟且快速之外,还很省电
  9. 扇区 (sector)
    1. 这个小区块就是磁盘的最小物理储存单位
    2. 原本硬盘的扇区都是设计成 512Byte 的容量
  10. 磁道(track)
    1. 那同一个同心圆的扇区组合成的圆
  11. 柱面 (cylinder)
    1. 由于磁盘里面可能会有多个盘片,因此在所有盘片上面的同一个磁道可以组合成所谓的柱面
    2. 通常那是文件系统的最小单位,也就是分区的最小单位啦
  12. Linux 的实体内存最后都会被用光!这是正常的情况!可加速系统性能
  13. 单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符
  14. 主板上面都会列出这个主板的开发商与主板的型号,知道这两个信息就可以找到驱动程序了。 另外,显卡上面有个小小的芯片,上面也会列出显卡厂商与芯片信息
  15. 目前传统的硬盘由于其物理组成的限制,一般极限速度大约在 150~200MByte/s 而已啦
    1. 硬盘上头含有一个缓冲内存,这个内存主要可以将硬盘内常使用的数据高速缓存起来,以加速系统的读取性能
  16. 较高阶的硬件通常会向下相容旧有的软件,但较高阶的软件可能无法在旧机器上面安装

shell常识

  1. 定义

    1. 只要能够操作应用程序的接口都能够称为壳程序
    2. 狭义的壳程序指的是命令行方面的软件,包括本章要介绍的 bash 等。
    3. 广义的壳程序则包括图形接口的软件!因为图形接口其实也能够操作各种应用程序来调用核心工作啊!
  2. 作用

    1. 我们必须要通过“ Shell ”将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作
  3. env指令列出目前的 shell 环境下的所有环境变量与其内容。

    1. 变量的取用利用 echo 就能够读出,只是需要在变量名称前面加上 $ ,

      或者是以 ${变量} 的方式来取用都可以

    2. 一般的状态下,父程序的自订变量是无法在子程序内使用的。但是通过 export 将变量变成环境变量后,就能够在子程序下面应用了

  4. 使用者默认登陆取得的 shell 记录于 /etc/passwd 的最后一个字段

    1. 当我们顺利的在终端机 (tty) 上面登陆后, Linux 就会依据 /etc/passwd 文件的设置给我们一个 shell (默认是 bash),然后我们就可以依据上面的指令下达方式来操作 shell
  5. issue 这个文件的内容也是可以使用反斜线作为变量取用喔

  6. 利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中

  7. [ctrl]+a/[ctrl]+e分别是让光标移动到整个指令串的最前面 ([ctrl]+a) 或最后面 ([ctrl]+e)

  8. 在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反单引号“指令”或 “$(指令)”

bash下的别名

  1. egrepgrep -E是类似命令别名的关系啦
  2. llls -al

bash下的随机数

  1. 在 BASH 的环境下,这个 RANDOM 变量的内容,介于 0~32767 之间
    1. 万一我想要使用 0~9 之间的数值呢?
    2. 呵呵~利用 declare 宣告数值类型, 然后这样做就可以了:
    3. declare -i number=$RANDOM*10/32768 ; echo $number 8

处理机集群发展

  1. 这就是三国演义里面谈到的“天下大势,分久必合、合久必分”的名言啊!
  2. 从早期的贵森森的大型主机分配数个终端机的集中运算机制,
  3. 到 2010 年前个人计算机运算能力增强后,大部分的运算都是在台式机或笔记本上自行达成, 再也不需要跑去大型主机取得运算资源了!
  4. 到现在由于行动设备的发达,产生的庞大数据需要集中处理,因而产生云端系统的需求!让信息/资源集中管理! 这不是分分合合的过程吗?^_^

vim的操作记录

  1. 那个记录动作的文件就是:~/.viminfo
  2. 如果你曾经使用过 vim, 那你的主文件夹应该会存在这个文件才对。这个文件是自动产生的, 你不必自行创建。而你在 vim 里头所做过的动作,就可以在这个文件内部查询到啰~

vim具有缩排功能

  1. 所谓的缩排,就是当你按下 Enter 编辑新的一列时,光标不会在行首,而是在与上一列的第一个非空白字符处对齐

vim操作

  1. 在 vi 下面作了很多的编辑动作之后,却想还原成原来的文件内容,应该怎么进行? 直接按下 :e! 即可恢复成文件的原始状态

vim设置

  1. 整体 vim 的设置值一般是放置在 /etc/vimrc 这个文件,
  2. 不过,不建议你修改他!
  3. 你可以修改 ~/.vimrc 这个文件 (默认不存在,请你自行手动创建!),将你所希望的设置值写入

多窗口工作

  1. 如果想要在新窗口启动另一个文件,就加入文件名,否则仅输入:sp 时, 出现的则是同一个文件在两个窗口间
  2. 两个文件同时在一个屏幕上面显示,你还可以利用“[ctrl]+w+↑”及“[ctrl]+w+↓”
  3. [ctrl]+w+ q其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q 啊

管线命令

  1. 意思是:“前面的指令所输出的讯息,请通过管线交由后续的指令继续使用”的意思
  2. 管线命令“ | ”仅能处理经由前面一个指令传来的正确信息,也就是 standard output 的信息,对于 stdandard error 并没有直接处理的能力

用数据流重导向合并文件

  1. cat services* >> servicesback

开机流程

  1. 这个开机管理程序的目的是在载入(load)核心文件,
    1. 开机管理程序除了可以安装在MBR之外, 还可以安装在每个分区的开机扇区(boot sector)
  2. 由于开机管理程序是操作系统在安装的时候所提供的,所以他会认识硬盘内的文件系统格式,因此就能够读取核心文件,
  3. 然后接下来就是核心文件的工作,开机管理程序与 BIOS 也功成圆满

linux版本

  1. “Kernel + Softwares + Tools + 可完整安装程序”的咚咚,我们称之为Linux distribution
  2. 要判断你的 Linux 核心是否为长期支持的版本, 可以使用“ uname -r ”来查阅核心版本

swap分区

  1. Linux 主机系统可以进入“休眠”模式的话,那么, 运行当中的程序状态则会被纪录到 swap 去,以作为“唤醒”主机的状态依据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值