Linux系统下文件与目录操作

发布于2005-06-14  【字体:

  与其它操作系统一样,在Linux系统下用户的数据和程序也是以文件的形式保存的。所以在使用Linux的过程中,是经常要对文件与目录进行操作的。现在我们就以一个Window用户的立场来学习一下Linux下的文件与目录操作方法。

  1. 文件名与文件类型

  文件名是一个文件的标识。从这个角度来说,文件名的规则与Windows 9x下的是基本上相同的。它同样是由字母、数字、下划线、圆点组成,最 大的长度是255个字符。
与Windows 9x一样,Linux系统中也有普通文件和目录文件,不过目录文件在Window中被简称为目录就是了。而在Linux系统中有一种特殊的文件,那就是设备文件。在Linux系统中,把每一个I/O设置都映射成为一个文件,可以象普通文件一样处理,这就使得文件与设备的操作尽可能统一。从用户的用户来说,对I/O设备的使用和一般文件的使用几乎一样,这样就可以不必了解I/O设备的细节。

  2. 目录结构

  与Windows下一样,在Linux中也是通过目录来组织文件的。但不同的是,在Linux下只有一个根目录,而不象Windows那样一个分区一个根目录。 如果有多个分区的话,就需要将其它分区mount到根目录上来用。

  大家回忆一下当时为Linux分区时,有一个选项要填,那就是Mount Point,我们将其中一个写成了“/”,也就是根目录(这点与Windows相反, 一个是“\”,一个是“/”,真是天生冤家)。其它的则可能是/home、/usr。

  安装完系统后,你会发现/home、/usr就是根目录下面的home、usr目录!对了,整个分区就用于该目录了。

  安装完Linux后,有许许多多的目录,下面我们就说明一些重要的目录:

/bin:存放着一百多个Linux下常用的命令、工具
/dev:存放着Linux下所有的设备文件!
/home:用户主目录,每建一个用户,就会在这里新建一个与用户同名的目录,给该用户一个自己的空间
/lost+found:顾名思义,一些丢失的文件可能可以在这里找到
/mnt:外部设备的挂接点,通常用cdrom与floppy两个子目录!它的存在简化了光盘与软盘的使用。你只需在塞入光盘后,运行: mount /mnt/ cdrom,就可以将光盘上的内容Mount到/mnt/cdrom上,你就可以访问了。不过你使用完成后,应该离开该目录,并执行umount /mnt/cdrom。同样 的,软盘就是mount /mnt/floppy和umount /mnt/floppy了。
/proc:这其实是一个假的目录,通过这里你可以访问到内存里的内容。
/sbin:这里存放着系统级的命令与工具
/usr:通常用来安装各种软件的地方
/usr/X11R6 X Window目录
/usr/bin与/usr/sbin 一些后安装的命令与工具
/usr/include、/usr/lib及/usr/share 则是存放一些共享链接库
/usr/local 常用来安装新软件
/usr/src Linux源程序
/boot:Linux就是从这里启动的
/etc:这里存放在Linux大部分的配置文件
/lib:静态链接库
/root:root用户的主目录,这就是特权之一!
/var:通常用来存放一些变化中的东西!
/var/log:存放系统日志
/var/spool:存放一些邮件、新闻、打印队列等

  另外,要说明的是,在Linux下“当前目录”、“路径”等概念与Windows下是一样的。

  3. 显示文件内容

  使用过DOS命令的人都应该知道,我们可以使用type命令来查看一个文件的内容。在Linux下有五个相关的命令,功能各有千秋,不过它们都象 type命令一样,只能用来查看文本文件。

  (1) cat命令

  cat命令是最象type命令的,使用的方法很简单:“cat 文件名”。不过比type命令更强大的是,它可以同时查看多个文件:“cat 文件名一 文 件名二”。

  (2) more命令

  如果文本文件比较长,一屏无法显示完,那么使用cat命令就可能无法看清。这里我们可以简单地使用more来代替cat命令即可。其效果与 type 文 件名/p类似。使用more命令将一次显示一屏文本,显示满后,停下来,并提示出已显示全部内容的百分比,按空格键就可以看到下一屏。

  (3) less命令

  less命令的功能几乎和more命令一样,也是按页显示文件,不同之处在于less命令在显示文件时允许用户既可以向前又可以向后翻阅文件。

  向前翻:按b键;向后翻:按p键;指定位置:输入百分比;退出:q

  我经常使用more和less,几乎不使用cat查看文件。

  (4) head命令

  通过head命令可以仅查看某文件的前几行,格式为:

  head 行数 文件名

  如果未指定行数,则使用默认值10。

  (5) tail命令

  与head命令相对应的,我们可以使用tail命令来查看文件尾部的内容。通常用来实时监测某个文件是否被修改,通常用来观察日志。如:

  tail -f maillog

  4. 编辑文件

  在Red Hat Linux 7中有许多文字编辑工具,其中最常用的应该是vi,这是一个广泛应用于所有UNIX系统的编辑器。它的使用有些特别:
