CentOS学习笔记--基本命令--文件与目录管理

Linux基本命令--文件与目录管理

本节节选自鸟哥的 Linux 私房菜 -- 基础学习篇目录  第七章、Linux 文件与目录管理 

ls(文件与目录的检视)

ls命令就是list的缩写,ls可以说是最常用命令,因为我们随时都要知道文件或者是目录的相关属性。

[[email protected] ~]# ls [-aAdfFhilnrRSt] 目录名称
[[email protected] ~]# ls [--color={never,auto,always}] 目录名称
[[email protected] ~]# ls [--full-time] 目录名称
选项与参数:
-a  :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
-A  :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录
-d  :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f  :直接列出结果,而不进行排序 (ls 默认会以档名排序!)
-F  :根据文件、目录等资讯,给予附加数据结构,例如:
      *:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h  :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i  :列出 inode 号码,inode 的意义下一章将会介绍;
-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)

最常用的是ls –l,很多 linux的版本在默认的情况中, 已经将 ll (L 的小写) 配置成为 ls -l 的意思了!其实,那个功能是 Bash shell 的 alias 功能呢~也就是说,我们直接输入 ll 就等於是输入 ls -l 是一样的

例一:-al显示所有的文件,隐藏的也显示
[root@localhost ~]# ls -al
total 52
dr-xr-x---.  2 root root 4096 Nov  3 20:06 .
dr-xr-xr-x. 22 root root 4096 Nov 14 16:08 ..
-rw-------.  1 root root 1098 Nov  3 19:57 anaconda-ks.cfg
-rw-------.  1 root root 1483 Dec 11 12:16 .bash_history
-rw-r--r--.  1 root root   18 May 20  2009 .bash_logout
-rw-r--r--.  1 root root  176 May 20  2009 .bash_profile
-rw-r--r--.  1 root root  176 Sep 23  2004 .bashrc
-rw-r--r--.  1 root root  100 Sep 23  2004 .cshrc
-rw-r--r--.  1 root root 8726 Nov  3 19:57 install.log
-rw-r--r--.  1 root root 3190 Nov  3 19:56 install.log.syslog
-rw-r--r--.  1 root root  129 Dec  4  2004 .tcshrc

例二:-l 显示文件,隐藏的不显示
[root@localhost ~]# ls -l
total 20
-rw-------. 1 root root 1098 Nov  3 19:57 anaconda-ks.cfg
-rw-r--r--. 1 root root 8726 Nov  3 19:57 install.log
-rw-r--r--. 1 root root 3190 Nov  3 19:56 install.log.syslog

例三:ll  同ls -l
[root@localhost ~]# ll
total 20
-rw-------. 1 root root 1098 Nov  3 19:57 anaconda-ks.cfg
-rw-r--r--. 1 root root 8726 Nov  3 19:57 install.log
-rw-r--r--. 1 root root 3190 Nov  3 19:56 install.log.syslog

cp (复制文件或目录)

要复制文件,请使用 cp (copy) 这个命令即可~不过, cp 这个命令的用途可多了~ 除了单纯的复制之外,还可以创建连结档 (就是捷径罗),比对两文件的新旧而予以升级, 以及复制整个目录等等的功能呢!

