仿写 Linux 下的 ls-l 命令
时间: 2024-05-03 11:18:58 浏览: 134
在 Linux 终端中,`ls -l` 命令可以列出当前目录下的所有文件和子目录,包括它们的详细信息,如权限、所有者、大小、创建时间等等。下面是一个简单的 Python 脚本,可以模仿 `ls -l` 的功能实现:
```python
import os
import pwd
import grp
import datetime
def ls_l(path='.'):
for filename in os.listdir(path):
filepath = os.path.join(path, filename)
stat = os.stat(filepath)
mode = stat.st_mode
nlink = stat.st_nlink
uid = stat.st_uid
gid = stat.st_gid
size = stat.st_size
mtime = datetime.datetime.fromtimestamp(stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S')
uname = pwd.getpwuid(uid).pw_name
gname = grp.getgrgid(gid).gr_name
if os.path.isdir(filepath):
type = 'd'
elif os.path.isfile(filepath):
type = '-'
else:
type = '?'
perms = ''
for who in 'USR', 'GRP', 'OTH':
for what in 'R', 'W', 'X':
if mode & getattr(os, 'S_I' + what + who):
perms += what.lower()
else:
perms += '-'
print(type + perms + ' %2d %-8s %-8s %8d %s %s' % (nlink, uname, gname, size, mtime, filename))
if __name__ == '__main__':
ls_l()
```
这段代码会遍历当前目录下的所有文件和子目录,对于每一个文件或目录,它会获取它的 `stat` 信息,然后解析这些信息,生成类似于 `ls -l` 的输出格式。具体来说,它会输出每个文件或目录的类型、权限、硬链接数、所有者、组、大小、修改时间和名称。其中,文件类型通过判断文件是否为目录或普通文件来确定,权限则通过解析文件的模式位来计算得到。
阅读全文