SHELL命令学习笔记
一、mkdir命令
1、用途:创建目录
2、参数:
(1)、-p :如果路径中的某些目录不存在,则会自动创建目录,默认的mode由执行环境中的umask决定,即mode = 0777 - umask;无参数则路径中的目录不存在则将无法创建
(2)、-m : 指定目录的权限;
3、例子:
示例一
[root@jfht ~]# umask
0022
[root@jfht ~]# mkdir dir1
[root@jfht ~]# ls-l dir1
总计 0
ls命令跟上-d参数才能打印目录本身的信息。
[root@jfht ~]# ls-ld dir1
drwxr-xr-x 2 root root 4096 07-20 20:44 dir1
权限设置mode=0755=0777-0022
[root@jfht ~]#
示例二
[root@jfht ~]# mkdir-m 0700 dir2
[root@jfht ~]# ls-ld dir2
drwx------ 2 root root 4096 07-20 20:47 dir2
[root@jfht ~]#
示例三
[root@jfht ~]# mkdir dir3/x/y/z
mkdir: 无法创建目录 “dir3/x/y/z”: 没有那个文件或目录
[root@jfht ~]# mkdir-p dir3/x/y/z
[root@jfht ~]# ls-ld dir3
drwxr-xr-x 3 root root 4096 07-20 20:48 dir3
[root@jfht ~]# ls-ld dir3/x
drwxr-xr-x 3 root root 4096 07-20 20:48 dir3/x
[root@jfht ~]# ls-ld dir3/x/y
drwxr-xr-x 3 root root 4096 07-20 20:48 dir3/x/y
[root@jfht ~]# ls-ld dir3/x/y/z
drwxr-xr-x 2 root root 4096 07-20 20:48 dir3/x/y/z
[root@jfht ~]#
示例四 一个命令创建项目的目录结构
[root@jfht ~]# mkdir-p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
[root@jfht ~]# tree project/
project/
|-- bin
|-- demo
| `-- stat
| `-- a
|-- doc
| |-- html
| |-- info
| `-- pdf
|-- lib
| `-- ext
`-- src
11 directories, 0 files
二、cp命令
1、用途:复制文件或者目录
2、参数
a :相当于 -pdr 的意思;
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的 (destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination !
3、例子
范例一:将家目录下的 .bashrc 复制到/tmp 下,并更名为 bashrc
[root@linux ~]# cd/tmp
[root@linux tmp]# cp~/.bashrc bashrc
[root@linux tmp]# cp-i~/.bashrc bashrc
# 重复作两次动作,由于 /tmp 底下已经存在 bashrc 了,加上 -i 参数,
# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 呢!
# 但是,反过来说,如果不想要询问时,则加上 -f 这个参数来强制直接覆盖!
范例二:将 /var/log/wtmp 复制到/tmp 底下
[root@linux tmp]# cp/var/log/wtmp.<==想要复制到目前的目录,最后的. 不要忘
[root@linux tmp]# ls-l/var/log/wtmp wtmp
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46/var/log/wtmp
-rw-r–r– 1 root root 71808 Jul 18 21:58 wtmp
# 注意到了吗?!在不加任何参数的情况下,档案的所属者会改变,连权限也跟着改变了~
# 这是个很重要的特性!要注意喔!还有,连档案建立的时间也不一样了!
# 如果您想要将档案的所有特性都一起复制过来,可以加上 -a 喔!
[root@linux tmp]# cp-a/var/log/wtmp wtmp_2
[root@linux tmp]# ls-l/var/log/wtmp wtmp_2
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46/var/log/wtmp
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46 wtmp_2
# 了吧!整个资料特性完全一模一样ㄟ!真是不赖~这就是 -a 的特性!
范例三:复制 /etc/ 这个目录下的所有内容到/tmp 底下
[root@linux tmp]# cp/etc//tmp
cp: omitting directory `/etc’<== 如果是目录,不能直接复制,要加上-r 的参数
[root@linux tmp]# cp-r/etc//tmp
# 还是要再次的强调喔! -r 是可以复制目录,但是,档案与目录的权限会被改变~
# 所以,也可以利用 cp -a/etc/tmp 来下达指令喔!
范例四:将范例一复制的 bashrc 建立一个连结档 (symbolic link)
[root@linux tmp]# ls-l bashrc
-rw-r–r– 1 root root 395 Jul 18 22:08 bashrc
[root@linux tmp]# cp-s bashrc bashrc_slink
[root@linux tmp]# cp-l bashrc bashrc_hlink
[root@linux tmp]# ls-l bashrc*
-rw-r–r– 2 root root 395 Jul 18 22:08 bashrc
-rw-r–r– 2 root root 395 Jul 18 22:08 bashrc_hlink
lrwxrwxrwx 1 root root 6 Jul 18 22:31 bashrc_slink-> bashrc
# 那个 bashrc_slink 是由 -s 的参数造成的,建立的是一个『快捷方式』,
# 所以您会看到在档案的最右边,会显示这个档案是『连结』到哪里去的!
# 至于那个 bashrc_hlink 有趣了!建立了这个档案之后, bashrc 与 bashrc_hlink
# 所有的参数都一样,只是,第二栏的 link 数改变成为 2 了~而不是原本的 1 喔!
# 这两种连结的方式的异同,我们会在下一章里面进行介绍的!
范例五:若 ~/.bashrc 比/tmp/bashrc 新才复制过来
[root@linux tmp]# cp-u~/.bashrc/tmp/bashrc
# 这个 -u 的特性,是在目标档案与来源档案有差异时,才会复制的。
# 所以,比较常被用于『备份』的工作当中喔! ^_^
范例六:将范例四造成的 bashrc_slink 复制成为 bashrc_slink_2
[root@linux tmp]# cp bashrc_slink bashrc_slink_2
[root@linux tmp]# ls-l bashrc_slink*
lrwxrwxrwx 1 root root 6 Jul 18 22:31 bashrc_slink-> bashrc
-rw-r–r– 1 root root 395 Jul 18 22:48 bashrc_slink_2
# 这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际档案复制过来了
# 也就是说,如果没有加上任何参数时,复制的是源文件,而非连结文件的属性!
# 若要复制连结文件的属性,就得要使用 -d 或者 -a 的参数了!
范例七:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下
[root@linux tmp]# cp~/.bashrc~/.bash_history/tmp
# 可以将多个数据一次复制到同一个目录去!
这个 cp 的功能很多,而由于我们常常在进行一些数据的复制,所以也会常常用到这个指令的。 一般来说,我们如果去复制别人的数据 (当然,该档案您必须要有 read 的权限才行啊! ^_^) 时, 总是希望复制到的数据最后是我们自己的,所以,在预设的条件中, cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身。举例来说, 上面的范例二中,由于我是 root 的身份,因此复制过来的档案拥有者与群组就改变成为 root 所有了! 这样说,可以明白吗?! ^_^
由于具有这个特性,因此,当我们在进行备份的时候,某些需要特别注意的特殊权限档案, 例如密码文件 (/etc/shadow) 以及一些设定档,就不能直接以 cp 来复制,而必须要加上-a 或者是 -p 等等可以完整复制档案权限的参数才行!另外,如果您想要复制档案给其它的使用者, 也必须要注意到档案的权限(包含读、写、执行以及档案拥有者等等), 否则,其它人还是无法针对您给予的档案进行修订的动作喔!注意注意!
至于上面的范例当中,第四个范例是最有趣的,使用 -l 及 -s 都会建立所谓的连结档 (link file), 但是这两种连结档确有不一样的展现情况。这是怎么一回事啊? 那个-l 就是所谓的 hardlink ,至于-s 则是 symboliclink ,鸟哥这里先不介绍, 因为这个涉及i-node 的相关知识,我们还没有介绍到,下一章再来讨论这个link 的问题喔! 总之,由于 cp 有种种的档案属性与权限的特性,所以,在复制时,您必须要清楚的了解到:
是否需要完整的保留来源档案的信息?
来源档案是否为连结档 (symbolic link file)?
来源档是否为特殊的档案,例如 FIFO, socket 等?
来源文件是否为目录?
三、mv命令
(1)、用途:移动或更名文件或目录
(2)、参数:
-b或--backup 若需覆盖文档,则覆盖前先行备份。
-f或--force 若目标文档或目录和现有的文档或目录重复,则直接覆盖现有的文档或目录。
-i或--interactive 覆盖前先行询问用户。
-S或
--suffix= 和-b参数一并使用,可指定备份文档的所要附加的字尾。
-u或--update 在移动或更改文档名时,若目标文档已存在,且其文档日期比源文档新,则不覆盖目标文档。
-v或--verbose 执行时显示周详的信息。
-V=或
--version-control= 和-b参数一并使用,可指定备份的方法。
--help 显示帮助。
--version 显示版本信息。
(3)、例子
[root@xm_41 mv]# ll
总计 8
-rw-r--r-- 1 root root 5 10-15 15:25 into
-rw-r--r-- 1 root root 4 10-15 15:25 out
[root@xm_41 mv]# mv-b into out
mv:是否覆盖“out”? y
[root@xm_41 mv]# ll
总计 8
-rw-r--r-- 1 root root 5 10-15 15:25 out
-rw-r--r-- 1 root root 4 10-15 15:25 out~
用-b参数的时候,会对覆盖的文件进行自动的备份,默认是后面加~;此时覆盖的时候还会进行提示
[root@xm_41 mv]# mv-b-S bak into out
mv:是否覆盖“out”? y
[root@xm_41 mv]# ll
总计 4
-rw-r--r-- 1 root root 0 10-15 15:28 out
-rw-r--r-- 1 root root 5 10-15 15:25 outbak
若有参数-b同时加入-S的参数并在后面指定备份加的字符
[root@xm_41 mv]# mv-b-S bak into out
mv:是否覆盖“out”? y
[root@xm_41 mv]# ll
总计 4
-rw-r--r-- 1 root root 0 10-15 15:28 out
-rw-r--r-- 1 root root 5 10-15 15:25 outbak
若是加参数-f就不会再进行提示;默认情况是-i进行询问;
[root@xm_41 mv]# mv-u out outbak
[root@xm_41 mv]# ll
总计 4
-rw-r--r-- 1 root root 0 10-15 15:30 out
-rw-r--r-- 1 root root 5 10-15 15:31 outbak
采用-u的参数,发现out比outbak旧,才是就不进行覆盖了
[root@xm_41 mv]# mv-u out outbak
[root@xm_41 mv]# ll
总计 4
-rw-r--r-- 1 root root 0 10-15 15:30 out
-rw-r--r-- 1 root root 5 10-15 15:31 outbak
mv可以用来更改名字,若是指定文件或目录是不存在的
四、rm命令
(1)、用途:删除文件或者目录
(2)、参数
-d或--directory 直接把欲删除的目录的硬连接数据删成0,删除该目录。
-f或--force 强制删除文件或目录。
-i或--interactive 删除既有文件或目录之前先询问用户。
-r或-R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或--verbose 显示指令执行过程。
--help 在线帮助。
--version 显示版本信息
(3)、例子(才用法同mv的例子差不多,不在一一进行举例)
五、ls命令
(1)、用途:列出目录
(2)、参数
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c 输出文件的 i 节点的修改时间,并以此排序。
-d 将目录象文件一样显示,而不是显示其下的文件。
-e 输出时间的全部信息,而不是输出简略信息。
-f -U 对输出的文件不排序。
-g 无用。
-i 输出文件的 i 节点的索引信息。
-k 以 k 字节的形式表示文件的大小。
-l 列出文件的详细信息。
-m 横向输出文件名,并以“,”作分格符。
-n 用数字的 UID,GID 代替名称。
-o 显示文件的除组信息外的详细信息。
-p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通
文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套
接字(sockets)。
-q 用?代替不可输出的字符。
-r 对目录反向排序。
-s 在每个文件名后输出该文件的大小。
-t 以时间排序。
-u 以文件上次被访问的时间排序。
-x 按列输出,横向排序。
-A 显示除 “.”和“..”外的所有文件。
-B 不输出以 “~”结尾的备份文件。
-C 按列输出,纵向排序。
-G 输出文件的组的信息。
-L 列出链接文件名而不是链接到的文件。
-N 不限制文件长度。
-Q 把输出的文件名用双引号括起来。
-R 列出所有子目录下的文件。
-S 以文件大小排序。
-X 以文件的扩展名(最后一个 . 后的字符)排序。
-1 一行只输出一个文件。
--color=no 不显示彩色文件名
--help 在标准输出上显示帮助信息。
--version 在标准输出上输出版本信息并退出。
(3)、例子
只列出子目录
1. ls -F| grep/$ 或者 aliassub= "ls -F | grep /$"(linux)
2. ls -l| grep"^d" 或者 ls-lL| grep "^d"(Solaris)
计算当前目录下的文件数和目录数
下面命令可以分别计算当前目录下的文件和目录个数:
# ls -l *|grep"^-"|wc-l---- to count files
# ls -l *|grep"^d"|wc-l----- to countdir
显示彩色目录列表
打开/etc/bashrc, 加入如下一行:
alias ls="ls --color"
下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下:
1. 蓝色-->目录
2. 绿色-->可执行文件
3. 红色-->压缩文件
4. 浅蓝色-->链接文件
5. 灰色-->其他文件
ls -tl --time-style=full-iso sshd
ls -ctl --time-style=long-iso
ls 命令的含义是list显示当前目录中的文件名字。注意不加参数它显示除隐藏文件外的所有文件及目录的名字。
1)ls –a 显示当前目录中的所有文件,包含隐藏文件
]# ls –a
. .gnome2.nautilus
.. .gnome2_private oracle_rpm
.bash_profile .gtkrc-1.2-gnome2 tnsnames.ora
.bashrc .ICEauthority types.h
注意隐藏文件是在文件名字以“.”(英文句号)开头的文件。
2)ls –l 显示文件及其详细信息。
]# ls –l
total 5
-rw-r--r-- 1 root root 1668 Oct 3 2007 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 Nov 6 00:04 aa
显示的文件详细信息分别代表什么呢?以上面蓝色部分为例。
total 5 代表当前目录下文件大小的总和为5K(每个目录的大小都按4K算)
drwxr-xr-x 第一个字符有3种情况:“-”表示普通文件,“d”代表目录,“l”代表连接文件,“b”代表设备文件。
后面的9个字符每3个为一组,分别代表文件所有者、文件所有者所在用户组、其它用户对文件拥有的权限。每组中3个字符分别代表读、写、执行的权限,若没有其中的任何一个权限则用“-”表示。执行的权限有两个字符可选“x”代表可执行,“s”代表套接口文件。
紧接着的数字2代表 “aa”这个目录下的目录文件数目(这个数目=隐藏目录数目+普通目录数目)。我们进入“aa”目录用命令 ls –al (为了看到隐藏文件我们加上-a这个参数)
]# ls -al
total 8
drwxr-xr-x 2 root root 4096 Nov 6 00:04.
drwxr-x--- 14 root root 4096 Nov 6 00:04..
(上面的第3行中的2代表当前目录中有子目录2个,即.和..上面的第4行中的14代表这个目录的上一层目录中有14个子目录。)
再接下来的root代表这个文件(目录)的属主为 用户root
再接下来的root代表这个文件(目录)所属的用户组为 组root
4096 代表文件的大小(字节数),目录的大小总是为4096字节。
Nov 6 00:04 代表文件(目录)的修改时间。
aa代表文件(目录)在名字。
3)文件名颜色的含义
默认色代表普通文件。 例:install.log
绿色代表可执行文件。 例:rc.news
红色代表tar包文件。 例:vim-7.1.tar.bz2
蓝色代表目录文件。 例:aa
水红代表图象文件。 例:Sunset.jpg
青色代表链接文件。 例:rc4.d (此类文件相当于快捷方式)
黄色代表设备文件。 例:fd0
4)几个比较常用的参数。
-t 按最后修改时间排序。
-S 按文件大小排序。(大写的S)
-r 排序时按倒序。
-h 显示文件大小时增加可读性 (例:1K 234M 2G)