文章目录
Linux系统目录结构
以下目录全部位于根目录 /
下面
系统启动必须:
/boot
:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。/etc
:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。/lib
:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。/sys
: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中
指令集合:
/bin
:存放着最常用的程序和指令/sbin
:只有系统管理员能使用的程序和指令。
外部文件管理:
/dev
:Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。/media
:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。/mnt
:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
临时文件:
/run
:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。/lost+found
:一般情况下为空的,系统非法关机后,这里就存放一些文件。/tmp
:这个目录是用来存放一些临时文件的。
账户:
/root
:系统管理员的用户主目录。/home
:用户的主目录,以用户的账号命名的。/usr
:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。/usr/bin
:系统用户使用的应用程序与指令。/usr/sbin
:超级用户使用的比较高级的管理程序和系统守护程序。/usr/src
:内核源代码默认的放置目录。
运行过程中要用:
/var
:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。/proc
:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。
扩展用的:
/opt
:默认是空的,我们安装额外软件可以放在这个里面。/srv
:存放服务启动后需要提取的数据(不用服务器就是空)
Linux文件与目录管理
在Linux文件系统中有两个特殊的目录,
一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示;
另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 .. 来表示。
> . :代表当前的目录,也可以使用 ./ 来表示;
> .. :代表上一层目录,也可以 ../ 来代表。
关于根目录和家目录
Linux的目录结构为树状结构,最顶级的目录为根目录
/
。扫描二维码关注公众号,回复: 14701600 查看本文章
cd /
: 从任何用户执行该命令都会进入同一个目录,即所有用户共享
/home
: 家目录(不如叫用户列表目录)
cd /home
:会显示这台机器的用户
我现在的用户名就叫ashlynx
~
: 当前用户的家目录
cd ~
等价于cd /home/ashlynx
:会进入当前用户的家目录(一般包括桌面,自己在里面的文件)
root用户的家目录不在home里面,而在/root
在root下登录:
cd ~
等价于cd /root
普通用户改成超级用户,仍然在家目录下面,不会变到
/root
下面
其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。
- 绝对路径:路径的写法,由根目录
/
写起,例如:/usr/share/doc
这个目录。 - 相对路径:路径的写法,不是由
/
写起,例如由/usr/share/doc
要到/usr/share/man
底下时,可以写成:cd ../man
这就是相对路径的写法。
处理目录的常用命令
ls
(英文全拼:list files): 列出目录及文件名cd
(英文全拼:change directory):切换目录pwd
(英文全拼:print work directory):显示目前的目录mkdir
(英文全拼:make directory):创建一个新的目录rmdir
(英文全拼:remove directory):删除一个空的目录cp
(英文全拼:copy file): 复制文件或目录rm
(英文全拼:remove): 删除文件或目录mv
(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称- man [命令] 来查看各个命令的使用文档,如 :man cp。
ls(列出目录)
选项与参数:
-a
:全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)-d
:仅列出目录本身,而不是列出目录内的文件数据(常用)-l
:长数据串列出,包含文件的属性与权限等等数据;(常用)-i
:可以查看索引节点号
将家目录下的所有文件列出来(含属性与隐藏档) ls -al ~
cd(切换目录)
cd [相对路径或绝对路径]
- 使用绝对路径切换到 runoob 目录
cd/root/runoob/
- 使用相对路径切换到 runoob 目录
cd ./runoob/
- 表示回到自己的家目录
cd ~
- 表示去到目前的上一级目录
cd ..
pwd (显示目前所在的目录)
选项与参数:
-P
: 显示出确实的路径,而非使用连结 (link) 路径。
/bin
在根目录 /
下面,进去之后 -P
查路径发现是/usr/bin
,/usr
也在根目录下面
所以就是,//bin
是连接档,连接到/usr/bin
,这个才是正确的完整路径
ln(生成链接文件)
ln -s [原文件] [目标文件]
-s 创建软链接 //其实类似于创建一个快捷方式(常用)
不加 -s
就生成硬链接
关于Linux链接
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。
硬连接
- 硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
ls -i
:可以查看索引节点号
- 硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接
- 另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有点类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
- 软链接产生的文件类型是
l
,权限是三个rwx
。大小很小。类似快捷方式,便于管理。
mkdir (创建新目录)
这是创建新的文件夹
mkdir [-mp] 目录名称
选项与参数:
-m
:配置权限-p
:帮助你直接将所需要的目录(包含上一级目录)递归创建起来!就是自行帮你创建多层目录
mkdir -p test1/test2/test3/test4
touch(创建新文件)
touch 文件名称
这个文件可以用vim进行编辑,文件夹是不能编辑的
不加路径就是在当前目录创建文件。
find(搜索文件)
find [搜索范围] [匹配条件]
$ find /etc -name init
//在目录/etc中查找文件init
$ find /etc -name *init*
//使用通配符,查找文件名包含init的文件
-iname 不区分大小写
$ find / -size +204800
//在根目录下查找大于100MB的文件
// +n 大于 -n 小于 n等于
$ find /home -user ashlynx
//在家目录下查找所有者为ashlynx的文件
-group 根据所属组查找
-
-type
根据文件类型查找f
文件d
目录l
软链接文件
locate(文件资料库中查找文件)
locate
查找速度快,因为不是在硬盘查找
locate 文件名
updatedb
:更新文件资料库
但是/tmp
里的文件不收录在文件资料库
CentOS 7有这个命令,如果某些发行版没有,需要用yum命令安装
which(查找命令)
which 命令名
还可以看见命令的别名
cp (复制文件或目录)
cp [-adfilprsu] 来源档(source) 目标档(destination)
选项与参数:
-a
:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)-d
:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;-f
:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;-i
:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)-l
:进行硬式连结(hard link)的连结档创建,而非复制文件本身;-p
:连同文件的属性一起复制过去,而非使用默认属性(备份常用);-r
:递归持续复制,用於目录的复制行为;(常用)-s
:复制成为符号连结档 (symbolic link),亦即『捷径』文件;-u
:若 destination 比 source 旧才升级 destination !
mv (移动文件与目录,或修改名称)
mv [-fiu] source(old name) destination(new name)
选项与参数:
-f
:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;-i
:若目标文件 (destination) 已经存在时,就会询问是否覆盖!-u
:若目标文件已经存在,且 source 比较新,才会升级 (update)
rm (移除文件或目录)
rm [-fir] 文件或目录
选项与参数:
-f
:就是 force 的意思,忽略不存在的文件,不会出现警告信息;-i
:互动模式,在删除前会询问使用者是否动作-r
:递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
删除目录必须加 -r
,否则直接报错不让删
Linux文件内容查看
cat
由第一行开始显示文件内容tac
从最后一行开始显示,可以看出 tac 是 cat 的倒着写!nl
显示的时候,顺道输出行号!more
一页一页的显示文件内容less
与 more 类似,但是比 more 更好的是,他可以往前翻页!head
只看头几行tail
只看尾巴几行
grep(在文件内容中搜寻字串匹配的行并输出)
grep -iv [指定字串] [文件]
-i
:不区分大小写-v
:排除指定字串- 比如带
#
的都是注释,不想看注释就可以把带#的全部去掉
- 比如带
# grep mysql /root/install.log
man(帮助命令)
man [命令或配置文件]
$ man serviecs
//查看配置文件services的帮助信息,直接写文件名,不需要绝对路径
help(查看shell内置命令的帮助信息)
help [命令]
ls --help
:也能查看ls
的帮助信息
压缩解压命令
gzip(压缩文件)
gzip [文件]
压缩后文件格式: .gz
对应解压缩:
gunzip xx.gz
或
gzip -d xx.gz
只能压缩文件,(且不保留源文件),不能压缩目录
tar(打包目录)
tar 选项[-zcf] [压缩后文件名] [目录]
-c
:打包-v
:显示详细信息-f
:指定文件名-z
:打包同时压缩
解压缩:
-x
:解包-v
:显示详细信息-f
:指定解压文件-z
:解压缩
压缩后文件格式:.tar.gz
$ tar -cf japan.tar japan
//将japan打包成japan.tar(没有压缩,可以用gzip压缩成japan.tar.gz)
$ tar -zcf japan.tar.gz japan
//打包的同时进行压缩成japan.tar.gz
$ tar -zxvf japan.tar.gz
//解包,不加v就没有详细信息
zip(Windows也支持的格式)
zip 选项[-r] [压缩后文件名] [文件或目录]
-r :压缩目录
压缩后文件格式:.zip
解压缩:unzip
压缩比没有gzip好,没有gzip用的多
但是可以压缩文件也可以压缩目录,并且可以保留源文件
bzip2(可保留源文件的压缩方式)
bzip2 选项[-k] [文件]
-k:产生压缩文件后保留源文件
压缩后文件格式:.bz2
解压缩:
bunzip2
bzip2 -d
gzip不保留源文件
压缩比惊人,压缩比较大的文件时很推荐。可以和tar
一起用
tar -cjf //打包并压缩
tar -xjf //解包解压缩
Linux文件基本属性
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:
- chown (change ownerp) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
从左至右用 0-9 这些数字来表示。
第 0 位确定文件类型,
- d 则是目录
- - 则是文件
- l 则表示为链接文档(link file) (软链接)
- b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置)
- c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;
第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。
Linux文件属主和属组
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
更改文件属性
chgrp [-R] 属组名 文件名
-R: 递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
进入 /root 目录(~)将install.log的拥有者改为bin这个账号:
[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
将install.log的拥有者与群组改回为root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
文件的权限字符为: -rwxrwxrwx ,(前面有图,第一个 - 是文件类型) 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
- r:4
- w:2
- x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx— 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= — = 0+0+0 = 0
所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:
chmod [-R] xyz 文件或目录
- xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
- -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
符号类型改变文件权限
还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:
- user:用户
- group:组
- others:其他
用 u, g, o 来代表三种身份的权限
a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:
chmod | u | +(加入) | r | 文件或目录 |
---|---|---|---|---|
g | -(除去) | r | ||
o | =(设定) | x | ||
a |
如果我们需要将文件权限设置为 -rwxr-xr– ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
# touch test1 // 创建 test1 文件
# ls -al test1 // 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
# chmod u=rwx,g=rx,o=r test1 // 修改 test1 权限
# ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1
而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
# chmod a-x test1
# ls -al test1
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1