linux小知识点
.
- 如何学习
有压力才有动力,前面也是小打小闹
学linux不能和单片机一样,先要跑通,有精力再研究细节。
- esp 与 bsp
esp是栈指针,是cpu机制决定的,push、pop指令会自动调整esp的值;
ebp只是存取某时刻的esp,这个时刻就是进入一个函数内后,cpu会将esp的值赋给ebp,此时就可以通过ebp对栈进行操作,比如获取函数参数,局部变量等,实际上使用esp也可以;
既然使用esp也可以,那么为什么要设定ebp呢?
答案是为了方便程序员。
因为esp在函数运行时会不断的变化,所以保存一个一进入某个函数的esp到ebp中会方便程序员访问参数和局部变量,而且还方便调试器分析函数调用过程中的堆栈情况。前面说了,这个ebp不是必须要有的,你非要使用esp来访问函数参数和局部变量也是可行的,只不过这样会麻烦一些。原文链接:
根目录下的很多文件夹都只是个索引,都指向usr(unix system resource)里面
1 | lrwxrwxrwx 1 root root 7 Feb 20 2021 bin -> usr/bin |
/etc/passwd
可以查看系统的用户,以及登陆的方式,/etc/shadow
则保存了用户的密码,群组名称都纪录在/etc/group内
var/log
可以查看很多日志
SATA接口的硬盘对应的文件名字:/dev/sd[a-d]
虚拟机中的磁盘文件是: /dev/vd[a-p]
man 指令的手册存放位置:/usr/share/man
,info指令的存放到/usr/share/info
,指令的更多相关信息也可以存放到/usr/share/doc
下面
3.linux发行版异同
相同的FHS(文件系统)和LSB,同样使用 http://www.kernel.org 所释出的核心,几乎相同的操作接口
不同:各开发商加入的应用工具不同,使用的套件管理模式不同(dpkg 与 RPM)
4.多用户&多任务
何谓多用户 ( Multi-user ) 多任务 ( Multitask )?Multiuser 指的是 Linux 允许多人同时连上主机之外,每个使用者皆有其各人的使用环境,并且可以同时使用系统的资源! Multitask 指的是多任务环境,在 Linux 系统下, CPU 与其他例如网络资源可以同时进行多项工作, Linux 最大的特色之一即在于其多任务时,资源分配较为平均!
5.MBR&gpt
MBR:第一个扇区 512Bytes 会有这两个数据:
- 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 Bytes
- 分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes
按照常理分区表只能记录四个分区,但其中可以有拓展分区(类似指针),就可以达到无限个分区
GPT
磁盘尾有备份,可以用128Bytes来标识一个分区,总共可以表示32 * 4 个分区。
如何开机
启动也需要执行命令,这些命令在主板的BIOS上,一些硬件参数在主板的CMOS上。
- BIOS:开机主动执行的固件,会认识第一个可开机的设备;
- MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
- 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
- 核心文件:开始操作系统的功能…
BIOS与MBR都是硬件本身会支持的功能,至于Boot loader则是操作系统安装在MBR上面的一套软件了。由于MBR仅有446 Bytes而已,因此这个开机管理程序是非常小而美的。 这个boot loader的主要任务有下面这些项目:
- 提供菜单:使用者可以选择不同的开机项目,这也是多重开机的重要功能!
- 载入核心文件:直接指向可开机的程序区段来开始操作系统;
- 转交其他loader:将开机管理功能转交给其他loader负责。
通用shell指令
一般是这样的:
1 | command [-options] parameter1 parameter2 ... |
第一个一定是指令名称
第二个是选项名称,一般是 单横线+名字首字母,或者是双横线+名字全称。如下:
1
2
3
4
5
6Usage: objdump <option(s)> <file(s)>
Display information from object <file(s)>.
At least one of the following switches must be given:
-a, --archive-headers Display archive header information
-f, --file-headers Display the contents of the overall file header
-p, --private-headers Display object format specific file header contents然后跟着参数,参数1,参数2,参数3.。。
可以使用
\
来换行可以使用
;
来分隔不同命令,并依次执行。ctrl+c:停止当前指令
ctrl+d:输入结束,EOF
通常出现“command not found”的可能原因为:
- 这个指令不存在,因为该软件没有安装之故。解决方法就是安装该软件;
- 这个指令所在的目录目前的用户并没有将他加入指令搜寻路径中,请参考第十章bash的PATH说明;
- 很简单!因为你打错字!
一般命令都有个
--help
选项,输入后可以查看该命令相关的说明。通过man可以查看指令对应的手册,手册第一个可能有一个数字,他代表着
1
READ(2) Linux Programmer's Manual
代号 代表内容
1 使用者在shell环境中可以操作的指令或可可执行文件
2 系统核心可调用的函数与工具等
3 一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
4 设备文件的说明,通常在/dev下的文件
5 配置文件或者是某些文件的格式
6 游戏(games)
7 惯例与协定等,例如Linux文件系统、网络协定、ASCII code等等的说明
8 系统管理员可用的管理指令
9 跟kernel有关的文件
一些常见的命令
who
:看谁在线上netstat -a
:查看网络的连接状态ps -aux
: 查看后台程序chgrp,chown,chmod,改变群组,所有者,权限
*
元件 内容 叠代物件 r w x 文件 详细数据data 文件数据夹 读到文件内容 修改文件内容 执行文件内容 目录 文件名 可分类抽屉 读到文件名 修改文件名 进入该目录的权限(目录一般要给r,x权限)
cp source destination,
- 复制时有些文件权限可能会变,加上
-a
可以避免 - 加
-s
可以创建文件的链接文件,复制成为符号链接文件 (symbolic link),亦即“捷径”文件; - 加
-l
:进行硬式链接(hard link)的链接文件创建,而非复制文件本身;(hard link 只是在某个目录下的 block 多写入一个关连数据而已,既不会增加 inode 也不会耗用 block 数量哩!)(新建一个目录,他的hard link 数量为2,分别是该目录与.
)
- 复制时有些文件权限可能会变,加上
pwd,显示当前的工作目录
pwd -P 显示实际的工作目录,会不以链接文件的数据显示,而是显示正确的完整路径啊
1
2
3
4(yolo) tangjie.zhang@moveai415:lock$ pwd
/var/lock
(yolo) tangjie.zhang@moveai415:lock$ pwd -P
/run/lock
mkdir -mp, m代表可以直接设置文件的权限,p代表可以递归创建目录
od -t x 文件名,可按照16进制读取文件显示,由于认为文件是数字,会将字节序反转一下。(如果本身是字符串文件,但按照数字读,会导致顺序相反)
which -a 命令,会显示该命令的所以路径,本质上根据“PATH”这个环境变量所规范的路径,去搜寻“可执行文件”的文件名
搜索文件,优先使用whereis 或者 locate(3090没有,就没管) ,不行再来用find
whereis,只搜索部分路径,可通过
-l
参数来查看。1
2
3
4
5
6
7wher,eis [-bmsu] 文件或目录名
选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件find, find [PATH] [option] [action]
- 与时间相关,find / -mtime 0
- 与使用者相关,find /home -user dmtsai
- 与文件权限相关,如 -name, -size, -type [fdlsp], 如,find / -size +1M,find /etc -name ‘*httpd*‘
df 列出文件系统的整体磁盘使用量;
du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
vim相关
- 一般指令模式
- 30j,30k代表向下向上移动30行
- Ctrl f,Ctrl b代表向下向上翻一页
^, $
代表移动至一行的第一个,最后一个字符- 10 Enter,代表向下移动几行
:1,$s/word1/word2/gc
,从第一行到最后一行,将word1替换为word2,最后的c代表替代前需要确认- x,delete代表向后删除一个字符,backspace代表向前删除一个字符,前面可以加数字,代表删除多少个。
- yy复制当前的这一列,nyy代表复制如下的n列,p代表粘贴,
- u代表复原,撤销,Ctrl r代表重做,.代表重复前一个动作
- 一般指令模式
shell,
双引号内的特殊字符如 $ 等,可以保有原本的特性
单引号内的特殊字符则仅为一般字符 (纯文本)
反单引号包围的是一个指令, `ls`与 $(ls)含义都是相同的
export让变量可以在当前bash的子进程中生效
可通过env或export查看环境变量。可通过set指令查看环境变量以及bash内的变量。
shell内的变量,比如PS1可以控制提示字符的形式,$表示线程pid,?表示上个命令的返回值
可以使用export将自定义变量变为全局变量,这个该变量可以被子进程(不是所有进程)所访问。
可以通过ulimit显示和设置一些限制
关机
shutdown,reboot,poweroff,init 0,但其实这些都是通过调用systemctl来实现的(现在好像是systemd)
文件相关
常用的扩展名:
- *.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh 啰;
- Z, .tar, .tar.gz, .zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰!
- .html, .php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰! .html 的文件可使用网页浏览器来直接打开,至于 .php 的文件, 则可以通过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果呢!
FHS定义了很多linux文件夹规范,可查看Linux目录配置 [参考数据 (gitbooks.io)], 官方文档(https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/Text/index.html#reference),摘取部分内容如下:
依据FHS的基本定义,**/usr**里面放置的数据属于可分享的与不可变动的(shareable, static)
目录 | 应放置文件内容 |
---|---|
第一部份:FHS 要求必须要存在的目录 | |
/usr/bin/ | 所有一般用户能够使用的指令都放在这里!目前新的 CentOS 7 已经将全部的使用者指令放置于此,而使用链接文件的方式将 /bin 链接至此! 也就是说, /usr/bin 与 /bin 是一模一样了!另外,FHS 要求在此目录下不应该有子目录! |
/usr/lib/ | 基本上,与 /lib 功能相同,所以 /lib 就是链接到此目录中的! |
/usr/local/ | 系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib…的次目录喔! |
如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件,包括高速缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。常见的次目录有:
目录 | 应放置文件内容 |
---|---|
第一部份:FHS 要求必须要存在的目录 | |
/var/cache/ | 应用程序本身运行过程中会产生的一些暂存盘; |
/var/lib/ | 程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去! |
/var/log/ | 重要到不行!这是登录文件放置的目录!里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登陆者的信息)等。 |
/var/run/ | 某些程序或者是服务启动后,会将他们的PID放置在这个目录下喔!至于PID的意义我们会在后续章节提到的。 与 /run 相同,这个目录链接到 /run 去了! |
常见特殊目录
1 | . 代表此层目录 |
特殊变量
PATH: 指出了文件的路径,他是linux中的一个环境变量,当一个终端打开时时,对应用户的.bashrc
等文件被执行,环境变量等被加载到内存中(本身是个变量),供程序使用。这么定义的也是变量,只是名字不同:
1 | (yolo) tangjie.zhang@moveai415:~$ ztj=666 |
默认权限
若使用者创建为“文件”则默认“没有可执行( x )权限”,亦即只有 rw 这两个项目,也就是最大为 666 分,默认权限如下:-rw-rw-rw-
若使用者创建为“目录”,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,默认权限如下:drwxrwxrwx
然后,还要计算umask,文件或文件夹对应的三个数字要减去umask的三个数字才会得到默认的权限:(root umask 一般为022,禁止同组写入,而一般用户通常为002,可参考/etc/bashrc内容)
1 | (yolo) tangjie.zhang@moveai415:Software$ umask |
suid,让普通用户临时拥有该文件的属主的执行权限,suid权限只能应用在二进制可执行文件(命令)上.
sgid,sgid权限一般应用在目录上,当一个目录拥有sgid权限时,任何用户在该目录下创建的文件的属组都会继承该目录的属组。
文件系统特性
分完区后,还需要格式化后才能使用该文件系统。
比如linux,除了数据本身外,还有权限信息和文件属性,文件系统会将这两部分的数据存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量。 一般格式化时会分为若干个组,每个组都有inode,block,superblock等。(每个文件系统都只有一个superblock,说是每个组可能有只是因为可能某些组的是备份)
- inode,记录文件属性以及block位置等,inode大小为128,256Bytes,系统读取文件时需要先找到inode,判断权限是否满足。每个inode支持存储12个直接指向地址,1个间接,双间接,三间接地址。
- block,每个文件至少占用一个block
- superblock,存储整个文件系统相关信息的地方。
- 未使用与已使用的 inode / block 数量;
- block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128Bytes 或 256Bytes);
- 是否已挂载,挂载时间
- 文件系统描述,可以描述每个 block group 的开始与结束的 block 号码
- 区块对照表,可以知道那些块是空的
新建一个文件如要如下步骤:
- 确定目录是否有
w
和x
权限,有的话才新增 - 根据inode bitmap找没有使用的inode号码,
- 根据block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且更新 inode 的 block 指向数据;
- 将inode和block同步至inode bitmap 与 block bitmap,并更新 superblock 的内容。
如果产生了中断导致数据不一致,可以通过日志系统来解决
压缩
常见拓展名:
1 | *.Z compress 程序压缩的文件; |
tar, -j代表bzip2,-z代表gzip,
1 | 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 |