20145239 Linux下常用的ls命令总结
通过学习本周的教学视频和要求掌握的内容,发现ls命令被使用的次数非常多,但作为一个初学者,可能我只会ls或者顶多ls -l两种用法。但其实ls是一个非常实用的指令,因此我想简单的总结一下ls的常用命令。
- ls,英文全名:list 即列表的意思。
常用命令(以本周的10io文件夹为例):
1. ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。
2. ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
3. ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。
4. ls -s 在每个文件的后面打印出文件的大小。 size(大小)
5. ls -t 按时间进行文件的排序。 time(时间)
6. ls -A 列出除了"."和".."以外的文件。
7. ls -R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现。
8. ls -L 列出文件的链接名。Link(链接)
9. ls -S 以文件的大小进行排序
文件颜色含义:
绿色---->代表可执行文件
红色---->代表压缩文件
深蓝色---->代表目录
浅蓝色----->代表链接文件
灰色---->代表其它的一些文件
所有ls命令列举:
以下是几乎所有ls命令的选项,很多可能并不常用但可以作为了解。
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c 输出文件的 i 节点的修改时间,并以此排序。
-d 将目录象文件一样显示,而不是显示其下的文件。
-e 输出时间的全部信息,而不是输出简略信息。
-f -U 对输出的文件不排序。
-i 输出文件的 i 节点的索引信息。
-k 以 k 字节的形式表示文件的大小。
-l 列出文件的详细信息。
-m 横向输出文件名,并以“,”作分格符。
-n 用数字的 UID,GID 代替名称。
-o 显示文件的除组信息外的详细信息。
-p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通
文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字。
-q 用?代替不可输出的字符。
-r 对目录反向排序。
-s 在每个文件名后输出该文件的大小。
-t 以时间排序。
-u 以文件上次被访问的时间排序。
-x 按列输出,横向排序。
-A 显示除 “.”和“..”外的所有文件。
-B 不输出以 “~”结尾的备份文件。
-C 按列输出,纵向排序。
-G 输出文件的组的信息。
-L 列出链接文件名而不是链接到的文件。
-N 不限制文件长度。
-Q 把输出的文件名用双引号括起来。
-R 列出所有子目录下的文件。
-S 以文件大小排序。
-X 以文件的扩展名(最后一个 . 后的字符)排序。
-1 一行只输出一个文件。
--color=no 不显示彩色文件名
--help 在标准输出上显示帮助信息。
--version 在标准输出上输出版本信息并退出。
自己编写ls命令:
其实ls命令是可以自己编写的,但我在自己尝试编写ls命令时发现还是有困难,对许多函数的理解不到位。这里提供一个可以运行的自己编写的ls命令的代码,可以供大家学习参考。
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <pwd.h> #include <grp.h> #include <time.h> #include <dirent.h> int fun1(char *dir,char *filename) { struct stat buf; char out[100]; if(stat(dir,&buf)<0) { perror("stat"); return (-1); } switch(buf.st_mode & S_IFMT) { case S_IFREG: printf("-"); break; case S_IFDIR: printf("d"); break; case S_IFCHR: printf("c"); break; case S_IFBLK: printf("b"); break; case S_IFIFO: printf("p"); break; case S_IFLNK: printf("l"); break; case S_IFSOCK: printf("s"); break; } int n; for(n=8;n>=0;n--) { if(buf.st_mode&(1<<n)) { switch(n%3) { case 2: printf("r"); break; case 1: printf("w"); break; case 0: printf("x"); break; default: break; } } else { printf("-"); } } printf(" %d",buf.st_nlink); struct passwd *pw; pw = getpwuid(buf.st_uid); printf(" %s",pw->pw_name); struct group *gr; gr = getgrgid(buf.st_gid); printf(" %s",gr->gr_name); printf(" %ld",buf.st_size); struct tm *t; t = localtime(&buf.st_atime); printf(" %d-%d-%d %d:%d",t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min); printf(" %s ",filename); if(S_ISLNK(buf.st_mode)) { printf(" -> "); if(readlink(filename,out,100)==-1) { } printf("%s",out); } printf(" "); return 0; } int main(int argc ,char **argv) { char w[100]; memset(w,0,100); if(argc<2) strcpy(w,"./"); else strcpy(w,argv[1]); struct stat buf; char name[100]; if(stat(w,&buf)<0) { fprintf(stderr,"stat error:%s ",strerror(errno)); return -1; } if(S_ISDIR(buf.st_mode)) { DIR *dir; dir = opendir(w); struct dirent *pdr; while ((pdr = readdir(dir))!=NULL) { if(pdr->d_name[0]=='.') { } else { printf(" dir:%s ",pdr->d_name); memset(name,0,100); strcpy(name,w); // strcat(name,"/"); strcat(name,pdr->d_name); fun1(name,pdr->d_name); } } } else { fun1(w,w); } return 0; }
运行结果: