SHELL命令学习笔记


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)  

相关内容

    暂无相关文章