ls命令及常用参数详解
♢ \color{red}{\diamondsuit} ♢
ls命令:全称list,显示文件的文件名与相关属性。(目前工作目录所含之文件及子目录)
ls [-aAdfFhilnrRSt] 文件名或目录名称..
ls [--color={never,auto,always}] 文件名或目录名称..
ls [--full-time] 文件名或目录名称..
| 参数 | 含义 |
|---|---|
| -a | all, 显示所有文件及目录 (. 开头的隐藏文件也会列出) |
| -A | 同-a ,但不列出 “.” (目前目录) 及 “…” (父目录) |
| -l | 以长格式显示目录下的内容列表,包括文件的权限、链接数、所有者名称和组所有者、文件大小、最后修改日期时间和文件/目录名称 |
| -r | reverse,将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小 |
| -R | –recursive,连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来 |
| -S | sort by file size。根据文件大小排序,而不是文件名 |
| -t | sort by modification time,以文件修改时间排序(从最新开始排) |
| -d | 仅列出目录本身,而不是列出目录内的文件数据(常用) |
| -f | 直接列出结果,而不进行排序 (ls 默认以文件名排序) |
| -F | 根据文件、目录等信息,给予附加数据结构,例如:*:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件 |
| -g | 像-l,但是不列出所有者 |
| -G, | no-group, 不列出任何有关于组的信息 |
| –author | 打印出每一个文件的作者 |
| -n | 类似-l,用数字UID和GID代替名称 |
| -h | 将文件大小以人类较易读的方式(例如 GB KB 等等)列 |
| -c | 输出文件的ctime(文件状态最后更改的时间),并根据ctime排序 |
| -C | 由上至下的列出项目 |
| --full-time | 显示完整时间格式 |
| --time | 输出 access 时间或改变权限属性时间 (ctime)而非内容变更时间 (modification time) |
| --color=never | 不要依据文件特性给予颜色显示 |
| --color=always | 显示颜色 |
以上是我摘抄的比较常用的参数。实际上还有很多,需要的使用 ls --help 或 man ls 或 info ls自己查询
范例1:将主文件夹下的所有文件列出来(含属性与隐藏文件)
[root@study ~]# ls -al ~
total 56
dr-xr-x---. 5 root root 4096 Jun 4 19:49 .
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ..
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 6798 Jun 4 19:53 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test
drwx------. 4 root root 29 May 6 00:14 .cache
drwxr-xr-x. 3 root root 17 May 6 00:14 .config
可以看到以 . 为开头的几个文件,以及目录档 (.) (…) .config
范例2:承上题,不显示颜色,但在文件名末显示出该文件名代表的类型(type)
[root@study ~]# ls -alF --color=never
total 56
dr-xr-x---. 5 root root 4096 Jun 4 19:49 ./
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ../
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 6798 Jun 4 19:53 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test
drwx------. 4 root root 29 May 6 00:14 .cache/
drwxr-xr-x. 3 root root 17 May 6 00:14 .config/
范例3:完整显示文件的修改时间 (modification time)
[root@study ~]# ls -al --full-time
total 56
dr-xr-x---. 5 root root 4096 2015-06-04 19:49:54.520684829 +0800 .
dr-xr-xr-x. 17 root root 4096 2015-05-04 17:56:38.888000000 +0800 ..
-rw-------. 1 root root 1816 2015-05-04 17:57:02.326000000 +0800 anaconda-ks.cfg
-rw-------. 1 root root 6798 2015-06-04 19:53:41.451684829 +0800 .bash_history
-rw-r--r--. 1 root root 18 2013-12-29 10:26:31.000000000 +0800 .bash_logout
-rw-r--r--. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bash_profile
-rw-rw-rw-. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bashrc
-rw-r--r--. 1 root root 176 2015-06-03 00:04:16.916684829 +0800 .bashrc_test
drwx------. 4 root root 29 2015-05-06 00:14:56.960764950 +0800 .cache
drwxr-xr-x. 3 root root 17 2015-05-06 00:14:56.975764950 +0800 .config
可以看到,上面的“时间”字段变为完整的格式。一般来说, ls -al 仅列出目前短格式的时间,有时不会列出年份,
借由 --full-time 可以查阅到比较正确的完整时间格式。
其实 ls 的用法还有很多,包括查阅文件
注意:有时候会看到输入 ll 就等于是输入 ls -l 是一样的。
比如
drwxr-xr-x 2 root root 4096 Mar 14 04:03 bin
drwxr-xr-x 4 root root 1024 Feb 15 14:45 boot

图片来自[鸟哥Linux私房菜 基础版-第四版].pdf
图片来自博主Linux ls -l 输出信息每列所代表的含义
第1列:第一个字母d表示文件类型。’-‘(减号):普通文件;d:目录文件;l(小写l字符):链接文件;b:区块设备文件;c:字符设备文件;s:数据接口文件;p:数据输送档(FIFO, pipe);。
往下的9个字符是关于文件权限(r:read读、w:write写;x: execute可执行权限,-:无权限)这三个
权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
前3个rwx字符是文件的所有者权限,第二组r-x是组用户权限(组中所有者的权限),最后的r-x是其他用户权限。
第2列:有多少链接指向该文件。
第3列:该文件/文件夹的所有者。
第4列:该文件/文件夹的所有组名。
第5列:文件/文件夹的大小(以字节为单位)。目录的大小总是4096字节。
第6列:表示文件最后的修改时间。
第7列:表示文件名或者目录名。
如果看完上面还是有点懵懵,那用下面几道例题加深下理解吧
例题
-rwxr-xr--
可以把它划分为四部分:[-][rwx][r-x][r--]
例题:假设test1, test2, test3同属于testgroup这个群组,如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限?
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
答:
文件test.txt的拥有者为root,所属群组为root。至于权限方面则只有root这个帐号可以存取此文件,其他人则仅能读此文件;
另一个文件ping_tsai的拥有者为test1,而所属群组为testgroup。其中test1 可以针对此文件具有可读可写可执行的权力;而同群组的test2, test3两个人与test1同样是testgroup的群组帐号,则仅可读可执行但不能写(亦即不能修改);
至于没有加入testgroup这一个群组的其他人则仅可以读,不能写也不能执行!
例题:承上一题如果目录为下面的样式,请问testgroup这个群组的成员与其他人(others)是否可以进入本目录?
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
答:
文件拥有者test1[rwx]可以在本目录中进行任何工作;
而testgroup这个群组[r-x]的帐号,例如test2, test3亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
至于other的权限中[r–]虽然有r,但是由于没有x的权限,因此others的使用者,并不能进入此目录!
如果使用-n参数,看到的是这样的,0表示什么意思?
如果懵逼,那你需要去了解linux的UID和GID
drwxr-xr-x 2 0 0 4096 Mar 14 04:03 bin
drwxr-xr-x 4 0 0 1024 Feb 15 14:45 boot
drwxr-xr-x 6 0 0 4096 Jan 12 10:26 data
drwxr-xr-x 10 0 0 3520 Apr 26 15:38 dev
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
集思广益,整理不易
国家高速网络中心:http://ftp.twaren.net/Linux/CentOS/7/isos/
官网:http://isoredirect.centos.org/centos
官方网站:http://mirror.centos.org/centos/7/iso
参考文章来源:
[鸟哥Linux私房菜 基础版]
Linux ls 命令
Linux ls -l 输出信息每列所代表的含义
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一