最佳实践
- 如果是在写程序 (shell scripts) 来管理系统的条件下,务必使用绝对路径的写法
- 如果是网络服务的问题时,请到/var/log/这个目录里头去查阅一下 log file(登录文件),这样可以几乎解决大部分的问题了
- 开机自动挂载可参考/etc/fstab之设置,设置完毕务必使用 mount -a 测试语法正确否;
- 建议您在学习 tar 时,将“ -f filename ”与其他选项独立出来,会比较不容易发生问题
- 如果你并不觉得时间是你的成本考虑,那么使用 xz 会比较好!如果时间是你的重要成本,那么 gzip 恐怕是比较适合的压缩软件喔!
- 因为断行字符以及 DOS 与 Linux 操作系统下面一些字符的定义不同,因此, 不建议你在 Windows 系统当中将文件编辑好之后,才上传到 Linux 系统,会容易发生错误问题。 而且,如果你在不同的系统之间复制一些纯文本时,千万记得要使用 unix2dos 或 dos2unix 来转换一下断行格式啊
- 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给
- 一般鸟哥在重新开机时,都会下达如下的指令喔: [root@study ~]# sync; sync; sync; reboot
- 过去我们在进行测试时,都会将数据移动到 /tmp 下面去练习
- 如果你是以 tarball 的方式来安装你的数据,那么你的 man page 可能会放置在 /usr/local/softpackage/man 里头,那个 softpackage 是你的套件名称, 这个时候你就得以手动的方式将该路径加到 /etc/man_db.conf 里头,否则使用 man 的时候就会找不到相关的说明文档啰
- 因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用跳脱字符 \ 来让他失去特殊意义才行
磁盘分区
- 你应该要通过 lsblk 或 blkid 先找到磁盘,再用 parted /dev/xxx print 来找出内部的分区表类型,之后才用 gdisk 或 fdisk 来操作系统
- 请注意,使用的“设备文件名”请不要加上数字,因为 partition 是针对“整个磁盘设备”而不是某个 partition 呢!所以执行“ gdisk /dev/vda1 ” 就会发生错误啦!要使用 gdisk /dev/vda 才对!
- 文件系统的读写要能够有最优化,最好能够搭配磁盘阵列的参数来设计
- 不要去处理一个正在使用中的分区
创建镜像文件
-
mkisofs
指令创建镜像文件 -
镜像文件可不能以数据格式烧录成为光盘/DVD的!
你必须要使用烧录程序的功能, 将他以“镜像文件格式”烧录成为光盘或DVD才行,
才能够进一步的使用,包括安装或更新你的 Linux 啦
whereis
与locate
效率高的原因
- 因为
whereis
只找系统中某些特定目录下面的文件而已, locate
则是利用数据库来搜寻文件名,- 当然两者就相当的快速, 并且没有实际的搜寻硬盘内的文件系统状态,比较省时间啦
cd
在最近两个目录里切换
-
代表前一个工作目录 (在最近两个目录里互相切换)
转语系编码
iconv -f 原本编码 -t 新编码 filename [-o newfile]
- 你的终端接口 (bash) 的语系: 这与 LANG, LC_ALL 这几个变量有关
- 你的 Linux 系统默认支持的语系数据:这与 /etc/locale.conf 有关
直接给电脑断电(小时候隐蔽自己打游戏)后,下次开机慢的原因
- 但若不正常关机(如跳电、死机或其他不明原因),
- 由于数据尚未回写到磁盘内,
- 因此重新开机后可能会花很多时间在进行磁盘检验,
- 甚至可能导致文件系统的损毁(非磁盘损毁)
linux正确关机目的
- 由于Linux系统使用了非同步的磁盘/内存数据传输模式,
- 同时又是个多用户多任务的环境,
- 所以你不能随便的不正常关机,关机有一定的程序喔!错误的关机方法可能会造成磁盘数据的损毁呢
得到ASCII code对照信息
echo password | od -t oCc echo
- 可以在屏幕上面显示任何信息,而这个信息不由屏幕输出,而是传给
od
去继续处理!
xargs
指令的用武之地
- 很多指令其实并不支持管线命令,
- 因此我们可以通过
xargs
来提供该指令引用 standard input 之用!
FAT文件系统的磁盘重组目的
- 通过磁盘重组将同一个文件所属的 blocks 汇整在一起,这样数据的读取会比较容易啊
计算机的定义
- 接受使用者输入指令与数据,
- 经由中央处理器的数学与逻辑单元运算处理后,
- 以产生或储存成有用的信息
什么是SATA与SAS
- 个人计算机常见的磁盘接口有两种, 分别是SATA与SAS接口
为什么需要格式化(文件系统)
- 这是因为每种操作系统所设置的文件属性/权限并不相同,
- 一个文件有若干个属性,
- 包括读写执行(r, w, x)等基本权限,
- 及是否为目录 (d) 与文件 (-) 或者是链接文件 (l) 等等的属性!
- 要修改属性的方法在前面也约略提过了(
chgrp
,chown
,chmod
)
- 为了存放这些文件所需的数据,因此就需要将分区进行格式化,
- 以成为操作系统能够利用的“文件系统格式(filesystem)”
DOS系统下文件与linux文件的区别
- 我们也可以利用
cat -A
来观察以 DOS (Windows 系统) 创建的文件的特殊格式, - 也可以发现在 DOS 使用的断行字符为 ^M$ ,我们称为 CR 与 LF 两个符号。
- 而在 Linux 下面,则是仅有 LF ($) 这个断行符号
- cat ~/passwd | tr -d ‘\r’ > ~/passwd.linux # 那个 \r 指的是 DOS 的断行字符
DOS文件与linux文件转换
- 将 /etc/passwd 转存成 dos 断行到 /root/passwd 中,再将 ^M 符号删除
- [dmtsai@study ~]$ cp /etc/passwd ~/passwd && unix2dos ~/passwd
双系统
- vfat:同时被Linux与Windows所支持的文件系统类型。
- 如果你的主机硬盘内同时存在Windows与Linux操作系统,为了数据的交换, 确实可以创建一个vfat的文件系统
“-
”在数据处理中的作用
- 在管线命令当中,
- 常常会使用到前一个指令的 stdout 作为这次的 stdin ,
- 某些指令需要用到文件名称 (例如 tar) 来进行处理时,
- 该 stdin 与 stdout 可以利用减号 “-” 来替代
- 简单的想法中,你可以将 - 想成是在内存中的一个设备(缓冲区)
操作系统作用
- 驱动所有的硬件,并且提供一个发展软件的参考接口来给工程师开发软件
- 让CPU可以开始判断逻辑与运算数值、 让内存可以开始载入/读出数据与程序码、让硬盘可以开始被存取、让网卡可以开始传输数据、 让所有周边可以开始运行
磁盘拷贝
- 因为
dd
指令可以读取磁盘设备的内容(几乎是直接读取扇区"sector"),然后将整个设备备份成一个文件呢!
linux下的磁盘
-
正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境下面,为了加速,可能就会使用 /dev/vd[a-p] 这种设备文件名喔
-
使用侦测到的顺序来决定设备文件名,并非与实际插槽代号有关
-
早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master Boot Record) 格式
新的磁盘分区格式,称为 GPT (GUID partition table)
-
-
如果磁盘已无未分区的容量,可以考虑使用大型文件取代磁盘设备的处理方式,通过 dd 与格式化功能
-
在默认的情况下,Linux是将光驱的数据放置到/media/cdrom里头
文件系统
- 文件的类型
- 一般正规文件 (f), 设备文件 (b, c), 目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
- 目录的内容在记录文件名, 一般文件才是实际记录数据内容的地方
- 根目录的上一层(…)与根目录自己(.)是同一个目录
- 主文件夹还有一个代码,那就是“ ~ ”符号
默认权限
- umask 的分数指的是“该默认值需要减掉的权限
- root 的 umask 默认是 022 , 这是基于安全的考虑啦~至于一般身份使用者,通常他们的 umask 为 002 ,亦即保留同群组的写入权力
inode与block
-
文件系统通常会将这两部份的数据分别存放在不同的区块,
权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中
-
事实上除了第一个 block group 内会含有 superblock 之外,后续的 block group 不一定含有 superblock , 而若含有 superblock 则该 superblock 主要是做为第一个 block group 内 superblock 的备份咯
-
文件系统能够创建的文件数量与 inode 的数量有关
-
inode 本身并不记录文件名,文件名的记录是在目录的 block 当中
-
我们可以通过判断 inode 号码来确认不同文件名是否为相同的文件喔
-
当你使用“ ll / ”时,出现的目录几乎都是 1024 的倍数,为什么呢?因为每个 block 的数量都是 1K, 2K, 4K
指令浅谈
which
寻找“可执行文件”- history 是“bash 内置的指令”啦! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的啊
whereis
由一些特定的目录中寻找文件文件名awk
后面接两个单引号并加上大括号 {} 来设置想要对数据进行的处理动作- 是“以行为一次处理的单位”, 而“以字段为最小的处理单位”
lsblk
列出系统上的所有磁盘列表ulimit
限制使用者的某些系统资源- 包括可以打开的文件数量, 可以使用的 CPU 时间,可以使用的内存总量等等
- 若改天你一直无法创建一个大容量的文件,记得瞧一瞧 ulimit 的信息喔!
awk
处理每一行的字段内的数据,而默认的字段的分隔符号为 “空白键" 或 “[tab]键”date
可以格式化输出,如:date +%Y/%m/%d
touch
目的在修改文件的时间参数,但亦可用来创建空文件locale
系统是列出目前 Linux 主机内保有的语系文件, 这些语系文件都放置在:/usr/lib/locale/
这个目录中file
看看该文件是属于什么文件格式- 用来判断使用
tar
包裹时,该 tarball 文件是使用哪一种压缩功能哩
- 用来判断使用
cat/more/less
可以使用不同的方式来读取纯文本文件zcat/zmore/zless
可以对应于 cat/more/less 的方式来读取纯文本文件被压缩后的压缩文件!
指令返回值
- 如果成功的执行该指令, 则会回传一个 0 值,
- 如果执行过程发生错误,就会回传“错误代码”才对!一般就是以非为 0 的数值来取代
指令搜寻的顺序
- 通过
type -a ls
也可以查询的到啦
PATH
- PATH 就是可执行文件搜寻的路径啦~
- 目录与目录中间以冒号(:)分隔,
- 由于文件的搜寻是依序由 PATH 的变量内的目录来查询,所以,目录的顺序也是重要的喔
何谓多用户 ( Multi-user ) 多任务 ( Multitask )
- Multiuser 指的是 Linux 允许多人同时连上主机之外,每个使用者皆有其各人的使用环境,并且可以同时使用系统的资源!
- Multitask 指的是多任务环境,在 Linux 系统下, CPU 与其他例如网络资源可以同时进行多项工作
指令历史
-
~/.bash_history
记录的是前一次登陆以前所执行过的指令, -
而至于这一次登陆所执行的指令都被暂存在内存中,
-
当你成功的登出系统后,该指令记忆才会记录到
.bash_history
当中! -
如果我想要执行上一个指令, 除了使用上下键之外,我可以直接以“ !! ” 来下达上个指令的内容,
此外, 我也可以直接选择下达第 n 个指令,“ !n ”来执行,
也可以使用指令标头,例如 “ !vi ”来执行最近指令开头是 vi 的命令行!
指令太长换行写
- 指令太长的时候,可以使用反斜线 (\) 来跳脱[Enter]符号,使指令连续到下一行。
- 注意!反斜线后就立刻接特殊字符,才能跳脱!
使用帮助文档
man
,info
,/usr/share/doc/
- 在终端机模式中,如果你知道某个指令,但却忘记了相关选项与参数,请先善用 --help 的功能来查询相关信息;
- 当有任何你不知道的指令或文件格式这种玩意儿,但是你想要了解他,请赶快使用man或者是info来查询!
- 而如果你想要架设一些其他的服务,或想要利用一整组软件来达成某项功能时,请赶快到/usr/share/doc 下面查一查有没有该服务的说明文档喔!
硬件常识
- 显存
- 因为每个图像显示的颜色会占用掉内存, 因此显卡上面会有一个内存的容量,这个显存容量将会影响到你的屏幕分辨率与色彩深度的喔
- 显卡厂商直接在显卡上面嵌入一个3D加速的芯片,这就是所谓的GPU称谓的由来
- CPU频率
- 外频指的是CPU与外部元件进行数据传输时的速度,
- 倍频则是CPU内部用来加速工作性能的一个倍数,
- 两者相乘才是CPU的频率速度
- 例如 Intel Core 2 E8400 的内频为 3.0GHz,而外频是333MHz,因此倍频就是9倍啰!(3.0G=333Mx9, 其中1G=1000M)
- CPU设计
- 新的 CPU 设计中,已经将北桥的内存控制芯片整合到 CPU 内,
- 因为现在没有所谓的北桥了 (整合到 CPU 内),因此,CPU 的频率设计就无须考虑得要同步的外频,只需要考虑整体的频率即可
- 而 CPU 与内存、显卡沟通的总线通常称为系统总线。
- 内存使用系统总线带宽来与 CPU 沟通。而显卡则通过PCI-E的序列信道设计来与CPU沟通
- 南桥就是所谓的输入输出(I/O)总线,主要在联系硬盘、USB、网卡等周边设备
- 新的 CPU 设计中,已经将北桥的内存控制芯片整合到 CPU 内,
- ROM
- 这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器(Read Only Memory, ROM)。
- ROM是一种非挥发性的内存
- CMOS
- 记录主板上面的重要参数, 包括系统时间、CPU电压与频率、各项设备的I/O位址与IRQ等,由于这些数据的记录要花费电力,因此主板上面才有电池
- BIOS
- BIOS为写入到主板上某一块 flash 或 EEPROM 的程序(再次说明, 固件就是写入到硬件上的一个软件程序)
- 他可以在开机的时候执行,以载入CMOS当中的参数, 并尝试调用储存设备中的开机程序,进一步进入操作系统当中
- 这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了
- LVM与软件磁盘阵列(software raid)
- 这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM, RAID)
- 固态硬盘
- 固态硬盘最大的好处是,它没有马达不需要转动,而是通过内存直接读写的特性,
- 因此除了没数据延迟且快速之外,还很省电
- 扇区 (sector)
- 这个小区块就是磁盘的最小物理储存单位
- 原本硬盘的扇区都是设计成 512Byte 的容量
- 磁道(track)
- 那同一个同心圆的扇区组合成的圆
- 柱面 (cylinder)
- 由于磁盘里面可能会有多个盘片,因此在所有盘片上面的同一个磁道可以组合成所谓的柱面
- 通常那是文件系统的最小单位,也就是分区的最小单位啦
- Linux 的实体内存最后都会被用光!这是正常的情况!可加速系统性能
- 单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符
- 主板上面都会列出这个主板的开发商与主板的型号,知道这两个信息就可以找到驱动程序了。 另外,显卡上面有个小小的芯片,上面也会列出显卡厂商与芯片信息
- 目前传统的硬盘由于其物理组成的限制,一般极限速度大约在 150~200MByte/s 而已啦
- 硬盘上头含有一个缓冲内存,这个内存主要可以将硬盘内常使用的数据高速缓存起来,以加速系统的读取性能
- 较高阶的硬件通常会向下相容旧有的软件,但较高阶的软件可能无法在旧机器上面安装
shell常识
-
定义
- 只要能够操作应用程序的接口都能够称为壳程序
- 狭义的壳程序指的是命令行方面的软件,包括本章要介绍的 bash 等。
- 广义的壳程序则包括图形接口的软件!因为图形接口其实也能够操作各种应用程序来调用核心工作啊!
-
作用
- 我们必须要通过“ Shell ”将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作
-
env
指令列出目前的 shell 环境下的所有环境变量与其内容。-
变量的取用利用 echo 就能够读出,只是需要在变量名称前面加上 $ ,
或者是以 ${变量} 的方式来取用都可以
-
一般的状态下,父程序的自订变量是无法在子程序内使用的。但是通过 export 将变量变成环境变量后,就能够在子程序下面应用了
-
-
使用者默认登陆取得的 shell 记录于 /etc/passwd 的最后一个字段
- 当我们顺利的在终端机 (tty) 上面登陆后, Linux 就会依据 /etc/passwd 文件的设置给我们一个 shell (默认是 bash),然后我们就可以依据上面的指令下达方式来操作 shell
-
issue 这个文件的内容也是可以使用反斜线作为变量取用喔
-
利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中
-
[ctrl]+a/[ctrl]+e
分别是让光标移动到整个指令串的最前面 ([ctrl]+a) 或最后面 ([ctrl]+e) -
在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反单引号“
指令
”或 “$(指令)”
bash下的别名
egrep
与grep -E
是类似命令别名的关系啦ll
与ls -al
bash下的随机数
- 在 BASH 的环境下,这个 RANDOM 变量的内容,介于 0~32767 之间
- 万一我想要使用 0~9 之间的数值呢?
- 呵呵~利用 declare 宣告数值类型, 然后这样做就可以了:
declare -i number=$RANDOM*10/32768 ; echo $number 8
处理机集群发展
- 这就是三国演义里面谈到的“天下大势,分久必合、合久必分”的名言啊!
- 从早期的贵森森的大型主机分配数个终端机的集中运算机制,
- 到 2010 年前个人计算机运算能力增强后,大部分的运算都是在台式机或笔记本上自行达成, 再也不需要跑去大型主机取得运算资源了!
- 到现在由于行动设备的发达,产生的庞大数据需要集中处理,因而产生云端系统的需求!让信息/资源集中管理! 这不是分分合合的过程吗?
^_^
vim的操作记录
- 那个记录动作的文件就是:
~/.viminfo
- 如果你曾经使用过 vim, 那你的主文件夹应该会存在这个文件才对。这个文件是自动产生的, 你不必自行创建。而你在 vim 里头所做过的动作,就可以在这个文件内部查询到啰~
vim具有缩排功能
- 所谓的缩排,就是当你按下 Enter 编辑新的一列时,光标不会在行首,而是在与上一列的第一个非空白字符处对齐
vim操作
- 在 vi 下面作了很多的编辑动作之后,却想还原成原来的文件内容,应该怎么进行? 直接按下
:e!
即可恢复成文件的原始状态
vim设置
- 整体 vim 的设置值一般是放置在 /etc/vimrc 这个文件,
- 不过,不建议你修改他!
- 你可以修改 ~/.vimrc 这个文件 (默认不存在,请你自行手动创建!),将你所希望的设置值写入
多窗口工作
- 如果想要在新窗口启动另一个文件,就加入文件名,否则仅输入
:sp
时, 出现的则是同一个文件在两个窗口间 - 两个文件同时在一个屏幕上面显示,你还可以利用“[ctrl]+w+↑”及“[ctrl]+w+↓”
[ctrl]+w+ q
其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q 啊
管线命令
- 意思是:“前面的指令所输出的讯息,请通过管线交由后续的指令继续使用”的意思
- 管线命令“ | ”仅能处理经由前面一个指令传来的正确信息,也就是 standard output 的信息,对于 stdandard error 并没有直接处理的能力
用数据流重导向合并文件
cat services* >> servicesback
开机流程
- 这个开机管理程序的目的是在载入(load)核心文件,
- 开机管理程序除了可以安装在MBR之外, 还可以安装在每个分区的开机扇区(boot sector)
- 由于开机管理程序是操作系统在安装的时候所提供的,所以他会认识硬盘内的文件系统格式,因此就能够读取核心文件,
- 然后接下来就是核心文件的工作,开机管理程序与 BIOS 也功成圆满
linux版本
- “Kernel + Softwares + Tools + 可完整安装程序”的咚咚,我们称之为Linux distribution
- 要判断你的 Linux 核心是否为长期支持的版本, 可以使用“ uname -r ”来查阅核心版本
swap分区
- Linux 主机系统可以进入“休眠”模式的话,那么, 运行当中的程序状态则会被纪录到 swap 去,以作为“唤醒”主机的状态依据