ubuntu的目录结构
本文介绍 Ubuntu 操作系统的文件系统目录结构,参考 Ubuntu 的官方文档:source URL
Ubuntu(像所有类UNIX系统一样)在分层树中组织文件,其中的关系就像父母和孩子一样。目录可以包含其他目录以及常规文件,它们是树的“叶子”。树的任何元素都可以通过路径名引用;绝对路径以字符 / (标识根目录,其中包含所有其他目录和文件)开头,然后列出必须遍历以到达该元素的每个子目录,每个子目录用 / 符号分隔。相对路径名是不以 / 开头的名称;在这种情况下,从给定点开始遍历目录树,该点根据上下文而变化,称为当前目录。在每个目录中,都有两个名为的特殊目录。. 和 .. ,分别指向目录本身及其父目录。
所有文件和目录都具有公共根的事实意味着,即使系统上存在多个不同的存储设备,一旦将它们安装到所需位置,它们都被视为树中某处的目录。文件权限是文件组织系统的另一个重要部分:它们被叠加到目录结构并为树的每个元素分配权限,最终由谁可以访问以及如何访问。
例子(在 Ubuntu 系统中):
- 一个绝对路径的名字代表一个普通文件或者可执行文件。
- /usr/bin/test
- 一个绝对路径代表一个目录,而不是一个普通文件。
- /usr/bin/
- 一个相对路径,只有当当前目录是 /usr/ 时,代表 /usr/bin/test。
- bin/test
- 一个相对路径,只有当当前目录在 /usr/ 的下一级子目录,如:/usr/share/ 时,代表 /usr/bin/test。
- ../bin/test
- 一个快捷的方式,可以使用 ~ 指向用户的家目录。
- ~/Desktop/
- 文件路径可以包含大多数的字符,但是一些特殊的字符,例如空格,要想使用,就得使用引号将文件路径引起来,或者使用 \ 作为转义字符。
- "~/Examples/Experience ubuntu.ogg" 或者 ~/Examples/Experience\ ubuntu.ogg
1. 主要目录
Ubuntu 标准的目录结构是符合文件系统层次标准的,可以去官网查看更多详细信息,由于本文介绍的是 Ubuntu 的目录结构,就先不介绍它了,以后的文章会详细介绍,现在你可以通过这个链接查看:文件系统层次标准
下面列举一些在 Ubuntu 系统中出现的文件目录。
- /bin
- 这是存放常用的终端命令的目录,例如:ls、mount、rm 等等。
- /boot
- 存放系统启动所需的文件,包括 linux kernel,一个随机存储磁盘镜像和 Bootloader 的配置文件。
- /dev
- 这个目录存放所有的设备文件,这些不是常规文件,而是指系统上的各种硬件设备,包括硬盘驱动器。
- /etc
- 存放系统的全局配置文件,这里面的配置文件会影响系统所有用户的系统环境。
- /home
- 用户的家目录,每个用户都有自己的家目录。
- /lib
- 存放非常重要的动态库和内核模块。
- /media
- 作为外部设备的一个挂载点,比如硬盘或者可移动设备(U盘、DVD、CD)。
- /mnt
- 和 /media 一样,也是一个挂载点,但是专用于挂载临时的设备,例如网络文件系统。
- /opt
- 用于安装系统额外的软件,这里安装的软件是手动安装的,不受 Ubuntu 软件管理包的管理。如Google
- /proc
- 一个虚拟文件系统,为内核提供向进程发送信息的机制。
- /root
- root 用户的家目录,不在 /home/ 中,即使 /home/ 不可用,也允许引导系统。
- /run
- 在引导过程的早期可用的tmpfs(临时文件系统),其中存储了临时运行时数据。此目录下的文件将在引导过程开始时删除或截断。
- /sbin
- 包含通常只应由超级用户使用的重要管理命令。
- /srv
- 包含 HTTP(/srv/www/)或 FTP 等服务的数据目录。
- /sys
- 可以访问的虚拟文件系统,用于设置或获取有关内核系统视图的信息。
- /tmp
- 应用程序使用的临时文件的位置。
- /usr
- 包含大多数用户实用程序和应用程序,并部分复制根目录结构,包括例如 /usr/bin/ 和 /usr/lib。
- /var
- 致力于可变数据,例如日志,数据库,网站和临时脱机(电子邮件等)文件,这些文件从一次启动到下一次启动。它包含的一个值得注意的目录是 /var/log,其中保存了系统日志文件。
查看系统和配置
查看内核/操作系统
uname -a
ubuntu 版本
cat /proc/version
查看系统的版本:
lsb_release -a
查看CPU信息
cat /proc/cpuinfo
查看所有的环境变量
env
查看内存使用
free -m #查看内存使用
grep MemTotal /proc/meminfo #查看内存总量
grep MemFree /proc/meminfo #查看空闲内存量
uptime #查看系统运行时间、用户数、负载
查看个磁盘分区的使用情况
df -h
查看所有网络接口属性
ifconfig
查看防火墙设置
sudo iptables -L
查看路由表
route -n
查看所有监听端口
netstat -lntp
查看已经建立的连接
netstat -antp
查看进程
ps -ef #查看所有进程
top #实时显示进程状态
查看线程
who查看谁在用
查看用户下的进程
ps -u (用户名)
杀死进程
kill pid 或者 kill -9 pid(系统拒绝杀死进程,这种情况可以使用 kill -9 pid命令来杀死进程(强制终结程序))
查看用户相关信息
who #查看当前系统中有哪些人登录
whoami #查看我是谁
w #查看活动用户
id username #查看指定用户信息
last #查看用户登录日志
cut -d: -f 1 /etc/passwd #查看系统所有用户
cut -d: -f 1 /etc/group #查看系统所有组
crontab -l #查看当前用户的计划任务
服务相关
chkconfig --list #列出所有系统服务(centos)
sudo initctl list #列出所有系统服务(ubuntu
怎么实时查看系统资源的使用情况
在终端输入一下命令:
top
显示解释:
top命令的第一行:
top - 21:31:26 up 15:16, 5 users, load average: 0.61, 0.82, 0.75
依次对应:系统当前时间 up 系统到目前为止i运行的时间, 当前登陆系统的用户数量, load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况。
这行信息与命令uptime显示的信息相同
注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
top命令的第二行:
Tasks: 240 total, 2 running, 238 sleeping, 0 stopped, 0 zombie
依次对应:tasks表示任务(进程),240 total则表示现在有240个进程,其中处于运行中的有2个,238个在休眠(挂起),stopped状态即停止的进程数为0,zombie状态即僵尸的进程数为0个。
top命令的第三行,cpu状态:
%Cpu(s): 13.7 us, 1.5 sy, 0.0 ni, 84.2 id, 0.6 wa, 0.0 hi, 0.0 si, 0.0 st
依次对应:
us:user 用户空间占用cpu的百分比
sy:system 内核空间占用cpu的百分比
ni:niced 改变过优先级的进程占用cpu的百分比
空闲cpu百分比
wa:IO wait IO等待占用cpu的百分比
hi:Hardware IRQ 硬中断 占用cpu的百分比
si:software 软中断 占用cpu的百分比
st:被hypervisor偷去的时间
top命令第四行,内存状态:
KiB Mem : 3775264 total, 250100 free, 2495300 used, 1029864 buff/cache
依次对应:物理内存总量(3.7G),空闲内存总量(2.5G),使用中的内存总量(2.4G),缓冲内存量
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心
top命令第五行,swap交换分区:
KiB Swap: 4064252 total, 2789544 free, 1274708 used. 527664 avail Mem
依次对应:交换区总量(4G),空闲交换区总量(2.7G),使用的交换区总量(1.2G),可用交换取总量
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
top命令第六行是空行
top命令第七行,各进程的监控:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
依次对应:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
怎么实时查看GPU的使用情况
静态查看 nvidia-smi
动态查看 watch -n1 nvidia-smi
//-n 后面的参数单位为 秒。表示每秒钟刷新一次 gpu 使用情况
显示内容解释:
Driver Version:表示驱动的版本
CUDA Version:表示需要安装的最高cuda版本
GPU:GPU 编号;
Name:GPU 型号;
Persistence-M:持续模式的状态。持续模式虽然耗能大,但是在新的GPU应用启动时,花费的时间更少,这里显示的是off的状态;
Bus-Id:涉及GPU总线的东西,domain:bus:device.function;
Disp.A:Display Active,表示GPU的显示是否初始化;
Fan:风扇转速,从0到100%之间变动;
Temp:温度,单位是摄氏度;
Perf:性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能(即 GPU 未工作时为P0,达到最大工作限度时为P12)。
Pwr:Usage/Cap:能耗;
Memory Usage:显存使用率;
Volatile GPU-Util:浮动的GPU利用率;
Uncorr. ECC:Error Correcting Code,错误检查与纠正;
Compute M:compute mode,计算模式。
网络配置
interface配置网址
自动获取IP(DHCP)
1.vi /etc/network/interfaces
2.内容修改为:
auto eth0 //设置eth0的IP及其他信息 此处eth0更换为,你 ifconfig 查看到的 名称 如:ens33
iface eth0 inet dhcp
3.重启网卡
sudo /etc/init.d/networking restart 或 service networking restart
静态设定IP
1.vi /etc/network/interface
2.修改之前interface文件的内容如下:
auto lo
iface lo inet loopback
我们需要将其修改为:
auto lo
iface lo inet loopback //系统配置部分,本地回环网络,不管是常规配置网络还是network-manager配置网络都需要保留。
auto eth0 //设置eth0的IP及其他信息 此处eth0更换为,你 ifconfig 查看到的 名称 如:ens33
iface eth0 inet static //设置为静态IP
address 12.1.1.10 //设置IP地址
gateway 12.1.1.2 //设置网关
netmask 255.255.255.0 //设置子网掩码
broadcast 12.1.1.255 //设置广播地址
各种配置的含义:
1.IP地址:电脑daoIP,可dao以说版是网络上的电脑识别号,有权IP的电脑才能上网,方便大家的交流和寻找作用。
2.子网掩码:互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。
IP地址的网络号和主机号各是多少位呢?如果不指定,就不知道哪些位是网络号、哪些是主机号,这就需要通过子网掩码来实现。
子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
也就是说 子网掩码 是用来一个集体网络下的 个体区号,有了它,网络就像河流分支一样,那么想在网络中找一个IP就更简单的了。。
-
A类网址的子网掩码默认为:255.0.0.0
-
B类网址的子网掩码默认为:255.255.0.0
-
C类网址的子网掩码默认为:255.255.255.0
3.默认网关:一个网络就必须有网关,也就是internet网进入一个集体、或个体网络的最先接连者,有它我们的信息将能更好的得到规划。
4.广播地址
广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址。
在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。
3.设置DSN
vi /etc/resolv.conf
4.重启网络
sudo /etc/init.d/networking restart 或 service network-manager restart 或 service networking restart
network-manager配置网络
这种方法一般是ubuntu桌面时配置
注意:
Linux里面有两套管理网络连接的方案:
(1)/etc/network/interfaces(/etc/init.d/networking)
(2)Network-Manager
两套方案是冲突的,不能同时共存。
第一个方案适用于没有X的环境,如:服务器;或者那些完全不需要改动连接的场合。
第二套方案使用于有桌面的环境,特别是笔记本,搬来搬去,网络连接情况随时会变的。
他们两个为了避免冲突,又能共享配置,就有了下面的解决方案:
1、当Network-Manager发现/etc/network/interfaces被改动的时候,则关闭自己(显示为未托管),除非managed设置成真。
2、当managed设置成真时,/etc/network/interfaces,则不生效。
如果想在命令行下配置网络,可能需要关闭NetworkManager服务,打开network服务,以root权限执行
chkconfig --level 2345 NetworkManager off
chkconfig --level 2345 network on
service NetworkManager stop
service network start
开机时停用NetworkManager:#chkconfig --level 345 NetworkManager off
开机时启用network:#chkconfig --level 345 network on
立即停用NetworkManager:#/etc/init.d/NetworkManager stop立即启用network:
#/etc/init.d/network start
问题:
每次重启服务器后需要service network-manager restart才能上网:
解决方法:
sudo systemctl enable network-manager
常见快捷操作
关键/重启
reboot
shutdown
图形化登录界面进入命令行
ctrl+alt+F1
常用的命令
source
source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
用法:
source filename 或 . filename
source命令除了上述的用途之外,还有一个另外一个用途。在对编译系统核心时常常需要输入一长串的命令,如:
make mrproper
make menuconfig
make dep
make clean
make bzImage
…………
如果把这些命令做成一个文件,让它自动顺序执行,对于需要多次反复编译系统核心的用户来说会很方便,而用source命令就可以做到这一点,它的作用就是把一个文件的内容当成shell来执行,先在Linux的源代码目录下(如/usr/src/linux-2.4.20)建立一个文件,如make_command,在其中输入一下内容:
make mrproper &&
make menuconfig &&
make dep &&
make clean &&
make bzImage &&
make modules &&
make modules_install &&
cp arch/i386/boot/bzImage /boot/vmlinuz_new &&
cp System.map /boot &&
vi /etc/lilo.conf &&
lilo -v
文件建立好之后,每次编译核心的时候,只需要在/usr/src/linux-2.4.20下输入:
source make_command
即可,如果你用的不是lilo来引导系统,可以把最后两行去掉,配置自己的引导程序来引导内核。
顺便补充一点,&&命令表示顺序执行由它连接的命令,但是只有它之前的命令成功执行完成了之后才可以继续执行它后面的命令。
疑问:
1.linux中环境变量.bashrc和profile的区别:
- 1.
/etc/profile
- 用来设置系统环境参数,比如
$PATH
. 这里面的环境变量是对系统内所有用户生效的。 - 2.
/etc/bashrc
- 这个文件设置系统bash shell相关的东西,对系统内所有用户生效。只要用户运行bash命令,那么这里面的东西就在起作用。
- 3.
~/.bash_profile
- 用来设置一些环境变量,功能和
/etc/profile
类似,但是这个是针对用户来设定的,也就是说,你在/home/user1/.bash_profile
中设定了环境变量,那么这个环境变量只针对 user1 这个用户生效. - 4.
~/.bashrc
- 作用类似于
/etc/bashrc
, 只是针对用户自己而言,不对其他用户生效。 - 另外
/etc/profile
中设定的变量(全局)的可以作用于任何用
户,而~/.bashrc
等中设定的变量(局部)只能继承/etc/profile
中的变量,他们是”父子”关系.
注!
~/.bash_profile
是交互式、login 方式进入 bash
运行的,意思是只有用户登录时才会生效。
~/.bashrc
是交互式 non-login 方式进入bash
运行的,用户不一定登录,只要以该用户身份运行命令行就会读取该文件。