[[email protected] ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[[email protected] ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
-a  :相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
-d  :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
-f  :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i  :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l  :进行硬式连结(hard link)的连结档创建,而非复制文件本身;
-p  :连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r  :递回持续复制,用於目录的复制行为;(常用)
-s  :复制成为符号连结档 (symbolic link),亦即『捷径』文件;
-u  :若 destination 比 source 旧才升级 destination !
最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!

复制(cp)这个命令是非常重要的,不同身份者运行这个命令会有不同的结果产生,尤其是那个-a, -p的选项, 对於不同身份来说,差异则非常的大!

范例一:用root身份,将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
[root@www ~]# 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且观察属性:
[root@www ~]# cd /tmp
[[email protected] tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 . 不要忘
[[email protected] tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp
-rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp
# 注意上面的特殊字体,在不加任何选项的情况下,文件的某些属性/权限会改变;
# 这是个很重要的特性!要注意喔!还有,连文件创建的时间也不一样了!
# 那如果你想要将文件的所有特性都一起复制过来该怎办?可以加上 -a 喔!如下所示:

[root@www tmp]# cp -a /var/log/wtmp wtmp_2
[[email protected] tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2
# 了了吧!整个数据特性完全一模一样ㄟ!真是不赖~这就是 -a 的特性!

一般来说,我们如果去复制别人的数据 (当然,该文件你必须要有 read 的权限才行啊! ^_^) 时, 总是希望复制到的数据最后是我们自己的,所以,在默认的条件中, cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是命令操作者本身。举例来说, 上面的范例二中,由於我是 root 的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了!

由於具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码档 (/etc/shadow) 以及一些配置档,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项才行!另外,如果你想要复制文件给其他的使用者, 也必须要注意到文件的权限(包含读、写、运行以及文件拥有者等等), 否则,其他人还是无法针对你给予的文件进行修订的动作喔!注意注意!

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

范例四:将范例一复制的 bashrc 创建一个连结档 (symbolic link)
[root@www tmp]# ls -l bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc  <==先观察一下文件情况
[root@www 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 Sep 24 14:02 bashrc  <==与原始文件不太一样了!
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlink
lrwxrwxrwx 1 root root   6 Sep 24 14:20 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 新才复制过来
[root@www tmp]# cp -u ~/.bashrc /tmp/bashrc
# 这个 -u 的特性,是在目标文件与来源文件有差异时,才会复制的。
# 所以,比较常被用於『备份』的工作当中喔! ^_^

范例六:将范例四造成的 bashrc_slink 复制成为 bashrc_slink_1 与bashrc_slink_2
[root@www 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 Sep 24 14:02 bashrc
lrwxrwxrwx 1 root root   6 Sep 24 14:20 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1       <==与原始文件相同
lrwxrwxrwx 1 root root   6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是连结档!
# 这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际文件复制过来了
# 也就是说,如果没有加上任何选项时,cp复制的是原始文件,而非连结档的属性!
# 若要复制连结档的属性,就得要使用 -d 的选项了!如 bashrc_slink_2 所示。

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

例题:你能否使用vbird的身份,完整的复制/var/log/wtmp文件到/tmp底下,并更名为vbird_wtmp呢?

答:实际做看看的结果如下:

[[email protected] ~]$ cp -a /var/log/wtmp /tmp/vbird_wtmp
[vbird@www ~]$ ls -l /var/log/wtmp /tmp/vbird_wtmp
-rw-rw-r-- 1 vbird vbird 96384  9月 24 11:54 /tmp/vbird_wtmp
-rw-rw-r-- 1 root  utmp  96384  9月 24 11:54 /var/log/wtmp

由於vbird的身份并不能随意修改文件的拥有者与群组,因此虽然能够复制wtmp的相关权限与时间等属性, 但是与拥有者、群组相关的,原本vbird身份无法进行的动作,即使加上 -a 选项,也是无法达成完整复制权限的!

总之,由於 cp 有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚的了解到:

  • 是否需要完整的保留来源文件的信息?
  • 来源文件是否为连结档 (symbolic link file)?
  • 来源档是否为特殊的文件,例如 FIFO, socket 等?
  • 来源档是否为目录?

mv (移动文件与目录,或更名)

这是搬移 (move) 的意思!当你要移动文件或目录的时后,呵呵!这个命令就很重要啦!

[[email protected] ~]# mv [-fiu] source destination
[[email protected] ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f  :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i  :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u  :若目标文件已经存在,且 source 比较新,才会升级 (update)

范例一:复制一文件,创建一目录,将文件移动到目录中
[root@www ~]# cd /tmp
[[email protected] tmp]# cp ~/.bashrc bashrc
[[email protected] tmp]# mkdir mvtest
[[email protected] tmp]# mv bashrc mvtest
# 将某个文件移动到某个目录去,就是这样做!

范例二:将刚刚的目录名称更名为 mvtest2
[root@www tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~
# 其实在 Linux 底下还有个有趣的命令,名称为 rename ,
# 该命令专职进行多个档名的同时更名,并非针对单一档名变更,与mv不同。请man rename。

范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中
[root@www tmp]# cp ~/.bashrc bashrc1
[[email protected] tmp]# cp ~/.bashrc bashrc2
[[email protected] tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录!』
# 意思是说,将所有的数据移动到该目录的意思!

rm (移除文件或目录)

这是移除的命令(remove),要注意的是,通常在Linux系统下,为了怕文件被误杀,所以很多 distributions 都已经默认加入 -i 这个选项了!而如果要连目录下的东西都一起杀掉的话, 例如子目录里面还有子目录时,那就要使用 -r 这个选项了!不过,使用『 rm -r 』这个命令之前,请千万注意了,因为该目录或文件『肯定』会被 root 杀掉!因为系统不会再次询问你是否要砍掉呦!所以那是个超级严重的命令下达呦! 得特别注意!不过,如果你确定该目录不要了,那么使用 rm -r 来循环杀掉是不错的方式!

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

范例一:将刚刚在 cp 的范例中创建的 bashrc 删除掉!
[root@www ~]# cd /tmp
[[email protected] tmp]# rm -i bashrc
rm: remove regular file `bashrc‘? y
# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!

范例二:透过万用字节*的帮忙,将/tmp底下开头为bashrc的档名通通删除:
[root@www tmp]# rm -i bashrc*
# 注意那个星号,代表的是 0 到无穷多个任意字节喔!很好用的东西!

范例三:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉!
[root@www tmp]# rmdir /tmp/etc
rmdir: etc: Directory not empty  <== 删不掉啊!因为这不是空的目录!
[root@www tmp]# rm -r /tmp/etc
rm: descend into directory `/tmp/etc‘? y
....(中间省略)....
# 因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除!
# 如果不想要继续按 y ,可以按下『 [ctrl]-c 』来结束 rm 的工作。
# 这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:
[[email protected] tmp]# \rm -r /tmp/etc
# 在命令前加上反斜线,可以忽略掉 alias 的指定选项喔!至於 alias 我们在bash再谈!

范例四:删除一个带有 - 开头的文件
[root@www tmp]# touch ./-aaa-  <==touch这个命令可以创建空文件!
[[email protected] tmp]# ls -l
-rw-r--r-- 1 root  root      0 Sep 24 15:03 -aaa-  <==文件大小为0,所以是空文件
[root@www tmp]# rm -aaa-
Try `rm --help‘ for more information.  <== 因为 "-" 是选项嘛!所以系统误判了!
[root@www tmp]# rm ./-aaa-

另外,范例四也是很有趣的例子,我们在之前就谈过,档名最好不要使用 "-" 号开头, 因为 "-" 后面接的是选项,因此,单纯的使用『 rm -aaa- 』系统的命令就会误判啦! 那如果使用后面会谈到的正规表示法时,还是会出问题的!所以,只能用避过首位字节是 "-" 的方法啦! 就是加上本目录『 ./ 』即可!如果 man rm 的话,其实还有一种方法,那就是『 rm -- -aaa- 』也可以啊!

时间: 2024-11-09 18:07:36

CentOS学习笔记--基本命令--文件与目录管理的相关文章

Linux 程序设计学习笔记----POSIX 文件及目录管理

转载请注明:http://blog.csdn.net/suool/article/details/38141047 问题引入 文件流和文件描述符的区别 上节讲到ANSI C 库函数的实现在用户态,流的相应资源也在用户空间,但无论如何实现最终都需要通过内核实现对文件的读写控制.因此fopen函数必然调用了对OS的系统调用.这一调用在LINUX下即为open, close, read, write等函数.这些都遵循POSIX标准. so,在linux系统中是如何通过POSIX标准实现对文件的操作和目

Linux System Programming 学习笔记(八) 文件和目录管理

1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体 inode存储相关联文件的元数据 ls -i 命令获取文件的inode number /* obtaining the metadata of a file */ #include <sys/types.h> #include <sys/stat.h>

linux学习笔记之 文件和目录管理

这里列这些常用的命令提醒一下自己,免得老是会忘记那么几个 cd pwd mkdir rmdir ls mv cp rm cat tac nl more less head tail od ls -l file                    <==显示的是默认的mtimels --time={ctime|atime] file  <==显示指定的时间类型ls --full-time                <==显示完整的时间 mtime mtime(modification

CentOS(十)--与Linux文件和目录管理相关的一些重要命令②

在结束了第二期的广交会实习之后,又迎来了几天休闲的日子,继续学习Linux.在上一篇随笔 Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令① 中,详细记录了与Linux文件和目录管理相关的一些重要命令,包括 目录与路径相关的命令(cd.pwd.mkdir.rmdir等).管理文件与目录的命令(ls.cp.rm.mv等).查看文件内容命令(cat.more.less等),在这一篇随笔中,将继续详细记录与Linux文件和目录管理相关的其他一些重要命令. 一.修改文

python学习笔记九——文件与目录

1.python进行文件读写的函数是open或file类 mode:r  只读 r+   读写 w  写入,先删除原文件,再重新写入,如果文件没有则创建 w+  读写,先删除原文件,再重新写入,如果文件没有则创建(可写入和输出) a  写入,在文件末尾追加新的内容,文件不存在则创建 a+  读写,在文件末尾追加新的内容,文件不存在则创建 b  打开二进制文件,可与r,w,a,+结合使用 U  支持所有的换行符号,"\r","\n","\r\n"

CentOS(九)--与Linux文件和目录管理相关的一些重要命令①

   接上一篇文章,实际生产过程中的目录管理一定要注意用户是root 还是其他用户. 一.目录与路径 1.相对路径与绝对路径 因为我们在Linux系统中,常常要涉及到目录的切换,所以我们必须要了解 "路径" 以及 "相对路径" 与 "绝对路径" 的概念. 在之前的学习中,就反复的强调了Linux的目录是 "树状目录" .假设我们需要在任意一个目录下切换到另一个目录下,通常是使用的是 cd 这个命令,此时在写切换的目录名时就有两

Linux学习笔记3-文件与目录管理一

目录的相关操作 cd命令用来切换工作目录,可以用相对目录,也可以用绝对目录:~表示当前用户的主目录,-表示上一个工作目录,有点类似windows的后退,.表示当前目录,..表示上层目录. pwd命令用来显示当前的工作目录,-p参数可以显示非连接文件的路径. mkdir用来新建目录,-m参数可以直接指定新建目录的权限而不看默认的,-p参数可以递归的把每一层的目录一次都创建出来. mkdir -m 711 test2 mkdir -p test1/test2/test3/test4 rmdir用来删

APUE 学习笔记(三) 文件和目录

1. 文件类型,文件类型信息包含在 struct stat 里的 st_mode 成员 (1)普通文件,unix内核并不区分文本文件和二进制文件 (2)目录文件,这种文件包含了其他文件的名字以及指向这些文件有关信息的指针 (3)块特殊文件 (4)字符特殊文件 (5)FIFO, 常用于进程间通信,也称为管道 (6)套接字socket,常用于进程间网络通信 (7)符号链接 (必须使用lstat函数,获取的是符号链接本身的类型信息,而不是符号链接所指向的文件的类型信息) 2.文件长度 stat结构成员

linux云计算集群架构学习笔记: 1-2 文件的目录结构

文件的基本管理和XFS文件系统备份恢复 1.1  Linux系统目录结构,相对/绝对路径. 1.2  创建/复制/删除文件,rm -rf / 意外事故 1.3 查看文件内容 1.4 xfs文件系统的备份和恢复 在windows中文件在磁盘里如上图, 而在Linux当中一切都是文件,没有磁盘的概念了,这是 linux与windows的不同,设备也看成文件 1.1.1  linux系统目录结构 /   /home   /root   /dev   /usr   /etc   /boot   /lib