Linux的一点回顾

来源:互联网 发布:淘宝购物车业务流程图 编辑:程序博客网 时间:2024/05/24 02:48
最近在看鸟哥的Linux私房菜,用来补充自己在操作Linux系统方面的一些不足,这里是对书中一些内容的整理。

一、文件的权限与目录配置

  • Linux的每个文件中,可分别给予使用者、群组与其他人三种身份个别的 rwx 权限;
  • 群组最有用的功能之一,就是当你在团队开发资源的时候,且每个帐号都可以有多个群组的支持;
  • 利用ls -l显示的文件属性中,第一个字段是文件的权限,共有十个位,第一个位是文件类型, 接下来三个为一组共三组,为使用者、群组、其他人的权限,权限有r,w,x三种;
  • 如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”;
  • 若需要root的权限时,可以使用 su - 这个指令来切换身份。处理完毕则使用 exit 离开 su 的指令环境。
  • 更改文件的群组支持可用chgrp,修改文件的拥有者可用chown,修改文件的拥有者可用chown,修改文件的权限可用chmod
  • chmod修改权限的方法有两种,分别是符号法与数字法,数字法中r,w,x分数为4,2,1;
  • 对文件来讲,权限的性能为:

                r:可读取此一文件的实际内容,如读取文本文件的文字内容等

                w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件);

                x:该文件具有可以被系统执行的权限。

  • 对目录来说,权限的性能为:
                r (read contents in directory)
                w (modify contents of directory)
                x(access directory)
  • 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
  • 能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限)。
  • Linux文件名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符;
  • 根据FHS的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下
  • FHS订定出来的四种目录特色为:shareable, unshareable, static, variable等四类;
  • FHS所定义的三层主目录为:/, /var, /usr三层而已;
  • 绝对路径文件名为从根目录 / 开始写起,否则都是相对路径的文件名。


二、文件与目录管理

  • 特殊目录有:., .., -, ~, ~account需要注意;
  • 与目录相关的指令有:cd, mkdir, rmdir, pwd 等重要指令;
  • rmdir 仅能删除空目录,要删除非空目录需使用“ rm -r ”指令;
  • 使用者能使用的指令是依据 PATH 变量所规定的目录去搜寻的;
  • ls 可以检视文件的属性,尤其 -d, -a, -l 等选项特别重要!
  • 文件的复制、删除、移动可以分别使用:cp, rm , mv等指令来操作;
  • 检查文件的内容(读档)可使用的指令包括有:cat, tac, nl, more, less, head, tail, od 等
  • cat -n 与 nl 均可显示行号,但默认的情况下,空白行会不会编号并不相同;
  • touch 的目的在修改文件的时间参数,但亦可用来创建空文件;
  • 一个文件记录的时间参数有三种,分别是 access time(atime), status time (ctime), modification time(mtime),ls 默认显示的是 mtime。
  • 除了传统的rwx权限之外,在Ext2/Ext3/Ext4/xfs文件系统中,还可以使用chattr与lsattr设置及观察隐藏属性。 常见的包括只能新增数据的 +a 与完全不能更动文件的 +i 属性。
  • 新建文件/目录时,新文件的默认权限使用 umask 来规范。默认目录完全权限为drwxrwxrwx, 文件则为-rw-rw-rw-。
  • 文件具有SUID的特殊权限时,代表当使用者执行此一binary程序时,在执行过程中使用者会暂时具有程序拥有者的权限
  • 目录具有SGID的特殊权限时,代表使用者在这个目录下面新建的文件之群组都会与该目录的群组名称相同。
  • 目录具有SBIT的特殊权限时,代表在该目录下使用者创建的文件只有自己与root能够删除!
  • 观察文件的类型可以使用 file 指令来观察;
  • 搜寻指令的完整文件名可用 which 或 type ,这两个指令都是通过 PATH 变量来搜寻文件名;
  • 搜寻文件的完整文件名可以使用 whereis 找特定目录或 locate 到数据库去搜寻,而不实际搜寻文件系统;
  • 利用 find 可以加入许多选项来直接查询文件系统,以获得自己想要知道的文件名。

