Linux文件管理

1. Linux文件管理

Linux中的所有数据都被保存在文件中,所有的文件被分配到不同的目录。目录是一种类似于树的结构,称为文件系统。

1.1. 文件类型

1、普通文件

普通文件是以字节为单位的数据流,包括文本文件、源码文件、可执行文件等。文本和二进制对Linux来说并无区别,对普通文件的解释由处理该文件的应用程序进行。

2、目录

目录可以包含普通文件和特殊文件,目录相当于Windows和Mac OS中的文件夹。

3、设备文件

Linux 与外部设备(例如光驱,打印机,终端,modern等)是通过一种被称为设备文件的文件来进行通信。Linux 输入输出到外部设备的方式和输入输出到一个文件的方式是相同的。Linux 和一个外部设备通讯之前,这个设备必须首先要有一个设备文件存在。

设备文件和普通文件不一样,设备文件中并不包含任何数据。

设备文件有两种类型:字符设备文件和块设备文件。

  • 字符设备文件以字母"c"开头。字符设备文件向设备传送数据时,一次传送一个字符。典型的通过字符传送数据的设备有终端、打印机、绘图仪、modern等。字符设备文件有时也被称为"raw"设备文件。
  • 块设备文件以字母"b"开头。块设备文件向设备传送数据时,先从内存中的buffer中读或写数据,而不是直接传送数据到物理磁盘。磁盘和CD-ROMS既可以使用字符设备文件也可以使用块设备文件。

1.2. 文件属性

可以使用ls -al来查看当前目录下的所有文件列表。

[root@www ~]# ls -al
total 156
drwxr-x---   4    root   root     4096   Sep  8 14:06 .   # 当前目录
drwxr-xr-x  23    root   root     4096   Sep  8 14:21 ..  # 父目录
-rw-------   1    root   root     1474   Sep  4 18:27 anaconda-ks.cfg
-rw-------   1    root   root      199   Sep  8 17:14 .bash_history
-rw-r--r--   1    root   root       24   Jan  6  2007 .bash_logout
-rw-r--r--   1    root   root      191   Jan  6  2007 .bash_profile
-rw-r--r--   1    root   root      176   Jan  6  2007 .bashrc
-rw-r--r--   1    root   root      100   Jan  6  2007 .cshrc
drwx------   3    root   root     4096   Sep  5 10:37 .gconf      
drwx------   2    root   root     4096   Sep  5 14:09 .gconfd
-rw-r--r--   1    root   root    42304   Sep  4 18:26 install.log
-rw-r--r--   1    root   root     5661   Sep  4 18:25 install.log.syslog
[    1   ] [ 2 ][   3  ][  4 ]  [  5   ] [    6     ] [       7          ]
[  权限   ][文件数][所有者] [用户组][文件容量][ 修改日期   ] [      文件名      ]

每列含义说明:

  • 第一列:文件类型。
  • 第二列:表示文件个数。如果是文件,那么就是1;如果是目录,那么就是该目录中文件的数目。
  • 第三列:文件的所有者,即文件的创建者。
  • 第四列:文件所有者所在的用户组。在Linux中,每个用户都隶属于一个用户组。
  • 第五列:文件大小(以字节计)。
  • 第六列:文件被创建或上次被修改的时间。
  • 第七列:文件名或目录名。

文件类型字符

前缀描述
-普通文件。如文本文件、二进制可执行文件、源代码等。
b块设备文件。硬盘可以使用块设备文件。
c字符设备文件。硬盘也可以使用字符设备文件。
d目录文件。目录可以包含文件和其他目录。
l符号链接(软链接)。可以链接任何普通文件,类似于 Windows 中的快捷方式。
p具名管道。管道是进程间的一种通信机制。
s用于进程间通信的套接字。

隐藏文件

隐藏文件的第一个字符为英文句号或点号(.),Linux程序(包括Shell)通常使用隐藏文件来保存配置信息。可以通过ls -a来查看所有文件,即包含隐藏文件。

常见的隐藏文件:
.profile:Bourne shell (sh) 初始化脚本
.kshrc:Korn shell (ksh) 初始化脚本
.cshrc:C shell (csh) 初始化脚本
.rhosts:Remote shell (rsh) 配置文件

1.3. 文件的操作

操作命令
创建touch filename
编辑vi filename
查看cat filename
复制cp filename copyfile
重命名mv filename newfile
删除rm filename filename2
统计词数wc filename

