Linux 系统目录结构
以下是对这些目录的解释:
/bin:
bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt:
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux:
这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:
该目录存放一些服务启动之后需要提取的数据。
/sys:
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统种被创建。
/tmp:
这个目录是用来存放一些临时文件的。
/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
用户目录
绝对路径
从根目录开始描述的路径,也就是从 / 开始
: 与 $ 直接的部分 --> 当前shell进程所在的工作目录位置
相对路径
从当前位置开始描述的路径
. 表示当前目录
.. 表示当前目录的上一级目录
- 两个临近目录直接进行切换
cd -
zxc@zxc-computer:~$
1. 第一个zxc:当前登录的用户
2. @:英文at,在的意思
3. 第二个zxc:主机名
4. ~:当前工作目录的位置,宿主目录
5. $:表示当前登录的用户为普通用户
6. #:表示root用户
root@zxc-computer:~#
文件和目录操作
tree
以树状形式显示当前文件和目录
需要安装该软件:sudo apt-get install tree (ubuntu下)
ls
查看指定目录下所有文件和目录信息
参数
-a(all) -- 列出当前目录下所有文件内容
包括 .【当前目录】 和 ..【当前目录的父目录】
隐藏文件【以.开头】
普通文件
-R(recursive ) -- 同时列出所有子目录层
-l -- 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
cd
进入指定目录
cd + path
相对路径 -> cd ./itcast/a
绝对路径 -> cd /home/itcast
.. -> 当前目录的上一级
. -> 当前目录
进入家目录(/home/itcast)
cd
cd ~
cd /home/itcast/
pwd
查看当前所在目录
pwd -> printf working directory
创建/删除目录
创建:mkdir + 目录名
mkdir world -> 创建world目录
mkdir -p world/china/bj -> 创建多级目录加参数-p
删除:rmdir + 目录名
只能删除空目录
使用频率不高
创建/删除文件
创建:touch + 文件名
touch file.txt
cp
拷贝文件
cp file1.txt file2.txt -> 将file1.txt中的内容拷贝到file2.txt
文件不存在创建文件
文件存在,覆盖原文件
file2.txt
拷贝目录
cp -r dir1 dir2 -> 将目录dir1中的内容拷贝到dir2中
dir2 目录不存在创建目录
查看文件内容
cat
cat file.txt -> 将文件内容一次性输出到终端
如果文件太长,无法再终端全部显示
more
more + 文件名
文件内容分页显示到终端,但是只能一直向下浏览,不能回退
先关操作
回车:显示下一行
空格:显示下一页
ctrl+c 或 q:退出
less
less + 文件名
文件内容分页显示到终端,可以自由上下浏览
先关操作
回车:显示下一行
空格:显示下一页
ctrl+p 或 ↑:滚动到上一行
ctrl+n 或 ↓:滚动到下一行
q: 退出浏览
head
从文件头部开始查看前 x 行的内容
head -5 hello.c --> 查看hello.c文件前五行的内容
如果没有指定行数,默认显示前10行内容
tail
从文件尾部开始查看后 x 行的内容
tail -5 hello.c --> 查看hello.c文件后五行的内容
如果没有指定行数,默认显示后10行内容
ln
软连接(符号链接)
相当于windows下快捷方式
注意事项
创建软链接,源文件要使用绝对路径
软连接大小:源文件+路径 的总字节数
目录可以创建软链接
示例:ln -s /home/a.txt(源文件名+绝对路径) a.test(软链接的名字)
硬链接
注意事项
以文件副本的形式存在。但不占用实际空间
不允许给目录创建硬链接
硬链接只有在同一个文件系统中才能创建
硬链接能够同步更新
linux下每一个文件都对应一个Inode,创建硬链接后,两个文件的Inode是相同的
查看文件的Inode:stat a.txt
文件创建硬链接后,硬链接计数+1,删除一个硬链接,硬链接计数-1
文件或目录属性
wc
查看文件的字数、字节数、行数
wc a.txt
行数 字数 字节数 文件名
结果:7 23 120 a.txt
参数
-c: 只显示字节数
-l: 只显示行数
-w:只显示字数
od
查看二进制文件信息
- t 指定数据的显示格式
参数
1. c --> ASCII字符
2. d --> 有符号十进制数
3. f --> 浮点数
4. o --> 八进制数
5. u --> 无符号十进制数
6. x --> 十六进制数
du
查看某个目录的大小
du --> disk use
df
查看磁盘的使用情况
df --> disk free
which
查看指定命令所在的路径
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
cd 这个常用的命令竟然找不到啊!为什么呢?
cd 是bash 内建的命令!
文件权限,用户,用户组
whoami
查看当前登录用户
chmod
修改文件属性(访问权限) -- change mod
修改方式
文字设定法
chmod [who] [+|-|=] [mode] 文件名
操作对象【who】
u -- 用户(user)
g -- 同组用户(group)
o -- 其他用户(other)
a -- 所用用户(all)【默认】
操作符【+-=】
+ -- 添加权限
- -- 取消权限
= -- 赋予给定权限并取消其他权限
权限【mode】
r -- 读
w -- 写
x -- 执行
例:chmod u + wx file.txt
数字设定法
数字表示的含义
0 -- 没有权限(-)
1 -- 执行权限(x)
2 -- 写权限(w)
4 -- 读权限(r)
操作符【+-=】
+ -- 添加权限
- -- 取消权限
= -- 赋予给定权限并取消其他权限 (默认为=)
例:chmod 777 file.txt
chown
将指定文件的拥有者改为指定的用户或组 -- change owner
用法
chown + 文件所属用户 + 文件或目录名
sudo chown nobody text.txt
chown + 文件所属用户:文件所属组 + 文件或目录名
sudo chown nobody:nogroup text.txt
chgrp
改变文件或目录的所属群组
用法
chgrp + 用户组 + 文件或目录名
sudo chgrp nogroup text.txt
查找与检索
find
按文件名查询:-name
find + 路径 + -name + 文件名
find /home -name a.txt
按文件大小查询:-size
find + 路径 + -size + 范围
范围
大于:+表示 -- +100k
小于:-表示 -- -100k
等于: 不需要添加符号 -- 100k
大小
M 必须大写
k 必须小写
例子:
等于100k的文件: find ~/ -size 100k
大于100k的文件: find ~/ -size +100k
大于50k, 小于100k的文件: find ~/ -size +50k -size -100k
按文件类型查询:-type
find + 路径 + -type + 类型
类型
1. 普通文件类型用 f 表示而不是 -
2. d -> 目录
3. l -> 符号链接
4. b -> 块设备文件
5. c -> 字符设备文件
6. s -> socket文件,网络套接字
7. p -> 管道
find /home -type d
grep
按文件内容查找
参数:-r
grep -r + “查找的关键字” + 路径
grep -r "main void" /home/itcast
软件的安装和卸载
在线安装
apt-get
安装:sudo apt-get install tree -- 在线下载安装
移除:sudo apt-get remove tree
更新:sudo apt-get update -- 更新软件列表
清理所有软件安装包: sudo apt-get clean
实际清理的是: /var/cache/apt/archives 目录下的 .deb 文件
aptitude
安装:sudo aptitude install tree
重新安装:sudo aptitude reinstall tree
更新:sudo apt-get update
移除:sudo aptitude remove tree
显示状态:sudo aptitude show tree
deb包安装
安装
sudo dpkg -i xxx.deb
删除
sudo dpkg -r xxx
源码安装
1. 解压缩源代码包
2. 进入到安装目录:cd dir
3. 检测文件是否缺失,创建Makefile,检测编译环境: ./configure
4. 编译源码,生成库和可执行程序:make
5. 把库和可执行程序,安装到系统目录下:sudo make install
6. 删除和卸载软件:sudo make distclean
7. 上述安装步骤并不是绝对的,应该先查看附带的 README 文件
软件源
磁盘管理
挂载:mount
系统默认挂载目录:/media
手动挂载目录:/mnt
挂载方式:mount + 设备名 + 挂载目录
设备名
检测设备名称: sudo fdisk -l
磁盘命名规则
挂载目录
默认手动挂载到 /mnt
挂载到/mnt以外的目录 -- 挂载成功后会遮蔽掉目录中原来的东西,卸载设备之后才能看到目录中原来的数据
卸载:umount
卸载的时候,用户的当前位置一定不能再 /mnt(/media)或者其子目录下,否则无法卸载
sudo umount /mnt
磁盘命名
硬盘1:sda
主分区
最多允许有4个
主分区1:sda1
主分区2:sda2
主分区3:sda3
主分区4:sda4
扩展分区
第一个逻辑分区从sda5开始
逻辑分区1:sda5
逻辑分区2:sda6
逻辑分区3:sda7
。。。。。。
硬盘2:sdb
硬盘3:sdc
硬盘4:sdd
磁盘设备种类
sd --> SCSI Device
hd --> Hard Disk 硬盘
fd --> Floppy Disk 软盘