Linux命令(一)——ls
Linux命令(一)——ls
GNU/Linux Shell是个交互式工具,它为用户提供了启动程序、管理文件系统上的文件以及管理运行在Linux系统上的进程的途径。Shell的核心是命令行提示符。命令行提示符是shell的交互部分,它允许你输入文本命令,之后将解释命令并在内核中执行。Shell包含了一组内置命令,可以使用这些命令完成复制文件、移动文件、重命名文件等。在Linux系统上,通常有好几种Linux Shell可用。当前Linux发行版默认的shell基本上都是bash shell(Bourne again shell)。
我使用的Ubuntu 12.04LTS使用的bash版本是
GNU bash, version 4.2.25(1)-release (i686-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc
1 Shell的启动
GNU bash shell作为常规程序运行的,通常是在用户登录终端时启动,登录时系统启动的shell依赖于用户账户的配置。/etc/passwd存储了对于用户的bash启动位置。
root:x:0:0:root:/root:/bin/bash可以看到root用户shell的位置在/bin/bash,字段分别表示用户名、用户密码(用户密码加密存储在其他文件)、系统UID、GID、用户全名、默认主目录、默认shell程序。
2 ls命令
ls命令的手册说明:
名称
ls – (list directory contents)
语法
ls [OPTION]... [FILE]...
说明
显示文件的信息
ls最基本的用法是显示当前目录下的文件和目录
$ ls
a.txt b.log c.c d_a
如果没有使用排序的参数,ls命令输出的列表是按照字母排序的(按列排序)。如果用户使用的支持彩色显示的终端,那么ls输出的文件按类型显示不同的颜色,具体颜色的配置在LS_COLORS变量中。使用echo $LS_COLORS可以查看每种文件类型的颜色配置。
3 ls命令选项
NOTE: 常用命令,不完全。
单字母
全字
描述
-a
--all
do not ignore entries starting with .
输出包括“.”打头的隐藏文件
-A
--almost-all
do not list implied . and ..
输出隐藏文件,不输出“.”和“..”文件
--author
with -l, print the author of each file
输出每个文件的作者
-b
--escape
print C-style escapes for nongraphic characters
输出不可打印字符的八进制值
--block-size=size
Scale sizes by SIZE before printing them.
按size字节大小的块来计算块数
-B
--ignore-backups
do not list implied entries ending with ~
不要列出名称中包含波浪线(~)的条目(~用于表示备份的副本)
-c
with -lt: sort by, and show, ctime (time of last modification of file status information)
with -l: show ctime and sort by name otherwise: sort by ctime, newest first
按最后一次修改时间排序
-C
list entries by columns
按列输出条目
--color=when
colorize the output. WHEN defaults to `always' or can be `never' or `auto'.
何时使用彩色(always/never/auto)
-d
--directory
list directory entries instead of contents, and do not derefer‐ence symbolic links
列出目录条目而非内容,并且不要跟踪符号链接
-F
--classify
append indicator (one of */=>@|) to entries,*表示可执行,/表示为目录
--file-type
likewise, except do not append ‘*’
与-F类似,但是不显示’*’
--format=WORD
across -x, commas -m, horizontal -x, long -l, single-column -1, verbose -l, vertical -C
将输出格式化为交叉、逗号、水平、长、单列、详细、垂直
-g
like -l, but do not list owner
输出除文件属主之外的所有信息
-G
--no-group
like -l, but don't print group names
在-l模式下,不显示组名
-h
--human-readable
with -l, print sizes in human readable format (e.g., 1K 234M 2G)
打印大小,K表示千字节,M表示兆字节,G表示吉字节
-i
--inode
print the index number of each file
显示每个文件的索引值
--ignore=PATTERN
do not list implied entries matching shell PATTERN,例“ls --ignore=”*.cpp”
不显示匹配PATTERN的项
-k
like --block-size=1K
作用等于“--block-size=1024”
-l
use a long listing format
按长列表输出格式显示
-L
--dereference
when showing file information for a symbolic link, show information for the file the link references rather than for the link itself
对于链接文件,显示原文件信息
-n
--numeric-uid-gid
like -l, but list numeric user and group IDs
显示uid和gid时显示数字而不是字符串
-o
like -l, but do not list group information
在长列表模式下不显示组名
-r
--reverse
reverse order while sorting
在输出文件和目录时,反转排序的顺序
-R
--recursive
list subdirectories recursively
递归的列出子目录内容
-s
--size
print the allocated size of each file, in blocks
输出每个文件的块大小
-S
--sort=size
sort by file size
按文件大小排序输出
-t
--sort=time
sort by modification time, newest first
按照文件的修改时间输出
-u
with -lt: sort by, and show, access time with -l: show access time and sort by name otherwise: sort by access time
输出文件的最后访问时间而非最后修改时间
-x
list entries by lines instead of by columns
按行而非列输出条目
-X
--sort=extension
sort alphabetically by entry extension
按文件拓展名排序输出
-1
List one file per line
一行显示一个文件信息
#可以看到不仅显示了普通文件,还显示了. .. .hide文件 $ ls -a . .. a.txt b.log c.c d_a .hide man_ls.txt #没有显示. ..文件,显示了.hide文件 $ ls -A a. txt b.log c.c d_a .hide man_ls.txt #增加了一列,显示文件的作者 $ ls -l --author total 12 -rw-rw-r-- 1 user user user 0 May 11 21:30 abdta.test -rw-rw-r-- 1 user user user 0 May 11 19:52 a.txt -rw-rw-r-- 1 user user user 0 May 11 19:52 b.log -rw-rw-r-- 1 user user user 0 May 11 19:52 c.c drwxrwxr-x 2 user user user 4096 May 11 19:53 d_a -rw-rw-r-- 1 user user user 7985 May 11 19:59 man_ls.txt #长信息分别为文件类型,比如目录(d)、文件(-)、字符型文件(c)、快文件(b) #文件的权限 #文件的硬链接数 #文件属主用户名 #文件的大小(字节为单位) #文件的上次修改时间 #文件名或目录名 $ ls -l total 12 -rw-rw-r-- 1 user user 0 May 11 21:30 abdta.test -rw-rw-r-- 1 user user 0 May 11 19:52 a.txt -rw-rw-r-- 1 user user 0 May 11 19:52 b.log -rw-rw-r-- 1 user user 0 May 11 19:52 c.c drwxrwxr-x 2 user user 4096 May 11 19:53 d_a -rw-rw-r-- 1 user user 7985 May 11 19:59 man_ls.txt #使用1024字节作为显示文件大小的单位 $ ls -l --block-size=1024 total 12 -rw-rw-r-- 1 user user 0 May 11 21:30 abdta.test -rw-rw-r-- 1 user user 0 May 11 19:52 a.txt -rw-rw-r-- 1 user user 0 May 11 19:52 b.log -rw-rw-r-- 1 user user 0 May 11 19:52 c.c drwxrwxr-x 2 user user 4 May 11 19:53 d_a -rw-rw-r-- 1 user user 8 May 11 19:59 man_ls.txt #目录名后有/,可执行文件名后有* $ ls -F abdta.test a.txt b.log c.c d_a/ d.sh* man_ls.txt #目录名后有/,但可执行文件名后没有* $ ls --file-type abdta.test a.txt b.log c.c d_a/ d.sh man_ls.txt #格式化输出,输出项之间用”,”隔开 $ ls --format=commas abdta.test, a.txt, b.log, c.c, d_a, d.sh, man_ls.txt #长格式输出,但是不显示属主名、组名,而且文件大小以k\m\g单位输出 $ ls -lgGh total 12K -rw-rw-r-- 1 0 May 11 21:30 abdta.test -rw-rw-r-- 1 0 May 11 19:52 a.txt -rw-rw-r-- 1 0 May 11 19:52 b.log -rw-rw-r-- 1 0 May 11 19:52 c.c drwxrwxr-x 2 4.0K May 11 19:53 d_a -rwxrw-r-- 1 0 May 11 21:39 d.sh -rw-rw-r-- 1 7.8K May 11 19:59 man_ls.txt #使用--hide=PATTERN,可以隐藏匹配PATTERN的输出项 $ ls --hide="a*" b.log c.c d_a d.sh man_ls.txt #使用--ignore=PATTERN有同样的效果,但是当使用-a选项时,--hide会失效。 ls --ignore="a*" -a . .. b.log c.c d_a d.sh .hide man_ls.txt #ls -il,长信息中显示inode信息。 $ ls -il total 12 4591222 -rw-rw-r-- 1 user user 0 May 11 21:30 abdta.test 4591214 -rw-rw-r-- 1 user user 0 May 11 19:52 a.txt 4591215 -rw-rw-r-- 1 user user 0 May 11 19:52 b.log 4591216 -rw-rw-r-- 1 user user 0 May 11 19:52 c.c 4591219 drwxrwxr-x 2 user user 4096 May 11 19:53 d_a 4591223 -rwxrw-r-- 1 user user 0 May 11 21:39 d.sh 4591220 -rw-rw-r-- 1 user user 7985 May 11 19:59 man_ls.txt #递归显示子目录的内容 $ ls -R .: abdta.test a.txt b.log c.c d_a d.sh man_ls.txt ./d_a: d_a.test #-X选项,按文件拓展名排序输出 $ ls -X d_a c.c b.log d.sh abdta.test a.txt man_ls.txt
4 过滤输出列表
默认情况下,ls会列出所有文件,可使用--hide或--ignore忽略特定的文件,类似的也可以过滤输出特定的文件。ls命令支持在命令行下定义过滤器,可以使用过滤器来决定应该在输出中显示哪些文件和目录。
使用文件名全名可以显示单个文件的信息。
$ ls -l abdta.test -rw-rw-r-- 1 liweimcc liweimcc 0 May 11 21:30 abdta.test
使用通配符进行过滤,使用?表示一个字符,*表示多个或零个字符。
$ ls -l a?dta.test -rw-rw-r-- 1 liweimcc liweimcc 0 May 11 21:30 abdta.test $ ls -l a* -rw-rw-r-- 1 liweimcc liweimcc 0 May 11 21:30 abdta.test -rw-rw-r-- 1 liweimcc liweimcc 0 May 11 19:52 a.txt