文章目录
命令解析器
命令解析器:根据命令的名字,命令解析器去调用对应的可执行程序。
常用组合建
终端中常用的组合键:
- Ctrl + a 光标跳到行首
- Ctrl + e 光标跳到行尾
- Ctrl + u 删除光标前面的字符
目录结构
Linux系统目录结构:树形结构
- 根目录 / :
/bin
:存一些经常使用的命令。命令解析器自动配置了环境变量到此处找可执行程序来执行/dev
:存Linux的外部设备,每个设备对应一个文件/etc
:存系统管理所需要的配置文件和子目录/home
:每个用户都有一个自己的目录,家目录(又称宿主目录)~/lib
:存系统基本的动态链接库,同windows下的DLL/media
:存Linux识别的设备,挂载到这个目录下/mnt
:为了让用户临时挂载别的文件系统/opt
:给主机额外安装软件的目录/root
:超级用户的目录/usr
:用户软件资源目录
用户目录
- 绝对路径:从根目录开始写
- 相对路径:相对于当前工作目录(
.
,..
,-
邻近的两个目录之间切换) - $:当前用户是普通用户
- #:当前用户是超级用户
- 切换到超级用户
$ sudo su
,退出时exit
- 例:当前登录用户@主机名
软链接和硬链接
软链接:相当于一个快捷方式(并非复制,看文件大小就知道)
ln -s 文件名 快捷方式名
: 快捷方式名一般加.soft
结尾,这种方式不能在全文件系统中使用ln -s 绝对路径 快捷方式名
: 快捷方式名一般加.soft
结尾,这种方式能在全文件系统中使用
硬链接:给原来的文件做个备份(做了拷贝,同样大小,但并不占用磁盘空间)
- 可以通过
ls -l
看相应文件的硬链接数 ln 文件名 快捷方式名
: 一般加.hard
结尾- 可以给目录创建软链接,但不能给目录创建硬链接
找到i结点
就能找到对应的文件,硬链接映射到的都是同一个i结点
,所以修改其中的一个,其他再去查看这个文件时内容是会发生变化的。
文件权限
文件所有者u | 文件所属组g | 其他人o 对文件的操作权限
修改文件权限的方法:
- 1)文字设定:
chmod [who] [+、-、=] [mode]
,例如$ chmod o+w test.txt
,不写就代表所有人a
,例如$chmod +x test.txt
- 2)数字设定:满权限777,读权限对应4,写权限对应2,执行权限对应1
修改文件所有者:
$ sudo chown [所有者] [文件名]
修改文件所属组
$ sudo chown [新的所有者:新的组的名字] [文件名]
- 或者
$ sudo chgrp [新的组的名字] [文件名]
一个目录必须要有执行权限,这样才能进来
文件类型
- 普通文件:-
- 目录:d
- 链接符号:|
- 块设备:b
- 字符设备:c
- socket文件:s
- 管道:p
环境变量
Linux操作系统是多用户多任务
的,同一时间可以有多个用户用多个账号登录到该操作系统上,而每个用户的操作习惯不一样,于是用环境变量来适配。
1、PATH 环境变量:是可执行文件的搜索路径
- 通过
$ env | grep PATH
来查看,键值对的格式为:key=value : value : ...
,如 PATH=/usr/local/sbin:/usr/local/bin
- 打印环境变量:
$ echo $PATH
2、HOME 环境变量:记录家目录
- 打印环境变量:
$ echo HOME
3、环境变量的操作函数
- getenv 函数
- setenv 函数
- unsetenv 函数
网络相关命令
用户管理
1、添加用户:$ sudo adduser 用户名
,并切换 $ su 用户名
2、添加组:$ sudo groupadd 组名
FTP服务器搭建(vsftpd)
1、作用主要是负责文件的上传和下载。
- 服务器端:需要修改配置文件并重启服务
- 客户端:实名/匿名用户登录,lftp客户端访问ftp服务器
2、安装过程:
$ sudo apt-get install vsftpd
$ cd /etc
$ sudo vi vsftpd.conf
- anonymous_enable=NO 不允许匿名用户登录
- wirte_enable=YES 实名登录用户具有上传数据的权限
- anon_upload_enable=YES 匿名用户可以上传数据
- anon_mkdir_write_enable=YES 匿名用户可以在服务器上创建目录
- anon_root=/home/xxx/xxx 匿名用户的根目录
$ sudo service vsftpd restart
3、用户登录(属于其它人)
实名:
$ ftp 服务器IP
输入服务器的用户名和密码
匿名(只能在一个指定的目录范围内工作,需要在服务器上创建这个匿名用户的根目录):
$ ftp 服务器IP
用户名输 anonymous,密码直接enter
4、文件的上传和下载,不允许操作目录(可以打包解决):
- 上传:
$ put [fileName]
- 下载:
$ get [fileName]
5、退出 exit
6、也可以用 lftp 客户端访问 ftp 服务器
$ sudo apt-get install lftp
$ lftp IP
$ login
- 上传多个文件:
$ mput file1 file2...
- 下载多个文件:
$ mget file1 file2...
- 上传目录:
$ mirror -R dirName
- 下载目录:
$ mirror dirName
nfs网络共享服务器
作用:共享文件夹,共享资源放到这个共享文件夹,通过nfs共享服务器共享给组里的人
- 服务器端:创建共享目录(mkdir)、修改配置文件(/etc/exports里写共享目录和权限)和重启服务(sudo service nfs-kernel-server restart)
- 客户端:使用挂载服务器共享目录的方式实现(
$ sudo mount 服务器IP:共享目录 挂载的地方
) ,然后就能到挂载点查看共享的资源
ssh服务器
作用:对多个地点的服务器,只要远程登录去操作这个服务器就行。服务器端需要安装ssh。
- 远程登录:
$ ssh 用户名@IP
- 退出:
$ logout
超级拷贝 scp
跨越主机,在不同主机之间进行数据拷贝。通过scp只需获取远程服务器的一个目录,而不用去搭建ftp服务器
$ scp -r 目标用户名@目标主机IP:/目标文件绝对路径 /本机的绝对路径
虚拟地址空间
应用程序在执行时OS会分配虚拟地址空间,虚拟地址空间分为0-3G的用户空间和3G-4G的内核空间。
- 由CPU内部的MMU按
页(4k)
来完成虚拟内存和物理内存之间的映射,这保证了在小内存容量的情况下也能跑起来4G的进程 - 在同时运行同一个程序时,同一个地址映射到物理内存的位置是不一样的。但这些个PCB描述的内容是不一样的,描述的是不同的进程的信息,只是它们位于同一块物理内存中。
- 内核空间中有一个PCB进程控制块,有一个文件描述符表(大小为1024的数组),比如0的文件描述符对应标准输入STDIN_FILENO
- 用户空间0G到3G布局为
- 环境变量
- 命令行参数(如argc,argv)
- 栈
- 共享库
- 堆
- .bss段(存未初始化的全局变量,可读写)
- .data段(存初始化的全局变量,可读写)
- .rodata(只读)
- .text段(存代码或二进制机器指令,CPU先从这里开始读,main函数在此处。只读)
- 受保护的地址(0-4k,不允许用户访问)
程序和进程
- 可执行程序是存放在磁盘上的已经编译好的二进制文件,不占用系统的资源(如CPU、内存、锁等)
- 进程是活跃的程序,在内存中执行,占用系统资源
- 伪并行:应用程序是排着队轮流使用CPU的(CPU分配了一定的时间片给进程),通过时钟中断等方式来切换
进程控制块PCB:这是一个task_struct结构体,位于内核空间,包含下面的一些信息:
- 进程ID(pid_t类型,非负整数),标识进程
- 进程状态
- 就绪(等待CPU分配时间片)
- 运行(占用CPU)
- 挂起(阻塞时主动放弃CPU,等待除CPU以外的其它资源)
- 终止(运行结束)
- 进程作上下文切换时需要保存和恢复的一些CPU寄存器数据
- 虚拟地址和物理地址的对应关系
- umask掩码:用来设置文件的权限
- 文件描述符表
- 信号的相关信息
- 用户ID和组ID
- 会话和进程组
- 进程可以使用的资源上限(
$ ulimit -a
查看)