【Linux】文件操作

文件权限

查看

ls -al

ls会显示指定目录下(默认当前位置)的文件,加上-l的选项可以展现出更多的信息,否则只有文件名,加上-a选项可以把隐藏文件(以“.”为文件名开头的文件)也显示出。

【Linux】文件操作_第1张图片

列出的每行是一个文件的信息,从左到右分别是权限,链接数,拥有者,用户组,文件容量,修改日期,文件名。

其中权限一共有十个字符。第一个字符表示该文件的类型。

d为目录,

-为普通文件,

l为链接文件,

b为可按块随机读写的设备,

c为设备文件中的串行端口设备。

剩下九个字符分为三个字符三组,每组的字符以及顺序固定为rwx,分别表示读(r),写(w),执行(x)的权限,如果没有对应的权限,则是将该位置的字符替换为-,表示没有该权限。

例如r-x表示为可读可执行,但是不能写入。--x表示为不可读写,只能执行。

一共有三组权限,按照顺序,第一组是文件拥有者的权限,第二组是用户组拥有的权限,第三组是其他人拥有的权限。

修改

chgrp 用户组的名称 文件/目录名

基础用法如上,加入-R选项去修改目录的话会把目录下的文件都修改了,详细使用man去查询用法。

【Linux】文件操作_第2张图片

 chown 账号名称 文件/目录名

基础用法如上,加入-R选项去修改目录的话会把目录下的文件都修改了,详细使用man去查询用法。

【Linux】文件操作_第3张图片

chmod 权限 文件/目录名

基础用法如上,加入-R选项去修改目录的话会把目录下的文件都修改了,详细使用man去查询用法。

其中权限我们使用数字来代替rwx,一共三组权限,每组权限我们使用一个数字来代替。

我们把rwx看作是二进制数,如果有对应权限,那么对应的二进制数的位置1,反之置0。

例如rwx等同于111,也就是7。

r-x等同于101,也就是5。

--x等同与001,也就是1。

所以如果我要给一个文件修改权限,修改为拥有者和用户组都拥有全部,其他人只拥有执行权限,那么就应该设置为rwxrwx--x,换成数字的话就是771,所以我们应该在命令行执行

chmod 771 test

【Linux】文件操作_第4张图片

文件与目录的权限差别:

文件的权限比较直观,可读就是可以查看内容,可写就是可以修改文件内容,可执行就是可以执行该文件。

目录的权限有些区别,可读是可以使用ls来查看目录下的文件。可执行是可以进入该目录。值得一提的是如果权限是r--,即只能读,不能进入该目录,那还是可以通过ls来查看该目录下的文件的。

可写权限比较厉害,可做的事如下

  1. 建立新文件与目录
  2. 删除旧文件与目录
  3. 将旧文件与目录改名
  4. 移动目录内文件与目录的位置

文件操作

复制

cp 想要复制的文件名称(包含路径) 想要复制过去的位置(包含文件名称)

常用的选项有:

-i 若目标文件已经存在,则会询问是否覆盖

-r 递归的复制,一般用于目录的复制。

如果我要复制当前工作目录下的一个目录到上一级目录去,则如同下面的命令:

cp -r my_dir ../my_dir

因为是要复制目录,所以需要加上-r选项,my_dir是我要复制的目录,../my_dir是我要复制过去的路径,这里可以给复制的目录改名,但是我用的是原名。

以上是cp的基本用法,详细可以使用man来查阅。 

【Linux】文件操作_第5张图片

删除

 rm 需要删除的文件或目录(包含路径)

常用的选项有:

-r 递归删除,常用于删除目录。

-I 在删除前会询问使用者是否操作。

如果需要删除的文件有多个,可以用空格隔开,例如:

rm -I 1.c 2.c 3.c

以上是rm的基本用法,详细可以使用man来查阅。

【Linux】文件操作_第6张图片

移动

mv 移动前的文件路径(包含名称) 移动后的文件路径(包含名称)

常用的选项有

-i 若目标文件存在,那么会询问是否覆盖

移动的命令也可以用于改名,只要移动前后的路径不变,而文件名称改变,那么就达到了改名的功能。

【Linux】文件操作_第7张图片

 以上是mv的基本用法,详细可以使用man来查阅。

【Linux】文件操作_第8张图片

查看文件

查看文件的命令有很多,常用的有cat,tac,more,less。用法都是命令后接文件路径(包括文件名),每个命令的选项都各有不同,建议自行使用man来查看学习。

