linux文件和目录管理(一)

linux文件和目录管理(一)

比较特殊的目录

. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
~account 代表account 这个使用者的家目录(account是个帐号名称)

几个常见的处理目录的指令

cd:变换目录
pwd:显示目前的目录
mkdir:建立一个新的目录
rmdir:删除一个空的目录

mkdir:建立一个新的目录

mkdir [-m|p] 目录名称/目录名称
选项与参数:
-m :设定档案的权限喔!直接设定,不需要看预设权限(umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上层目录)递回建立起来!

递归建立目录

undefined

建立目录并设定权限

undefined

rmdir:只能删除空的目录

rmdir [-p]目录名称
选项与参数:
-p :连同『上层』『空的』目录也一起删除

环境变量PATH

echo $PATH

可以看到本机的环境变量。

undefined

不同身份使用者预设的PATH不同,预设能够随意执行的指令也不同;
PATH是可以修改的;
如果不能使用命令,可能是预设的PATH没有。把命令路径加入到PATH中。

ls:文件与目录的列表

ls [-aAdfFhilnrRSt] 路径或目录名称..
ls [--color={never,auto,always}] 路径或目录名称..
ls [--full-time] 路径或目录名称..
选项与参数:
-a :列出目录下的所有文件,包括以 . 开头的隐含文件
-A :列出除了"."和".."以外的文件。
-d :显示目录名称而非其内容。
-f :直接列出结果,而不进行排序(ls默认会以文件名排序!)
-F :根据文件、目录等结构,给予附加显示,例如:
*:代表可执行文件; /:代表目录; =:代表socket 文件; |:代表FIFO 文件;
-h :将档案容量以人类较易读的方式(例如GB, KB 等等)列出来;
-i :列出inode节点,inode 的意义下一章将会介绍;
-l :长资料串列出,包含文件的属性与权限等等资料;(常用)
-n :列出UID 与GID 而非使用者与群组的名称
-r :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-R :连同子目录文件一起列出来,等于该目录下的所有档案都会显示出来;
-S :以文件大小排序,而不是用文件名排序;
-t :依时间排序,而不是用文件名。
--color=never :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto :让系统自行依据设定来判断是否给予颜色
--full-time :以完整时间模式(包含年、月、日、时、分) 输出
--time={atime,ctime} :输出atime 或改变权限属性时间(ctime)

案例

范例一:将家目录下的所有文件列出来(含属性与隐藏档)
[root@study ~]# ls -al ~
total 56
dr-xr-x---. 5 root root 4096 Jun 4 19:49 .
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ..
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 6798 Jun 4 19:53 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test
drwx------. 4 root root 29 May 6 00:14 .cache
drwxr-xr-x. 3 root root 17 May 6 00:14 .config
#这个时候你会看到以.为开头的几个文件,以及文件夹(.) (..) .config等等,
# 不过,文件夹名称都是以深蓝色显示,有点不容易看清楚就是了。

范例二:承上题,不显示颜色,但显示出该文件代表的类型(type)
[root@study ~]# ls -alF --color=never ~
total 56
dr-xr-x---. 5 root root 4096 Jun 4 19:49 ./
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ../
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 6798 Jun 4 19:53 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test
drwx------. 4 root root 29 May 6 00:14 .cache/
drwxr-xr-x. 3 root root 17 May 6 00:14 .config/


范例三:完整的呈现文件的修改时间(modification time)
[root@study ~]# ls -al --full-time ~
total 56
dr-xr-x---. 5 root root 4096 2015-06-04 19:49:54.520684829 +0800 .
dr-xr-xr-x. 17 root root 4096 2015-05-04 17:56:38.888000000 +0800 ..
-rw-------. 1 root root 1816 2015-05-04 17:57:02.326000000 +0800 anaconda-ks.cfg
-rw-------. 1 root root 6798 2015-06-04 19:53:41.451684829 +0800 .bash_history
-rw-r--r--. 1 root root 18 2013-12-29 10:26:31.000000000 +0800 .bash_logout
-rw-r--r--. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bash_profile
-rw-rw-rw-. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bashrc
-rw-r--r--. 1 root root 176 2015-06-03 00:04:16.916684829 +0800 .bashrc_test
drwx------. 4 root root 29 2015-05-06 00:14:56.960764950 +0800 .cache
drwxr-xr-x. 3 root root 17 2015-05-06 00:14:56.975764950 +0800 .config
# 请仔细看,上面的『时间』栏位变了喔!变成较为完整的格式。
# 一般来说, ls -al 仅列出目前短格式的时间,有时不会列出年份,
# 藉由--full-time 可以查阅到比较正确的完整时间格式啊!

复制、删除与移动: cp, rm, mv

cp:复制

cp [-adfilprsu] 被复制文件名(source) 复制后的文件名(destination)
cp [options] 被复制文件1 被复制文件2 被复制文件n .... 复制后的目录
选项与参数:
-a :相当于-dr(常用)
-d :若被复制文件为链接类型,则复制链接文件属性而非文件本身;
-f :为强制的意思,若复制后的文件已经存在且无法开启,则移除后再尝试一次;
-i :若复制后的文件已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬链接文件赋值,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递回持续复制,用于目录的复制行为;(常用)
-s :复制成为链接文件;
-u :复制后的文件 被复制文件 旧才复制,或复制后的文件 不存在的情况下才复制。
--preserve=all :除了-p 的权限相关参数外,还加入SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果被复制文件有两个以上,则最后一个文件一定要是『目录』才行!

案例

范例一:用root身份,将家目录下的.bashrc复制到/tmp下,并更名为bashrc
[root@study ~]# cp ~/.bashrc /tmp/bashrc
[root@study ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖
#重复作两次动作,由于/tmp底下已经存在bashrc了,加上-i选项后,
# 则在覆盖前会询问使用者是否确定!可以按下n 或者y 来二次确认呢!

范例二:变换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:
[root@study ~]# cd /tmp
[root@study tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的.不要忘
[root@study 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 喔!如下所示:

[root@study tmp]# cp -a /var/log/wtmp wtmp_2
[root@study 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 的特性!

cp 1.txt 2.txt 3.txt 4.txt ../
吧1.2.3.4.txt 移动到上级目录

rm:删除

rm [-fir]档案或目录
选项与参数:
-f :就是force 的意思,忽略不存在的档案,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!

mv:移动

mv [-fiu] 被移动文件 移动后的文件
mv [-fiu] 被移动文件1 被移动文件2 被移动文件3 .... 文件夹
选项与参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若移动后的文件已经存在时,就会询问是否覆盖!
-u :若移动后的文件,被移动文件 比较新,才会更新