三、磁盘与文件管理

  • 一个可以被挂载的数据通常称为“文件系统, filesystem”而不是分区 (partition) 喔!
  • 基本上 Linux 的传统文件系统为 Ext2 ,该文件系统内的信息主要有:
  • superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
  • block:实际记录文件的内容,若文件太大时,会占用多个 block 。
  • Ext2 文件系统的数据存取为索引式文件系统(indexed allocation)
  • 需要磁盘重组的原因就是文件写入的 block 太过于离散了,此时文件读取的性能将会变的很差所致。 这个时候可以通过磁盘重组将同一个文件所属的 blocks汇整在一起。
  • Ext2文件系统主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。
  • data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已
  • inode 记录文件的属性/权限等数据,其他重要项目为: 每个 inode 大小均为固定,有 128/256Bytes 两种基本容量。每个文件都仅会占用一个 inode 而已; 因此文件系统能够创建的文件数量与 inode 的数量有关;
  • 文件的 block 在记录文件的实际数据,目录的 block 则在记录该目录下面文件名与其 inode 号码的对照表;
  • 日志式文件系统 (journal) 会多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间;
  • Linux 文件系统为增加性能,会让内存作为大量的磁盘高速缓存;
  • 实体链接只是多了一个文件名对该 inode 号码的链接而已;
  • 符号链接就类似Windows的捷径功能。
  • 磁盘的使用必需要经过:分区、格式化与挂载,分别惯用的指令为:gdisk, mkfs, mount三个指令
  • 分区时,应使用 parted 检查分区表格式,再判断使用 fdisk/gdisk 来分区,或直接使用 parted 分区
  • 为了考虑性能,XFS 文件系统格式化时,可以考虑加上 agcount/su/sw/extsize 等参数较佳
  • 如果磁盘已无未分区的容量,可以考虑使用大型文件取代磁盘设备的处理方式,通过 dd 与格式化功能。
  • 开机自动挂载可参考/etc/fstab之设置,设置完毕务必使用 mount -a 测试语法正确否



四、文件压缩


  • 压缩指令为通过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘容量。 压缩前与压缩后的文件所占用的磁盘容量比值, 就可以被称为是“压缩比”
  • 压缩的好处是可以减少磁盘容量的浪费,在 WWW 网站也可以利用文件压缩的技术来进行数据的传送,好让网站带宽的可利用率上升喔
  • 压缩文件的扩展名大多是:“*.gz, *.bz2, *.xz, *.tar, *.tar.gz, *.tar.bz2, *.tar.xz”
  • 常见的压缩指令有 gzip, bzip2, xz。压缩率最佳的是 xz,若可以不计时间成本,建议使用 xz 进行压缩。
  • tar 可以用来进行文件打包,并可支持 gzip, bzip2, xz 的压缩。
  • 压 缩:tar -Jcv -f filename.tar.xz 要被压缩的文件或目录名称
  • 查 询:tar -Jtv -f filename.tar.xz
  • 解压缩:tar -Jxv -f filename.tar.xz -C 欲解压缩的目录

tar -J 中的J对应了xz指令, 可以用z对应gzip,j对应bzip2



五、Shell基础


  • 由于核心在内存中是受保护的区块,因此我们必须要通过“ Shell ”将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作
  • 学习 shell 的原因主要有:命令行的 shell 在各大 distribution 都一样;远端管理时命令行速度较快; shell 是管理 Linux 系统非常重要的一环,因为 Linux 内很多控制都是以 shell 撰写的。
  • 系统合法的 shell 均写在 /etc/shells 文件中;
  • 使用者默认登陆取得的 shell 记录于 /etc/passwd 的最后一个字段;
  • bash 的功能主要有:命令编修能力;命令与文件补全功能;命令别名设置功能;工作控制、前景背景控制;程序化脚本;万用字符
  • type 可以用来找到执行指令为何种类型,亦可用于与which 相同的功能;
  • 变量就是以一组文字或符号等,来取代一些设置或者是一串保留的数据
  • 变量主要有环境变量与自订变量,或称为全域变量与区域变量
  • 使用 env 与 export 可观察环境变量,其中 export 可以将自订变量转成环境变量;
  • set 可以观察目前 bash 环境下的所有变量;
  • $? 亦为变量,是前一个指令执行完毕后的回传值。在 Linux 回传值为 0 代表执行成功;
  • locale 可用于观察语系数据;
  • 可用 read 让使用者由键盘输入变量的值
  • ulimit 可用以限制使用者使用系统的资源情况
  • bash 的配置文件主要分为 login shell 与 non-login shell。login shell 主要读取 /etc/profile 与 ~/.bash_profile, non-login shell 则仅读取 ~/.bashrc
  • 在使用 vim 时,若不小心按了 [crtl]+s 则画面会被冻结。你可以使用 [ctrl]+q 来解除冻结
  • 万用字符主要有: *, ?, [] 等等
  • 数据流重导向通过 >, 2>, < 之类的符号将输出的信息转到其他文件或设备去;
  • 连续命令的下达可通过 ; && || 等符号来处理
  • 管线命令的重点是:“管线命令仅会处理 standard output,对于 standard error output 会予以忽略” “管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。”
  • 本章介绍的管线命令主要有:cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs 等。


