830 likes | 1.02k Views
Unix 文件名. 名字长度最多可达 255 个字符 扩展名可有可无,可以由 除了 / 外的所有 ASCII 字符组成 以下名字都是合法的 : letter1 let.ter1 .Letter_1 [letter1] -{}**LETTER1 @#$%^&*q.+() 但是最好只使用 点 ( . ), 横杆 ( - ), and 下划线 ( _ ), 而不要使用 @#$%^&* 等,以免不必要的麻烦 注意大小写有区别, p1 与 P1 看成不同文件名. Unix 文件系统.
E N D
Unix 文件名 • 名字长度最多可达255个字符 • 扩展名可有可无,可以由除了/外的所有ASCII字符组成 • 以下名字都是合法的: letter1 let.ter1 .Letter_1 [letter1] -{}**LETTER1 @#$%^&*q.+() • 但是最好只使用点 (.),横杆 (-), and 下划线 (_),而不要使用@#$%^&*等,以免不必要的麻烦 • 注意大小写有区别,p1与P1看成不同文件名
Unix文件系统 • 文件系统(把所有硬件软件都看成文件),包括普通文件,文件夹,以及设备文件。组织结构是树状层次结构(倒置的树结构-层次) • root是超级用户 • “/“代表根目录,包括所有的子文件夹
Unix 文件系统 / bin dev lib home tmp sbin etc usr var dsk fd0 lp0 john jane bin sbin lib local progs scripts emails
Unix 文件系统 • /bin和/usr/bin–包含常用的unix命令 • /sbin和 /usr/sbin–包含那些只用系统管理员才可以使用的命令 • /etc–包含系统配置文件 • /dev–包含所有硬件的设备文件 • /home–所有用户的主目录 • /tmp–用户可以在这里创建和保存临时文件。这些文件会被定期删除。 • /var–文件系统中的可变部分。包括比如你的打印任务、要发送的邮件队列,以及接收的邮件等 • /lib–包含所有库文件
用户目录 • 当用户登陆到服务器,默认所在的路径即用户目录 • 如,用户 Jane的目录 /home/jane • 相关的路径信息存放在文件 /etc/passwd • 命令 cd~(不要带参数)帮助用户回到自己的目录,无论当前用户在哪个路径。 ( . . 前一个目录 . / 当前路径 ~ 当前用户目录 / 根目录)
绝对/相对路径 • 从当前路径开始,访问文件有两种方式 • 使用absolute pathname(绝对路径),从根目录开始的路径 • 使用relative pathname(相对路径),从当前路径开始
绝对路径、相对路径 $ pwd(显示当前路径的命令) /home/jane $ ls -F emails/ letters/ $ cat /home/jane/emails/e1.txt 绝对路径 $ pwd /home/jane $ ls -F emails/ letters/ $ cat ./emails/e1.txt 相对路径
相关的文件命令 • cd - 进入其他目录,改变路径命令 • pwd–打印显示当前目录 • ls–列出目录下的内容 • mkdir–创建一个目录或一系列目录 • rmdir–删除一个目录或一系列目录 • rm - 删除一个或一系列文件 • mv–对目录或文件进行改名或移动 • cp - 拷贝文件、目录 • cat–显示文件内容 • file–显示文件类型 (eg, ascii text)
cp命令常用选项 • 交互拷贝 (-i)(交互信息选项开关) • 拷贝目录结构,即拷贝目录下所有内容 (-r) - 以下命令把emails下的所有内容包括子目录拷贝到allmails下(emails和allmails都是目录) cp-i file1 file2 ./emails cp: overwrite file1? y cp -remailsallmails
rm options • 交互删除 (-i) • 递归删除(-r) rm -i file1 file2 file3 file1: ? y file2: ? y rm -ir * rm -r * (当前目录下的所有内容包括子目录被完全删除!)
rm options (cont) rm -rf * 强制删除 (当前目录树完全被删除,包括写保护文件!!) rm -rf * 当超级用户在根目录下执行该命令将从 硬盘上删除整个系统!!!
使用cat创建文件 • 创建小文件不需要通过文本编辑器 $ cat > hello.txt Hello, world! This is a test message [Ctrl-d]正常终止保存缓冲区数据 $ cat > hello.txt Hello, world! This is a test message [Ctrl-C]异常终止不保存缓冲区数据
file: 查询文件类型 $ file hello.txt hello.txt: ascii text $ file * /file .* hello.txt: ascii text info.sh: executable shell script mail: directory Nn: directory Philos.c: C program text start: executable …
一些特殊的字符 • . (一点) –代表当前目录 • ..(两点)–代表当前目录的父目录,即上一级目录 • *(星号)–代表目录下的所有普通文件(不包括.和..以及名字以.开头等之类的特殊文件) • ?–代表单个字符 • ~(波浪号)–代表你的 主目录
一些特殊的字符 $ rm * 当前目录下的所有普通文件(不包括.和..以及名字以.开头等之类的特殊文件)都被删除。 $ pwd /u/jane $ cd ../.. $ pwd / $ cd / $ pwd / $ ls ~ emails letters $ ls chap? chapx chapy chapz $ ls chap?? chap01 chap02 chap03
文件压缩 • To conserve disk space you will need to compress large and infrequently used files • The most notable compression programs available are compress, gzip, and zip • compress和 gzip可以处理多个文件,压缩完后,原文件将被删除,以压缩后文件来替代 • zip会保留原文件,并且还可以把多个文件压缩到一个文件中(称为归档)
文件压缩 • Picture files with the .jpeg and .gif extensions won’t compress at all as these files themselves hold graphic data in compressed form File Typecompressgzipzip JPG 0 1 1 GIF 0 0 0 BMP 5 15 15 HTML 81 89 89 Text 68 71 70 PDF 52 70 70 PS 57 64 63 degree of compression (percentage)
文件压缩 compress e1.txt (生成文件 e1.txt.Z, 并删除原文件) uncompress e1.txt.Z (解压) compress * (压缩当前文件夹下的所有普通文 件,但不包括目录,并且每个文件 生成一个压缩文件) gzip e1.txt (生成 e1.txt.gz) gunzip e1.txt.gz (也可以用gzip –d el.txt.gz) zip htmls *.html (生成 htmls.zip.这个命令把当前文 件夹下的所有html文件压缩到文件 html.zip中) unzip htmls.zip
文件压缩 zip-r emailsdir emails (压缩整个目录树 (emails),生成emailsdir.zip) (compress和 gzip要把多个文件压缩到一个文件中, 必须先借助tar把多个文件归档为一个文件) tar-cvf emailsdir.tar emails (把一整个目录树 (emails)归档,生成 emailsdir.tar. 但并不压缩) tar-xvf emailsdir.tar (释放成一个目录 (emails))
Internet上的压缩文件 • .zip–用zip来压缩的文件 • .tar–用tar来归档产生的文件,没有压缩 • .gz–用 gzip 来压缩产生的文件 • .tar.Z–先用 tar来归档,然后用 compress 来压缩产生的文件 • .tar.gz --先用 tar来归档,然后用 gzip来压缩产生的文件
找出空闲的磁盘空间 • 我们把UNIX文件系统看成一个只有一个根目录的树结构 • 实际上我们有多个硬盘,并且每个硬盘都至少有一个文件系统,并且每个文件系统都有它自己的根目录 • 启动进程把所有这些树形结构合并( merges)成一个,并且让它以一个单一的文件系统的形式出现
找出空闲的磁盘空间 • 我们可以使用 df (disk free) 命令来显示在每个磁盘上的空余空间 $df / (/dev/dsk/c0t0d0s0 ): 4122488 blocks 446163 files /dev/fd (fd ): 0 blocks 0 files /d01 (/dev/dsk/c0t8d0s0 ): 3197798 blocks 667713 files … … … ... 这里你看到三个文件系统. root文件系统 有4122488块(一个块的 大小一般是 512 or 1024 字节) 的空闲空间,并且还有剩余446163 个 inodes ,这意味着还可以在这个文件系统上创建很多文件。 (每个inode是一个数据结构,里面保存了文件的属性等信息, 按文件大小,一个文件占用一个inode)
查看磁盘的使用情况 • 我们经常需要查看一个特定目录而不是整个磁盘的使用空间,这时可以使用 - du (disk usage) 命令 $ du /u/jane 123 /u/jane/emails 89 /u/jane/letters … 2190 /u/jane $ du -s /u/jane 2190 /u/jane 系统管理员需要监视每一个用户home目录的磁盘空间使用情况。她就可以用du命令来查看磁盘的使用情况 This directory consumed 2190 blocks
The Unix File Attributes (Chapter 7, Das)
文件属性 • 文件有一系列的属性 (权限,大小, 归属, 等) ,这些属性可以依据一定的规则来修改 • 我们将使用ls -l命令来显示属性,使用其他特定的命令来修改属性 • 我们也将讨论下 find命令- Unix文件系统中处理文件属性的有用工具之一
ls命令选项 • -x以多列形式来显示 • -F在目录文件后添加/, 可执行文件后添加 *, 符号链接文件后添加 @ • -a显示所有文件 • -R递归显示子目录下的所有文件 (见下页的例子) • -l按ASCII字母顺序排列 (先是数字,然后 大写字母,然后小写字母) 并显示文件 的7个属性 • -i显示文件占用的inodes • 其他 (比如 -L, -d, -n, -u, -c, -s, … …)
The Unix Files (cont) $ ls -F dir1/ dir2/ letter1 mails/ net@ net2@ output1* output2* park/ hello.java “-F”选项 在目录文件后添加 / 在可执行文件后添加 * 在符号链接文件后添加 @
ls命令选项 $ ls -xR 08_tec.html TOC.sh dir1 dir2 letter1 net output2 park ./dir1: forms.hlp graphics.hlp ./dir2: array.java words.java pet.java
文件权限 % ls -l total 161 -rwxr-xr-x 1 jane group1 17878 a.out -rw-r--r-- 1 jane group1 5053 test drw-r-xr-x 1 jane group1 512 dsa ... 这些文件占用磁盘上的161个块 以字节为单位 u g o - rwx rwx rwx a file file user (owner) other (world) group
文件权限 • 你创建的文件 - rw- r-- r-- -代表文件 user (你) other (其他人) r - read w - write x - execute Group(组) 默认下,一个文件创建时没有执行(x) 权限,文件拥有者也没有。
文件权限 • 你创建的目录 d rwx r-x r-x d代表目录 user (你) other (其他人) Group(组)
文件权限 • 目录权限 • read–表示可以用ls命令查看该目录下的内容。 • write–表示允许用户在该目录下创建或删除文 件 • execute - 表示用户可以通过目录来查找、访问 该目录下的子目录. 例如: 要能执行下面的命令 cat /u/jane/emails/e1.txt 对该命令中的每一个子目录,你要有“执行”的权限
chmod: 修改文件的权限 chmod u+x file1.txt 为文件拥有者添加执行权限 chmod ugo+x file1.txt 给所有人添加执行权限 chmoda+x file1.txt 给所有人添加执行权限 chmod a-x file1.txt 取消所有人的执行权限 chmod a-rwx file1.txt 取消所有人的所有权限 (一个文件的权限可以被它的拥有者和超级用户修改)
修改文件的权限 • 使用多个选项 • chmod a+r, u+w file1.txt • 使用绝对赋值号(absolute assignment)-把制定的权限赋给该文件,并取消其他所有权限,例如 • chmod a=r file1.txt • chmod u=rwx file1.txt • 当你想直接给该文件设置权限,而不考虑该文件的当前权限时,可以使用该命令
修改文件的权限 • 使用八进制符号( octal notation) • 每一个权限被指定为一个数字, 如下: • read 权限 - 4 • write 权限 - 2 • execute 权限 - 1 chmod 666 file1.txt与下一个命令等效 chmod a=rw file1.txt chmod 644 file1.txt(给所有人设置r权限,只给拥有者设置w权限) chmod 777 file1.txt chmod 000 file1.txt
修改文件的权限 • chmod 处理多个文件 • chmod 755 file1 file2 file3 • 使用递归操作符 (-R) • chmod -R 700 emails -该命令把emails目录下的所有文件和子目录的权限设置成700 • chmod -R 700 .
文件的修改和访问时间 • ls –l – 显示最后一次修改的时间 • ls –lu – 显示最后一次访问的时间 • 访问时间: 最后一次读、写或执行文件的时间 • ls –lt – 按文件最后一次修改的时间排序显示 • 最近被修改的文件放在第一个 • ls –lut – 按文件访问时间的顺序排序,最近被访问的文件放在第一个
touch: 修改时间戳 • 可以使用touch命令把文件的修改时间和访问时间修改成预定义值 • touch 06201010 letter.txt • 把两个时间都改成当前年份的 June 20, 10:10, • touch -t 200106201010 letter.txt -t 表示使用完整的时间表达形式 • touch使用 –m选项,只改变文件的修改时间,使用–a选项只改变访问时间
Inodes • Inode占用磁盘上的一定空间,用来存储文件的所有属性 • 文件的所有属性保存在一个称为inode的表( table)中 • 每一个文件都有一个inode, 每个inode都通过inodenumber访问 • 在一个文件系统中,每个文件的inodenumber值是一定的 • ls –i命令将显示出inode number
find: 查找文件 • find递归查找目录树,查找匹配给定的文件名或其他给定的一个或多个文件属性的文件 find path_list selestion_criteria action find /home -name index.html -print (Linux下默认会print)
find: Locating files (cont) find /home -name index.html -print /home/andrew/scripts/reports/index.html /home/jane/emails/index.html /home/john/www/index.html 使用单引号或双引号 find .-name “*.java” -print 从当前文件夹开始,查找文件名以.java结尾的文件
find: Locating files (cont) find .-name ‘[A-Z]*’ -print 查找文件名以任一个大写字母开头的文件. (这种查找在windows下是不可能的。) find .-name “*.[Dd][Oo][Cc]” -print 查找文件名以.doc结尾的文件,不考虑doc的大小写 find /home/adam-type d -print /home/adam /home/adam/emails /home/adam/www f: 普通文件 d: 目录文件 l: 符号链接文件 按文件类型查找
find: Locating files (cont) find /home -perm 777 -type f -print 从 /home开始查找权限为777的普通文件 find /home -mtime -2 -print 从/home开始查找“修改时间”小于两天的文件。 -mtime中,m表示“修改时间”,time表示时间以“天为单位” -2中“-”号表示小于 find /home -mtime +2 -mtime -5 -ls 从/home开始查找那些修改时间大于两天小于5天的文件,并列出来(-ls表示用ls命令列出结果
find: Locating files (cont) find /home -mtime +90 -exec rm -f {} \; 从/home开始查找90天以前最后一次被修改的文件,并删除. 其中-exec和 \;之间表示对查找结果进行的操作,即要执行的命令;{}代表find查找出的文件的名字。 对find的查找结果执行命令的格式为:-exec命令 选项 {} \; find . -size +2000 -atime +90 -ok rm -f {} \; 从当前文件夹开始查找大小大于2000块,并且超过90天没有访问的文件,并删除。其中 -ok提供交互删除,如下: < rm .../home/adam/readme >? y
The Unix Shell • shell的工作流程 • 显示提示符,然后等待,直到你敲下 [Enter] • 扫描命令行,查看特殊字符 (元字符:meta-characters) 即那些对shell来说有特殊意义的字符 • 然后生成一个简单的命令并 把它们传给内核(kernel)执行, 然后等待命令的结果 • 提示符再次出现,shell再次等待新的输入
Shells • 五种常用的shell: • the Bourne shell (/bin/sh) • the C shell (/bin/csh) • the T C shell (/bin/tcsh) • the Korn shell (/bin/ksh) • the bash shell (/bin/bash) • Bourne shell是最早出现的shell,它和unix一起产生 • 查看你在使用哪一个shell – 键入命令: echo $SHELL 说明:SHELL是一个shell环境变量,所以前面加上$来显示它的值
通配符( Wild Cards) • *和 ?被称为元字符, 当这些元字符用于文件的匹配时,又成为通配符 • 就像纸牌中的joke可以代替任何牌一样 ls -x chap* (shell辨别出*,然后把命令 扩展成如下命令行) ls -x chap chapx chapy chap01 chap02
通配符 • [ijk]匹配单个字符 –为i,j,k中任意一个字符 • [!ijk]匹配除i,j,k的任意单字符 • [x-z]匹配x到z中的任意单字符,x到z是按ASCII表 中顺序 • [!x-z]匹配不在x到z中的其他任意字符 • 总结:[]匹配单个字符, !表示除后面所列出的字符外 的所有字符