首先,可以使用命令“vi 文件名”打开一个文件。

  刚启动的时候,vi处于命令状态,不能够输入任何字符。在这个状态下,可以使用方向键进行移动,而需要输入内容时,你需要输 入“i”或“a”命令进入编辑状态。编辑完成后,你需要按下“ESC”键回到命令状态。

  在命令状态下,你可以输入“:q!”不存盘退出,输入“:wq”存盘退出。

  5. 文件的复制、删除与移动

  大家都早已熟知在DOS下我们可以使用copy、del、move命令来实现文件的复制、删除与移动。下面我们说说如何在Linux系统中做以上操作。

  1) cp命令:文件/目录复制命令

  它的语法格式为:cp [选项] 源文件或目录 目标文件或目录

  常用的选项有:

a 该选项常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,就象DOS中的xcopy /s一样
f 如果目标文件或目录已存在,就覆盖它,并且不做提示
i 与f选项正好相反,它在覆盖时,会让用户回答“Y”来确认
p 使用该选项,复制文件时将保留修改时间和访问权限
r 若给出的源是一个目录,那么cp将递归复制该目录下所有的子目录和文件,不过这要求目标也是一个目录名

  另外,大家要注意的是,如果源是文件名,目标是目录名的话,那么使用cp命令可以指定多个源文件名。如:

   $ cp a.txt b.txt /home/user1

  该命令将把a.txt和b.txt文件复制到/home/usr1目录中。

  2) rm命令:文件/目录删除命令

  它的语法格式为:rm [选项] 文件 …

  常用的选项有:

f 在删除过程中不给任何指示,直接删除
r 指示rm将参数中列出的全部目录和子目录都递归地删除
i 交互式的删除,每个文件在删除时都给出提示

  使用rm命令时一定要小心,特别是以root用户登录时,我就看到过一个朋友在使用rm命令删除/home/tmp目录时将命令“rm -rf /home/tmp”误输 成了 “rm -rf / home/tmp”,结果等他走回电脑面前,整个系统都被删除了!

  3) mv命令:文件/目录移动命令

  它的语法格式为:mv [选项] 源文件或目录 目标文件或目录

  常用的选项有:

f 如果操作要覆盖某已有的目标文件时不给任何指示
i 交互式的操作,如果操作要覆盖某已有的目标文件时会询问用户是否覆盖

  mv命令的执行效果与参数类型的不同而不同!

第一参数(源)    第二个参数(目标)            结果
文件名                文件名           将源文件名改为目标文件名
文件名                目录名           将文件移动到目标目录
目录名                目录名           目标目录已存在:源目录移动到目标目录

