linux 日常积累
目录结构
目录 | 意义 |
---|---|
/ | 根目录 |
| | |
|-boot/ | 启动文件,所有与系统有关的文件都保存在这里 |
|grub/ | Grub 引导器相关的文件 |
| | |
|-dev/ | 设备文件 |
|-proc/ | 内核与进程镜像 |
| | |
|mnt/ | 临时挂载 |
media/ | 挂载媒体设备 |
| | |
root/ | root用户 的 $HOME 目录 |
|-home/ | |
| |-user/ | 普通用户 的 $HOME 目录 |
| …/ | |
| | |
|-bin/ | 系统程序 |
|-abin/ | 管理员系统程序 |
|-lib/ | 刺痛程序库文件 |
|-etc/ | 系统程序和大部分应用程序的全局配置文件 |
| |-init.d/ | SystemV 风格的启动脚本 |
| |-rcX.d/ | SystemV 启动脚本的链接,定义运行级别 |
| |-rc.d/ | BSD 风格的启动脚本 |
| |-rc.xxx | BSD 风格启动脚本,定义运行级别 |
| |-network/ | 网络配置文件 |
| |-X11/ | 图形界面配置文件 |
| | |
|-usr/ | |
| |-bin/ | 应用程序 |
| |-abin/ | 管理员应用程序 |
| |-lib/ | 应用程序库文件 |
| |-share/ | 应用程序资源文件 |
| |-src/ | 应用程序源代码 |
| |-local/ | |
| | |-soft/ | 用户程序 |
| | …/ | 通常使用单独文件夹 |
| |-X11R6/ | 图形界面系统 |
| | |
|-var/ | 动态数据 |
| | |
|-temp/ | 临时文件 |
路径
绝对路径
绝对路径的起始点为根目录/, 例如/usr/bin/cp就是一个绝对路径。
相对路径
相对路径的起始点为当前路径… 假如用户当前目录为/home/zhengdongqi/,那么同样的文件cp,其实对路径为 …/…/usr/bin/cp。
相对路径和绝对路径在使用上各有差异,在使用时需要考虑实际的情况选择。
远程路径
在很多时候,我们会需要访问本机之外的资源,这个时候远程路径就有了用武之地了。
远程路径的一般表示方法为:协议://用户名:密码@位置/路径:端口
远程路径根据应用的不同,具体表示方法和所需要的参数都不太一致,从以上两个远程就可以看出。
软件
在Linux中, 软件并没有像注册表这样的概念
注册表:是window中的一个重要的数据库,用于存储系统应用程序的设置信息。
安装软件,理论上只需要拷贝相关文件,并执行其主程序就可以
通常,一个软件包含的内容会分别被拷贝到同级别的bin lib share 和/etc目录下
bin 存放程序的可执行文件,在系统环境变量中将改路径添加进去,就可以直接执行程序
lib 库文件集中存放,方便共享
share 存放程序需要的其它资源
/etc 配置文件存放路径,大部分的程序配置文件都可以在这个路径下找到。
配置方式
在Linux中,所有的配置操作都可以使用纯文本的配置文件来配置,为了方便使用,有很多程序都会提供命令接口供用户更加便捷来个性化的配置自己的系统。
/etc 基本上都是配置文件
当然也可以直接用ifconfig命令来直接修改网络配置
ifconfig etch 172.17.211.123
这条命令把设备eth0 的地址更新
隐藏文件
.. 表示家目录
. 表示此目录
配置文件
- 系统初始化
/etc/inittab 运行级别、控制台数量 /etc/timezone 时区 /etc/inetd.conf 超级进程
- 文件系统
/etc/fstab 开机时挂载的文件系统 /etc/mtab 当前挂载的文件系统
- 用户系统
/etc/passwd 用户信息 /etc/shadow 用户密码 /etc/group 群组信息 /etc/gshadow 群组密码 /etc/sudoers Sudoer 列表
- shell
/etc/shell 可用于shell列表 /etc/inputrc Readline控件设定 /etc/profile 用户首选项 /etc/bashrc bash 配置文件
- 系统环境
/etc/environment 环境变量 /etc/updatedb.conf 文件检索数据库配置信息 /etc/issue 发行信息 /etc/issue.net /etc/screenrc 屏幕设定
- 网络
/etc/iftab 网卡MAC地址绑定 /etc/hosts 主机列表 /etc/hostname 主机名 /etc/resolv.conf 域名解析服务器地址 /etc/network/interfaces 网卡配置文件
- 用户配置文件
.bash_rc .bash_profile .bash_logout
文件类型
使用ll命令可以查看当前路径下所有文件的详细信息
该命令主要输出了七列内容,分别为:权限,文件数,所属用户,所属群组,文件大小,常见日期,文件名。
第一列权限,主要可以分为以下四个部分:文件类型,所属用户权限,所属组权限,其它用户权限。
以刚才执行的结果为例
文件类型 | 所属用户权限 | 所属群组权限 | 其它用户权限 |
---|---|---|---|
d | rwx | r-x | r-x |
- 第一部分文件类型 d,代表这个文件是一个目录(directory),目录是一种特殊文件;
- 第二部分所属用户权限为 rwx, 代表该文件拥有者拥有可读(read), 可写(write),可执行(execute)的权限;
- 第三部分所属组权限为r-x,代表该文件拥有者在一个群组的用户具有可读,可执行的权限,在这里-顶替了w的位置,代表没有写权限;
- 第四部分其它用户权限同样为可读,可执行。
Linux中的文件类型出来目录d之外,总共有7种文件类型,在这里我们做一个简要的了解;
- regular file 普通文件
- d directory 目录
- l link 链接
- b block 块设备 存储数据以供系统存取的接口设备,也就是硬盘
- c character 字符设备 串口设备, 键盘, 鼠标等
- s socket 套接字
- p pipe 管道
对于普通文件又可以分为以下三种:
纯文本文件
纯文本文件使用ASCII编码,这是Linux系统中最常见的一种文件类型,之所以成为纯文本文件,是因为这种类型的文件是我们可以直接读取的的内容,在Linux,几乎所有的配置文件都属于这种类型的。
二进制文件
二进制文件是系统中的可执行文件(不包括脚本),计算机只能认识并执行二进制文件,二进制文件不能使用 cat 等命令直接读出。
数据格式的文件
在一些程序运行过程中,需要读取待定格式的文件,这种文件被称为数据文件(data.file),这种文件通常也不能使用cat命令读出。但是可以使用last读取其中命令。
文件权限
在上节中我们已经提到了文件的权限包含3组(u 用户,g 群组, o 其它用户),每一组又包含三组具体的权限(r 读,w 写, x执行)。
对于文件权限,我们也可以用以下的方式来表示:
r | w | x | r | w | x | r | w | x |
---|---|---|---|---|---|---|---|---|
(2^2)4 | (2^1)2 | (2^0)1 | (2^2)4 | (2^1)2 | (2^0)1 | (2^2)4 | (2^1)2 | (2^0)1 |
也就是权限的每一组都由3个十进制的数字表示,该组的权限就可以简单的用着3个十进制的数字相加得到。
一个权限为 rwxr-xr-x 的文件下,则它的权限可以使用755来表示。
与文件权限有关的命令
chmod # 更改文件权限
chown # 更改文件所属用户
chgrp # 更改文件所属组
chmod 的用法
chmod a+x file # 给file文件都赋予执行的权限
chmod o-x file # 将file文件o减去执行权限
chmod 755 file # 设置file文件的权限为 rwxr-xr-x
chmod u=rwx, go=rx file # 设置file文件的权限为 rwxr-xr-x
chown 的用法
chown zhengdongqi:haizei file # 修改file的所属用户是zhengdongqi,所属组为haizei
chown -R zhengdongqi:haizei directory # 修改目录directory及目录下的所有文件的所属用户是zhengdongqi,所属组为haizei
chown zhengdongqi file # 修改file的所属用户为zhengdongqi
chgrp 的用法
chgrp root file # 修改file所属的组为root
用户权限
Linux有两种用户,分别是 root 和普通用户
- 超级管理员:root
root 拥有系统的完全控制权,所以在使用Linux系统的时候,需要慎重使用root用户,更多的自由与权限同样也意味着更大的风险
实际上,有很多Linux系统在默认的情况下是不开放root用户的,这是出于安全方面的考虑。
- 普通用户
普通用户拥有的权限就没有 root 用户那么大了,他只能做系统允许做的事,普通用户可以执行大部分的命令,但是root专有的命令却执行不了。
大小端模式
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
这两种模式,泥瓦匠记忆宫殿:“小端低低”。这样就知道小端的模式,反之大端的模式
Linux帮助系统
在学习使用Linux的时候, 我们会遇到很多以前没有用过的命令和功能,这个时候最好的解决办法就是求助于man。
man 的使用方法很简单,例如查看 ls 的帮助手册,可以直接使用命令 man ls 即可产看 ls 的命令帮助。
代号 | 代表的含义 | 举例 |
---|---|---|
1 | 用户在shell环境下可以操作的命令或可执行文件 | man 1 ls |
2 | 系统内核可调用的函数和工具 | man 2 reboot |
3 | 一些常用函数与函数库,大部分C的函数库 | man 3 readdir |
4 | 设备文件的说明,通常是在 /dec 下的设备 | man 4 null |
5 | 配置文件或者某些文件的格式 | man 5 interfaces |
6 | 游戏 | man 6 lol |
7 | 惯例与协议等,例如Linux文件系统,网络协议等 | man 7 tcp |
8 | 系统管理员可用的命令 | man 8 reboot |
9 | 跟kernel有关的文件 | |
o | 旧文档 | |
n | 新文档 | |
I | 本地文档 |
在man手册中,我们可以用到的快捷键如下:
快捷键 | 功能 | 快捷键 | 功能 |
---|---|---|---|
Ctrl+f (forward) | 向下翻一页 | Ctrl+d (down) | 向下翻半页 |
Ctrl+b(backward) | 向上翻一页 | Ctrl+u (up) | 向上翻半页 |
/ | 查找 | q (quit) | 退出 |
bash通配符
通配符
-
?
代表单个任意字符
-
代表任意几个任意字符
除了*和?这两个通配符之外,Linux中还有下面几种通配符
通配符 | 含义 | 举例 |
---|---|---|
[list] | 匹配list中任意单一字符 | a[xyz]b a与b之间有且只有一个字符,且只能是x或y或z,如:axb,ayb,azb。 |
[!list] | 匹配除list中的任意单一字符 | a[!0-9]b a与b之间有且只有一个字符,但不能是数字,如axb,aab,a-b等 |
[c1-c2] | 匹配c1-c2中的任意单一字符 | a[0-9]b a与b之间有且只有一个字符,该字符是0-9之间的数字, 如a0b, a1b, …, a9b。 |
{string1,string2,…} | 匹配string1或string2(或更多)其一字符串 | a {abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。 |
任务管理
-
&
在命令的后面加上 & 表示后台执行的意思
command &
-
;
在命令之间以 ;连接,表示顺序执行的意思
command1;command2
-
&&
命令之间以 && 相连时,只有第一个命令成功执行,第二个命令才会执行。
command1 && command2
-
||
命令之间以 || 相连时, 如果前一个命令执行失败,则执行第二个命令
command1 || command2
-
``
命令中如果包含另一个命令,则用符号
将它包括起来,在执行的时候系统将优先执行
中的子命令,然后将其结果代入父命令继续执行。command1 `command2`
-
ctrl + z
在shell中执行命令时,同时按下ctrl + z可以将其暂时挂起
-
bg
执行bg命令,可以将挂起的命令后台运行
-
fg
执行命令fg可以将后台执行的命令转为前台执行
-
jobs
在Linux系统中,执行jobs命令可以查看所有在后台执行和挂起的任务以及任务编号
-
pkill +命令名字
杀掉进程
管道-重定向
转义符
在Linux中转义符’'的应用十分广泛,除此之外,转义符还包括""和\
字符 | 说明 |
---|---|
‘’ | 硬转义,硬引用,其内部所有的shell元字符,通配符都会被关掉。注意,硬转义中不允许出现‘(单引号)。 |
“” | 软转义,软引用,其内部只允许出现特定的shell元字符($,',) $ 用与变量值替换,'用于命令替换,\用于转义单个字符 |
\ | 反斜杠,转义,去掉其后紧跟的元字符或通配符的特殊意义 |
下表时对应转义字符对应表
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS),将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下一行开头 | 012 |
\n | 换行(LF),将当前位置移到下一行开头 | 010 |
\r | 回车(CR),就爱过你当前位置移到本行开头 | 013 |
\t | 水平制表(HT),(跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符 | 092 |
’ | 代表一个单引号字符 | 039 |
" | 代表一个双引号字符 | 034 |
? | 代表一个问号 | 063 |
\0 | 空字符(NULL) | 000 |
\nnn | 1到3位八进制数多代表的任意字符 | 三位八进制 |
\xnnn | 1到3位十六进制多代表的任意字符 | 三位十六进制 |
shell元字符
字符 | 说明 |
---|---|
= | 变量名=值,为变量赋值。注意=左右紧跟变量名和值,中间不能有空格。 |
‘’ | 取命令的执行结果,与下文的$有相似之处 |
$ | 变量名替换,$变量名替换为shell变量的值;为避免在文本连接时混淆,请使用 $(变量名);$0… 9 代表 s h e l l 文件的参数。 9代表shell文件的参数。 9代表shell文件的参数。()同’'; 限定变量名的范围; {}限定变量名的范围; 限定变量名的范围;[]整数计算 |
> | prog > file 将标准输出重定向到文件 |
>> | prog >> file 将标准输出追加到文件 |
< | prog < file 从文件file中获取标准输入 |
<< | |
| | 管道命令,例:p1 | p2 将p1的标准输出作为p2的标准输入 |
& | 后台运行命令,最大好处是无需等待命令执行结束,就可以在同一命令下继续输入命令 |
() | 在子shell中执行命令,在子进程中执行 |
{} | 在当前shell中执行命令,活用在变量替换的界定范围(例如上面的$(变量名)用法)。 |
[] | 字符通配,匹配括号内之一 |
; | 命令结束符,例如p1;p2表示先执行p1,再执行p2 |
&& | 前一个命令执行完之后,才继续执行下一个命令。例:p1&&p2;若p1执行成功后,才执行p2反之,不执行p2; |
|| | 前一个命令执行失败后,才继续执行下一个命令。例:p1||p2;若p1执行成功后,不执行p2,反之, 才执行p2。 |
! | 执行历史记录中的命令!731;匹配最近的一次命令!echo;取非 ls /dev/sda[!1]; 结果取反!echo ok; echo $? |
% | %1 相当于 fg 1 |
^ | 取非,和!雷同;string1string2^将上一命令string1替换为string2 |
~ | home目录 |
# | 注释 |
* | 通配符,任意字符 |
? | 通配符,任一字符 |
. | 当前目录;source |
- | 减号;上次工作目录 |
: | 真值;空命令 |
\ | 转义 |
系统信息
cat /proc/meminfo |grep MemTotal # 内存信息
cat /proc/cpuinfo # cpu信息
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
cat /proc/cpuinfo | grep 'cores' |uniq
机器信息
# 查看物理CPU个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq
# 查看每个物理CPU核数
cat /proc/cpuinfo | grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
# 查看CPU型号
cat /proc/cpuinfo | grep name | sort | uniq
查询磁盘使用量
du -ah --max-depth=1