`

Linux读书笔记1

 
阅读更多

1. 基础指令的操作

 
显示日期的指令: date
  [root@linux ~]# date +%Y/%m/%d
2005/06/23
[root@linux ~]# date +%H:%M
11:35
 
显示日历的指令: cal
[root@linux ~]# cal [month] [year]
  我想要知道 2005 年 7 月的月历,可以直接下达:

[root@linux ~]# cal 7 2005

 
简单好用的计算器: bc 
    输入bc按回车便可进行操作,输入quit退出
     
     2. 重要的几个热键
          [Tab] 按键:  

接在一串指令的第一个字的后面,则为命令补全; 

      接在一串指令的第二个字以后时,则为『档案补齐
[Ctrl]-c 按键:
      中断目前程序 的按键
[Ctrl]-d 按键
     相当于输入 exit
 
3. Linux 系统上求助
     man [命令] -- 例如:man date, 按下q就能离开
/string
向『下』搜寻 string 这个字符串,如果要搜寻 vbird 的话,就输入 /vbird
?string
向『上』搜寻 string 这个字符串
[Page Down]或空格键
向下翻一页
 

     whatis [指令或者是数据] <==相当于 man -f [指令或者是数据] 作用:取得的相关信息
     apropos [指令或者是数据] <==相当于 man -k [指令或者是数据] 作用:利用『关键词』找到更多的说明文件数据

 
     info [命令]
          info 与 man 其实差不多,而且,文件数据必须要以 info 写成的,才会比较完整
 
观察系统的使用状态:如果要看目前有谁在在线,可以下达 who 这个指令, 看背景执行的程序可以执行 ps -aux 这个指令
关机的正确指令用法啰!
• 将数据同步写入硬盘中的指令: sync
• 惯用的关机指令: shutdown
• 重新开机,关机: reboot, halt, poweroff

4. Linux 档案属性
      ls -al 查看
 
第一个属性代表这个档案是『目录、档案或连结文件等等』:
?? 当为[ d ]则是目录,例如上表的第 11 行;
?? 当为[ - ]则是档案,例如上表的第 5 行;
?? 若是[ l ]则表示为连结档(link file);
?? 若是[ b ]则表示为装置文件里面的可供储存的接口设备;
?? 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。

特别留意的是,如果您想要开放某个目录让一些人进来的话, 请记得将该目录的 x 属性与r属性给开放呦

4.1 修改档案的权限
          chgrp: 改变档案所属群组
chown :改变档案所属人
chmod :改变档案的属性、 SUID 等等属性
 
[root@linux ~]# chgrp [-R] dirname/filename ...
参数:
-R : 进行递归的持续变更,亦即连同次目录下的所有档案、目录
都更新成为这个群组之意。常常用在变更某一目录的情况。
范例:
[root@linux ~]# chgrp users install.log

chown 
[root@linux ~]# chown [-R] 账号名称 档案或目录
[root@linux ~]# chown [-R] 账号名称:群组名称 档案或目录
参数:
-R : 进行递归的持续变更,亦即连同次目录下的所有档案、目录
都更新成为这个群组之意。常常用在变更某一目录的情况。
范例:
[root@linux ~]# chown bin install.log
[root@linux ~]# ls -l
-rw-r--r-- 1 bin user 68495 Jun 25 08:53 install.log
[root@linux ~]# chown root:root install.log

chmod 
数字类型改变档案权限:
     r:4  w:2   x:1 
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7 
others= --- = 0+0+0 = 0 
 
[root@linux ~]# chmod [-R] xyz 档案或目录
参数:
xyz : 就是刚刚提到的数字类型的权限属性,为rwx属性数值的相加
-R : 进行递归( recursive )的持续变更,亦即连同次目录下的所有档案、目录
都更新成为这个群组之意。常常用在变更某一目录的情况。
如:[root@linux ~]# chmod 777 .bashrc
符号类型改变档案权限:
(1)user (2)group (3)others 三群啦!那么我们就可以藉由 u, g, o 来代表三群的属性!此外, a 则代表 all 亦即全部的三群!那么读写的属性就可以写成了 r, w, x 啰。
例如 -rwxr-xr-x,
[root@linux ~]# chmod u=rwx,go=rx .bashrc
# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格符。
 
4.2 档案种类
     正规档案 (regular file ): 就是一般我们在进行存取的类型的档案,第一个属性为 [ - ]
     目录:第一个属性为 [ d ],例如 [drwxrwxrwx]。 
     连结档 (link):就是类似 Windows 底下的快捷方式啦!第一个属性为 [ l ], 如[lrwxrwxrwx]
     区块 (block) 设备档 :就是一些储存数据, 以提供系统存取的接口设备,简单的说就是硬盘,第一个属性为 [ b ]; 
     字符 (character) 设备档 :亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!第一个属性为 [ c ]。 
     资料接口文件 (sockets):第一个属性为 [ s ]
     数据输送文件 (FIFO, pipe): FIFO 也是一种特殊的档案类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。 FIFO 是 first-in-first-out 的缩写。第一个属               性为 [p] 
 
4.3 Linux 档案附档名
基本上, Linux 的档案是没有所谓的『附档名』的,因为由前面的说明我们可以知道, 一个 Linux 档案能不能被执行,与他的第一栏的十个属性有关, 与文件名根本一点关系也没有。只要你的属性当中有 x 的话,例如 [ -rwx-r-xr-x ] 即代表这个档案可以被执行喔!
 *.sh : 批次檔 ( scripts ),使用 shell 写成
 *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩档。
 *.html, *.php:网页相关档案

在 Linux 底下,每一个档案或目录的文件名最长可以到达 255 的字符

Linux 文件名称的限制:
避免一些特殊字符,* ? > < ; & ! [ ] | \ ' " ` ( ) { 
另外,文件名称的开头为小数点『.』时, 代表这个档案为『隐藏档』
 
Linux 目录配置
     目录树的启始点为根目录 (/, root); 
     绝对路径为:由根目录 (/) 开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;相对路径为相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法

. :代表当前的目录,也可以使用 ./ 来表示;

.. :代表上一层目录,也可以 ../ 来代表。 

目前在 /home 这个目录下, 如果想要进入 /var/log 这个目录
     cd /var/log (absolute)
   cd ../var/log (relative) 
单一档案或目录的最大容许文件名为 255 个字符;
包含完整路径名称及目录 (/) 之完整档名为 4096 个字符
 
4.4 目录说明
/  根目录 root (/)
/bin, /usr/bin, /usr/local/bin  放置『使用者可执行的 binary file 的目录』,举例来说,ls, mv, rm, mkdir, rmdir, gzip等等重要指令都放在这个目录当中。
/boot  放置 Linux 系统开机会用到的档案
/dev  任何装置与接口设备都是以档案的型态存在于这个目录当中的, 例如键盘、鼠标等;以及储存设备 (block device), 例如硬盘、光盘等
/etc  系统主要的设定(配置)文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启始档等等
/home  系统预设的使用者家目录 (home directory)。
/lib, /usr/lib, /usr/local/lib  系统会使用到的函式库放置的目录。
/lost+found  系统不正常产生错误时,会将一些遗失的片段放置于此目录下
/mnt /media  这是软盘与光盘预设挂载点的地方;通常软盘挂在 /mnt/floppy 下,而光盘挂在 /mnt/cdrom 下
/opt  这是给主机额外安装软件所摆放的目录, 不过,以前的 Linux 系统中,我们还是习惯放置在 /usr/local 目录下
/proc  这个目录本身是一个『虚拟档案系统』喔!他放置的数据都是在内存当中, 例如系统核心、形成信息、接口设备的状态及网络状态等等
/root  系统管理员 (root) 的家目录
/sbin, /usr/sbin, /usr/local/sbin  放置一些系统管理员才会动用到的执行指令,例如: fdisk, mke2fs, fsck, mkswap, mount 等
/srv  一些服务启动之后,这些服务所需要取用的数据目录
/tmp  让一般使用者或者是正在执行的程序暂时放置档案的地方。
/usr  ,在 /usr 此目录下,包含系统的主要程序、 图形接口所需要的档案、额外的函式库、本机端所自行安装的软件,以及共享的目录与文件等等,他有点像是 Windows 操作系统当中的『Program files』与 『WinNT』这两个目录的结合
/usr/local:本机端自行安装的软件预设放置的目录,通常会将后来才安装上去的软件放置在这里
/var  放置的是针对系统执行过程中, 常态性变动的档案放置的目录,此外,某些软件执行过程中会写入的数据库档案, 例如 MySQL 数据库,也都写入在这个目录中
 
ext2 是 Linux 正规的档案系统,而近年来的 ext3 等日志式档案系统则有取代的趋势,使用 ext3 或者是其它的日志式档案系统是有好处的,最大的好处当然是错误问题的排除效率比较高
 
• 传统档案系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;
• 日志式档案系统: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS
• 网络档案系统: NFS / SMBFS
 
4.5 磁盘与目录的容量:
df指令 (查看磁盘分区信息
[root@linux ~]# df [-ahikHTm] [目录或文件名]
参数:
-a :列出所有的档案系统,包括系统特有的 /proc 等档案系统;
-k :以 KBytes 的容量显示各档案系统;
-m :以 MBytes 的容量显示各档案系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
硬盘扇区规划中, primary 扇区每一颗硬盘最多只允许 4 个,其它的就放置在 Extended 扇区中。
 
du指令 (查看某文件夹下各文件使用磁盘空间大小
[root@linux ~]# du [-ahskm] 档案或目录名称
参数:
-a :列出所有的档案与目录容量,因为预设仅统计目录底下的档案量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
 
df与du的区别:
du -sh命令通过将指定文件系统中所有的目录、符号链接和文件使用的块数累加得到该文件系统使用的总块数;
而df命令通过查看文件系统磁盘块分配图得出总块数与剩余块数。
文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如i节点,磁盘分布图,间接块,超级块等。这些数据对大多数用户级的程序来说是不可见的,通常称为Meta Data。
du命令是用户级的程序,它不考虑Meta Data,而df命令则查看文件系统的磁盘分配图并考虑Meta Data。
因此正常情况下,df计算的USED空间会比du计算的结果要稍大
 
连结档的介绍: ln
Hard Link (硬式连结或实际连结)
Symbolic Link (符号连结,亦即是快捷方式)
 
制作连结档就必须要使用 ln 这个指令
[root@linux ~]# ln [-sf] 来源文件 目标文件
参数:
-s :如果 ln 不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link
-f :如果 目标文件 存在时,就主动的将目标文件直接移除后再建立!
 
磁盘分割: fdisk
 [root@linux ~]# fdisk [-l] 装置名称
参数:
-l :输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时,
则系统将会把整个系统内能够搜寻到的装置的 partition 均列出来。
 
磁盘格式化
[root@linux ~]# mke2fs [-bicLj] 装置名称
参数:
-b :可以设定每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;
-i :多少容量给予一个 inode 呢?
-c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试;
如果下达两次 -c -c 的话,会测试读写(read-write),会很慢~
-L :后面可以接表头名称 (Label),这个 label 是有用的喔!后面会讲~
-j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。
 
 mkbootdisk (制作软盘开机片):
fdformat (进行软盘低阶格式化)
 
 磁盘检验: fsck, badblocks
[root@linux ~]# fsck [-AtCary] 装置名称
参数:
-t :fsck 可以检查好几种不同的 filesystem ,而 fsck 只是一支综合程序而已。
个别的 filesystem 的检验程序都在 /sbin 底下,您可以使用 ls -l /sbin/fsck*
去检查看看,就知道有几种 filesystem 啰。预设的 FC4 情况下,至少有:
ext2, ext3, vfat, msdos 等等 filesystem。
-A :依据 /etc/fstab 的内容,将所有的装置都扫瞄一次 (通常开机过程中就会执行此一指令)
-a :自动修复检查到的有问题的扇区,所以你不用一直按 y 啰!
-r :一定要让使用者决定是否需要修复,这与上一个 -a 刚好相反!
-y :与 -a 类似,但是某些 filesystem 仅支持 -y 这个参数,所以您也可以利用 -y 啦!
-C :可以在检验的过程当中,使用一个长条图来显示目前的进度!
-f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入
细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标啰!
 
用来检查硬盘或软盘扇区有没有坏轨的指令
[root@linux ~]# badblocks -[svw] 装置名称
参数:
-s :在屏幕上列出进度
-v :可以在屏幕上看到进度
-w :使用写入的方式来测试,建议不要使用此一参数,尤其是待检查的装置已有档案时!
 
sync 将系统暂存在内存当中的数据回存写入磁盘
 
磁盘挂载与卸载
mount:
[root@linux ~]# mount -a
[root@linux ~]# mount [-tonL] 装置名称代号 挂载点
参数:
-a :依照 /etc/fstab 的内容将所有相关的磁盘都挂上来!
-n :一般来说,当我们挂载档案系统到 Linux 上头时, Linux 会主动的将
目前的 partition 与 filesystem 还有对应的挂载点,都记录到 /etc/mtab
那个档案中。不过,有些时刻 (例如不正常关机导致一些问题,而进入单人模式)
系统无法写入 /etc/mtab 时,就可以加上 -n 这个参数来略过写入 mtab 的动作。
-L :系统除了利用装置名称代号 (例如 /dev/hda1) 之外,还可以利用 partition
的表头名称 ( Label ) 来进行挂载喔!所以,最好为您的 partition 取一个
在您系统当中独一无二的名称吧!
-t :您的 Linux 支持的档案格式,就写在这里吧!举例来说,我们在上面建立
/dev/hdb5 是 ext3 档案系统,那么要挂载时,就得要加上 -t ext3
来告知系统,用 ext3 的档案格式来挂载该 partition 呢!
 
umount (将装置档案卸载)
[root@linux ~]# umount 装置代号或挂载点
[root@linux ~]# umount /dev/hdb5
 

5.  Linux 档案与目录管理

绝对路径:路径的写法『一定由根目录 / 写起』
相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: 『cd ../man』这就是相对路径的写法
 
5.1 目录的相关操作
 
处理目录的指令
• cd:变换目录
• pwd:显示目前的目录
• mkdir:建立一个新的目录
• rmdir:删除一个空的目录
 
cd (变换目录)
[root@linux ~]# cd [相对路径或绝对路径]
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
~account 代表 account 这个使用者的家目录

pwd (显示目前所在的目录,Print Working Directory)
[root@linux ~]# pwd [-P]
参数:
-P :显示出确实的路径,而非使用连结 (link) 路径。
 
mkdir (建立新目录)
[root@linux ~]# mkdir [-mp] 目录名称
参数:
-m :设定档案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录递归建立起来!
例如:
mkdir -p test1/test2/test3/test4
# 加了这个 -p 的参数,可以自行帮您建立多层目录!
[root@linux tmp]# mkdir -m 711 test2
 
rmdir (删除空的目录)
[root@linux ~]# rmdir [-p] 目录名称
参数:
-p :连同上层『空的』目录也一起删除
 
5.2 档案与目录管理
档案与目录的检视: ls
[root@linux ~]# ls [-aAdfFhilRS] 目录名称
[root@linux ~]# ls [--color={none,auto,always}] 目录名称
[root@linux ~]# ls [--full-time] 目录名称
参数:
-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来~
-A :全部的档案,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~
-d :仅列出目录本身,而不是列出目录内的档案数据
-f :直接列出结果,而不进行排序 (ls 预设会以档名排序!)
-F :根据档案、目录等信息,给予附加数据结构,例如:
*:代表可执行档; /:代表目录; =:代表 socket 档案; |:代表 FIFO 档案;
-h :将档案容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 位置,而非列出档案属性;
-l :长数据串行出,包含档案的属性等等数据;
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在账号管理提到!)
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来;
-S :以档案容量大小排序!
-t :依时间排序
--color=never :不要依据档案特性给予颜色显示;
--color=always :显示颜色
--color=auto :让系统自行依据设定来判断是否给予颜色
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或 改变权限属性时间 (ctime)
而非内容变更时间 (modification time)
 
复制、移动与删除: cp, rm, mv
cp (复制档案或目录)
[root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)
[root@linux ~]# cp [options] source1 source2 source3 .... directory
参数:
-a :相当于 -pdr 的意思;
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination (这个 -u 的特性,是在目标档案与来源档案有差异时,才会复制的。 所以,比较常被用于『备份』的工作当中)
 
rm (移除档案或目录)
[root@linux ~]# rm [-fir] 档案或目录
参数:
-f :就是 force 的意思,强制移除;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了
范例:删除一个不为空的目录
[root@linux tmp]# mkdir test
[root@linux tmp]# cp ~/.bashrc test/ <== 将档案复制到此目录去,就不是空的目录了
[root@linux tmp]# rmdir test
rmdir: `test': Directory not empty <== 删不掉啊!因为这不是空的目录!
[root@linux tmp]# rm -rf test
 
mv (移动档案与目录,或更名)
[root@linux ~]# mv [-fiu] source destination
[root@linux ~]# mv [options] source1 source2 source3 .... directory
参数:
-f :force 强制的意思,强制直接移动而不询问;
-i :若目标档案 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标档案已经存在,且 source 比较新,才会更新 (update)
范例1:
[root@linux tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~
# 其实在 Linux 底下还有个有趣的指令,名称为 rename ,
# 该指令则专职进行档案的更名呢!用途也是不少~可以参阅 man rename 喔
范例2:
[root@linux tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到这边,如果有多个来源档案或目录,则最后一个目标文件一定是『目录!』
# 意思是说,将所有的数据移动到该目录的意思
 
取得路径的文件名称与目录名称:
[root@linux ~]# basename /etc/sysconfig/network
network <== 很简单!就取得最后的档名(文件名)~
[root@linux ~]# dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的变成目录名了!
 
5.3 档案内容查阅
• cat 由第一行开始显示档案内容
• tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
• nl 显示的时候,顺道输出行号!
• more 一页一页的显示档案内容
• less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
• head 只看头几行
• tail 只看尾巴几行
• od 以二进制的方式读取档案内容!
 
• cat (concatenate)
[root@linux ~]# cat [-AEnTv]
参数:
-A :相当于 -vET 的整合参数,可列出一些特殊字符~
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符.
 
tac (反向列示):
由最后一行到第一行反向在屏幕上显示出来.

nl (添加行号打印):
[root@linux ~]# nl [-bnw] 档案
参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号;
-b t :如果有空行,空的那一行不要列出行号;
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ;
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的位数。
 
more (一页一页翻动)
空格键 (space):代表向下翻一页;
• Enter :代表向下翻『一行』;
• /字符串 :代表在这个显示的内容当中,向下搜寻『字符串』;
• :f :立刻显示出文件名以及目前显示的行数;
• q :代表立刻离开 more ,不再显示该档案内容。
 
less (一页一页翻动)
• 空格键 :向下翻动一页;
• [pagedown]:向下翻动一行;
• [pageup] :向上翻动一行;
• /字符串 :向下搜寻『字符串』的功能;
• ?字符串 :向上搜寻『字符串』的功能;
• n :重复前一个搜寻 (与 / 或 ? 有关!)
• N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
• q :离开 less 这个程序
 
head (取出前面几行)
[root@linux ~]# head [-n number] 档案
参数:
-n :后面接数字,代表显示几行的意思

tail (取出后面几行)
[root@linux ~]# tail [-n number] 档案
参数:
-n :后面接数字,代表显示几行的意思
 
读取非纯文字文件: od
[root@linux ~]# od [-t TYPE] 档案
参数:
-t :后面可以接各种『类型 (TYPE)』的输出,例如:
a :利用预设的字符来输出;
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size bytes ;
f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes ;
o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes ;
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes ;
范例:
[root@linux ~]# od -t c /usr/bin/passwd

修改档案时间与建置新档: touch
每个档案在 linux 底下都会记录三个主要的变动时间
• modification time (mtime):当该档案的『内容数据』变更时,就会更新这个时间! 内容数据指的是档案的内容,而不是档案的属性喔!
• status time (ctime):当该档案的『状态 (status)』改变时,就会更新这个时间,举例来说, 像是权限与属性被更改了,都会更新这个时间啊~
• access time (atime):当『该档案的内容被取用』时,就会更新这个读取时间 (access)。
 
例如:[root@linux ~]# ls -l --time=atime /etc/man.config
在预设的情况下, ls 显示出来的是该档案的 mtime 
 
 
[root@linux ~]# touch [-acdmt] 档案
参数:
-a :仅修订 access time;
-c :仅修改时间,而不建立档案;
-d :后面可以接日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接时间,格式为[YYMMDDhhmm]

范例:
[root@linux tmp]# touch testtouch
# 注意到,这个档案的大小是 0 呢!在预设的状态下,如果 touch 后面有接档案,
# 则该档案的三个时间 (atime/ctime/mtime) 都会更新为目前的时间。若该档案不存在,
# 则会主动的建立一个新的空的档案喔!例如上面这个例子!
 
范例2:将上个范例的 bashrc 日期改为 2005/07/15 2:02
[root@linux tmp]# touch -t 0507150202 bashrc
 
touch 这个指令最常被使用的情况是:
• 建立一个空的档案;
• 将某个档案日期修订为目前 (mtime 与 atime)
 
档案预设权限:umask
umask 就是指定 『目前使用者在建立档案或目录时候的属性默认值
[root@linux ~]# umask
0022 (第一组是特殊权限用的,后面是指user 没有被拿掉属性,group 与 others 的属性被拿掉了 2 ( 也就是 w 这个属性 ))
[root@linux ~]# umask -S
u=rwx,g=rx,o=rx
所以默认有
• 建立档案时:(-rw-rw-rw-) – (-----w--w-) ==> -rw-r--r--
• 建立目录时:(drwxrwxrwx) – (d----w--w-) ==> drwxr-xr-x
例如:
[root@linux ~]# umask 003
umask 为 003 ,所以拿掉的属性为 --------wx,因此: 
档案: (-rw-rw-rw-) - (--------wx) = -rw-rw-r-- 
目录: (drwxrwxrwx) - (--------wx) = drwxrwxr--
 
chattr (设定档案隐藏属性)
[root@linux ~]# chattr [+-=][ASacdistu] 档案或目录名称
参数:
+ :增加某一个特殊参数,其它原本存在参数则不动。
- :移除某一个特殊参数,其它原本存在参数则不动。
= :设定一定,且仅有后面接的参数
A :当设定了 A 这个属性时,这个档案(或目录)的存取时间 atime (access)
将不可被修改,可避免例如手提式计算机容易有磁盘 I/O 错误的情况发生!
S :这个功能有点类似 sync 的功能!就是会将数据同步写入磁盘当中!
可以有效的避免数据流失!
a :当设定 a 之后,这个档案将只能增加数据,而不能删除,只有 root
才能设定这个属性。
c :这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对于大档案似乎蛮有用的!)
d :当dump(备份)程序被执行的时候,设定 d 属性将可使该档案(或目录)不具有dump功能
i :这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法写入
或新增资料!』对于系统安全性有相当大的帮助!
j :当使用 ext3 这个档案系统格式时,设定 j 属性将会使档案在写入时先记录在
journal 中!但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了
日志了,所以这个属性无效!
s :当档案设定了 s 参数时,他将会被完全的移除出这个硬盘空间。
u :与 s 相反的,当使用 u 来设定档案时,则数据内容其实还存在磁盘中,
可以使用来 undeletion.

lsattr (显示档案隐藏属性)
[root@linux ~]# lsattr [-aR] 档案或目录
参数:
-a :将隐藏文件的属性也秀出来;
-R :连同子目录的数据也一并列出来!
 
什么是 SUID ?
当一个指令具有 SUID 的功能时,则当其它人使用这个指令时,该程序将具有指令拥有者的权限。
 
档案类型:file
要知道某个档案的基本数据,例如是属于 ASCII 或者是 data 档案,或者是 binary , 且其中有没有使用到动态函式库 (share library) 等等的信息,就可以利用 file 这个指令来检阅。
例如:
[root@linux ~]# file /var/lib/slocate/slocate.db
/var/lib/slocate/slocate.db: data <== 这是 data 档案!
 
 
5.4 档案的搜寻:
which (寻找『执行档』)
[root@linux ~]# which [-a] command
参数:
-a :将所有可以找到的指令均列出,而不止第一个被找到的指令名称
范例:
[root@linux ~]# which passwd
 
whereis (寻找特定档案)
[root@linux ~]# whereis [-bmsu] 档案或目录名
参数:
-b :只找 binary 的档案
-m :只找在说明文件 manual 路径下的档案
-s :只找 source 来源档案
-u :没有说明档的档案!
范例:
[root@linux ~]# whereis passwd

locate
[root@linux ~]# locate filename
locate 的使用更简单,直接在后面输入『档案的部分名称』后,就能够得到结果。
locate 寻找的数据是由『已建立的数据库 /var/lib/slocate/』 里面的数据所搜寻到的。
 
find
[root@linux ~]# find [PATH] [option] [action]
参数:
1. 与时间有关的参数:
-atime n :n 为数字,意义为在 n 天之前的『一天之内』被 access 过的档案;
-ctime n :n 为数字,意义为在 n 天之前的『一天之内』被 change 过状态的档案;
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被 modification 过的档案;
-newer file :file 为一个存在的档案,意思是说,只要档案比 file 还要新,
就会被列出来~
2. 与使用者或群组名称有关的参数:
-uid n :n 为数字,这个数字是使用者的账号 ID,亦即 UID ,这个 UID 是记录在
/etc/passwd 里面与账号名称对应的数字。这方面我们会在第四篇介绍。
-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
/etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者账号名称喔!例如 dmtsai
-group name:name 为群组名称喔,例如 users ;
-nouser :寻找档案的拥有者不存在 /etc/passwd 的人!
-nogroup :寻找档案的拥有群组不存在于 /etc/group 的档案!
当您自行安装软件时,很可能该软件的属性当中并没有档案拥有者,
这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
3. 与档案权限及名称有关的参数:
-name filename:搜寻文件名称为 filename 的档案;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的档案。这个 SIZE 的规格有:
c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
还要大的档案,就是『 -size +50k 』
-type TYPE :搜寻档案的类型为 TYPE 的,类型主要有:一般正规档案 (f),
装置档案 (b, c), 目录 (d), 连结档 (l), socket (s),
及 FIFO (p) 等属性。
-perm mode :搜寻档案属性『刚好等于』 mode 的档案,这个 mode 为类似 chmod
的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
-perm -mode :搜寻档案属性『必须要全部囊括 mode 的属性』的档案,举例来说,
我们要搜寻 -rwxr--r-- ,亦即 0744 的档案,使用 -perm -0744,
当一个档案的属性为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
-perm +mode :搜寻档案属性『包含任一 mode 的属性』的档案,举例来说,我们搜寻
-rwxr-xr-x ,亦即 -perm +755 时,但一个档案属性为 -rw-------
也会被列出来,因为他有 -rw.... 的属性存在!
4. 额外可进行的动作:
-exec command :command 为其它指令,-exec 后面可再接额外的指令来处理搜寻到
的结果。
-print :将结果打印到屏幕上,这个动作是预设动作!
 
范例:搜寻 /home 底下属于 dmtsai 的档案
[root@linux ~]# find /home -user dmtsai
# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有档案时,
# 就可以利用这个指令将属于某个使用者的所有档案都找出来喔!
范例2:找出档名为 passwd 这个档案
[root@linux ~]# find / -name passwd
# 利用这个 -name 可以搜寻档名啊!
 
如果你记得有一个档案档名包含了 httpd ,但是不知道全名怎办?
就用万用字符 * 吧,如上以:『 find /etc -name '*httpd*' 』就可将档名含有 httpd 的档案都列出来啰。
由于 find 在寻找数据的时候相当的耗硬盘!所以没事情不要使用 find
 
 
5.5. 档案的压缩与打包
Linux 系统常见的压缩指令:
压缩档案类型:
• *.Z compress 程序压缩的档案;
• *.bz2 bzip2 程序压缩的档案;
• *.gz gzip 程序压缩的档案;
• *.tar tar 程序打包的数据,并没有压缩过;
• *.tar.gz tar 程序打包的档案,其中并且经过 gzip 的压缩
 
compress
[root@linux ~]# compress [-dcr] 档案或目录
参数:
-d :用来解压缩的参数
-r :可以连同目录下的档案也同时给予压缩呢!
-c :将压缩数据输出成为 standard output (输出到屏幕)

gzip, zcat
[root@linux ~]# gzip [-cdt#] 檔名
[root@linux ~]# zcat 檔名.gz
参数:
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩档的一致性~看看档案有无错误;
-# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6 ~
zcat 是用来读取压缩文件数据内容(文本)的指令.
范例:将范例一的档案内容读出来!
[root@linux tmp]# zcat man.config.gz
# 此时屏幕上会显示 man.config.gz 解压缩之后的档案内容!!
 
bzip2, bzcat
[root@linux ~]# bzip2 [-cdz] 檔名
[root@linux ~]# bzcat 檔名.bz2
参数:
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-z :压缩的参数
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!

范例一:将刚刚的 /tmp/man.config 以 bzip2 压缩
[root@linux tmp]# bzip2 -z man.config
# 此时 man.config 会变成 man.config.bz2 !
 
tar 将整个目录或者是指定的档案都整合成一个档案
[root@linux ~]# tar [-cxtzjvfpPN] 档案与目录 ....
参数:
-c :建立一个压缩档案的参数指令(create 的意思);
-x :解开一个压缩档案的参数指令!
-t :查看 tarfile 里面的档案!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示档案!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对喔!
-p :使用原档案的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
 
范例一:将整个 /etc 目录下的档案全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
 
范例二:查阅上述 /tmp/etc.tar.gz 档案内有哪些档案?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
 
dd 读取装置的内容,然后将整个装置备份成一个档案
[root@linux ~]# dd if="input_file" of="outptu_file" bs="block_size" \
count="number"
参数:
if :就是 input file 啰~也可以是装置喔!
of :就是 output file 喔~也可以是装置;
bs :规划的一个 block 的大小,如果没有设定时,预设是 512 bytes
count:多少个 bs 的意思。

范例一:将 /etc/passwd 备份到 /tmp/passwd.back 当中
[root@linux ~]# dd if=/etc/passwd of=/tmp/passwd.back
3+1 records in
3+1 records out
 
cpio
透过数据流重导向的方法来将档案进行输出/输入
[root@linux ~]# cpio -covB > [file|device] <==备份
[root@linux ~]# cpio -icduv < [file|device] <==还原
参数:
-o :将数据 copy 输出到档案或装置上
-i :将数据自档案或装置 copy 出来系统当中
-t :查看 cpio 建立的档案或装置的内容
-c :一种较新的 portable format 方式储存
-v :让储存的过程中文件名称可以在屏幕上显示
-B :让预设的 Blocks 可以增加至 5120 bytes ,预设是 512 bytes !
这样的好处是可以让大档案的储存速度加快(请参考 i-nodes 的观念)
-d :自动建立目录!由于 cpio 的内容可能不是在同一个目录内,
如此的话在反备份的过程会有问题! 这个时候加上 -d 的话,
就可以自动的将需要的目录建立起来了!
-u :自动的将较新的档案覆盖较旧的档案!
 
范例:将磁带上的数据还原回来~
[root@linux ~]# cpio -icduv < /dev/st0
# 一般来说,使用 SCSI 接口的磁带机,代号是 /dev/st0 喔!
 
  • 大小: 18.7 KB
  • 大小: 29.8 KB
  • 大小: 9.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics