常用文件管理命令及bash特性

文件管理命令,状态返回值,元数据,别名,命令行展开

常用的文件管理命令


ls

显示目标文件列表

语法

ls [选项] [文件路径]

选项

  • -a:显示所有文件,包含以“.”开头的隐藏文件
[root@localhost home]# ls -a

.  ..  fedora  gentoo  wxq
  • -l:以长格式显示文件列表
[root@localhost home]# ls -l

总用量 4

drwx------.  3 fedora fedora  78 8月  20 10:51 fedora

drwx------.  3  4001  4001  78 8月  20 10:44 gentoo

drwx------. 16 wxq    wxq    4096 8月  21 10:39 wxq
  • -c:按文件状态改变时间(i节点中的ctime)排序并输出目录内容。与-l连用时,使用文件的状态改变时间取代文件修改时间。
[root@localhost home]# ls -lc

总用量 4

drwx------.  3 fedora fedora  78 8月  20 10:51 fedora

drwx------.  3  4001  4001  78 8月  20 10:44 gentoo

drwx------. 16 wxq    wxq    4096 8月  21 10:39 wxq
  • -t:按时间信息排序
[root@localhost home]# ls -lt

总用量 4

drwx------. 16 wxq    wxq    4096 8月  21 10:39 wxq

drwx------.  3 fedora fedora  78 8月  20 10:51 fedora

drwx------.  3  4001  4001  78 8月  20 10:44 gentoo
  • -d:仅显示目录本身,而不显示其目录下的内容
[root@localhost home]# ls -d /tmp

/tmp
  • -i:显示文件的inode信息
[root@localhost home]# ls -i /tmp

18644486 anaconda.log

34284813 hsperfdata_root

18644491 ifcfg.log

18644480 ks-script-2jtPmL

18644489 packaging.log

18644488 program.log

18644490 sensitive-info.log

4048970 ssh-8wC9aXxdJ72I

4089531 ssh-DzY9jtyEejap

4089518 ssh-EAekrYUWPIZs

5634 ssh-HZYepnXFg1ID

4089524 ssh-Sh79fLtZw7gH

18644487 storage.log
  • -A:显示除.和..之外的所有文件
[root@localhost home]# ls -lA /usr

总用量 380

dr-xr-xr-x.  2 root root  69632 8月  16 16:44 bin

drwxr-xr-x.  2 root root      6 4月  11 12:59 etc

drwxr-xr-x.  2 root root      6 4月  11 12:59 games

drwxr-xr-x. 186 root root  16384 8月  13 20:00 include

dr-xr-xr-x.  46 root root  4096 8月  13 20:00 lib

dr-xr-xr-x. 192 root root 135168 8月  16 16:44 lib64

drwxr-xr-x.  54 root root  12288 8月  13 20:00 libexec

drwxr-xr-x.  12 root root    131 8月  13 19:53 local

dr-xr-xr-x.  2 root root  20480 8月  13 20:00 sbin

drwxr-xr-x. 306 root root  8192 8月  13 20:00 share

drwxr-xr-x.  4 root root    34 8月  13 19:53 src

lrwxrwxrwx.  1 root root    10 8月  13 19:53 tmp -> ../var/tmp
  • -h:对文件大小进行单位换算
[root@localhost home]# ls -lh /usr

总用量 380K

dr-xr-xr-x.  2 root root  68K 8月  16 16:44 bin

drwxr-xr-x.  2 root root    6 4月  11 12:59 etc

drwxr-xr-x.  2 root root    6 4月  11 12:59 games

drwxr-xr-x. 186 root root  16K 8月  13 20:00 include

dr-xr-xr-x.  46 root root 4.0K 8月  13 20:00 lib

dr-xr-xr-x. 192 root root 132K 8月  16 16:44 lib64

drwxr-xr-x.  54 root root  12K 8月  13 20:00 libexec

drwxr-xr-x.  12 root root  131 8月  13 19:53 local

dr-xr-xr-x.  2 root root  20K 8月  13 20:00 sbin

drwxr-xr-x. 306 root root 8.0K 8月  13 20:00 share

drwxr-xr-x.  4 root root  34 8月  13 19:53 src

lrwxrwxrwx.  1 root root  10 8月  13 19:53 tmp -> ../var/tmp
  • -r:逆序显示
[root@localhost home]# ls -lr

总用量 4

drwx------. 16 wxq    wxq    4096 8月  21 10:39 wxq

drwx------.  3  4001  4001  78 8月  20 10:44 gentoo

drwx------.  3 fedora fedora  78 8月  20 10:51 fedora
  • -R:递归显示
[root@localhost home]# ls -R

.:

fedora  gentoo  wxq

./fedora:

./gentoo:

./wxq:

perl5  公共  模板  视频  图片  文档  下载  音乐  桌面

./wxq/perl5:

./wxq/公共:

./wxq/模板:

./wxq/视频:

./wxq/图片:

./wxq/文档:

./wxq/下载:

./wxq/音乐:

./wxq/桌面:

cd

切换当前目录

语法

    cd [选项] [目录]

选项

  • -P:如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
[root@localhost home]# cd -P /usr/tmp

[root@localhost tmp]# pwd

/var/tmp
  • -L:如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
[root@localhost tmp]# cd -L /usr/tmp

[root@localhost tmp]# pwd

/usr/tmp

实例

  •  不带任何参数时表示切换回家目录
  [root@localhost tmp]# cd

  [root@localhost ~]#
  • cd ~表示切换回自己的家目录
[root@localhost usr]# cd ~

[root@localhost ~]#
  • cd -表示在上一次所在的目录与当前目录间来回切换
[root@localhost ~]# cd -

/usr

[root@localhost usr]#
  • cd ..返回上级目录
[root@localhost usr]# cd ..

[root@localhost /]#

pwd

pwd命令以绝对路径的方式显示用户当前工作目录

  [root@localhost ~]# pwd

/root

cp

复制文件和目录

语法

单源复制

cp [选项] [-T]SRC DEST

多源复制:

cp [选项] SOURCE DIRECTORY

cp [选项] -t DIRECTORY SOURCE···

注意:

  1. 源文件是文件时:
    1. 如果目标文件不存在,则创建目标文件,并复制源文件的内容到该文件中
    2. 如果目标文件存在:若目标文件是文件,则将源文件的内容覆盖至目标文件;若目标文件是目录,则在此目录下新建一个与源文件同名的文件,并将源文件中的内容填充到新建的文件中
  2. 源文件是目录时:必须使用-r选项递归复制

    1.  目标文件存在,则此目标文件必须是目录(否则会报错),在此目录下创建一个与源文件同名的目录,并将原文件中的所有内容复制到此目录中。
    2. 目标文件不存在时,则先创建目标目录,然后将源文件中的所有内容复制到此目录中
  3. 多源复制是,目标文件必须是目录。并且必须是事先存在的目录。

选项

  • -i:交互式复制
  • -r:递归复制目录及内部的所有内容
[root@localhost /]# cp -rv /root/perl5 /tmp/wc1/

"/root/perl5" -> "/tmp/wc1/"

"/root/perl5/123.dd" -> "/tmp/wc1/123.dd"

"/root/perl5/1282.dd" -> "/tmp/wc1/1282.dd"

"/root/perl5/1277.dd" -> "/tmp/wc1/1277.dd"
  • -d:不复制符号链接所指向的文件,只复制此符号链接,并保护在副本中原文件之间的硬链接
[root@localhost /]# ll /tmp/wc1

总用量 0

-rw-r--r--. 1 root root  0 8月  21 12:27 123.dd

-rw-r--r--. 1 root root  0 8月  21 12:27 1277.dd

-rw-r--r--. 1 root root  0 8月  21 12:27 1282.dd

lrwxrwxrwx. 1 root root 10 8月  21 12:29 tmp -> ../var/tmp
  • -a:归档;复制时尽可能保持文件的结构和属性,不保持目录结构,等同于-dpR
[root@localhost /]# ll /root/perl5

总用量 0

-rw-r--r--. 1 root root 0 8月  21 12:26 123.dd

[root@localhost /]# cp -a /root/perl5/123.dd /tmp/

[root@localhost /]# ll /tmp/123.dd

-rw-r--r--. 1 root root 0 8月  21 12:26 /tmp/123.dd
  • -p:保持原有稳健的属性信息
  • -f:强制覆盖
  • -v:显示过程

mv

mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖

语法

    mv [选项] 源文件 目标文件

mv [选项] 源文件… 目录

mv [选项] –target-directory=DIRECTORY SOURCE…

注意

  1.  目标文件是文件,当此文件不存在时,执行的是剪切操作,并将文件名改为目标文件名;如果目标文件已存在,则执行覆盖。
  2.  目标文件是目录时,若此目录下由于源文件的文件名相同的文件,则执行覆盖,否则执行剪切操作

选项

  • -b:–backup[=CONTROL];当文件存在时,覆盖前为其创建一个备份。
  • -i:交互式操作,覆盖前先询问用户
  • -v:显示过程
[root@localhost /]# ll /tmp/123.dd

-rw-r--r--. 1 root root 0 8月  21 12:26 /tmp/123.dd

[root@localhost /]# mv -bvi /root/perl5/123.dd /tmp/

mv:是否覆盖"/tmp/123.dd"? y

"/root/perl5/123.dd" -> "/tmp/123.dd" (备份:"/tmp/123.dd~")

[root@localhost /]# ll /tmp

总用量 760

-rw-r--r--. 1 root root      0 8月  21 12:26 123.dd

-rw-r--r--. 1 root root      0 8月  21 12:26 123.dd~
  • -f:强制覆盖,直接覆盖,不询问用户

rm

rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。注意:使用rm命令要格外小心。一旦删除了一个文件,就无法再恢复。

语法

    rm [选项] 文件或目录

选项

  • -f:强制删除文件或目录,不提示用户
  • -i:交互式操作,执行删除操作前询问用户是否删除
[root@localhost /]# ls /root/perl5

1277.dd  1282.dd

[root@localhost /]# rm -i /root/perl5/1282.dd

rm:是否删除普通空文件 "/root/perl5/1282.dd"?y

[root@localhost /]# ls /root/perl5

1277.dd
  • -r:递归处理;通常用于删除目录及其子目录和文件
  • -v:显示执行过程
[root@localhost /]# ls /tmp/perl5/perl5

1277.dd

[root@localhost /]# rm -rfv /tmp/perl5

已删除"/tmp/perl5/perl5/1277.dd"

已删除目录:"/tmp/perl5/perl5"

已删除目录:"/tmp/perl5"

[root@localhost /]# ls /tmp/perl5

ls: 无法访问/tmp/perl5: 没有那个文件或目录

mkdir

用于创建目录,创建目录时需要保证目录前面的路径必须事先存在,否则会报错。

注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录

语法

    mkdir [选项] 目录…

选项

  • -p:当目录存在是不返回错误,不存在时自动创建所需各目录
  • -v:显示执行过程
[root@localhost /]# ls /tmp/ppc/ace/

ls: 无法访问/tmp/ppc/ace/: 没有那个文件或目录

[root@localhost /]# mkdir -pv /tmp/ppc/ace/

mkdir: 已创建目录 "/tmp/ppc"

mkdir: 已创建目录 "/tmp/ppc/ace/"

-m MODE:创建目录时指定权限

[root@localhost /]# mkdir -vm 600 /tmp/ppc/ace/apc

mkdir: 已创建目录 "/tmp/ppc/ace/apc"

[root@localhost /]# ll -d /tmp/ppc/ace/apc

drw-------. 2 root root 6 8月  21 15:28 /tmp/ppc/ace/apc

rmdir

rmdir用于删除空目录,删除目录时,必须具有对其父目录的写权限。

语法

    rmdir [选项] 空目录…

选项

  • -p:如果目录有多个路径名组成,则从最后一个路径名开始依次删除
  • -v:现实执行过程
[root@localhost tmp]# ll -d /tmp/ppc/ace/apc

drw-------. 2 root root 6 8月  21 15:28 /tmp/ppc/ace/apc

[root@localhost tmp]# rmdir -pv ppc/ace/apc

rmdir: 正在删除目录 "ppc/ace/apc"

rmdir: 正在删除目录 "ppc/ace"

rmdir: 正在删除目录 "ppc

touch

touch有两个功能:一是修改文件的时间戳记。而是用来创建新的空文件

语法

    touch [-acm][-r ref_file(参照文件)|-t time(时间值)] file(文件名)…

选项

  • -a:–time=atime,–time=access, –time=use;修改文件的存取时间
  • -c:不建立任何文件
  • -m:–time=mtime, –time=modify;只修改修改时间,通常结合使用-acm来修改文件的时间戳
  • -r ref_file(参照文件):以指定文件为参照,修改文件的时间戳
[root@localhost tmp]# stat /root/wxqaccc.111

文件:"/root/wxqaccc.111"

大小:70        块:8          IO 块:4096  普通文件

设备:fd00h/64768d Inode:4089498    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)  Gid:(    0/    root)

环境:unconfined_u:object_r:admin_home_t:s0

最近访问:2018-08-21 12:02:52.825552351 +0800

最近更改:2018-08-16 16:39:54.000000000 +0800

最近改动:2018-08-16 16:41:49.662533163 +0800

创建时间:-

[root@localhost tmp]# touch -acm /root/wxqaccc.111

[root@localhost tmp]# stat /root/wxqaccc.111

文件:"/root/wxqaccc.111"

大小:70        块:8          IO 块:4096  普通文件

设备:fd00h/64768d Inode:4089498    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)  Gid:(    0/    root)

环境:unconfined_u:object_r:admin_home_t:s0

最近访问:2018-08-21 15:57:20.029264723 +0800

最近更改:2018-08-21 15:57:20.029264723 +0800

最近改动:2018-08-21 15:57:20.029264723 +0800

创建时间:-

rename

rename命令用字符串替换的方式批量改变文件名。

语法

    rename [选项] 表达式 替换文件…

选项

  • -v:显示执行过程
  • -s:在符号连接上执行

用法

  [root@localhost tmp]# rename -v wxqaccc.111 testac.q /root/wxqaccc.111

`/root/wxqaccc.111' -> `/root/testac.q'

[root@localhost tmp]# ls /root

anaconda-ks.cfg  initial-setup-ks.cfg  testac.q

whereis

whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。

语法

    whereis [选项] 程序名称

选项

  • -b:只查找二进制文件
  • -m:只查找说明文件
  • -s:只查找源代码文件
[root@localhost tmp]# whereis -b cd

cd: /usr/bin/cd

[root@localhost tmp]# whereis -s cd

cd:[root@localhost tmp]# whereis -m cd

cd: /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz /usr/share/man/mann/cd.n.gz

which

which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。

语法

    which [选项] 程序名称

选项

  • -n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
  • -p<文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径;
  • -w:指定输出时栏位的宽度

事例

    mkdir:[root@localhost tmp]# which rename

    /usr/bin/rename

file

file命令用来确定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。

语法

    file [选项] 文件

  • 选项
  • -b:列出结果是不显示文件名
  • -c:详细显示执行过程
  • -L:直接显示符号链接执行的文件类别
[root@localhost tmp]# file /root/testac.q

/root/testac.q: ASCII text

[root@localhost tmp]# file -b /root/testac.q

ASCII text

ln

ln命令用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。

语法

    ln [options] source [dest]

ln [options] source…directory

选项

  • -d,-F,–directory:允许超级用户创建目录硬链接
  • -f:–force;强制建立文件或目录的硬链接,不论文件或目录是否存在
  • -s:对原文件建立符号链接
[root@localhost tmp]# ln -s /tmp/dac /root/dsc

[root@localhost tmp]# ll /root/dsc

总用量 0

lrwxrwxrwx. 1 root root 8 8月  21 16:45 dac -> /tmp/dac

tree

tree命令以树状图列出目录的内容

语法

    tree [选项] 目录

选项

  • -a:显示所有文件和目录
  • -d:仅显示目录列表
  • -s:列出文件和目录大小
[root@localhost tmp]# tree -d /home

/home

├── fedora

├── gentoo

└── wxq

├── perl5

├── \345\205\254\345\205\261

├── \346\250\241\346\235\277

├── \350\247\206\351\242\221

├── \345\233\276\347\211\207

├── \346\226\207\346\241\243

├── \344\270\213\350\275\275

├── \351\237\263\344\271\220

└── \346\241\214\351\235\242

12 directories

cat

cat命令用于连续的将文件的内容显示到标准输出设备上

语法

    cat [选项] file

选项

  • -n:显示行号
  • -b:显示非空白行的行号
  • -A:显示所有非正常的所有符号
  • -E:显示行结束符
  • -T:显示制表符
[root@localhost tmp]# cat -nA 123.dd

1 werer$ 2 wetgfy$ 3 $ 4 $ 5 qwettd$ 6 weted$ 7 $ 8 wtdwt$ 9 s$ 10 $ 11 wetyff$ 12 $

实例

  • 将两个文件链接在一起显示
[root@localhost tmp]# cat -b 123.dd 123.dd~

1  werer

2  wetgfy

3  qwettd

4  weted

5  wtdwt

6  s

7  wetyff

8  hijkhgdhndhuinsdhgkb

9      jihhnten

10              hhntanmdklfmn

11          jiohetndfnl

tac

tac命令用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示。

语法

    tac [选项] 文件

选项

  • -a或——append:将内容追加到文件的末尾;
  • -i或——ignore-interrupts:忽略中断信号。
[root@localhost tmp]# tac  123.dd

wetyff

s

wtdwt

weted

qwettd

wetgfy

werer

head

head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。

语法

    head [选项] 文件

选项

  • -n:指定显示头部内容的n行;
  • -c #;:指定显示头部的#个字符;
  • -v:总是显示文件名的头信息;
  • -q:不显示文件名的头信息。
[root@localhost tmp]# head -3 123.dd

werer

wetgfy

tail

tail命令用于输出文件的末尾部分

语法

    tail [选项] 文件

选项

  • -n:显示文件内容末尾n行
  • -c#:显示某位#个字符
  • ………
[root@localhost tmp]# tail -3 123.dd

wetyff

more

more是基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)

该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)可以用下列不同的方法对提示做出回答:

  • 按Space键:显示文本的下一屏内容。
  • 按Enier键:只显示文本的下一行内容。
  • 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
  • 按H键:显示帮助屏,该屏上有相关的帮助信息。
  • 按B键:显示上一屏内容。
  • 按Q键:退出rnore命令

语法

    more [选项] file…

选项

  • -<数字>:指定每屏显示的行数;
  • -d:显示“[press space to continue,’q’ to quit.]”和“[Press ‘h’ for instructions]”;
  • -c:不进行滚屏操作。每次刷新这个屏幕;
  • -s:将多个空行压缩成一行显示;
  • -u:禁止下划线;
  • +<数字>:从指定数字的行开始显示。
[root@localhost tmp]# more -5 anaconda.log

20:16:10,282 DEBUG anaconda: setting locale to: zh_CN.UTF-8

20:16:10,769 WARN anaconda: /usr/lib/python2.7/site-packages/meh/ui/gui.py:23: PyGIWarning: Gtk

was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before imp

ort to ensure that the right version gets loaded.

from gi.repository import Gtk

--More--(29%)

less

less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。

语法

    less [选项] 文件

选项

  • -e:文件内容显示完毕后,自动退出;
  • -f:强制显示文件;
  • -g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
  • -l:搜索时忽略大小写的差异;
  • -N:每一行行首显示行号;
  • -s:将连续多个空行压缩成一行显示;
  • -S:在单行显示较长的内容,而不换行显示;
  • -x<数字>:将TAB字符显示为指定个数的空格字符。

文件的元数据


文件有两类数据:

元数据:metadata,文件的属性数据

数据:data,文件内容,文件的实际数据

元数据的内容包括inode大小、权限、属主属组 时间戳、数据块指针

stat

stat命令用于查看文件的元数据信息

    [root@localhost tmp]# stat 123.dd

文件:"123.dd"

大小:46        块:8          IO 块:4096  普通文件

设备:fd00h/64768d Inode:35502027    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)  Gid:(    0/    root)

环境:unconfined_u:object_r:admin_home_t:s0

最近访问:2018-08-21 17:23:14.309657580 +0800

最近更改:2018-08-21 17:22:41.272457525 +0800

最近改动:2018-08-21 17:22:41.274457718 +0800

创建时间:-

相关参数描述

  • File:文件名;
  • Size:文件大小;
  • Blocks:文件占了多少数据块;
  • IO Block:文件所占数据块的大小;
  • Device:文件所在的硬盘的位置;
  • Inode:文件的节点;
  • Links:文件的链接数;
  • Access:用户或组对该文件的访问权限;
  • Uid:文件的属主;
  • Gid:文件的属组;
  • Context:文件的安全上下文;
  • Access:文件上一次的访问时间,又称为access time;
  • Modify:文件最近一次修改的时间,又称为modify time;
  • Change:文件属性最近一次改动时间,又称为change time

touch命令修改时间戳

    [root@localhost tmp]# stat /root/wxqaccc.111

文件:"/root/wxqaccc.111"

大小:70        块:8          IO 块:4096  普通文件

设备:fd00h/64768d Inode:4089498    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)  Gid:(    0/    root)

环境:unconfined_u:object_r:admin_home_t:s0

最近访问:2018-08-21 12:02:52.825552351 +0800

最近更改:2018-08-16 16:39:54.000000000 +0800

最近改动:2018-08-16 16:41:49.662533163 +0800

创建时间:-

[root@localhost tmp]# touch -acm /root/wxqaccc.111

[root@localhost tmp]# stat /root/wxqaccc.111

文件:"/root/wxqaccc.111"

大小:70        块:8          IO 块:4096  普通文件

设备:fd00h/64768d Inode:4089498    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)  Gid:(    0/    root)

环境:unconfined_u:object_r:admin_home_t:s0

最近访问:2018-08-21 15:57:20.029264723 +0800

最近更改:2018-08-21 15:57:20.029264723 +0800

最近改动:2018-08-21 15:57:20.029264723 +0800

创建时间:-

命令别名


命令别名就是将一个命令的用其他名字代替,可以通过alias命令来实现:

alias不带任何参数时,将显示当前shell进程下所有可用的命令别名的定义信息。

[root@localhost tmp]# alias

alias cp='cp -i'

alias egrep='egrep --color=auto'

alias fgrep='fgrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias perlll='eval `perl -Mlocal::lib`'

alias rm='rm -i'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

定义别名

 alias new_name ='command options'

例如:alias ll='ls -l --color=auto'

通过命令行定义的命令别名只对当前的shell有效,退出此shell后自动失效。要想别名永久生效,需要将别名定义在配置文件中。如果定义的别名与原命令的名称相同,如果要执行原命令可使用“\COMMAND” 用以定义别名的配置文件有两个:

仅对当前用户生效的别名配置,是在用户家目录下的.bashrc文件中定义

[root@localhost ~]# cat .bashrc

# .bashrc

# User specific aliases and functions

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

# Source global definitions

if [ -f /etc/bashrc ]; then

    . /etc/bashrc

fi

对所有用户都生效的别名配置,是在/etc/bashrc文件中定义


命令结果引用


引用命令行的执行结果可以使用“$(command)”或者反引号 ` 将命令行括起来。

例如:usid=`id root` 等同于  usid=$(id root)

    [root@localhost ~]# echo usid =`id root`

    usid =uid=0(root) gid=0(root) 组=0(root)

    [root@localhost ~]# echo usid =$(id root)

    usid =uid=0(root) gid=0(root) 组=0(root)

命令行状态返回值和命令行展开

命令状态返回值

命令的执行结果状态分为两种,bash通过状态返回值来输出结果:

成功:返回值为0

失败:返回值是1-255

命令执行完成后,其状态返回值保存在bash的特殊变量$?中。查看器其状态返回值可用:echo $?

    [root@localhost ~]# cd ..

    [root@localhost /]# echo $?

    0

    [root@localhost /]# awc

    bash: awc: 未找到命令...

    相似命令是: 'awk'

    [root@localhost /]# echo $?

    127

命令行展开


命令行展开的几种方式:

    ~:展开为用户的主目录

~USERNAME:展开为指定用户的主目录

{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径

实例

  • 在当前目录下创建a和b目录,并在a目录下创建c目录
[root@localhost ~]# mkdir -pv ./{a/c,b}

mkdir: 已创建目录 "./a"

mkdir: 已创建目录 "./a/c"

mkdir: 已创建目录 "./b"

在tmp目录下创建ac,bc,ad,bd几个目录

[root@localhost ~]# mkdir -v {a,b}_{c,d}

mkdir: 已创建目录 "a_c"

mkdir: 已创建目录 "a_d"

mkdir: 已创建目录 "b_c"

mkdir: 已创建目录 "b_d"

练习


  • 请使用命令行展开功能来完成以下练习:

(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d

    [root@localhost ~]# mkdir -v /tmp/{a,b}_{c,d}

    mkdir: 已创建目录 "/tmp/a_c"

    mkdir: 已创建目录 "/tmp/a_d"

    mkdir: 已创建目录 "/tmp/b_c"

    mkdir: 已创建目录 "/tmp/b_d"

(2)、创建/tmp/mylinux目录下的:

mylinux/

├── bin

├── boot

│   └── grub

├── dev

├── etc

│   ├── rc.d

│   │   └── init.d

│   └── sysconfig

│      └── network-scripts

├── lib

│   └── modules

├── lib64

├── proc

├── sbin

├── sys

├── tmp

├── usr

│   └── local

│      ├── bin

│      └── sbin

└── var

├── lock

├── log

└── run

 

[root@localhost ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/lib/{bin,sbin},var/{lock,log,run}}
mkdir: 已创建目录 "/tmp/mylinux"
mkdir: 已创建目录 "/tmp/mylinux/bin"
mkdir: 已创建目录 "/tmp/mylinux/boot"
mkdir: 已创建目录 "/tmp/mylinux/boot/grub"
mkdir: 已创建目录 "/tmp/mylinux/dev"
mkdir: 已创建目录 "/tmp/mylinux/etc"
mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d"
mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d/init.d"
mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig"
mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig/network-scripts"
mkdir: 已创建目录 "/tmp/mylinux/lib"
mkdir: 已创建目录 "/tmp/mylinux/lib/modules"
mkdir: 已创建目录 "/tmp/mylinux/lib64"
mkdir: 已创建目录 "/tmp/mylinux/proc"
mkdir: 已创建目录 "/tmp/mylinux/sbin"
mkdir: 已创建目录 "/tmp/mylinux/sys"
mkdir: 已创建目录 "/tmp/mylinux/tmp"
mkdir: 已创建目录 "/tmp/mylinux/usr"
mkdir: 已创建目录 "/tmp/mylinux/usr/lib"
mkdir: 已创建目录 "/tmp/mylinux/usr/lib/bin"
mkdir: 已创建目录 "/tmp/mylinux/usr/lib/sbin"
mkdir: 已创建目录 "/tmp/mylinux/var"
mkdir: 已创建目录 "/tmp/mylinux/var/lock"
mkdir: 已创建目录 "/tmp/mylinux/var/log"
mkdir: 已创建目录 "/tmp/mylinux/var/run"
[root@localhost ~]# tree /tmp/mylinux
/tmp/mylinux
├── bin
├── boot
│   └── grub
├── dev
├── etc
│   ├── rc.d
│   │   └── init.d
│   └── sysconfig
│   └── network-scripts
├── lib
│   └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│   └── lib
│   ├── bin
│   └── sbin
└── var
├── lock
├── log
└── run

24 directories, 0 files
  • 显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录
[root@localhost ~]# ls -d /var/l*[0-9]*[[:lower:]]
/var/linux1002wcc /var/livwoom2ca.cc

[root@localhost ~]# ls -d /var/l*[[:digit:]]*[[:lower:]]
/var/linux1002wcc /var/livwoom2ca.cc
  • 显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[root@localhost ~]# ls -d /etc/[[:digit:]]*[^[:digit:]]
/etc/1052w13cc /etc/50412swwwww /etc/844q.az

[root@localhost ~]# ls -d /etc/[0-9]*[^0-9]
/etc/1052w13cc /etc/50412swwwww /etc/844q.az
  • 显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[root@localhost ~]# ll -d /etc/[^[:alpha:]][[:alpha:]]*
-rw-r--r--. 1 root root 0 8月 23 11:52 /etc/8qes44q.az
drwxr-xr-x. 2 root root 6 8月 23 11:52 /etc/8qeseq.az
  • 在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost ~]# touch /tmp/tfile-`date +'%Y-%m-%d-%H-%M-%S'`

[root@localhost ~]# ll /tmp/tfile*
-rw-r--r--. 1 root root 0 8月 23 12:03 /tmp/tfile-2018-08-23-12-03-52
  • 复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@localhost tmp]# cp -a /etc/p*[^0-9] /tmp/mytest1
[root@localhost tmp]# ll /tmp/mytest1
总用量 136
drwxr-xr-x. 2 root root 4096 8月 13 20:08 pam.d
-rw-r--r--. 1 root root 2643 8月 20 11:23 passwd
-rw-r--r--. 1 root root 2685 8月 20 11:19 passwd-
-rw-r--r--. 1 root root 1362 6月 10 2014 pbm2ppa.conf
drwxr-xr-x. 7 root root 74 8月 13 19:59 pcp
-rw-r--r--. 1 root root 6362 4月 13 03:18 pcp.conf
-rw-r--r--. 1 root root 6332 4月 13 03:18 pcp.env
drwxr-xr-x. 2 root root 6 6月 10 2014 pear
-rw-r--r--. 1 root root 988 6月 10 2014 pear.conf
drwxr-xr-x. 2 root root 4096 8月 13 20:00 php.d
-rw-r--r--. 1 root root 64945 4月 13 03:04 php.ini
-rw-r--r--. 1 root root 2872 6月 10 2014 pinforc
drwxr-xr-x. 11 root root 131 8月 13 19:59 pki
drwxr-xr-x. 2 root root 28 8月 13 19:56 plymouth
drwxr-xr-x. 5 root root 52 8月 13 19:53 pm
-rw-r--r--. 1 root root 6300 6月 10 2014 pnm2ppa.conf
drwxr-xr-x. 2 root root 6 6月 10 2014 popt.d
drwxr-xr-x. 2 root root 154 8月 13 20:00 postfix
drwxr-xr-x. 3 root root 219 8月 13 19:56 ppp
drwxr-xr-x. 2 root root 105 8月 13 19:56 prelink.conf.d
-rw-r--r--. 1 root root 233 6月 7 2013 printcap
-rw-r--r--. 1 root root 1819 4月 11 12:18 profile
drwxr-xr-x. 2 root root 4096 8月 13 20:00 profile.d
-rw-r--r--. 1 root root 6545 6月 7 2013 protocols
drwxr-xr-x. 2 root root 79 8月 13 19:57 pulse
drwxr-xr-x. 2 root root 23 8月 13 19:57 purple
drwxr-xr-x. 2 root root 35 8月 13 19:53 python
  • 复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
[root@localhost tmp]# ll /tmp/mytest2
总用量 0
[root@localhost tmp]# cp -a /etc/*.d /tmp/mytest2
[root@localhost tmp]# ll /tmp/mytest2
总用量 32
drwxr-xr-x. 2 root root 6 4月 13 03:23 auto.master.d
drwxr-xr-x. 2 root root 4096 8月 13 20:00 bash_completion.d
drwxr-xr-x. 2 root root 6 4月 11 15:36 binfmt.d
drwxr-xr-x. 2 root root 6 4月 11 10:33 cgconfig.d
drwxr-xr-x. 2 root root 6 8月 4 2017 chkconfig.d
drwxr-xr-x. 2 root root 90 8月 13 19:59 cron.d
drwxr-xr-x. 2 root root 40 8月 13 19:56 depmod.d
drwxr-xr-x. 2 root root 6 4月 11 08:53 dnsmasq.d
drwxr-xr-x. 2 root root 6 4月 11 15:30 dracut.conf.d
drwxr-xr-x. 2 root root 6 4月 13 03:52 exports.d
drwxr-xr-x. 2 root root 6 4月 11 04:25 gdbinit.d
drwx------. 2 root root 182 8月 13 20:07 grub.d
lrwxrwxrwx. 1 root root 11 8月 13 19:52 init.d -> rc.d/init.d
drwx------. 3 root root 22 8月 13 19:56 ipsec.d
drwxr-xr-x. 2 root root 6 4月 11 12:27 krb5.conf.d
drwxr-xr-x. 3 root root 41 8月 13 20:00 latrace.d
drwxr-xr-x. 2 root root 176 8月 13 19:56 ld.so.conf.d
drwxr-xr-x. 2 root root 4096 8月 13 19:56 libibverbs.d
drwxr-xr-x. 2 root root 4096 8月 13 20:00 logrotate.d
drwxr-xr-x. 2 root root 138 8月 13 19:59 modprobe.d
drwxr-xr-x. 2 root root 6 4月 11 15:36 modules-load.d
drwxr-xr-x. 2 root root 67 8月 13 19:59 my.cnf.d
drwxr-xr-x. 2 root root 70 8月 13 19:57 oddjobd.conf.d
drwxr-xr-x. 2 root root 4096 8月 13 20:08 pam.d
drwxr-xr-x. 2 root root 4096 8月 13 20:00 php.d
drwxr-xr-x. 2 root root 6 6月 10 2014 popt.d
drwxr-xr-x. 2 root root 105 8月 13 19:56 prelink.conf.d
drwxr-xr-x. 2 root root 4096 8月 13 20:00 profile.d
lrwxrwxrwx. 1 root root 10 8月 13 19:52 rc0.d -> rc.d/rc0.d
lrwxrwxrwx. 1 root root 10 8月 13 19:52 rc1.d -> rc.d/rc1.d
lrwxrwxrwx. 1 root root 10 8月 13 19:52 rc2.d -> rc.d/rc2.d
lrwxrwxrwx. 1 root root 10 8月 13 19:52 rc3.d -> rc.d/rc3.d
lrwxrwxrwx. 1 root root 10 8月 13 19:52 rc4.d -> rc.d/rc4.d
lrwxrwxrwx. 1 root root 10 8月 13 19:52 rc5.d -> rc.d/rc5.d
lrwxrwxrwx. 1 root root 10 8月 13 19:52 rc6.d -> rc.d/rc6.d
drwxr-xr-x. 10 root root 127 8月 13 19:55 rc.d
drwxr-xr-x. 2 root root 77 8月 13 20:00 request-key.d
drwxr-xr-x. 2 root root 25 4月 11 11:49 rsyslog.d
drwxr-xr-x. 2 root root 35 8月 13 19:58 rwtab.d
drwxr-xr-x. 3 root root 4096 8月 13 19:56 sane.d
drwxr-xr-x. 2 root root 4096 8月 13 20:00 setuptool.d
drwxr-xr-x. 2 root root 6 4月 11 13:09 statetab.d
drwxr-x---. 2 root root 6 4月 11 12:30 sudoers.d
drwxr-xr-x. 2 root root 28 8月 13 19:56 sysctl.d
drwxr-xr-x. 2 root root 6 4月 11 15:36 tmpfiles.d
drwxr-xr-x. 2 root root 6 4月 11 12:59 xinetd.d
drwxr-xr-x. 2 root root 187 4月 13 20:58 yum.repos.d
  • 复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。
[root@localhost tmp]# ll /tmp/mytest3
总用量 0
[root@localhost tmp]# cp -a /etc/[lmn]*.conf /tmp/mytest3
[root@localhost tmp]# ll /tmp/mytest3
总用量 60
-rw-r--r--. 1 root root 28 2月 28 2013 ld.so.conf
-rw-r--r--. 1 root root 3534 3月 19 2013 lftp.conf
-rw-r-----. 1 root root 191 10月 12 2017 libaudit.conf
-rw-r--r--. 1 root root 2391 10月 13 2013 libuser.conf
-rw-r--r--. 1 root root 19 8月 13 20:08 locale.conf
-rw-r--r--. 1 root root 662 7月 31 2013 logrotate.conf
-rw-r--r--. 1 root root 5171 6月 10 2014 man_db.conf
-rw-r--r--. 1 root root 936 4月 11 12:14 mke2fs.conf
-rw-r--r--. 1 root root 2620 6月 10 2014 mtools.conf
-rw-r--r--. 1 root root 967 4月 13 03:52 nfs.conf
-rw-r--r--. 1 root root 3390 4月 13 03:52 nfsmount.conf
-rw-r--r--. 1 root root 1746 8月 13 19:55 nsswitch.conf
-rw-r--r--. 1 root root 2000 4月 11 04:29 ntp.conf
-rw-r--r--. 1 root root 91 12月 3 2012 numad.conf

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/112416

评论列表(1条)

  • 马哥教育
    马哥教育 2018-08-28 14:33

    写的很棒,完全可以当范文了,希望可以再接再厉,继续保持

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code