SHELL命令学习笔记

来源:互联网 发布:三大电商网络有哪些 编辑:程序博客网 时间:2024/05/16 02:42
一、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)