目标目录不存在:改名
目录名 文件名 出错

  6. 目录相关操作

  1) 创建新目录:mkdir,它的使用与DOS下的md相同:mkdir 目录名;

  2) 删除空目录:rmdir,它的使用与DOS下的rd相同:rmdir 目录名;

  3) 改变目录:cd,它的使用与DOS下的cd命令基本相同,唯一一个不同的是,不管目录名是什么,cd与目录名之间必须有空格,也就是:“cd/”、 “cd..”、“cd.”都是非法的,而应该输入:“cd /”、“cd ..”、“cd .”,如果直接输入命令“cd”,而不加任何参数,将回到这个用户的主目录。
       4) 显示当前目录:pwd

  5) 列目录命令:ls,相当于DOS下的dir

  它的语法为:ls [选项] [目录或文件]

  常用的选项有:

a 显示指定目录下所有的子目录与文件,包括隐藏文件;
c 按文件的修改时间排序
l 采用长格式来显示文件的详细信息,每个文件一行信息,其内容为:文件类型与权限 链接数 文件属主 文件属组 文件大小 最近修改时间 文件名

  7. 文件与目录的权限操作

  在Linux系统中,每一个文件和目录都有相应的访问许可权限,我们可以用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目 录的访问权限分为可读、可写和可执行三种,分别以r,w,x表示,其含义为:

r w x
文件 可读 可写 可执行
目录 可列出目录 可在目录中做写操作 可以访问该目录

  在文件被创建时,文件所有者可以对该文件的权限进行设置。

  对于一个文件来说,可以将用户分成三种,并对其分别赋予不同的权限:

  1) 文件所有者
  2) 与文件所有者同组用户
  3) 其它用户

  每一个文件或目录的访问权限都有三组,每组用三位表示,如:

  d rwx r-x r--

  第一部分:这里的d代表目录,其它的有:- 代表普通文件 c 代表字符设备文件;
  第二部分:文件所有者的权限字,这里为r w x表示可读、可写、可执行 (目录的可执行指的可以进入目录);
  第三部分:与文件所有者同组的用户的权限字,这里为r - x表示可读、不可写、可执行。由于同组用户之间交流较多,让他看看文件,别乱改就 行了嘛。
  第四部分:其它用户的权限字,这里为- - -,当然给我无关的人嘛,我的文件当然不但不给你写,也不让你读。

  1) 文件/目录权限设置命令:chmod

  这是Linux系统管理员最常用到的命令之一,它用于改变文件或目录的访问权限。该命令有两种用法:

  用包含字母和操作符表达式的文字设定法

  其语法格式为:chmod [who] [opt] [mode] 文件/目录名

  其中who表示对象,是以下字母中的一个或组合:

u:表示文件所有者
g:表示同组用户
o:表示其它用户
a:表示所有用户
opt则是代表操作,可以为:
+:添加某个权限
-:取消某个权限
=:赋予给定的权限,并取消原有的权限
而mode则代表权限:
r:可读
w:可写
x:可执行

  例如:为同组用户增加对文件a.txt的读写权限:

  chmod g+rw a.txt

  用数字设定法

  而数字设定法则更为简单:chmod [mode] 文件名

  关键是mode的取值,一开始许多初学者会被搞糊涂,其实很简单,我们将rwx看成二进制数,如果有则有1表示,没有则有0表示,那么rwx r-x r- -则可以表示成为:

  111 101 100

  再将其每三位转换成为一个十进制数,就是754。

  例如,我们想让a.txt这个文件的权限为:

  自己 同组用户 其他用户
  可读   是       是     是
  可写   是       是     可执行

  那么,我们先根据上表得到权限串为:rw-rw-r--,那么转换成二进制数就是110 110 100,再每三位转换成为一个十进制数,就得到664,因此我 们执行命令:

  chmod 664 a.txt

  2) 改变文件的属主命令:chown

  语法格式很简单:chown [选项] 用户名 文件/目录名

  其中最常用的选项是“R”,加上这个参数,可以将整个目录里的所有子目录和文件的属主都改变成指定用户。

  3) 改变文件属组命令:chgrp

  该命令也很简单:chgrp 组名 文件名