Linux基本目录机构
1. 基本介绍
-
Linux的文件系统采用级层式子的树状目录结构,
-
最上层是根目录“/”
-
Linux世界里,一切皆文件。
2. 目录用途
-
/bin:
是Binary的缩写,这个目录存放着最经常使用的命令。 -
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
-
/home:
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 -
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。 -
/lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
-
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
-
/etc:所有的系统管理所需要的配置文件和子目录my.conf。
-
/usr/local
:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。 -
/boot:
存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 -
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
-
/srv:service的缩写,该目录存放一些服务启动之后需要提供的数据。
-
/sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。
-
/tmp:这个目录是用来存放一些临时文件的。
-
/dev:类似windows的设备管理器,把所有的硬件用文件的形式存储。
-
/media:
linux系统会自动识别一些设备,例如U盘光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 -
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。 -
/opt:
这是给主机额外安装软件所摆放的目录,如安装ORACLE数据库就可放到该目录下。默认为空。 -
/usr/local:这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码的方式安装的程序。
-
/var:
这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。 -
/selinux:SELinux是一种安全子系统,它能控制程序只能访问特定文件。
3. 总结
-
Linux的目录中有且只有一个根目录。
-
Linux的各个目录存放的内容是规划好,不用乱放文件。
-
Linux是以文件的形式管理我们的设备,因此linux系统,一切皆为文件。
-
Linux的各个文件目录下存放什么内容,必须有一个认识。
现实中,服务器(包含Linux,Unix,Windows Server)一般都摆放在机房里,因为一个机房摆放了很多Linux机器,所有机器都运转起来,整个室内温度也是非常高的,所以作为一个要操作Linux的开发人员,它们通常都是通过ssh远程连接操作Linux的,而ssh只有命令行界面,所以我们操作Linux只能通过一个个的命令去运作。
cd 切换用户当前工作目录
cd (选项) (参数)
cd命令用来切换用户工作目录到一个指定的目录下,这个指定的目录你可以使用绝对路径或者是相对路径,(绝对路径代表从根目录开始,相对路径代表以当前目录为起点)
如果直接用 cd 命令而不加任何参数,则会切换到登录用户的主目录
比如我一开始是用root用户登录的,那么他已进入命令行就会进入到 /root/ 目录,使用cd 切换到其他目录后,直接cd(不加任何参数)那么他会切换回到/root/ 目录
cd 切换目录时要注意的几点
" ~ "表示为home directory(家目录或者叫用户目录)的意思
" . " 表示目前所在的目录
" .. " 表示目前目录位置的上一层目录。
实例
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。
pwd 显示用户当前工作目录
pwd(选项)
pwd是用来显示用户当前的工作路径的 ,他是以绝对路径的形式呈现的
例如以下例子
[root@localhost linuxidc]# cd /root
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /home/linuxidc/
[root@localhost linuxidc]# pwd
/home/linuxidc
ls 显示目标列表(之前在讲目录结构的时候使用过的)
ls(选项)(参数)
参数可以为一个目录,如果什么都不加,代表当前目录
ls目录在我看来算是Linux中使用频率最高的命令了
在Windows下,打开文件资源管理器,进入一个目录,里面的文件目录,都是直接显示的
而在Linux下,进入一个目录,想查看一个目录里面的文件,或文件夹就必须用到ls命令了
ls命令的选项如下
-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
-A:显示除影藏文件“.”和“..”以外的所有文件列表;
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,<br>不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
--file-type:与“-F”选项的功能相同,但是不显示“*”;
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
--full-time:列出完整的日期与时间;
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。
之前跟大家讲过每种颜色分别代表什么样的颜色,在这你也可以通过 --color 自己指定不同类型显示那种不同的颜色
下面是简单的演示
[root@localhost ~]# ls #默认显示当前目录下的文件
1.txt 2.txt 3.txt a b c
[root@localhost ~]# ls -a #显示当前目录下所有的文件,包含"."开头的隐藏文件
. 1.txt 3.txt b .bash_logout .bashrc c .cshrc .Python_history .viminfo
.. 2.txt a .bash_history .bash_profile .bashrc-anaconda3.bak .cache .ipython .tcshrc .vimrc
[root@localhost ~]# ls -l #显示当前目录下文件的详细信息,如权限,文件大小,修改时间
total 12
-rw-r--r--. 1 root root 0 Apr 5 10:29 1.txt
-rw-r--r--. 1 root root 0 Apr 5 10:29 2.txt
-rw-r--r--. 1 root root 0 Apr 5 10:29 3.txt
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 a
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 b
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 c
[root@localhost ~]# ll #等同与ls -l 命令,显示文件详细信息
total 12
-rw-r--r--. 1 root root 0 Apr 5 10:29 1.txt
-rw-r--r--. 1 root root 0 Apr 5 10:29 2.txt
-rw-r--r--. 1 root root 0 Apr 5 10:29 3.txt
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 a
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 b
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 c
[root@localhost ~]# ls -al #组合选项 相当于 ls -a -l 显示当前目录下所有文件或目录的详细信息
total 68
dr-xr-x---. 7 root root 4096 Apr 5 10:29 .
dr-xr-xr-x. 22 root root 4096 Apr 5 09:27 ..
-rw-r--r--. 1 root root 0 Apr 5 10:29 1.txt
-rw-r--r--. 1 root root 0 Apr 5 10:29 2.txt
-rw-r--r--. 1 root root 0 Apr 5 10:29 3.txt
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 a
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 b
-rw-------. 1 root root 4083 Apr 4 18:03 .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 247 Mar 12 05:07 .bashrc
-rw-r--r--. 1 root root 176 Mar 11 06:12 .bashrc-anaconda3.bak
drwxr-xr-x. 2 root root 4096 Apr 5 10:29 c
drwxr-xr-x. 3 root root 4096 Apr 1 05:19 .cache
-rw-r--r--. 1 root root 100 Sep 22 2004 .cshrc
drwxr-xr-x. 5 root root 4096 Mar 12 05:10 .ipython
-rw-------. 1 root root 32 Mar 31 17:16 .python_history
-rw-r--r--. 1 root root 129 Dec 3 2004 .tcshrc
-rw-------. 1 root root 4016 Apr 2 04:35 .viminfo
-rw-r--r--. 1 root root 25 Mar 12 05:10 .vimrc
其他选项可以自己动手去试,由于篇幅问题,我就不一一演示了
mv 移动文件目录命令
mv(选项)(参数)
mv命令可以用来移动一个文件或是一个目录,同时也可以用来作为改名的命令
他一般需要两个参数 ,source(源文件或源目录),target(目标文件或目标目录)
注意,如果目标路径中存在相同的文件,那么将会覆盖原先的文件,如果只是移动到当前目录下,而且与原先文件目录名不同,那么这只是一个改名的操作
mv的选项如下
--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可<br>以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
一般我们再使用mv命令时是用不到选项的,所以只是列举选项以供参考
mv的应用
[root@localhost linuxidc]# ls
a.py a.sh
[root@localhost linuxidc]# mv a.py b.py #只是改名了
[root@localhost linuxidc]# ls
a.sh b.py
[root@localhost linuxidc]# ls /root/a/
1.py 2.py 3.py 4.py 5.py
[root@localhost linuxidc]# pwd
/home/linuxidc
[root@localhost linuxidc]# mv /root/a/* . #移动a目录下所有文件到当前目录(*代表的是通配符,.代表的是当前目录)
[root@localhost linuxidc]# ls
1.py 2.py 3.py 4.py 5.py a.sh b.py
mkdir 创建目录命令
mkdir (选项)(参数)
在Linux端可以使用mkdir来创建目录,如果你没有加其他的路径名,那么默认是在当前目录下创建目���,注意当文件夹存在时则提示不能创建
在这里说一下创建文件夹其实和windowns管理一样,要规划好如何去布局一个文件系统,在父目录下可以再创建子目录,每个目录尽量要存放相同类型的文件,这样更易于团队的管理和使用
mkdir的选项
-Z:设置安全上下文,当使用SELinux时有效;
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
--version 显示版本信息。
你也可以直接通过--help来获取选项
例如我下面创建一个文件夹
[root@localhost ~]# mkdir myfolder
[root@localhost ~]# ls
myfolder
创建一个文件夹并设置权限(权限暂时还没有讲到,只是了解一下)
[root@localhost ~]# mkdir -m 711 newFolder
[root@localhost ~]# ll
total 8
drwxr-xr-x. 2 root root 4096 Apr 9 16:49 myfolder
drwx--x--x. 2 root root 4096 Apr 9 16:53 newFolder
权限是不是和之前创建的不一样了
当然你也可以直接创建多个目录(参数)
[root@localhost ~]# mkdir a b c
[root@localhost ~]# ls
a b c
创建包含子目录的目录(递归创建目录)
递归创建目录需要用到 -p选项
[root@localhost ~]# mkdir -p a/b/c
[root@localhost ~]# ls
a
[root@localhost ~]# cd a
[root@localhost a]# ls
b
[root@localhost a]# cd b
[root@localhost b]# ls
c
[root@localhost b]# cd c
当前路径创建了一个a,a中又创建了一个b,b中又创建了c
还可以通过列表来批量创建目录
[root@localhost ~]# mkdir -p a/{1,2,3,4}
[root@localhost ~]# ls
a
[root@localhost ~]# cd a
[root@localhost a]# ls
1 2 3 4
cp 复制命令
cp(选项)(参数)
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
cp的一些选项
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
cp的参数其实和mv有点类似,都是需要两个参数,一个是源文件路径,一个目标路径,只是mv是移动,文件数量并没有变,而cp命令是复制一个文件或目录
下面我们通过一个例子来熟悉以下这个命令
把a.py复制到a文件夹中
[root@localhost ~]# ls
a a.py
[root@localhost ~]# cp a.py a/
[root@localhost ~]# ls
a a.py
[root@localhost ~]# cd a
[root@localhost a]# ls
a.py
注意,同mv命令一样,肯定是会用到相对文件路径的," . "代表当前文件路径," .. "代表上一层文件路径," ~ "代表家目录
比如把文件复制到当前文件夹,并改名
[root@localhost ~]# ls
a.py
[root@localhost ~]# cp a.py b.py
[root@localhost ~]# ls
a.py b.py
或是从其他文件路径复制到当前路径
[root@localhost b]# tree /root
/root
├── a
│ └── a.py
└── b
2 directories, 1 file
[root@localhost b]# cp ../a/a.py .
[root@localhost b]# tree /root
/root
├── a
│ └── a.py
└── b
└── a.py
2 directories, 2 files
当要复制多个文件时或是一个目录时,这时就要用到-r 递归处理
[root@localhost b]# pwd
/root/b
[root@localhost b]# tree /root
/root
├── a
│ ├── 1.py
│ ├── 2.py
│ └── 3.py
├── b
└── c
3 directories, 3 files
[root@localhost b]# cp -r ../a .
[root@localhost b]# tree /root
/root
├── a
│ ├── 1.py
│ ├── 2.py
│ └── 3.py
├── b
│ └── a
│ ├── 1.py
│ ├── 2.py
│ └── 3.py
└── c
将a整个目录都复制过来了
有时候我们在复制多个文件时,很有可能会遇到有文件重复,这时我们就可以使用 -i 选项交互式进行cp命令,也就是在覆盖既有文件之前先询问用户
[root@localhost b]# tree /root
/root
├── a
│ ├── a.py
│ └── b.py
├── b
│ └── a.py
└── c
3 directories, 3 files
[root@localhost b]# cp -i ../a/a.py .
cp: overwrite `./a.py'? y #y代表的是yes
如果文件很多时,而且重名文件也很多,那么你就可能需要不停的按y或yes,这样很麻烦
cp aaa/* /bbb
复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。
cp -r aaa/* /bbb
这次依然需要按Y来确认操作,但是没有忽略子目录。
cp -r -a aaa/* /bbb
依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。
\cp -r -a aaa/* /bbb
成功,没有提示按Y、传递了目录属性、没有略过目录。
rm (移除文件或目录)
语法:
rm [-fir] 文件或目录
选项与参数:
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动作
- -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
Linux 文件内容查看
Linux系统中使用以下命令来查看文件的内容:
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
- nl 显示的时候,顺道输出行号!
- more 一页一页的显示文件内容
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- head 只看头几行
- tail 只看尾巴几行
你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。
cat
由第一行开始显示文件内容
语法:
cat [-AbEnTv]
选项与参数:
- -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
- -E :将结尾的断行字节 $ 显示出来;
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
- -T :将 [tab] 按键以 ^I 显示出来;
- -v :列出一些看不出来的特殊字符
检看 /etc/issue 这个文件的内容:
[root@www ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m
tac
tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:
[root@www ~]# tac /etc/issue Kernel \r on an \m CentOS release 6.4 (Final)
nl
显示行号
语法:
nl [-bnw] 文件
选项与参数:
- -b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值); - -n :列出行号表示的方法,主要有三种:
-n ln :行号在荧幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ; - -w :行号栏位的占用的位数。
实例一:用 nl 列出 /etc/issue 的内容
[root@www ~]# nl /etc/issue 1 CentOS release 6.4 (Final) 2 Kernel \r on an \m
more
一页一页翻动
[root@www ~]# more /etc/man_db.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... --More--(28%) <== 重点在这一行喔!你的光标也会在这里等待你的命令
在 more 这个程序的运行过程中,你有几个按键可以按的:
- 空白键 (space):代表向下翻一页;
- Enter :代表向下翻『一行』;
- /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
- :f :立刻显示出档名以及目前显示的行数;
- q :代表立刻离开 more ,不再显示该文件内容。
- b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
less
一页一页翻动,以下实例输出/etc/man.config文件的内容:
[root@www ~]# less /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... : <== 这里可以等待你输入命令!
less运行时可以输入的命令有:
- 空白键 :向下翻动一页;
- [pagedown]:向下翻动一页;
- [pageup] :向上翻动一页;
- /字串 :向下搜寻『字串』的功能;
- ?字串 :向上搜寻『字串』的功能;
- n :重复前一个搜寻 (与 / 或 ? 有关!)
- N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
- q :离开 less 这个程序;
head
取出文件前面几行
语法:
head [-n number] 文件
选项与参数:
- -n :后面接数字,代表显示几行的意思
[root@www ~]# head /etc/man.config
默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:
[root@www ~]# head -n 20 /etc/man.config
tail
取出文件后面几行
语法:
tail [-n number] 文件
选项与参数:
- -n :后面接数字,代表显示几行的意思
- -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~]# tail /etc/man.config # 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样: [root@www ~]# tail -n 20 /etc/man.config