【历史文章】
Ubuntu在进行更新系统时出现Hash校验和不符的问题
Linux常用的命令总结(一)——ls命令与cd命令
Linux命令(二)mkdir命令与rmdir命令
Linux命令(三)touch命令与rm命令
Linux常用命令(四)——cp、mv、ln命令
Linux常用命令(五)——hostname、ping、host命令
Ubuntu安装:
打开VirualBox新建
取名字,选择Linux Ubuntu64
设置虚拟内存1024
创建虚拟硬盘——>VDI——>固定大小——>选择文件的位置(不要再C盘)——>分配10G以上——>创建
设置——>光驱放在最前面——>存储——>盘片——>选择虚拟的文件
注:关于上面安装使用的VirualBox与Ubuntu安装包获取,可以私信+回复【Linux安装包】来获取。
Linux操作系统及其应用
LINUX的基础使用:图形工作界面、字符工作界面、目录、文件、帮助文档、管理工具
LINUX的基本命令:文件操作命令、显示命令、网络命令、系统状态显示命令
磁盘和文件系统:LINUX文件系统的管理和维护
多用户和多任务管理:概念、磁盘配额、文件和目录的操作权限、进程
shell简易编程:概念、功能、编程
嵌入式LINUX及编程:嵌入式开发、编辑器VI、编译器GCC、调试器GDB、工程管理器make
网络基础
Unix\LINUX环境C语言,借助学习操作系统的接口的方法,来学习、理解操作系统的运行机制以及一些网络协议
C/C++ 数据结构与算法 与平台无关,重点是算法逻辑
Unix\Linux\Android\iOS 平台相关,系统接口
嵌入式\驱动\移植 硬件相关,硬件接口
丹尼斯.里奇、肯.汤普逊于1971年左右在美国的贝尔实验室,使用C语言开发了这套操作系统
系统特点是多用户、多任务,支持多种处理器架构,高安全性、高可靠性、高稳定性
既可以构建大型关键业务系统的商用服务器,也可以构建面向移动终端的、手持设备等相关的嵌入式设备
三大衍生版本:
System V:银行、电信公司在使用的服务器系统
Berkley:MacOS、iOS带界面的
Hybrid:Minix、Linux
类Unix操作系统,免费开源,它指的是系统的内核,凡是使用这种内核的操作系统都叫做Linux操作系统(发行版),严格意义上讲Linux指的是内核,隶属于GNU工程。
手机、平板电脑、路由器、游戏视频的控制平台、PC、大型计算机、超级计算机
标志是一只企鹅,企鹅是南极洲的标志性动物,南极洲不属于任何一个国家所有
Linux选择企鹅作为标志,表明了:开源的Linux,为全人类所共有的,任何公司无权将其私有
Linux一般由内核、shell、文件结构、实用工具4个主要部分组成。内核是所有的组成部分中最基础、最重要的部分。
GNU的原则是共享,主旨是发展一个有别于一切商用Unix系统的,免费的且完整的类Unix系统——GNU’s Not Unix
目前Linux内核由GNU维护,所以Linux也叫做GNU Linux
Portable Operating System Interface,统一的系统编程接口规范,它规定了操作系统以接口的形式,提供的名字、参数、返回值。
Linux完全遵循POSIX标准
允许对某成果或者是派生成果的重用、复制和修改,对所有人都是自由的,但是不能声明做了原始工作,或者声明由他人所做。
操作系统是一个微型的类Unix系统,免费开源,Linux之父就是参照这款操作系统,才写出了第一个版本的Linux内核
为什么使用字符工作方式?
Linux是一种类UNIX操作系统。在UNIX发展早期的时候,类UNIX操作系统根本没有图形工作界面,只有字符工作界面。
1、在字符操作方式下可以高效的完成所有的任务,尤其是系统管理工具。
2、远程登录后,进入的只能是字符工作界面。
3、由于使用字符工作界面不用启动图形工作环境,大大的节省系统资源开销。
进入字符工作方式的方法:
1、在图形工作界面下开启终端窗口,进入字符工作方式。
2、切换到字符工作界面进入了字符工作方式。
3、使用远程登录方式进入字符工作方式。
Linux系统在任何时候都要运行在一个指定的运行级上,并且不同的运行级别的程序和服务都不同,所要完成的工作和达到的目的也就不同。
所有的进程将被终止,机器将有序停止,关机时系统处于该级别。系统默认运行级别不能设置为0。
一般用于系统维护,只有少数进程运行,服务不启动,禁止远程登录,类似于Windows下的安全启动模式登录
与级别3一样,只是NFS(网络文件系统)没有启动,相当于离线的多用户系统
允许多用户登录系统,有NFS,登录后进入控制台命令行模式
保留,一般不使用,留给用户自定义的运行级别
登录后进入图形GUI模式
所有进程被终止,系统重启
查看当前系统的运行级: runlevel
切换运行级命令: init N(0123456)
需要sudo获取权限
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b1hRtT7B-1591956045109)(C:\Users\201781~1\AppData\Local\Temp\1584685298098.png)]
3.1.2在字符界面下工作
虚拟控制台
Linux系统提供多个虚拟控制台(默认七个),每个控制台都可以独立使用,互不影响。
如果系统在图形下启动,那么可以使用Ctrl+Alt+F1~F6来切换到不同的字符界面的虚拟控制台。
如果系统在字符界面下启动,那么可以使用Alt+F1-F6进行多个字符界面虚拟控制台的切换。
字符界面比图形界面效率高的原因:
3.1.3在图形界面下工作
Ctrl+Alt+F7切换到图形界面的虚拟控制台。
Windows有一个个的驱动器盘符,每个盘符都有自己的根目录结构,形成了多个树并行的结构。
Linux管理硬盘能力非常强,因此不需要显示地分区,也就是没有盘符。
Linux把所有的文件都管理在根目录下 /
整个文件系统是以树形结构管理(倒悬树)的可以上下进入,但是不能左右进入。
bin 目录下存储了一些常用的系统命令。
sbin 目录下存储的是一些管理用户才能使用的高级命令。
boot 目录存储的是系统启动需要的数据,一旦该目录下的文件被破坏,无法正常启动系统。
dev 目录存储的是硬件设备文件,包含,鼠标、键盘、硬盘等。
etc目录下存储的是操作系统的各种配置文件。
home 目录下存储的是用户主目录,每个用户对自己的主目录有绝对的控制权。
lib 目录下存储的是库文件(代码库、以.so或者.a结尾的文件。)
media 目录下存储的是多媒体设备,例如光盘、U盘、共享文件夹。
mnt 目录下以挂载的方式呈现一些目录,比如U盘等。
opt 目录下安装一些常用的软件。
proc 目录下存储了各个进程的临时文件和数据,记录了系统运行的绝大部分性能信息和参数信息。
root 目录下存储了超级用户的相关文件。
sys 存储了系统中的设备和文件夹层次结构,系统信息。
usr和用户
Linux系统的命令提示符: wst@wst-VirtualBox:~$
wst:当前的登录用户
@:分割符号
wst-VirtualBox:当前系统的简写主机名
~:代表用户所在的目录,此处代表家目录
$:用户权限等级,超级用户:# 普通用户:$
一般格式 :命令 [选项][参数]
例如:
ls
ls -l /home/wst 参数是命令的操作对象、目录、用户、进程等。
注:若后面没有选项和参数,一般会有默认值。
通配符:
* :代表任意多个字符。
? :代表一个字符。
rm * :删除当前目录下的所有文件。
帮助手册 : man n 关键字
n :表示章节号
可以查: 系统命令、系统函数、标准库函数
q键: 退出
默认 :/etc/init/rc-sysinit.conf :需要用vim打开rc-sysinit.conf 文件
进去后,发现 这行 env DEFAULT RUNLEVEL=2 :本行表示设置默认允许级别为2
版本 后端 前端
Debian、Ubuntu等 DPT管理器 DEB软件包管理工具dpkg-deb/apt-get
ReHat RPM管理器 rpm
DEB 软件包管理工具
1、本地管理:dpkg命令
2、在线安装:apt类命令
更新软件源: sudo apt-get update
更新操作系统: sudo apt-get upgrade
安装软件: sudo apt-get install 软件名
卸载软件: sudo apt-get remove 软件名
1、Ubuntu软件中心
2、更新管理器
3、系统设置
pyDash
Linux系统中,文件和目录的命名规则
(1) cd / :回到根目录
(2) clear :清屏
(3)ls -l :查看当前目录下所有文件和目录各种属性,每一行第一个字符表示的就是文件类型。
- | 普通文件,包括了纯文本文件,二进制文件,各种压缩文件 |
---|---|
d | 目录 |
b | 块设备文件 |
c | 字符设备文件,例如键盘,鼠标 |
s | 套接字文件,通常用于网络数据连接 |
p | 管道文件 |
l | 链接文件 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Epynf1zW-1591956045112)(C:\Users\201781~1\AppData\Local\Temp\1585293217206.png)]
(1)pwd [OPTION] ... :显示当前路径。
参数:-L 目录连接链接时,输出连接的路径。
参数:-p 输出物理路径
(2)cd [相对路径或者绝对路径] :切换路径
cd / :回到根目录
cd .. :回到上级目录
cd :切换到当前用户的主目录
cd ~ :切换到当前用户的主目录
cd - :切换到上次所在的目录
ls命令:
ls -a :显示全部的文件,包括隐藏文件(开头.文件)
ls -A :与-a一样,不显示.和..两个目录
ls -d :只列出目录本身,而不列出
ls -F :显示的目录文件名之后加一个斜线(“/”)字符
ls -l :使用长格式列出文件和目录信息。
ls -R :连同子目录内容一起列出来
ls -S :以文件大小排序列出。
ls -t :以时间排序列出。
https://blog.csdn.net/weixin_43759352/article/details/105157844
4.1.3、touch命令
https://blog.csdn.net/weixin_43759352/article/details/105161279
4.1.4、cp命令、rm命令、mv命令、ln命令
https://blog.csdn.net/weixin_43759352/article/details/105161279
选项:
-n K:显示开头或结尾K行内容
-c K:显示开头或结尾K个字节的内容
选项:
-i:输出文件的MIME类型字符串
举例:
locate /etc/k 查找/etc目录下以k开头的文件
locate pwd 查找和pwd相关的所有文件
Linux:会一直发送数据包,ctrl+c结束
windows:只发送4次, 加/t 可以一直发送
host命令:域名查询工具。
例如: host www.baidu.com
sudo ifconfig eth0 up(开启)/down(关闭)
注意:
ssh登录Linux的远程服务器时,关闭网卡要千万小心,除非有多块网卡。
使用ifconfig命令配置网络信息,当机器重启或者网卡重启,都会让配置失效。
windows使用ipconfig查看。
telent:远程登录命令。采用明文传送报文的方式,速度快,但是安全性不高,除了远程登录外,还可以确定远程服务器的状态。
ssh:安全的远程登录。
ssh 用户名@serverip: 数据加密、速度稍慢、但安全性高。
ftp: 登录ftp服务器
登录格式: ftp 域名或者serverip
wall:发送广播信息。用于向系统当前所有打开的终端,输出信息。
1、输入wall 回车
2、输入要广播的内容
3、CTRL+D结束
write:用于发送信息给其他使用者。可以指定用户发送信息、如果用户有多个终端在线,还可以指定某个终端。
write 用户名[用户的终端名pts/123。。。]
发送完毕:CTRL+C结束
mesg命令:用户设置终端机的信息写入权限。
mesg y:其他用户可以利用write来把信息直接显示到自己终端上
mesg n:不允许用户可以利用write来把信息直接显示到自己终端上
查询用户的资料。
显示网络的状态
用于显示inode内容,以文字格式显示。
stat text.txt
who:显示系统中哪些使用者正在使用
uname:显示系统信息
4.4.3、clear 清屏
CTRL+L一样的可以清屏。
5.1.1.1、机械硬盘(HDD)
机械硬盘的逻辑结构
磁道:盘片表面以盘面中心为圆心,半径不同的同心圆成为磁道。
扇区:主要是存储数据地点的标识符和存储数据的数据段。每个扇区大小固定,一般为512B、扇区也是磁盘的最小储存单位。
柱面:不同的盘片,相同的磁道从上而下的圆柱区域称为柱面。
磁盘大小:磁头数柱面数扇区数*每个扇区的大小
机械硬盘的接口(磁盘类型)
IDE接口的硬盘(ATA、PATA)
价格低、兼容性强、性价比高、速度慢、线缆长度短、连接设备少,不支持热插拔
SATA接口的硬盘
又叫串口硬盘、速度更快、纠错能力强、安全性高
SCSI接口的硬盘
广泛用于服务器上,可以多任务、带宽大、价格高
SAS接口的硬盘
其实是串行的SCSI、一般用于高端的服务器。
5.1.1.2、固态硬盘(SSD)
磁盘设备在Linux下的表达方式
主设备号+次设备号+磁盘分区号
sd[a-z]x
查询命令所有磁盘设备文件 ls /dev/sd*
执行上面的命令,显示结果: /dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdb1
磁盘分区
MBR【主引导记录】和主分区
MBR:放置硬盘的信息区,一般有512B,分为两个部分:
1、466字节,放置引导代码,也就bootloder
2、64个字节,用于存放磁盘分区表
主分区:用来启动操作系统,一般最好把MBR放置在主分区
扩展分区和逻辑分区
主分区最大数为4,扩展分区也属于主分区,并且最多只能有一个扩展分区。
主分区可以马上使用,但不能再分区,扩展分区必须进行分区后才能使用,也就是划分为逻辑分区才可以使用。
Linux规定:逻辑分区必须是建立在扩展分区上。
实际上只有主分区和逻辑分区是用来存储数据的。
sudo fdisk -l
设备 启动 起点 终点 块数 Id 系统
/dev/sda1 * 2048 39845887 19921920 83 Linux
/dev/sda2 39847934 41940991 1046529 5 扩展
/dev/sda5 39847936 41940991 1046528 82 Linux 交换 / Solaris
创建磁盘分区的目的
1、提升数据的安全性。
2、支持安装多个操作系统。
3、多个小分区对比一个大分区有性能上的提升。
4、有更好的组织数据。
各个操作系统使用的文件系统并不相同,例如,WIN98用的FAT,WIn2000后使用NTFS,Linux使用EXT系列
df -T -h //-h显示换算单位方便查看,-T显示文件系统类型
一般文件系统会将文件的实际内容和属性分开存放:
1、文件属性存放在inode中(节点块)
2、文件的实际数据保存在block中(数据块)
3、还有一个超级块,用于记录整个文件系统的整体信息
这类管理文件的系统称为索引式文件系统,(EXT系列都是索引式文件系统)
1、jffs2
最早基于Linux2.0的内核,并且为嵌入式系统开发的文件系统。
2、yaffs
yaffs/yaffs2专门为嵌入式系统使用的一种文件系统。
3、Cramfs
一款只读的压缩文件系统。
4、Romfs
传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统。
touch 文件名 创建文件
rm 文件名 删除文件、不经过回收站
cp 源文件(位置+文件名) 目标位置+新文件名
mv 源文件(位置+文件名) 目标位置+新文件名
注意:使用cp、mv如果目标位置有同名文件则会覆盖
more 文件名 显示文件开头内容 q退出
cat 文件名 显示文件的所有内容
head 文件名 只显示文件的开头
tail 文件名 只显示文件的末尾
mkdir 目录名 创建目录
rmdir 空目录名 删除空目录
1、列出文件系统的整体磁盘使用量——df:评估了文件系统的磁盘使用量,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P0DEpbuW-1591956045114)(D:\typora\File\Linux学习笔记image\Snipaste_2020-04-17_14-13-12.png)]
2、统计目录或文件所占磁盘空间大小——du
du 参数 文件名或目录名
举例:
创建一个wst的空文件夹
用命令:du -h wst
显示
4.0K wst
3、连接文件——ln
卷标就是一个磁盘的标识、不唯一
不同的文件系统的卷标管理工具:
对于ext2/3/4类型的文件系统使用:e2label
对于ntfs类型的文件系统使用:ntfsprogs
对于FAT类型的文件系统:mtools
如何设置文件系统的磁盘卷标名:
1、显示/dev/sda1块设备的卷标名
sudo e2label /dev/sda1
2、设置卷标名disk1
sudo e2label /dev/sda1 /disk1
1、fdisk命令创建分区(主分区、逻辑分区)
sudo fdisk /dev/sda
n 新建分区
p 主分区
e 扩展分区
l 逻辑分区
p 显示当前分区
d 删除分区
q 不保存退出
w 保存并退出 慎重使用
2、格式化分区——创建文件系统
分区完成后、如果不格式化写入文件系统,则不能正常使用,此时需要mkfs命令对磁盘分区进行格式化
sudo mkfs -t 文件系统类型 -c 分区设备号
-t:指定文件系统类型
-c:建立文件系统前先检测有无坏块
3、挂载文件系统
挂载:将硬盘设备的文件系统和Linux系统中的文件系统,通过指定的目录(作为挂载点)进行关联
mount 【参数】【分区设备名】 【挂载点】
举例:
sudo mount ext3 /dev/sda3 /media/sda3
4、卸载文件系统
sudo umount <分区设备名或者是挂载点>
sudo umount /dev/sda3 (/media/sda3)
1、光盘
建立挂载点
sudo mkdir /mnt/cdrom
挂载光盘
sudo mount /mnt/cdrom
卸载
sudo umount /mnt/cdrom
2、U盘
1、先查看u盘的分区设备名
sudo fdisk -l
2、创建挂载点
sudo mkdir /mnt/usb
3、挂载u盘
sudo mount -t vfat -o iocharset=utf8 u盘的分区设备名 /mnt/usb
Linux用户与用户组的关系:
Linux的UID和GID(用户ID和组ID)
Linux系统中,每个用户两种ID号,用户ID(UID),组ID(GID)
1、/etc/passwd文件:系统用户配置文件,存储了系统中所有的用户的基本信息,并且所有用户都可以对此文件进行读操作。
vim /etc/passwd 以只读的方式打开passwd文件
退出:ZZ
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9l3CGYJG-1591956045115)(D:\typora\File\Linux学习笔记image\Snipaste_2020-04-24_14-08-28.png)]
用户名 :密码 :UID :GID :描述信息 :用户的主目录 :默认的Shell
用户名:就是一串能代表用户身份的字符串。
密码:“X”表示此用户设有密码,但不是真正的密码,真正的密码保存在/etc/shadow文件中。
UID:每个用户都有唯一的一个UID,范围:0~65535。
0:表示超级用户
1~999:表示系统用户(伪用户)
1000~65535:普通用户。
GID:表示用户的初始组的组ID。
初始组:指的是用户登录时就拥有这个组的相关权限,每个用户的初始组只能有一个。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的共同权限。
描述性信息:只是用于解释这个用户的意义而已。
默认的Shell:Shell是Linux的命令解释器,可以理解成用户登录后拥有的权限。
2、etc/shadow文件(影子文件):用于储存Linux系统中用户的密码信息。
sudo vim /etc/shadow
用户名:加密密码:密码最后一次修改时间:最小的修改时间间隔:密码有效期:密码有效期截至前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
date -d "1970-01-01 18326 days"//换算天数与日期
最小的修改时间间隔:最后一次修改密码日起,几天内不能修改密码,0表示随时可以修改
密码有效期:默认99999,亦可以认为是永久生效
密码有效期截至前的警告天数:提前几天警告
密码过期后的宽限时间:0:立即失效 -1:永不失效
账号失效时间:如果规定了此时间,无论密码是否失效,到期后,帐号都无法使用,以1970.1.1为基准
保留字段:目前还没有使用
3、/etc/group文件:用户组配置文件,所有的用户组的所有信息都在此文件中
组名:组密码:GID:该用户组中的用户列表
组名:描述组名称的一串字符串,不能重复
组密码:“x”表示有组密码,真正的加密后的组密码保存在/etc/gshadow中
GID:该用户组中的用户列表:显示所有用户(附加用户)
4、/etc/gshadow文件:储存组用户的组密码信息
组名:加密密码:组管理员:组附加用户列表
1、useradd命令:添加新的系统用户。
useradd 【选项】 用户名
创建用户账号的默认值可以通过:useradd -D 来查看。
修改:
2、passwd命令:修改用户密码
passwd [选项] 用户名 //root用户
选项:
3、chage命令:修改用户密码状态
chage [选项] 用户名
选项:
4、userdel命令:删除用户
userdel [选项] 用户名
选项:
6.2.2、组帐号管理
groupadd [选项] 组名
gpasswd [选项] 组名
选项:
4、newgrp命令:切换用户的有效组
newgrp 组名
1、创建一个有家目录,和shell为bash的用户user2
sudo useradd -g group1 -G group2,group3 -m -s /bin/bash user2
2、给user2设置密码
passwd user2
3、切换到user2用户
su - user2
4、通过newgrp命令切换user2的有效组,并且创建文件
mkdir user1
newgrp group2
mkdir user2
newgrp group3
mkdir user3
ls -l
6.2.3、用户和组状态命令
-g GID :修改组ID
-n 新组名: 修改组名:groupmod -n 新组名 旧组名
从普通用户切换到root用户,从root用户切换到普通用户,以及普通用户之间切换
su [选项] 用户名
选项:
4、id命令:查看用户的UID和GID
磁盘配额:Linux系统中用来限定特定的普通用户或者用户组在指定的分区上占用的磁盘空间或者文件个数。
1、磁盘配额限制普通用户和用户组,root用户不能做磁盘配额
2、磁盘配额只针对分区,不能针对目录
3、可以限制用户所占用的磁盘容量大小(block),还可以限制占用的文件数(inode)
安装quota命令:
sudo apt-get install quota
磁盘配额中的常见概念:
创建一块虚拟硬盘:
关闭虚拟机->设置->储存->控制器SATA->添加虚拟硬盘->创建新的虚拟硬盘->VDI->固定大小->位置、名字、大小->创建
对sdb硬盘进行分区:
sudo fdisk /dev/sdb
格式化分区:
sudo mkfs -t ext3 -c /dev/sdb1
挂载分区:
sudo mount /dev/sdb1 /home/test
设置挂载参数
sudo mount -o remount,usrquota,grpquota /home/test
mount |grep sdb1
quotacheck [-avugfM] 文件系统
一般只需要使用 quotacheck -avug
quotaon [-avug]
quotaon [-uvg] 文件系统名称
命令格式与quotaon相同
edquota [-u 用户名] [-g 群组名]
edquota -t
edquota -p 源用户名 -u 新用户名
sudo quota -uvs linux
查看文件或者目录的权限信息
ls -l
rwx(所有者权限) r-x (所属组权限)r-x(其他人权限)
rwx权限对文件的作用
r:表示可读取此文件的实际内容
w:表示文件可以被编辑
x:表示该文件具备被系统执行的权限
rwx权限对目录的作用
r:表示读取目录结构列表的权限:ls
w:对于目录,w权限是最高权限
x:表示用户可以进入目录:cd
chmod命令通过数字修改文件权限
r --> 4
w --> 2
x --> 1
例如:rwx(所有者权限) r-x (所属组权限)r-x(其他人权限)
所有者:4+2+1 = 7
所属组:4+1 = 5
其他人:4+1 = 5
对应的权限值 755
chmod [-R] 权限值 文件\目录名
chmod命令通过字母修改文件权限
chmod [u/g/o/a] [=(设定)/+(加入)/-(删除)] [r/w/x] 文件名
chown [-R] 所有者:所属组 文件或目录
默认情况下,创建一个文件的权限为“rw-r–r-- 目录:rwx r-x r-xr-x
umask:root用户默认0022,— -w- -w-普通用户默认0002 -------w
文件或者目录的初始权限 = 文件或目录的最大默认权限 - umask权限掩码
umask 权限掩码
umask 权限掩码
1、任务
通常一个任务就是程序的一次运行。
2、程序
程序是使用计算机语言编写的可以实现特定目标或者解决特定问题的代码集合
储存在磁盘上,包括指令和数据的实体
3、进程
就是运行中的程序
一个运行的程序,可能有多个进程,每个进程在过程中执行特定的任务
是程序执行和管理资源的最小单位
4、进程的分类
5、查看进程
简单形式
PS
以简略的方式显示当前用户有控制终端的进程信息
ps axu
ps -efl
6、父进程、子进程、孤儿进程、僵尸进程
父进程启动子进程后,子进程可以与父进程同时运行
子进程先于父进程结束,子进程向父进程发送信号,父进程回收子进程的相关资源
父进程先于子进程结束,子进程成为了孤儿进程,同时init进程收养,变成了init进程的子进程
子进程先于父进程结束,但是父进程没有回收子进程的资源,子进程就变成了僵尸进程
7、进程标识符(进程ID)
每个进程都有一个非负整数表示的唯一标识,PID
任何时候PID都是唯一的,但是可以重用,当一个进程退出的时候,其进程ID就可以被其它进程使用
延时重用
Linux手动启动进程
前台启动进程
后台启动进程:其实就是在命令的结尾处添加一个 & 符号
Linux调度启动进程:
实现调度启动的方式:at、crontab命令
top [选项]
修改NI值:
1、NI范围-20~19
2、普通用户调整的NI范围是0~19,而且只能调整自己进程
3、普通用户只能调高NI值,不能降低
4、只有root用户才能设定NI值为负数,并且可以调整任何一个用户的进程
nice:可以给要启动的进程赋予NI值,但是不能修改已启动的进程的NI值
renice命令:可以修改正在运行的进程的NI值
kill [信号] PID
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4e5XK5Mz-1591956045116)(D:\typora\File\Linux学习笔记image\Snipaste_2020-05-15_20-45-31.png)]
kill 2288//默认信号15
kill -9 2288//强制结束进程
Shell也是一个应用程序,它连接了用户和Linux内核,让用户能够更高效,安全,低成本的使用Linux内核,这也是Shell的本质。
Shell也是一种脚本编程语言。
1、连接用户和内核
2、还能连接其他程序
3、Shell还支持编程
Shell是通过内核提供的接口函数,来实现用户与内核之间的交互
常见的Shell有sh,bash,csh,ash,dash等
查看Shell
当前系统可用的Shell都记录在/etc/shells文件中
cat /etc/shells
查看shell指向哪种解释器:
ls /bin/sh -l
如何切换sh的指向,指向到bash:
sudo dpkg-reconfigure dash
1、进入Linux控制台
Ctrl+Alt+Fn(1、2、3…)
2、使用终端
命令提示符:
wst@wst-VirtualBox:~$
基本格式:
command [选项][参数]
1、使用选项:ls -l
2、使用参数:参数就是命令的操作对象 ls -l /bin/sh
3、一起使用
一个外部的应用程序是如何变成一个Shell命令的?
Shell在启动文件中增加了一个叫做PATH的环境变量,这个变量保存了Shell对外部命令的查找路径,如果找不到对应的文件名,则直接保错。
查看PATH环境变量的值:
echo $PATH
让应用程序编程内部命令:
Shell的内置命令本质是一个自带的函数。
Shell的外部命令本质是一个应用程序,执行外部命令就是启动一个应用程序。
*Text*
[ab-df]*
[ab-dm]?
??
1、单引号
由单引号括起来的字符都作为普通字符出现,特殊字符被单引号括起来后,失去原有的意义。
echo '$PATH'
$PATH
2、双引号
双引号属于弱引用,双引号内有命令、变量等,会先把变量、命令解析出来结果,然后输出最终结果。
echo "$PWD"
/home/wst
3、注释符
单行注释
直接在行的最前面加上#即可
多行注释
1、eof 截止符
:< 举例: 2、感叹号 :<
3、逗号 :,注释代码 , 将两个或者多个命令(程序、进程)连接在一起,把一个命令的输出作为下一个命令的输入 Linux下使用|连接多个命令,也成为管道符 举例: 改变默认的输出方式,可以由打印到屏幕改为写入文件 举例: 管道和重定向的区别 不能尝试: Shell变量 定义 使用变量 只要在变量前加入$即可 删除变量 unset 变量名 1、直接执行./test.sh 需要给Shell程序用户的执行权限 2、使用bash test.sh 3、使用. test.sh 什么是嵌入式系统? 嵌入式系统是以应用为中心,以现代计算机技术为基础,能够根据用户需求(功能、可靠性、成本、体积、功耗、环境等灵活裁剪软硬件模块的专用计算机系统。 选择嵌入式处理器(硬件平台)-》选择嵌入式操作系统-》开发嵌入式应用软件 -》测试 -》系统测试 -》开发结束 1、建立开发环境 安装操作系统以及交叉编译器 2、建立引导程序 下载公开的源代码 3、下载已经移植好的Linux操作系统内核 4、建立根文件系统 5、开发应用程序 选项: -R:以只读形式把文件放入vim编辑器中 +n:打开文件到第n行 +: 打开文件到最后一行 -r:恢复上次vim打开时崩溃的文件 水平多窗口: 编辑-》预处理-》编译-》汇编-》链接 1、编辑: vim hello.c ->hello.c 2、预处理: hello.c ->hello.i(预处理文件) 3、编译: hello.i ->hello.s(汇编文件) 4、汇编: hello.s ->hello.o(目标文件) 5、链接: hello.o ->a.out(可执行文件) 得到默认名字为 a.out 的可执行文件 -E:只做预处理,不进行编译 -o 文件名:指定输出文件 -S:只编译,不汇编 -c:编译、汇编,而不链接,得到目标文件 -l:链接指定的文件 -g:生成调试信息 1、C语法错误。 2、头文件错误。 3、段错误。 4、出现中文字符。 5、编译标准错误。 注: CTRL+空格:切换输入法。 vim的全局配置一般在/etc/vim/vimrc或者/etc/vimrc 个人用户的配置在~/.vimrc 先输入冒号: 打开行号: 配置vimrc 1、打开vimrc 2、进行配置 输入如下配置代码 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3eE6RN1L-1591956045117)(C:\Users\201781~1\AppData\Local\Temp\1591337738814.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gse7832A-1591956045118)(C:\Users\201781~1\AppData\Local\Temp\1591337750193.png)] 写完之后,先ESC、后大写ZZ 保存退出!!! 3、设置配置生效 8.5.1、GDB的简单使用流程 1、编译代码加入-g选项 2、如果编译成功,启动GDB调试器 注:加上-silent是去掉描述提示信息。 3、输入GDB调试命令,进行调试 gdb -l选项:列出源文件内容。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8e6OgUyE-1591956045118)(C:\Users\201781~1\AppData\Local\Temp\1591339179603.png)] 默认每次显示10行源代码,如果没显示完,可以继续使用l命令。。。 注意:q退出GDB.。 gdb -b选项:设置断点。 设置断点的方法:指定内存的地址为断点,指定行号为断点,指定函数名为断点。 gdb -r选项:执行程序。 断点设置好后,r开始执行程序,直到断点处停下。 gdb -p选项:打印变量的值 gdb -n选项:单步调试。 gdb -c选项:继续执行程序。 直到遇到断点或者程序结束 gdb -q(quit) 选项:退出调试。 Makefile可以认为是一个工程文件的编译规则。 1、编译的时候徐需要链接库的问题 2、编译大的工程会花费大量的时间 到默认名字为 a.out 的可执行文件 -E:只做预处理,不进行编译 -o 文件名:指定输出文件 -S:只编译,不汇编 -c:编译、汇编,而不链接,得到目标文件 -l:链接指定的文件 -g:生成调试信息 1、C语法错误。 2、头文件错误。 3、段错误。 4、出现中文字符。 5、编译标准错误。 注: CTRL+空格:切换输入法。 vim的全局配置一般在/etc/vim/vimrc或者/etc/vimrc 个人用户的配置在~/.vimrc 先输入冒号: 打开行号: 配置vimrc 1、打开vimrc 2、进行配置 输入如下配置代码 [外链图片转存中…(img-3eE6RN1L-1591956045117)] [外链图片转存中…(img-Gse7832A-1591956045118)] 写完之后,先ESC、后大写ZZ 保存退出!!! 3、设置配置生效 8.5.1、GDB的简单使用流程 1、编译代码加入-g选项 2、如果编译成功,启动GDB调试器 注:加上-silent是去掉描述提示信息。 3、输入GDB调试命令,进行调试 gdb -l选项:列出源文件内容。 [外链图片转存中…(img-8e6OgUyE-1591956045118)] 默认每次显示10行源代码,如果没显示完,可以继续使用l命令。。。 注意:q退出GDB.。 gdb -b选项:设置断点。 设置断点的方法:指定内存的地址为断点,指定行号为断点,指定函数名为断点。 gdb -r选项:执行程序。 断点设置好后,r开始执行程序,直到断点处停下。 gdb -p选项:打印变量的值 gdb -n选项:单步调试。 gdb -c选项:继续执行程序。 直到遇到断点或者程序结束 gdb -q(quit) 选项:退出调试。 Makefile可以认为是一个工程文件的编译规则。 1、编译的时候徐需要链接库的问题 2、编译大的工程会花费大量的时间 注:本篇文章来自本学期Linux课程中老师所总结+自己的一些总结。echo "test"
echo "test"
echo "test"
:<<eof
echo "test"
echo "test"
eof
7.5、输入和输出
7.5.1、管道
command1 | command2 [|command3.....]
find ~/ | grep "test"
7.5.2、重定向
ls > test.txt
ls >> test.txt
在输出重定向中,>表示覆盖,>>表示追加
command1 > command2 [|command3.....]
7.6、Shell编程
7.6.1、Shell基本语法
变量名=value
变量名='value'
变量名="value"
注意:赋值号周围不能加空格
7.6.2、Shell程序的控制结构语句
if 条件1 then 如果条件1为真,则执行
elif 条件2 then 2为真,则执行
else 1、2为假则执行
for 变量名 in 列表
do
命令
done
7.6.3、运行Shell程序的方式
chmod u+x hello.sh
./test.sh
执行方式
是否需要执行权限
是否以新进程运行脚本
./test.sh
是
是
bash test.sh
否
是
. test.sh
否
否
八、嵌入式Linux及编程
8.1、嵌入式系统概述
8.1.1、嵌入式系统的基本概念
8.1.2、嵌入式系统的体积结构
硬件部分:
处理器、储存器、外部设备、I/O接口
软件部分:
驱动层:是直接跟硬件打交道
操作系统层
中间件层
应用层
8.2、嵌入式开发
8.2.1、嵌入式系统开发概述
8.2.2、嵌入式软件开发概述
嵌入式开发的模式
A类机编写源代码,编译得到可执行程序,发布给B类机运行,这种编译模式叫做交叉编译
非嵌入式开发模式
A类机编写源代码,编译得到可执行程序,发布给A类机运行
为什么要用交叉编译
1、嵌入式的CPU简单,本身无法搭建开发环境,有些甚至连操作系统都没有
2、交叉编译可以让高性能的机器为低性能的机器开发软件
8.3、编辑器VI
8.3.1、VI的三种工作模式
命令模式
使用vim编辑文件时,默认处于命令模式。
可以移动光标的位置,可以对文件内容进行复制、粘贴、删除
输入模式
可以对文本进行写操作,可以使用i、I、a、A、o、O快捷键进入输入模式
当文件编辑完成后,按Esc可以返回命令模式
编辑模式(末行模式)
用于对文本中的指定内容的保存、查找、替换等操作
使用编辑模式方法:在命令模式状态下按下 : 键,此时,编辑器末行出现 :符号,则进入了编辑模式,可以输入对应的操作指令了
退出编辑模式:按Esc
8.3.2、VI常用命令
vim打开文件
vim [选项] 文件名
vim删除文本
在命令模式下:
x:删除光标处字符
dd:删除光标所在行
ndd:删除当前行(包括当前)后n行
dG:删除当前行后所有内容
G:删除光标后所有内容
vim复制和粘贴文本
在命令模式下:
yy:所在行复制到粘贴板,可以加n,复制多行
p:粘贴到当前行下一行
P:粘贴到当前行前一行
vim保存退出文本
在编辑模式下:
:wq 保存并退出
:wq! 强制保存并退出
:q 不保存就退出
:q! 不保存,强制退出
:w
:w!
:w 文件名
在命令模式下:
ZZ: 保存并退出
vim撤销和恢复
在命令模式下:
u:撤销最近一次对文本的修改操作
U:第一次会撤销对所在行的全部操作,第二次恢复对该行文本的所有操作
8.3.3、VI的高级应用
vim可视化模式
在命令模式下:
v:以字符为单位,进入可视化
V:以行为单位,进入可视化
ctrl+v:以区域为单位,进入可视化
vim多窗口编辑模式
在命令模式下输入 :sp 文件名
垂直多窗口:
在命令模式下输入 :vs 文件名
切换窗口:ctrl + WW
8.4、编译器GCC
8.4.1、GCC的编译过程
8.4.2、GCC的基本用法和选项
1、生成可执行文件
gcc [选项] 源文件名
2、运行可执行文件
./a.out
3、GCC常用的选项
8.4.3、GCC的错误类型及其对策
hello.c
#include
gcc -std=c99 hello.c && ./a.out
for(int i=0;i<10;i++) 需要加-std=c99
8.4.4、配置vim
set number
set nonumber
:set nonumber?
vim ~/.vimrc
1 "显示行号
2 set number
3 "设置tab键的宽度
4 set tabstop=4
5 "设置缩进的宽度
6 set shiftwidth=4
7 "自动对齐
8 set autoindent
9 set smartindent
10 "保存推出函数
11 func! SaveExit()
12 exec "wq"
13 endfunc
14
15 "不备份
16 set nobackup
17 "不生成临时文件
18 set noswapfile
19
20 "映射Ctrl+z按键调用保存并推出函数“
21 map <C-z> :call SaveExit()<CR>
22 imap <C-z> <ESC>:call SaveExit()<CR>
source ~/.vimrc
8.5、调试器GDB
gcc gdb_sum.c -o gdb_sum -g
gdb gdb_sum -silent
8.6、工程管理器Makefile
gcc a.c b.c d.c -o out
2、运行可执行文件
./a.out
3、GCC常用的选项
8.4.3、GCC的错误类型及其对策
hello.c
#include
gcc -std=c99 hello.c && ./a.out
for(int i=0;i<10;i++) 需要加-std=c99
8.4.4、配置vim
set number
set nonumber
:set nonumber?
vim ~/.vimrc
1 "显示行号
2 set number
3 "设置tab键的宽度
4 set tabstop=4
5 "设置缩进的宽度
6 set shiftwidth=4
7 "自动对齐
8 set autoindent
9 set smartindent
10 "保存推出函数
11 func! SaveExit()
12 exec "wq"
13 endfunc
14
15 "不备份
16 set nobackup
17 "不生成临时文件
18 set noswapfile
19
20 "映射Ctrl+z按键调用保存并推出函数“
21 map <C-z> :call SaveExit()<CR>
22 imap <C-z> <ESC>:call SaveExit()<CR>
source ~/.vimrc
8.5、调试器GDB
gcc gdb_sum.c -o gdb_sum -g
gdb gdb_sum -silent
8.6、工程管理器Makefile
gcc a.c b.c d.c -o out