Linux基础
一、Linux介绍
1、Linux形成历史
Linux(类unix系统):多用户多任务的操作系统。
unix系统:贝尔实验室1969年开发,在unix7系统,发现unix的商业价值,就收回授权,最终在1982年发布第一个完全商业版本unix system 3。
芬兰的一个教授因为unix的版权有原因,准备开发一个类unix的操作系统,Minix(微型unix系统),主要用于教学和教育机构。
Linus(林纳斯.托瓦兹),根据Minix源代码,半年后开发了一个Linux内核(最初的版本).
GNU,革奴计划:理查德斯托曼,致力于开发一个完全免费、自由、开源的并且兼容unix系统的操作系统GNU,但是这个计划发展了10来年,唯独缺少一个内核(这个计划有内核,叫hurd,只不过一直在开发).
因此GNU和Linux结合,变成了一个完整的操作系统。
GPL协议:理查德斯托曼在89年和一群律师一起起草了一协议,协议规定Linux的派生版本必须免费。
二、 Linux简介
1、Linux和Window系统有什么区别?
- Linux系统开源,Window不开源
- Linux主要用于服务器上,Window主要用于个人系统
- Linux用于命令行操作,Window主要用于图形化操作界面
- Linux免费,Window不免费
- Linux是多用户系统,Window是单用户系统
2、Linux 的内核版本和发行版本
- Linux内核版本:www.kernel.org
(1)查看自己的内核版本号
- Linux的发行版本
(1)红帽子公司 全球最大的开源技术厂商,提供非常广泛的Linux套件,提高全球技术支持(收费)。有企业版(RHEL)、社区(Centos)、桌面版本(Fedora)。
(2)debian公司
企业版本(debian) 社区版本(ubuntu)
-
ubuntu系统是一款基于debian派生出来的一个产品,对最新的软件兼容性很好,大多数人认为ubuntu系统和debian系统都是非常好的Linux系统。
-
优点:
ubuntu系统广泛应用于电脑、服务器、物联网、云…
既适合家庭使用,也适合商业环境
ubuntu系统拥有良好的二安装及操作环境
ubuntu系统承诺免费(没有技术支持)
(3)桌面介绍 -
开关机:
-
终端的打开:
a、通过点击右键打开终端
b、ctrl+alt+t
- stu:用户名
- stu-virtual-machine:主机名
- ~/Desktop 当前所在目录的路径
- $代表普通用户 #超级管理员
-
怎么控制终端大小
扩大:ctrl shift ‘+’
缩小:ctrl ‘-’
进入管理员权限:sudo su
退出管理员权限:exit
三、Linux目录结构
window:将存储空间分为多个盘符:C、D、F…
ubuntu:只有一个根目录,倒立的属性结构。所有文件都是从根目录开始向下存储
1、Linux的文件目录结构图:
2、常用目录介绍:
- /bin 存放常用的命令(二进制可执行程序) (重点)
- /boot 存放系统内核及启动相关的文件,类型于window里面的C盘,很重要,一般不会让别的人去挤压它的存储空间(重点)
- /dev 存放我们的设备文件(重点)
- /etc 存放系统配置文件(重点)
- /home 家目录(所有普通用户的家目录)
- /lib 存放库文件
- /proc 存放虚拟文件系统目录,保存进程在内存中的信息(重点)
- /usr 存放系统应用文档和程序 例如QQ微信(重点)
- /var 存放系统运行中经常修改的文件,例如系统日志
- /root 存放管理员的家目录
- /mnt 临时挂载点
- /tmp 存放临时文件,所有用户都可以访问
3、相对路径和绝对路径
绝对路径:在linux系统中是从系统根目录开始向下遍历到指定位置的路径,中用‘/’隔开。
- 例如:stu的桌面的绝对路径:/home/stu/Desktop。 teacher的用户的桌面的一个叫做main.c:/home/teacher/Desktop/main.c
相对路径:从当前路径开始向下遍历到指定位置的路径。
-
“ . ”:代表当前位置
-
“ … ”:代表上一层位置
-
“ - ”:代表上一层位置
假设,用绝对路径描述main.c这个普通文件:/home/stu/Desktop/main.c
假设,现在j就在stu的桌面上,此时用相对路径描述main.c这个普通文件:./main.c -
相对路径和绝对路径的选取,具体情况具体分析,那个方便用哪个
四、Linux系统文件类型和文件权限
1、文件类型
Linux系统认为一切皆文件,所以Linux将所有的东西都看成文件,将其分了这些类:
- 普通文件 “-”
- 目标文件 “d”(dierctory)
- 管道文件 “p”(piping)
- 链接文件 “l”(link)
- 设备文件(块设备“b”(block),字符设备“c”(char))
- 套接字文件 “s”(socket)
分别解释下什么意思:
- 管道文件:进程间通讯的一种手段
- 链接文件:软链接(字符链接)和硬链接,软链接可以认为是windows下的快捷方式。
- 设备文件:块设备:可以从任意位置读取一点长度的设备:例如磁盘、U盘、TF卡等。
- 设备文件:字符设备:只能一字节一字节的额读取,不能随机读取,例如鼠标、键盘等。
- 套接字文件:网络通讯的一种方式
- Linux系统不以后缀名区分文件类型,后缀名的作用是帮助我们确定用那个软件打开它。
在ubuntu系统中,/bin和/usr/bin其实是用在一个地方,但在红帽子系统上,这两个是分开的。
2、文件权限
- r 读权限 值:4
- w写权限 值:2
- x执行权限 值:1 对于普通文件代表指向权限,对于目录文件,代表可进入权限
例如:
- u:user属主的访问权限(拥有着)
- g:group属组的访问权限(和拥有者同小组的人)
- o:other其他人的访问权限
3、如何修改文件权限
3.1文字设定法
chmod 修改权限的命令
- u:user 属主的访问权限(拥有者)
- g:group 属主的访问权限(和拥有者同小组的人)
- o:other 其他人的访问权限
- a:all所有人
- +:添加权限
- -:去掉权限
- =:表示直接复制权限
- 注意:如果想同时给属主。属组,其他人修改权限,用逗号隔开即可
例如:当前文件权限如下:
此时如果想给main2这个可执行文件进行权限修改,去除掉属主的执行权限,命令如下:
然后,又想给属主减一个r权限,对属主减去一个w权限,对其他人添加一个w权限,命令如下:
然后,又想让属主,属组,其他人权限都没有,命令如下:
最后,想让main1回复到开始的权限(rexrwxr-x),命令如下:
3.2数字设定法
- r:read 值4 (100)
- w:write 值2 (010)
- x:execute 值1(001)
chmod XXX filename (0<=x<=7)
- 0:没有权限
- 1:–x(001)
- 2:-w-(010)
- 3:-wx(011)
- 4:r–(100)
- 5:r-x(101)
- 6:rw-(110)
- 7:rwx(111)
touch filename 创建普通文件
mkdir filename 创建目录文件
五、常用命令
1、基本命令
(1)pwd:显示当前位置的绝对路径。
实例如下:
(2)cd:切换目录
cd 后面添加的参数是目的地(可以是 相对路径也可以是绝对路径)
- cd ’ - ':返回到上一次目录所在地
- cd ’ ~ ':直接回到用户家目录
- cd ’ . ':无事发生
- cd ‘. .’:返回到上一层
(3)ls:显示目录下所有文件
示例如下:
- -a:显示隐藏文件
- -l:用列表的方式显示所有文件的详细信息
(4)man:帮助手册
用来查看命令,系统调用,库函数的详细信息。示例如下:
(5)touch:创建一个普通文件
(6)mkdir:创建目录文件(文件夹)
实例如下:
(7)rm:删除文件或文件夹
删除文件夹要加参数 “ -r ”。
- 删除普通文件:
- 删除空目录:
- 删除非空目录:
(8)cp:拷贝文件
注意:拷贝目录文件时,需要加上参数 ” -r ”,实例如下:
- 普通文件的拷贝:
- 目录文件的拷贝:
(9)mv:剪切、移动、重命名
- 剪切移动:
- 重命名:
(10)find
在目录树下遍历一遍,也可以指定遍历开始位置。
示例如下:
(11)grep 过滤
- c 只显示行数
- v 取反,取本省查找之外的数据全部打印
(12)管道‘|’
将前一个命令的输出信息作为下一个命令的输入信息,示例如下:
(13)wc
统计文件的信息,比如(-w)显示有多少个单词(-l)统计行数 (-c)统计字符个数
(14)su
切换用户 su + username
如果不加用户名高,默认切换 root 用户
sudo su 切换 root 用户
exit 退出
(15)关机和重启
- shutdown -h now 立即关机
- shutdown -r now 立即重启
- init 0 关机
- init 6 重启
- halt 关机
- reboot 重启
init 级别:0~6 7种级别
- 0关机
- 1 单用户模式
- 2 多用户无网络模式
- 3 完全的多用户文本界面
- 4 未定义或自定义
- 5 图像化界面
- 重启
例如,init 3 是文本界面,也就是我们工作中用的最多的界面
(15)修改用户密码
passwd stu 修改
sudo passwd stu 强制修改
2、打包、解包、压缩、解压命令
2.1 tar将文件打开或者解包
- c 创建包文件
- f 指定目标为文件而不是设备
- v 显示详细过程
- t 显示包中内容,而不是释放
- x 释放包中的内容
- z GNU版本新加入的,让 tar 具有压缩和解压功能
1、 tar的打包过程
2、 tar的解包过程
2.2 gzip 对文件进行压缩和解压
1 、gzip 对文件进行压缩
2、 gzip 对文件进行解压
- d 解压
2.3 通过tar命令对xxx.tar.gz进行一步解压
2.4 通过tar命令对多个文件进行一步解压
3、文件编辑器vim
3.1 vim的介绍和安装
1.1 vim的介绍
一般来说,我们的ubuntu系统自带的是vi,而红帽子自带的是vim,vim可以简单认为是vi的升级版,vim相较于vi更稳定,功能更强大。怎么判断自己电脑安装的是vi还是vim,可以通过方向键去查看,vi不支持。
vim 的官网:www.vim.org
1.2 vim的安装
如果电脑上没有vim,这时输入vim,电脑会报错,说找不到,会显示安装此命令的步骤。
apt updata:更新标准软件源
或者apt - get updata:更新标准软件源
这个时候,再通过apt install vim
3.2 vim的配置文件的修改(添加行号,缩进等)
1、配置文件的介绍
配置文件时计算机软件的底层设计或者初始值的设定,比如我们行号的设置,和 tab 的缩进,例如:刚开始使用 vim 的时候,一进去是不显示行号的,这个时候可以通过命令 set nu 去设置,只不过下一次再进入的时候,就需要重新设置,太麻烦了,所以直接写入到配置文件中,这样就不用每一次都设置了。
2、配置文件的设置方法
用 root 权限去打开配置文件 vimrc
vim /ect / vim / vimrc
在文件的末尾写入:
- set nu
- set tabstop = 4 按 tab 缩进 4 个空格
- set softtabstop = 4
- set shiftwidth = 4
- set expandtab
- set smartindent 自动缩进
- 注意:上述修改比如 root 权限,并且尽量复制,如果想修改其他配置,还是按照此方法即可。
3.3 vim 的三种模式介绍
vim 将使用场景分为三种模式:
- 命令模式
- 插入模式
- 末行模式
1、模式切换示意图
2、命令模式 切换到 插入模式
- a //进入到当前光标后开始进行插入
- i //进入到当前光标位置开始便立即
- A //进入到当前光标所在行的行末进行编辑
- I //进入到当前光标所在行的行头进行编辑
- o //进入到当前光标下一行进行编辑
- O //进入到当前光标上一行进行编辑
- 补充:x // 删除当前位置的字符
3、命令模式切换到末行模式
- “:” //对文本的设置和保存工作
- w:只保存
- wq:保存并退出
- x:等同于wq
- q:只退出
- q!:强行溢出
- w newfile:另存为
- set nu:显示行号
- set nonu:不显示行号
- set hlserach:设置搜索结果高亮
- set nohlserach:设置搜索结果不高亮 - “ / ”:对本文进行全文向下搜索字符串 string 例如 / QWE
- “?”:对本文进行全文向上搜索字符串 string 例如?QWE
- 搜索到之后,可以使用命令:n:接着重复上一次的搜索命令(使用在末行模式)
3.4 vi / vim 常用命令
- n dd // 删除从光标开始向下的 n 行
- dd // 如果只删除当前行
- n yy // 拷贝从光标开始向下 n 行&=
- p // 粘贴
- u // 撤销上一次操作
- ctrl + r // 恢复上一行的撤销操作
- r // 替换当前字符
- shift + 6 // 将光标移动到当前行的行头
- shift + 4 // 将光标移动到当前行的行末
- shift + g // 将光标移动到整个文本的最后一行 等同于G
- gg //将光标移动到整个文本的第一行
- n G //将光标移动到整个文本的第 n 行 //等同于 n shift + g
- d n G //删除光标所在地 n 行数据
- y n G //拷贝光标所在第 n 行数据
- H //移动到当前屏幕的第一行
- M // 移动到当前屏幕的中间一行
- L // 移动到当前屏幕的最后一行
- “.” //重复上一次擦欧洲哦(使用在命令模式)
补充:
- h:向左移动光标
- j:向下移动光标
- k:向上移动光标
- l:向右移动光标
- 上述命令只用于命令模式,但在键盘右下角方向键可以命令模式使用,还可以插入模式使用。
4、文件查看命令
vim可以打开文件,查看里面的数据,但vim始终存在修改数据的风险,所以介绍其他查看文件的命令
4.1 cat
- 用于查看文件数据
示例如下:
- 用于合并文件(cat A.txt B.txt>C.txt)
示例如下:
- 可以向文件中写入数据,通过 ctrl+d 结束输入
注意:这个操作首先会将文件D.txt 清空,使用的时候不小心原数据丢失。
- 可以往文件末尾输入数据,通过 ctrl+d 结束输入(cat >>D.txt)-
注意:“>>” 将光标移动到文件末尾,然后再进行写入数据(原先的数据不会丢失)
4.2 more
当文件的内容屏幕显示不完,则可以使用more这个命令,分屏显示内容。
使用命令格式:more filename
示例如下:(more / etc / vim / vimrc)
这个时候可以通过空格(跳转的内容百分比多)或者回车(一点点看)向下查看剩余数据。不想继续查看,可以通过q 退出。
红帽子系统通过方向键查看。
4.3 less
这个命令和more 差不多,只不过存在细微差别
- less 显示的文件内容不会再终端界面上遗留
- less 不显示文件内容的百分比
- less 显示的文件内容可以通过方向键查看(more只能向下)
4.4 head
这个命令显示文件的前 n 行内容,使用命令:head -n filename。如果不写 -n,默认查看前 10 行。
4.5 tail
- 显示文件后 n 行数,命令格式:tail -n filename
注意:不写 -n ,默认查看倒数 10 行 - 用于查看日志文件
tail 这个命令经常用于查看日志文件,因为日志文件一般来说只能查看近期产生的日志数据,也就是说查看日志文件的末尾居多。
例如命令:tail -f filename(-f follow 实时跟踪显示文件末尾信息)
然后重启一个终端,通过命令cat >>filename,实施输入信息,则左边的tail -n filename 打开的终端则会实时显示。
5、用户管理命令
5.1 用户基本信息的储存
存储位置/etc/passwd
用户名 | 密码 | UID | GID | 描述性信息 | 主目录 | 默认shell |
---|---|---|---|---|---|---|
root | x(有密码) | 用户id | 组id | 对用户的简单描述 | 一般就是家目录 | 默认命令解释 |
为了安全,所有用户密码单独加密后,保存在一个文件(/etc/sahdow),这个文件只能用 root 查看
用户名$ 加密算法id $ 密钥 $密文
5.2 添加新用户
创建用户的时候,一般来说或创建一个同名的家目录,放在 /home 底下
红帽子会在创建新用户的时候,顺手将同名家目录创建好。
ubuntu不太一样,不会自动添加家目录,我们手动添加
命令格式:useradd user_name
5.3 修改密码
通过passwd 这个命令进行修改密码:passwd user_name
注意:如果想修改非常简单的密码(例如123456),系统不通过,认为密码过于简单,则可以进入超级用户,强行修改简单密码。
5.4 删除用户
使用命令 userdel 删除用户
- 1、首先保证用户没有登录
- 2、userdel 删除用户的时候,家目录不会删除(家目录里的数据还有用)
- 3、如果想顺手将家目录删除,也可以,用 userdel -r user_name命令
6、进程管理命令
6.1什么是进程
- 程序:是完成特定任务的一系列数据+指令的集合(钢琴琴谱,在磁盘上)
- 进程:正在执行的程序(根据琴谱弹奏的过程,运行在内存上)
进程(process):是计算机上一端程序的执行过程,是操作系统进行资源分配的基本单位,但是进程不仅仅是局限于一段可以执行的代码段,通常进程还需要包含其他资源,例如打开的文件,挂起的信息处理器的状态等。
简而言之,进程就是正在执行的程序代码的实时显示结果。
操作系统需要高效的管理我们的进程,所以为了方便控制进程的运行,将进程的管理和控制放到了一数据结构,这个结构体就是我们所说的PCB进程的控制块(process control block ),每一个进程均有一个PCB。在创建进程时,PCB首先创建,伴随着进程运行的全过程,当进程结束时,PCB才消退。
PCB记录了操作系统所需的,用于描述进程的当前运行情况以及控制进程运行的全部信息。
6.2进程在内存中怎么管理?
- 指向程序时,先创建PCB,再加载进程实体
- 进程结束时,先释放进程实体,最后再释放PCB
- 僵死进程:进程实体释放了,但是PCB未能正常释放
- 补助:进程、线程、协程有什么不同?
6.3进程查看命令
1、ps 默认显示当前终端有关的进程信息
- -e 显示系统中所有的进程信息(-A)
- -f 显示更多的进程属性信息
- -L 显示进程中的线程ID
- UID :用户ID
- PID:进程ID
- PPID:父进程ID
- C:CPU占用率
- STIME:(start time )进程创建时间
- TTY:当前终端号
- TIME:进程运行时间
- CMD:当前进程执行的命令
2、pstree 以树状图的形式显示进程之间的关系
3、kill 结束或者挂起一个进程
- -9 (SIGKILL)强制结束一个进程
- -STOP 挂起一个进程(挂起:主动将进程执行暂停,CPU则不再给这个进程分配资源)
3.1 前后台
- 将进程放到前台运行:路径 + 可执行文件名
- 将进程放到后台运行:路径 + 可执行文件名 + &
在前台运行的进程,会一直占用终端,导致终端接收不到其他命令,这个时候只能另起一个终端,但在后台运行的进程,不会占用终端,可以执行其他操作
- Ctrl + d 停止输入
- Ctrl + c 结束进程
- Ctrl + z 挂起进程
3.2演示结束进程
4、pill 用于结束一组同名的进程(CMD一样)
示例如下:
总结:
- kill PID // 结束一个进程
- kill -9 PID // 强制结束一个进程
- kill -STOP PID // 挂起一个进程
- kill CMD // 结束CMD进程
5、jobs 显示当前终端的任务,后台执行的或者挂起的任务
6、fg 将后台执行的任务挂起到前台
-
将后台运行的任务放到前台
-
将挂起的进程放到前台
7、bg 将挂起的进程唤醒到后台去运行
8、top 用于查看系统资源的使用情况(动态变化时),类似windows上的任务管理器
- top 命令执行后,按 f 进入到 top 的解释页面
- 前面带 * 的,说明已经显示
- 按 f 后,示例如下: