Linux入门-基础命令-mkdir、ls、mv-linux档案与文件管理

Linux入门-基础命令-mkdir、ls、mv-linux档案与文件管理
./ 当前目录
…/ 上层目录
mkdir
-p 创建目录所需要的递归目录 例如在没有test1目录时,要创建/test1/test2的话,需要加-p;
-m 设定目录权限,mkdir -p 711 /test1;

**关于执行档路径文件的变数:PATHPATH="PATH** PATH="PASH:/test1" 将/test1目录下的命令加入到执行档搜寻路径PATH;

命令-ls
[[email protected] ~]# ls [-aAdfFhilnrRSt]档名或目录名称…
[[email protected] ~]# ls [–color={never,auto,always}]档名或目录名称…
[[email protected] study ~]# ls [–full-time]档名或目录名称…
选项与参数:
-a :全部的档案,连同隐藏档(开头为.的档案)一起列出来(常用)
-A :全部的档案,连同隐藏档,但不包括. 与… 这两个目录
-d :仅列出目录本身,而不是列出目录内的档案资料(常用)
-f :直接列出结果,而不进行排序(ls 预设会以档名排序!)
-F :根据档案、目录等资讯,给予附加资料结构,例如:
*:代表可执行档; /:代表目录; =:代表socket 档案; |:代表FIFO 档案;
-h :将档案容量以人类较易读的方式(例如GB, KB 等等)列出来;
-i :列出inode 号码,inode 的意义下一章将会介绍;
-l :长资料串列出,包含档案的属性与权限等等资料(常用)
ll=ls -l;
-n :列出UID 与GID 而非使用者与群组的名称(UID与GID会在帐号管理提到!)
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来,等于该目录下的所有档案都会显示出来;
-S :以档案容量大小排序,而不是用档名排序;
-t :依时间排序,而不是用档名。
–color=never :不要依据档案特性给予颜色显示;
–color=always :显示颜色
–color=auto :让系统自行依据设定来判断是否给予颜色
–full-time :以完整时间模式(包含年、月、日、时、分) 输出
–time={atime,ctime} :输出access 时间或改变权限属性时间(ctime)
而非内容变更时间(modification time)

命令-cp
[[email protected] ~]# cp [-adfilprsu]来源档(source)目标档(destination)
[[email protected] ~]# cp [options] source1 source2 source3 … directory
选项与参数:
-a :相当于-dr --preserve=all的意思,至于dr请参考下列说明;(常用)
-d :若来源档为连结档的属性(link file),则复制连结档属性而非档案本身;
-f :为强制(force)的意思,若目标档案已经存在且无法开启,则移除后再尝试一次;
-i :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制档案本身;
-p :连同档案的属性(权限、用户、时间)一起复制过去,而非使用预设属性(备份常用);
-r :递回持续复制,用于目录的复制行为;(常用)
-s :复制成为符号连结档(symbolic link),亦即『捷径』档案;
-u :destination 比source 旧才更新destination,或destination 不存在的情况下才复制。
–preserve=all :除了-p 的权限相关参数外,还加入SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!
范例一:用root身份,将家目录下的.bashrc复制到/tmp下,并更名为bashrc
[[email protected] ~]# cp ~/.bashrc /tmp/bashrc
[[email protected] ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc’? n <==n不覆盖,y为覆盖
#重复作两次动作,由于/tmp底下已经存在bashrc了,加上-i选项后,
#则在覆盖前会询问使用者是否确定!可以按下n 或者y 来二次确认呢!

范例二:变换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:
[[email protected] ~]# cd /tmp
[[email protected] tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的.不要忘
[[email protected] tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r-- . 1 root utmp 28416 Jun 11 18: 56 /var/log/wtmp
-rw-r–r-- . 1 root root 28416 Jun 11 19:01 wtmp
#注意上面的特殊字体,在不加任何选项的情况下,档案的某些属性/权限会改变;
#这是个很重要的特性!要注意喔!还有,连档案建立的时间也不一样了!
#那如果你想要将档案的所有特性都一起复制过来该怎办?可以加上-a 喔!如下所示:

[[email protected] tmp]# cp -a /var/log/wtmp wtmp_2
[[email protected] tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r–. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-rw-r–. 1 root utmp 28416 Jun 11 18:56 wtmp_2
#了了吧!整个资料特性完全一模一样ㄟ!真是不赖~这就是-a 的特性!

范例三:复制/etc/这个目录下的所有内容到/tmp底下
[[email protected] tmp]# cp /etc/ /tmp
cp: omitting directory `/etc’ <==如果是目录则不能直接复制,要加上-r的选项
[[email protected] tmp]# cp -r /etc/ /tmp
#还是要再次的强调喔!-r是可以复制目录,但是,档案与目录的权限可能会被改变
#所以,也可以利用『 cp -a /etc /tmp 』来下达指令喔!尤其是在备份的情况下!

范例四:将范例一复制的bashrc建立一个连结档(symbolic link)
[[email protected] tmp]# ls -l bashrc
-rw-r–r--. 1 root root 176 Jun 11 19:01 bashrc <= =先观察一下档案情况
[[email protected] tmp]# cp -s bashrc bashrc_slink
[[email protected] tmp]# cp -l bashrc bashrc_hlink
[[email protected] tmp]# ls -l bashrc*
-rw-r–r- -. 2 root root 176 Jun 11 19:01 bashrc <==与原始档案不太一样了!
-rw-r–r--. 2 root root 176 Jun 11 19:01 bashrc_hlink
lrwxrwxrwx. 1 root root 6 Jun 11 19:06 bashrc_slink -> bashrc
范例四可有趣了!使用-l 及-s 都会建立所谓的连结档(link file),但是这两种连结档却有不一样的情况。这是怎么一回事啊?那个-l 就是所谓的实体连结(hard link),至于-s 则是符号连结(symbolic link), 简单来说,bashrc_slink 是一个『捷径』,这个捷径会连结到bashrc去!所以你会看到档名右侧会有个指向(->)的符号!

至于bashrc_hlink档案与bashrc的属性与权限完全一模一样,与尚未进行连结前的差异则是第二栏的link数由1变成2了!
范例五:若~/.bashrc比/tmp/bashrc新才复制过来
[[email protected] tmp]# cp -u ~/.bashrc /tmp/bashrc
#这个-u的特性,是在目标档案与来源档案有差异时,才会复制的。
#所以,比较常被用于『备份』的工作当中喔!_

范例六:将范例四造成的bashrc_slink复制成为bashrc_slink_1与bashrc_slink_2
[[email protected] tmp]# cp bashrc_slink bashrc_slink_1
[[email protected] tmp]# cp -d bashrc_slink bashrc_slink_2
[[email protected] tmp]# ls -l bashrc bashrc_slink*
-rw-r–r--. 2 root root 176 Jun 11 19:01 bashrc
lrwxrwxrwx. 1 root root 6 Jun 11 19:06 bashrc_slink -> bashrc
-rw-r–r--. 1 root root 176 Jun 11 19:09 bashrc_slink_1 <==与原始档案相同
lrwxrwxrwx. 1 root root 6 Jun 11 19:10 bashrc_slink_2 -> bashrc <==是连结档!
#这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际档案复制过来了
#也就是说,如果没有加上任何选项时,cp复制的是原始档案,而非连结档的属性!
#若要复制连结档的属性,就得要使用-d 的选项了!如bashrc_slink_2 所示。

范例七:将家目录的.bashrc及.bash_history复制到/tmp底下
[[email protected] tmp]# cp ~/.bashrc ~/.bash_history /tmp
#可以将多个资料一次复制到同一个目录去!最后面一定是目录!

命令head
[[email protected] ~]# head [-n number]档案
选项与参数:
-n :后面接数字,代表显示几行的意思

[[email protected] ~]# head /etc/man_db.conf
#预设的情况中,显示前面十行!若要显示前20行,就得要这样:
[[email protected] ~]# head -n 20 /etc/man_db.conf

范例:如果后面100行的资料都不列印,只列印/etc/man_db.conf的前面几行,该如何是好?
[[email protected] ~]# head -n -100 /etc/man_db.conf

命令tail
[[email protected] ~]# tail [-n number]档案
选项与参数:
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测

[[email protected] ~]# tail /etc/man_db.conf
#预设的情况中,显示最后的十行!若要显示最后的20行,就得要这样:
[[email protected] ~]# tail -n 20 /etc/man_db.conf

范例一:如果不知道/etc/man_db.conf有几行,却只想列出100行以后的资料时?
[[email protected] ~]# tail -n +100 /etc/man_db.conf

范例二:持续侦测/var/log/messages的内容
[[email protected] ~]# tail -f /var/log/messages
<==要等到输入[ctrl]-c之后才会离开tail这个指令的侦测!

例题:
假如我想要显示/etc/man_db.conf 的第11 到第20 行呢?
答:
这个应该不算难,想一想,在第11到第20行,那么我取前20行,再取后十行,所以结果就是:『 head -n 20 /etc/man_db.conf | tail -n 10 』,这样就可以得到第11到第20行之间的内容了!

这两个指令中间有个管线(|)的符号存在,这个管线的意思是:『前面的指令所输出的讯息,请透过管线交由后续的指令继续使用』的意思。所以, head -n 20 /etc/man_db.conf会将档案内的20行取出来,但不输出到萤幕上,而是转交给后续的tail指令继续处理。因此tail 『不需要接档名』,因为tail所需要的资料是来自于head处理后的结果!这样说,有没有理解?

命令-touch
我们在ls这个指令的介绍时,有稍微提到每个档案在linux底下都会记录许多的时间参数,其实是有三个主要的变动时间,那么三个时间的意义是什么呢?

modification time (mtime):
当该档案的『内容资料』变更时,就会更新这个时间!内容资料指的是档案的内容,而不是档案的属性或权限喔!

status time (ctime):
当该档案的『状态(status)』改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。

access time (atime):
当『该档案的内容被取用』时,就会更新这个读取时间(access)。举例来说,我们使用cat去读取/etc/man_db.conf ,就会更新该档案的atime了。
这是个挺有趣的现象,举例来说,我们来看一看你自己的/etc/man_db.conf 这个档案的时间吧!

[[email protected] ~]# date; ls -l /etc/man_db.conf ; ls -l --time=atime /etc/man_db.conf ; \

ls -l --time=ctime /etc/man_db.conf #这两行其实是同一行喔!用分号隔开
Tue Jun 16 00:43:17 CST 2015 #目前的时间啊!
-rw-r–r--. 1 root root 5171 Jun 10 2014 /etc/man_db.conf #在2014/06/10建立的内容(mtime)
-rw-r–r--. 1 root root 5171 Jun 15 23:46 /etc/man_db.conf #在2015/06/15读取过内容(atime)
-rw-r–r--. 1 root root 5171 May 4 17:54 /etc/man_db.conf #在2015/05/04更新过状态(ctime)
#为了要让资料输出比较好看,所以鸟哥将三个指令同时依序执行,三个指令中间用分号(;)隔开即可。
看到了吗?在预设的情况下,ls显示出来的是该档案的mtime ,也就是这个档案的内容上次被更动的时间。至于鸟哥的系统是在5月4号的时候安装的,因此,这个档案被产生导致状态被更动的时间就回溯到那个时间点了(ctime)!而还记得刚刚我们使用的范例当中,有使用到man_db.conf这个档案啊,所以啊,他的atime就会变成刚刚使用的时间了!

档案的时间是很重要的,因为,如果档案的时间误判的话,可能会造成某些程式无法顺利的运作。OK!那么万一我发现了一个档案来自未来,该如何让该档案的时间变成『现在』的时刻呢?很简单啊!就用『touch』这个指令即可!

来源:http://linux.vbird.org/linux_basic/0220filemanager.php