导航:首页 > 操作系统 > linuxlstime

linuxlstime

发布时间:2023-01-06 00:03:52

linux中ls -l是如何工作的如何去实现一个脚本

可以参考:
#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
do_ls(char
*dir,char
*filename,int
lflag)
{
int
n;
struct
stat
buf;
char
out[100];
struct
passwd
*pw;
struct
group
*gr;
struct
tm
*t;
if(lflag
==
0)
//如果不带l参数,直接显示文件/目录名
{
printf("%s\t",filename);
return
0;
}
if(lstat(dir,&buf)<0)
{
fprintf(stderr,"stat
error:%s\n",strerror(errno));
return
-1;
}
switch(buf.st_mode
&
s_ifmt)
//获取字符串的属性:普通文件-、目录d、字符设备c、块设备b、管道文件p、连接文件l、套接字文件s
{
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;
}
for(n=8;n>=0;n--)
//打印文件的读写属性:读r、写w、执行x、无权限-
{
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);
//硬链接数,此链接非彼链接,指(包含)目录的个数,文件为1,目录起始为2,再加上目录里包含的目录个数(不递归,只一层)
pw
=
getpwuid(buf.st_uid);
//所属用户名
printf("
%s",pw->pw_name);
gr
=
getgrgid(buf.st_gid);
//所属组名
printf("
%s",gr->gr_name);
printf("
%ld",buf.st_size);
//字节计总大小
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("readlink
error\n");
}
printf("%s",out);
}
printf("\n");
return
0;
}
int
ls_prepare(char
*w,int
aflag,int
lflag)
//ls的准备工作
{
struct
stat
buf;
//man
lstat可以看到此结构
char
name[100];
dir
*dir;
//类似打开文件的fd描述符
struct
dirent
*pdr;
//man
readdir可以看到此结构
if(lstat(w,&buf)<0)
//获取文件/目录属性并赋值给buf,该函数和lstat一样,只是当w为链接时,指代他本身,并不存在文件
{
fprintf(stderr,"stat
error:%s\n",strerror(errno));
return
-1;
}
if(s_isdir(buf.st_mode))
//判断是否为目录,是返回真
{
dir
=
opendir(w);
//打开目录
while
((pdr
=
readdir(dir))!=null)
//读/遍历目录
{
if(aflag==0)
//如果不带a参数,越过以.开头的所有文件/目录
{
if(pdr->d_name[0]=='.')
continue;
memset(name,0,100);
strcpy(name,w);
//拷贝
strcat(name,"/");
//追加
strcat(name,pdr->d_name);
do_ls(name,pdr->d_name,lflag);
}else
//有a参数显示所有
{
memset(name,0,100);
strcpy(name,w);
strcat(name,"/");
strcat(name,pdr->d_name);
do_ls(name,pdr->d_name,lflag);
}
}
closedir(dir);
}else
//为文件则直接显示
{
do_ls(w,w,lflag);
}
return
0;
}
int
main(int
argc,char
**argv)
{
int
aflag
=0;
int
lflag
=0;
char
c;
int
i;
while((c
=
getopt(argc,argv,"al"))!=-1)
//解析命令行参数,即-/--后面的字符串和给定的字符串匹配,有未解析字母返回字母或问号(取决于第3个参数),否则返回-1
{
switch(c)
//此处仅匹配a(所有)和l(列表),即只支持参数a、l
{
case
'a':
aflag
=1;
break;
case
'l':
lflag
=1;
break;
default:
break;
}
}
if(argc
==
optind
)
//optind系统变量,执行命令参数的个数(不包括命令,奇怪的是无参情况下他为1),判断argc是否为1,是则取当前路径,让我们显得更专业点
{
ls_prepare("./",aflag,lflag);
}
else
{
for(i=optind;i<argc;i++)
//所有目录都传进去
ls_prepare(argv[i],aflag,lflag);
}
printf("\n");
return
0;
}

㈡ linux下ls命令

功能:ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
格式:ls(选项)(参数)
参数:
-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
-A:显示除影藏文件“.”和“..”以外的所有文件列表;
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
--file-type:与“-F”选项的功能相同,但是不显示“*”;
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
--full-time:列出完整的日期与时间;
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。

㈢ linux 默认时间格式问题请教。 越详细越好。

Linux 的时间内部是 timestemp 。这个时间输出是根据当前时区的设置进行输出,当前时区的设置文件是 /etc/localtime (如果我没记错)。就算你没设置时区,那么系统依然会有一个默认的时区进行输出。
系统默认有一个 localtime ,好像格式设置是英国表示法。时区没有,应该是 local 时间而不是 GMT 。
一个正确使用的 linux 专用机器,计算机时间一般是保存为格林威治标准时间,系统在输出时会根据 localtime 进行转换输出。

自定义默认日期应该是在输出时间时设置输出格式信息,而不是强行的去设置整个系统的环境。
因为这个设置只对考虑时区设置的输出格式的一些程序管用,在系统内部,依然是通用的 timestemp 存储。而且很多程序有自己独立的设置,尤其是在某些程序里面,他不同的情况下会进行不同的输出。比如 mysql ,非 timestemp 时间的存储用的是 ISO 标准格式,也就是 YYYY-MM-DD HH:mm:ss 的样子(如果还是我没记错),如果你需要格式要求,需要自己查询后或者查询时进行格式转换。

你正在一个错误的方向进行一个错误的折腾。

㈣ linux系统如何用一个指令去查看另一个指令执行用了多长时间

time命令可以查看执行时间

比如要查看ls执行时间, 可以用"time ls",就会看到执行时间了。

㈤ Linux ls 显示文件年份 并支持自定义显示年月日时分秒

默认情况下 ls -l 命令只显示月和日,不显示年份:

如要要显示年份,就要使用 --time-style 参数,该参数有几个选项:

所以要显示年份可以使用 full-iso long-iso +Format 这几种参数选项。

--time-style=full-iso 有一个替代参数 --full-time ,可以直接用这个参数来显示精确的时间:

Linux下文件的创建时间、访问时间、修改时间和改变时间:
ls -lu filename 列出文件的 atime (最后读取时间)
ls -lc filename 列出文件的 ctime (最后权限时间)
ls -l filename 列出文件的 mtime (修改文件内容)

㈥ Linux系统通配符与ls命令的功能及用法

文件通配符

* 匹配零个或多个字符

? 匹配任何单个字符

~ 当前用户家目录

~mage 用户mage家目录

~+ 当前工作目录

~- 前一个工作目录

[0-9] 匹配数字范围

[a-z]:字母(或的关系)就是表示中括号中的某一个字符

[A-Z]:字母

[a-c]:a A b B c

[A-C]:A b B c C,也就是[]在里面匹配字母时是以aAbB...这样排序的

[wang] 匹配列表中的任何的一个字符

[^wang] 匹配列表中的所有字符以外的字符

{}花括号用来匹配一组用逗号分隔的字符串中的任一个。

左花括号之前的所有字符称为前文(preamble),右花括号之后的所有字符称为后文(preamble)。

前文和后文都是可选的。花括号中不能包含不加引号的空白符

预定义的字符类:man 7 glob(通配符)

[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母[:lower:] 这个只相当于a-z,表示的时候必须要在加上中括号

[:upper:]: 任意大写字母

[:alpha:]: 任意大小写字母

[:alnum:]:任意数字或字母

[:blank:]:水平空白字符

[:space:]:水平或垂直空白字符

[:punct:]:标点符号

[:print:]:可打印字符

[:cntrl:]:控制(非打印)字符

[:graph:]:图形字符

[:xdigit:]:十六进制字符

ls命令的功能:

列出当前目录的内容或指定目录

ls命令的用法:

ls [options] [files_or_dirs]

        示例:

                ls -a 包含隐藏文件

                ls -l 显示额外的信息

                ls -r 倒转排序或者可以说是逆序排列

                ls -R 目录递归通过(递归会进入到子目录)

                ls -ld 目录和符号链接信息

                ls -1  文件分行显示(列显示)

                ls –S  按从大到小排序(按文件的大小排序)

                ls –t  按mtime排序(按文件的修改时间排序)

                ls –u 配合-t选项,显示并按atime从新到旧排序

                ls –U  按目录存放顺序显示(以创建文件的次序进行显示)

                ls –X  按文件后缀排序

                ls -d  列出目录本身并不显示内容

                ls -h  单位换算

                ls -I  --ignore(忽略)=PATTERN(模式)按着规定的模式去隐藏不进行显示

实例:

1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数

字的文件或目录

ls -d /var/l*[0-9]*[[:lower:]]

2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录

ls -d /etc/[0-9]*[^0-9]

3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符

的文件或目录

ls -d /etc/[^[:alpha:]][[:alpha:]]*

4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符

的文件或目录

ls -d /etc/rc[0-6]*

5、显示/etc目录下,所有以.d结尾的文件或目录

ls -d /etc/*.d

6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

ls -d /etc/[mnrp]*.conf

7、只显示/root下的隐藏文件和目录

ls -d /root/.*

ls -aI "[^.]*"  当前目录为/root

l. ls -d .* --color=auto 当前目录为/root

8、只显示/etc下的非隐藏目录

ls -d /etc/*/

㈦ linux系统中ls命令是什么意思

ls命令是linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件。x0dx0a1. ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。x0dx0a2. ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。x0dx0a3. ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。x0dx0a4. ls -s 在每个文件的后面打印出文件的大小。 size(大小)x0dx0a5. ls -t 按时间进行文件的排序 Time(时间)x0dx0a6. ls -A 列出除了"."和".."以外的文件。x0dx0a7. ls -R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现x0dx0a8. ls -L 列出文件的链接名。Link(链接)x0dx0a9. ls -S 以文件的大小进行排序

㈧ linux查看文件时间

通过你的描述,查看文件时间命令如下:

[root@Backup2 ~]# ll --full-time

total 20

-rw-r--r-- 1 root root 275 2020-07-28 03:13:57.332661556 +0800 1

-rw-r--r-- 1 root root 9359 2020-11-18 08:14:44.765247613 +0800 106.txt

-rw-------. 1 root root 1188 2020-07-27 17:47:59.535241829 +0800 anaconda-ks.cfg

[root@Backup2 ~]#

温馨提示:

ll 命令为 ls -l 的别名

命令为:

[root@Backup2 ~]# alias ll='ls -l'

[root@Backup2 ~]#

或者

[root@Backup2 ~]# alias ll='ls -l --full-time '

[root@Backup2 ~]#

[root@Backup2 ~]# ll

total 20

-rw-r--r-- 1 root root 275 2020-07-28 03:13:57.332661556 +0800 1

-rw-r--r-- 1 root root 9359 2020-11-18 08:14:44.765247613 +0800 106.txt

-rw-------. 1 root root 1188 2020-07-27 17:47:59.535241829 +0800 anaconda-ks.cfg

[root@Backup2 ~]#

以上就是关于linux 查看文件时间的命令,由于系统环境不同,可能会有出入,如有问题可以关注+私信,我会第一时间回复,希望我的回答能对你有所帮助。。。。。。

㈨ 如何学习linux命令之ls的使用

1 输入 ls -a 或 ls -A
-a:显示所有文件及目录(ls内定将档案名或目录名称为“.”的视为隐藏,不会列出);
-A:显示除隐藏文件“.”和“..”以外的所有文件列表;
2 输入 ls -C 或 ls -F
-C:多列显示输出结果。这是默认选项; -l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;

-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
3 输入 ls -b 或 ls -d
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出; -c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
4 输入 ls -f 或 ls -i
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件; --file-type:与“-F”选项的功能相同,但是不显示“*”;
5 输入 ls -k 或 ls -l 或 ls -m
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
6 输入 ls -n 或 ls -r
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
7 输入 ls -s 或 ls -t 或 ls -t --full-time:列出完整的日期与时间

-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
8 输入 ls -L 或 ls -R
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;

阅读全文

与linuxlstime相关的资料

热点内容
服务器买什么地域好 浏览:541
linuxfirefox目录 浏览:392
安卓耳机不能弹窗配对什么原因 浏览:378
整栋楼过户算法 浏览:544
打印时提示打印服务器错误怎么办 浏览:620
半封闭压缩机组图片 浏览:155
加密货币泡沫的危害 浏览:461
云视讯注册状态服务器错误801 浏览:852
python中删除csv 浏览:591
oracle创建表空间命令 浏览:14
十块钱五分钟的解压人偶 浏览:934
学android看什么书 浏览:376
网络加密了手机上怎样显示 浏览:805
文章被以什么形式存放在服务器中 浏览:708
炮兵命令 浏览:116
网商园app怎么样啊 浏览:325
app字体大小怎么设置在哪 浏览:432
华为app选择网络模式哪里找 浏览:321
策划优化服务器是什么 浏览:238
联想的组织服务器怎么连接 浏览:218