1.4. 标准的Linux流

一般情况下,每个Linux程序运行时都会创建三个文件流(三个文件):

  • 标准输入流(stdin):stdin的文件描述符为0,Linux程序默认从stdin读取数据。
  • 标准输出流(stdout):stdout 的文件描述符为1,Linux程序默认向stdout输出数据。
  • 标准错误流(stderr):stderr的文件描述符为2,Linux程序会向stderr流中写入错误信息。

2. 文件权限和访问模式

2.1. 查看文件权限

Linux每个文件都有三类权限:

  • 所有者权限(user):文件所有者能够进行的操作
  • 组权限(group):文件所属用户组能够进行的操作
  • 外部权限(other):其他用户可以进行的操作。

通过ls -l的命令可以查看文件权限信息。

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

第一列-rwxr-xr-- 包含了文件或目录的权限。

除了第一个字符-d分别用来表示文件目录外,其他的九个字符可以分为三组,分别对应所有者权限用户组权限其他用户权限,即-|user|group|other

每组的权限又可分为三类:

  • 读取(r),对应权限数字4

  • 写入(w),对应权限数字2

  • 执行(x),对应权限数字1

使用数字表示权限:

数字说明权限
0没有任何权限
1执行权限–x
2写入权限-w-
3执行权限和写入权限:1 (执行) + 2 (写入) = 3-wx
4读取权限r–
5读取和执行权限:4 (读取) + 1 (执行) = 5r-x
6读取和写入权限:4 (读取) + 2 (写入) = 6rw-
7所有权限: 4 (读取) + 2 (写入) + 1 (执行) = 7rwx

2.2. 访问模式

2.2.1. 文件访问模式

基本的权限有读取®、写入(w)和执行(x):

  • 读取:用户能够读取文件信息,查看文件内容。
  • 写入:用户可以编辑文件,可以向文件写入内容,也可以删除文件内容。
  • 执行:用户可以将文件作为程序来运行。

2.2.2. 目录访问模式

目录的访问模式和文件类似,但是稍有不同:

  • 读取:用户可以查看目录中的文件
  • 写入:用户可以在当前目录中删除文件或创建文件
  • 执行:执行权限赋予用户遍历目录的权利,例如执行 cd 和 ls 命令。

2.3. 权限的操作

2.3.1. chmod

chmod (change mode) 命令来改变文件或目录的访问权限,权限可以使用符号或数字来表示。

1、通过符号方式

可以使用符号来改变文件或目录的权限,你可以增加(+)和删除(-)权限,也可以指定特定权限(=)。

指定权限范围

  • u (user):所有者权限
  • g(group):所属用户组权限
  • o(other):其他用户权限
符号说明
+为文件或目录增加权限
-删除文件或目录的权限
=设置指定的权限

示例

# 查看权限
$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile
# 增加权限
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
# 删除权限
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
# 指定权限
$chmod g=rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile
# 同时使用多个符号
$chmod o+wx,u-x,g=rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

2、通过数字权限方式

数字权限依照2.1的权限说明。

示例

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x  1 amrood   users 1024  Nov 2 00:10  testfile

2.3.2. chown

chown 命令是"change owner"的缩写,用来改变文件的所有者

# user可以是用户名或用户ID
$ chown user filelist
# 例如:
$ chown amrood testfile

超级用户 root 可以不受限制的更改文件的所有者和用户组,但是普通用户只能更改所有者是自己的文件或目录。

2.3.3. chgrp

chgrp 命令是"change group"的缩写,用来改变文件所在的群组

# group可以是用户组名或用户组ID
$ chgrp group filelist
# 例如:
$ chgrp special testfile

2.4. SUID和SGID位

在Linux中,一些程序需要特殊权限才能完成用户指定的操作。例如密码文件/etc/shadow

Linux 通过给程序设置SUID(Set User ID)和SGID(Set Group ID)位来赋予普通用户特殊权限。当我们运行一个带有SUID位的程序时,就会继承该程序所有者的权限;如果程序不带SUID位,则会根据程序使用者的权限来运行。

例如:

$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*

上面第一列第四个字符不是’x’或’-‘,而是’s’,说明 /usr/bin/passwd 文件设置了SUID位,这时普通用户会以root用户的权限来执行passwd程序。

小写字母’s’说明文件所有者有执行权限(x),大写字母’S’说明程序所有者没有执行权限(x)。

为一个目录设置SUID和SGID位可以使用下面的命令:

$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值