六、正则表达式与文件格式化处理


  • 正则表达式就是处理字串的方法,他是以行为单位来进行字串的处理行为;
  • 正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到“搜寻/删除/取代”某特定字串的处理程序;
  • 只要工具程序支持正则表达式,那么该工具程序就可以用来作为正则表达式的字串处理之用;
  • 正则表达式与万用字符是完全不一样的东西!万用字符 (wildcard) 代表的是 bash 操作接口的一个功能, 但正则表达式则是一种字串处理的表示方式!
  • 使用 grep 或其他工具进行正则表达式的字串比对时,因为编码的问题会有不同的状态,因此, 你最好将 LANG 等变量设置为 C 或者是 en 等英文语系!
  • grep 与 egrep 在正则表达式里面是很常见的两支程序,其中, egrep 支持更严谨的正则表达式的语法;
  • 由于编码系统的不同,不同的语系 (LANG) 会造成正则表达式撷取数据的差异。因此可利用特殊符号如 [:upper:] 来替代编码范围较佳;
  • 由于严谨度的不同,正则表达式之上还有更严谨的延伸正则表达式;
  • 基础正则表达式的特殊字符有: *, ., [], [-], [^], ^, $ 等!
  • 常见的支持正则表达式的工具软件有: grep , sed, vim 等等
  • printf 可以通过一些特殊符号来将数据进行格式化输出;
  • awk 可以使用“字段”为依据,进行数据的重新整理与输出;
  • 文件的比对中,可利用 diff 及 cmp 进行比对,其中 diff 主要用在纯文本方面的新旧版本比对
  • patch 指令可以将旧版数据更新到新版 (主要亦由 diff 创建 patch 的补丁来源文件)

七、学习Shell Scripts


  • shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的
  • shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上, 就不够好了,因为 Shell scripts 的速度较慢,且使用的 CPU 资源较多,造成主机资源的分配不良。
  • 在 Shell script 的文件中,指令的执行是从上而下、从左而右的分析与执行;
  • shell script 的执行,至少需要有 r 的权限,若需要直接指令下达,则需要拥有 r 与 x 的权限;
  • 良好的程序撰写习惯中,第一行要宣告 shell (#!/bin/bash) ,第二行以后则宣告程序用途、版本、作者等
  • 对谈式脚本可用 read 指令达成;
  • 要创建每次执行脚本都有不同结果的数据,可使用 date 指令利用日期达成;
  • script 的执行若以 source 来执行时,代表在父程序的 bash 内执行之意!
  • 若需要进行判断式,可使用 test 或中括号 ( [] ) 来处理;
  • 在 script 内,$0, $1, $2..., $@ 是有特殊意义的!
  • 条件判断式可使用 if...then 来判断,若是固定变量内容的情况下,可使用 case $var in ... esac 来处理
  • 循环主要分为不定循环 (while, until) 以及固定循环 (for) ,配合 do, done 来达成所需任务
  • 我们可以使用 sh -x script.sh 来进行程序的debug

八、程序管理

  • 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等),为实体文件的型态存在;
  • 程序 (process):程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。
  • 程序彼此之间是有相关性的,故有父程序与子程序之分。而 Linux 系统所有程序的父程序就是 init 这个 PID 为 1 号的程序。
  • 在 Linux 的程序调用通常称为 fork-and-exec 的流程!程序都会借由父程序以复制 (fork) 的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序,最终就成为一个子程序的存在。
  • 常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。
  • 在工作管理 (job control) 中,可以出现提示字符让你操作的环境就称为前景 (foreground),至于其他工作就可以让你放入背景 (background) 去暂停或运行。
  • 与 job control 有关的按键与关键字有: &, [ctrl]-z, jobs, fg, bg, kill %n 等;
  • 程序管理的观察指令有: ps, top, pstree 等等;
  • 程序之间是可以互相控制的,传递的讯息 (signal) 主要通过 kill 这个指令在处理;
  • 程序是有优先顺序的,该项目为 Priority,但 PRI 是核心动态调整的,使用者只能使用 nice 值去微调 PRI
  • nice 的给予可以有: nice, renice, top 等指令;
  • vmstat 为相当好用的系统“资源使用情况观察指令;
  • SELinux 当初的设计是为了避免使用者资源的误用,而 SELinux 使用的是 MAC 委任式存取设置;
  • SELinux 的运行中,重点在于主体程序 (Subject) 能否存取目标文件资源 (Object) ,这中间牵涉到政策 (Policy) 内的规则, 以及实际的安全性本文类别 (type);
  • 安全性本文的一般设置为:“Identify:role:type”其中又以 type 最重要;
  • SELinux 的模式有: enforcing, permissive, disabled 三种,而启动的政策 (Policy) 主要是 targeted
  • SELinux 启动与关闭的配置文件在: /etc/selinux/config
  • SELinux 的启动与观察: getenforce, sestatus 等指令
  • 重设 SELinux 的安全性本文可使用 restorecon 与 chcon
  • 在 SELinux 有启动时,必备的服务至少要启动 auditd 这个!
  • 若要管理默认的 SELinux 布林值,可使用 getsebool, setsebool 来管理!
2 0