cat会将文件按照顺序一次性打印到屏幕上,仅适用于查看内容较小的文件。

tac与cat类似,只不过tac是将文件按照从下到上逆序来打印。

more一页一页地打印文件,适用于大文件。

less与more类似,不过more无法往回翻页查看文件,而less可以。man就是调用的less命令。

创建新文件

touch 新文件的路径(包含文件名称)

常用选项:

-c 仅修改文件的时间,如果文件不存在就忽略这条命令。

以上是touch的基本用法,详细可以使用man来查阅。

【Linux】文件操作_第9张图片

压缩与解压缩

压缩文件的命令很多,有gzip,bzip2,xz,感兴趣的小伙伴可以自行去查找资料。

这里仅列出一个打包命令tar,加入以选项就可以在打包的时候压缩。

tar的选项非常多,并且复杂,所以如果是简单的使用的话只需要记住几个固定的命令格式即可,想详细了解的话可以使用man来查询。

压缩:

tar -jcv -f 文件名.tar.bz2 要被压缩的文件或是目录名称

上面的“文件名.tar.bz2“为自己设置的压缩后的名字,虽然Linux中的文件没有限制后缀,但是为了人能够看清楚文件是做什么用的,所以我们要自己定义能看懂的后缀,tar表示为使用tar压缩的,bz2表示为压缩有bzip2的支持。

查询:

tar -jtv -f 文件名.tar.bz2

解压缩:

tar -jxv -f 文件名.tar.bz2 -C 欲解压缩的目录

系统编程

前言

以下函数如果使用man来查询详情的话需要加上2的选项,例如:

man 2 open

因为man一共有九节,关于系统编程的函数属于系统内核调用的函数,这在man的第二节中,如果不加选项的话,默认会查询到第一节的内容。

不加选项:

【Linux】文件操作_第10张图片

加上2的选项:

【Linux】文件操作_第11张图片

打开文件,获取一个文件描述符

int open(const char* pathname,int flags)

失败返回-1,成功则返回打开的文件的文件描述符。

第一个参数为需要打开的文件路径,第二个参数为以什么方式去打开文件。

第二个参数的选项很多,详情可以去使用man查阅,不过选项中必须至少包含以下三个基础选项的其中一个,如果有多个选项可以用|(或)来连接。

O_RDONLY                        只读

O_WRONLY                       只写

O_RDWR                           又读又写

关闭文件描述符

int close(int fd)

失败返回-1,成功返回0。

参数为文件描述符。

读文件

ssize_t read(int fd,void* buf,size_t count)

读取失败返回-1,反之返回读出的字节数。

可以循环调用read,会不断地按照顺序读取文件内容,如果返回了0,表示整个文件都被读取完毕。

第一个参数为文件描述符,

第二个参数为存放读出的数据的地方,

第三个参数为需要读取的字节数,不一定会读出那么多字节,如果文件剩余内容大于count,则会读出count个字节,如果文件剩余内容小于count,则会读出剩余内容。

写文件

ssize_t write(int fd,const void* buf,size_t count)

写入失败返回-1,反之返回写入的字节数。

第一个参数为文件描述符,

第二个参数为存放要写入文件的内容的地方,

第三个参数为需要写入的字节数,不一定真的会写入这么多。

虽然read和write属于系统调用函数,但是实际读取写入的效率不如库函数的高,因为read和write是一个字节一个字节的操作的,而库函数会一次性对多字节进行操作,所以在大部分情况下使用库函数来操作文件效率会更高。

打开与关闭目录

目录方面不是系统调用,而是库函数,所以相关内容在man的第三节。

打开一个目录:

DIR* opendir(const char* pathname)

 关闭一个目录:

int close(DIR* dirp)

以上参数比较简单,可以参考文件的操作。

获取目录项

struct dirent* readdir(DIR* dirp)

 失败返回NULL,成功返回一个结构体指针,指向一个目录项

参数为目录描述符,一次可以获取一个目录下的目录项,因此要获取全部目录项的话需要使用while来获取。

可以通过struct dirent来获取目录项的信息:

【Linux】文件操作_第12张图片

比较重要的参数是d_name和d_type,分别代表目录项的名称和类型。

参考:

《鸟哥的LINUX私房菜基础学习篇(第四版)》 

你可能感兴趣的:(Linux,linux,运维,服务器)