ls -al
ls会显示指定目录下(默认当前位置)的文件,加上-l的选项可以展现出更多的信息,否则只有文件名,加上-a选项可以把隐藏文件(以“.”为文件名开头的文件)也显示出。
列出的每行是一个文件的信息,从左到右分别是权限,链接数,拥有者,用户组,文件容量,修改日期,文件名。
其中权限一共有十个字符。第一个字符表示该文件的类型。
d为目录,
-为普通文件,
l为链接文件,
b为可按块随机读写的设备,
c为设备文件中的串行端口设备。
剩下九个字符分为三个字符三组,每组的字符以及顺序固定为rwx,分别表示读(r),写(w),执行(x)的权限,如果没有对应的权限,则是将该位置的字符替换为-,表示没有该权限。
例如r-x表示为可读可执行,但是不能写入。--x表示为不可读写,只能执行。
一共有三组权限,按照顺序,第一组是文件拥有者的权限,第二组是用户组拥有的权限,第三组是其他人拥有的权限。
chgrp 用户组的名称 文件/目录名
基础用法如上,加入-R选项去修改目录的话会把目录下的文件都修改了,详细使用man去查询用法。
chown 账号名称 文件/目录名
基础用法如上,加入-R选项去修改目录的话会把目录下的文件都修改了,详细使用man去查询用法。
chmod 权限 文件/目录名
基础用法如上,加入-R选项去修改目录的话会把目录下的文件都修改了,详细使用man去查询用法。
其中权限我们使用数字来代替rwx,一共三组权限,每组权限我们使用一个数字来代替。
我们把rwx看作是二进制数,如果有对应权限,那么对应的二进制数的位置1,反之置0。
例如rwx等同于111,也就是7。
r-x等同于101,也就是5。
--x等同与001,也就是1。
所以如果我要给一个文件修改权限,修改为拥有者和用户组都拥有全部,其他人只拥有执行权限,那么就应该设置为rwxrwx--x,换成数字的话就是771,所以我们应该在命令行执行
chmod 771 test
文件的权限比较直观,可读就是可以查看内容,可写就是可以修改文件内容,可执行就是可以执行该文件。
目录的权限有些区别,可读是可以使用ls来查看目录下的文件。可执行是可以进入该目录。值得一提的是如果权限是r--,即只能读,不能进入该目录,那还是可以通过ls来查看该目录下的文件的。
可写权限比较厉害,可做的事如下
cp 想要复制的文件名称(包含路径) 想要复制过去的位置(包含文件名称)
常用的选项有:
-i 若目标文件已经存在,则会询问是否覆盖
-r 递归的复制,一般用于目录的复制。
如果我要复制当前工作目录下的一个目录到上一级目录去,则如同下面的命令:
cp -r my_dir ../my_dir
因为是要复制目录,所以需要加上-r选项,my_dir是我要复制的目录,../my_dir是我要复制过去的路径,这里可以给复制的目录改名,但是我用的是原名。
以上是cp的基本用法,详细可以使用man来查阅。
rm 需要删除的文件或目录(包含路径)
常用的选项有:
-r 递归删除,常用于删除目录。
-I 在删除前会询问使用者是否操作。
如果需要删除的文件有多个,可以用空格隔开,例如:
rm -I 1.c 2.c 3.c
以上是rm的基本用法,详细可以使用man来查阅。
mv 移动前的文件路径(包含名称) 移动后的文件路径(包含名称)
常用的选项有
-i 若目标文件存在,那么会询问是否覆盖
移动的命令也可以用于改名,只要移动前后的路径不变,而文件名称改变,那么就达到了改名的功能。
以上是mv的基本用法,详细可以使用man来查阅。
查看文件的命令有很多,常用的有cat,tac,more,less。用法都是命令后接文件路径(包括文件名),每个命令的选项都各有不同,建议自行使用man来查看学习。
cat会将文件按照顺序一次性打印到屏幕上,仅适用于查看内容较小的文件。
tac与cat类似,只不过tac是将文件按照从下到上逆序来打印。
more一页一页地打印文件,适用于大文件。
less与more类似,不过more无法往回翻页查看文件,而less可以。man就是调用的less命令。
touch 新文件的路径(包含文件名称)
常用选项:
-c 仅修改文件的时间,如果文件不存在就忽略这条命令。
以上是touch的基本用法,详细可以使用man来查阅。
压缩文件的命令很多,有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的第二节中,如果不加选项的话,默认会查询到第一节的内容。
不加选项:
加上2的选项:
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来获取目录项的信息:
比较重要的参数是d_name和d_type,分别代表目录项的名称和类型。
《鸟哥的LINUX私房菜基础学习篇(第四版)》