ubuntu个人笔记

https://mubu.com/mobile/doc/4N80wLkFk6a
Bootloader是嵌入式系统在加电后执行的第一段代码,通过这段小程序,进行硬件初始化,获取内存大小信息等,调整手机到适配状态。
rm用来删除文件
ll或ls -l查看文件属性
inti 6重启
touch用来创建文件
Vim编辑
chown修改属性
chmod
esc+:+wq退出保存
安装ssh远程登录服务
sudo apt install ssh
启动服务:
service sshd start
查看ssh服务的状态
输入以下命令:
sudo service sshd status
如果出现
Loaded: error (Reason: No such file or directory)
提示的话,说名没有安装ssh服务,按照第二步:安装ssh服务。
如果出现
Active: inactive (dead)
说明已经安装了ssh服务,但是没有开启。按照第三步:开启ssh服务。
linux文件系统存储单元是块
ls(英文全拼:list files): 列出目录及文件名
cd(英文全拼:change directory):切换目录
pwd(英文全拼:print work directory):显示目前的目录
mkdir(英文全拼:make directory):创建一个新的目录
rmdir(英文全拼:remove directory):删除一个空的目录
rm +目录 -r 删除目录 (rm -ri +目录)
cp(英文全拼:copy file): 复制文件或目录
cp 目录 新目录 -r
cp 文件1 文件2 (文件1内容复制到文件2)

cp 目录1/* 目录2/ 将目录1中的文件拷贝到目录2中,不包括目录1本身

rm(英文全拼:remove): 删除文件
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
mv 修改名字

mount +设备名 +/mnt 挂载U盘在 /mnt

umout + 设备名 卸载U盘

peng@peng~$:第一个peng是登录用户 第二个peng是主机名 ~ /home目录 $ 普通用户 # root用户

你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp。
解压安装 sudo dpkg -i +压缩包
卸载 sudo dpkg -r +应用

mkdir (创建新目录)
mkdir -p /a/bb/cc/ 建多个嵌套目录需要加上-p
如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。
语法:
mkdir [-mp] 目录名称
选项与参数:
-m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
[root@www ~]# cd /tmp
[root@www tmp]# mkdir test <创建一名为 test 的新目录
[root@www tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4’:
No such file or directory <
没办法直接创建此目录啊!
[root@www tmp]# mkdir -p test1/test2/test3/test4

df
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:

df [-ahikHTm] [目录或文件名]
选项与参数:

-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb

1、文件系统:

挂载点是Linux访问磁盘的入口,能够使数据正常写入磁盘
Linux启动时,第一个必须挂载的是根文件系统
init 进程是系统所有进程的起点,
init 程序首先是需要读取配置文件 /etc/inittab。
/boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件
/etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动
/lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。
/bin:存放着最常用的程序和指令
/sbin:只有系统管理员能使用的程序和指令
/dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。
/media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下
/mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
/lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件
/tmp:这个目录是用来存放一些临时文件的
/root:系统管理员的用户主目录
/home:用户的主目录,以用户的账号命名的
/usr:用户的很多应用程序和文件都放在这个目录下,当前软件安装目录,类似于windows下的program files目录
/usr/bin:系统用户使用的应用程序与指令
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序
/usr/src:内核源代码默认的放置目录
4096 代表目录大小

手动挂载设备,一般挂载在/mnt目录底下

2、光标操作

删除光标之后的字符就是删除光标所覆盖的字符
CTRL+B:光标向前移动一个字符
CRTL+H:删除前一个字符
CTRL+D:删除光标后一个字符
CTRL+A:光标移动到行前
CTRL+E:光标移动到行尾
CTRL+U:删除光标之前的字符
CTRL+L:清屏
CTRL+p:向上
CTRL+n:向下

3、目录操作

. ->当前目录
… ->当前上一级目录

-> 在临近的两个目录切换 cd -
pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称
ubuntu绝对路径:例如在目录/home/lzj/temp下有一个文件filename.txt那么filename.txt文件的绝对路径就是/home/lzj/temp

ubuntu相对路径:如果你当前路径是在/home/lzj下,那么filename.txt文件的相对路径就是./temp

cat +文件 查看文件内容
more +文件 显示当前一部分内容,按换行可以一行一行显示剩余内容,按b键可以往前翻,按空格,全部显示,按ctrl+C直接退出。

less +文件 显示当前一部分内容,可以上下翻看内容

head + -n+文件 显示文件前n行

tail + -n+文件 显示文件最后n行

4、vi

vi:

有三种模式 :

命令模式 : i 命令(在光标前面插入)I命令(在光标所在行行首插入),a命令(在光标后插入),A命令(在光标所在行末插入),o命令(在光标下一行插入)

O命令 光标上一行插入

编辑模式

末行模式 在命令模式下,按下:就可以进入 (就是在最后一行输入指令)

①:或 / 或?可以从命令模式切换进入底部导航模式。

②return 命令从底部导航模式切换到命令模式。

④escape是键盘上的esc键,作用是从编辑模式下切换到命令模式下面。

移动光标 除了方向键 还可以按HJKL(对应前,下,上,后)

移动到行首 0

移动到行尾 $

移动到文件开始位置 gg

移动到文件末尾 G

跳转到第N行 NG

删除光标后面字符 x

删除光标前面的字符 X

删除光标所在的单词 dw 光标移动到单词开始位置 否则只能删除光标之后的那部分单词

删除光标到行首的字符串 d0

删除光标所在行 dd(oo)

删除多行 ndd

撤销 u

反撤销 ctrl +r

复制 yy

复制多行 nyy

粘贴 p (光标所在的下一行)

粘贴P(光标所在行)

可视化 按V

查找: /关键字

(命令模式)r:替换字符

缩进:

向右 >>

向左 <<

末行模式 :+指令

:n跳转到第n行

:ns /字符串1/字符串2 /g 将n行的所有字符串1替换成字符串2

:n,ms /字符串1/字符串2 /g 将n,m行的所有字符串1替换成字符串2
%s /字符串1/字符串2 /g 将所有字符串1替换成字符串2

:!pwd 暂时退出vi

:q! 强制不保存退出

:wq(x) 保存退出

:w 保存

(命令模式下)zz 保存退出

分屏

:sp 水平分屏 在命令模式下 按ctrl +ww就可切屏

:wqall 保存退出

:qall 退出

:wq 保存退出光标所在屏

:q 退出光标所在屏

:vsp 垂直分屏

5、链接

软连接 ln -s +文件 (创建快捷方式)

硬链接(指针)创建 ln+文件 +文件.hard 硬链接不占用磁盘空间
硬链接 将多个目录项中的文件指针指向同一个innode结点
删除多个硬链接文件,需要把全部的硬链接删除才行

目录不能创建硬链接

软连接可以指向文件和硬链接
硬链接直接指向文件

6、查看文件 磁盘情况

wc +文件 得到行数(包括空行) 单词数 字节数
od (+属性)查看二进制文件
linux 执行可执行文件 ./+文件
du -h 显示当前所有目录和目录大小
df -h 查看磁盘情况

wc: word count
od: octal dump
du : disk usage
df :disk free

命令解析器 which +命令(显示命令是在哪里的)
which cd 不能查到 cd 是内建命令,查看不到

7、修改属性

查看系统中有哪些用户 cd /home ,ls

查看当前用户命令 :whoami

chown (change owner) : 修改所属用户与组
chown +所有者 +所属组+文件
chgrp +所属组 +文件
chmod (change mode) : 修改用户的权限
以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)

chmode o+w 文件 (给其他用户添加写权限)
chmode o-w 文件 (给其他用户删除写权限)
chmode a=w 文件 (给所有用户添加写权限,其他权限删除,即覆盖原来的属性)
如果a=rwx,优先级给r
u-文件所有者
o-其他用户
g-文件所属组
a - 所有用户
数字设定法
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx— 分数则是:
r:4(读) w:2(写) x:1(执行)
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= — = 0+0+0 = 0

/etc/pass:查看用户ID和组ID

-权限要注意
在数字设定法中,修改文件属性,需要三者都要写出来(即 u g o)

8、查看文件路径

find +查找目录 + -name +文件名

find +查找目录±size +(-)大小(+大于,-小于)

find +查找目录 + -type(d/b/c/s/l/p/f)

grep -r + “关键字”+目录

9、软件安装

10、压缩,解压缩工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WUVgsQB3-1648611503776)(C:\Users\PENG.H\Desktop\ubuntu\QQ截图20211111231432.png)]

tar:

压缩:

tar zcvf 文件名.tar.gz 要打包的文件(目录)

tar jcvf 文件名.tar.bz2 要打包的目录(文件)

解压缩:

tar zxvf 压缩包.tar.gz-C 目录

tar jxvf 压缩包.tar.bz2-C 目录

rar:

需要安装 sudo apt-get install rar

压缩:

rar a 压缩包名字(无需后缀名) 要压缩的文件

解压缩:

rar x 要解压缩的压缩包 目录

zip:

压缩:

zip -r压缩包名字(无需后缀名) 要压缩的文件

解压缩:

unzip 压缩包

unzip 压缩包 -d (指定目录)

11、ubuntu 连接网络不见解决方法

查看ubuntu的网络设置:

cd /var/lib/NetworkManager

sudo gedit NetworkManager.state

查出的结果如果如下那么可以继续:第一行显示的为false

在这里插入图片描述

修改完后

在这里插入图片描述

退回到终端来输入如下内容重新开启网络服务:

sudo service network-manager start

12、有关进程命令

ps aux | grep bash 可查看进程id 还有其他属性

ps aux | grep +进程

kill -l 查看信号

kill -信号 进程ID 杀死进程

env 查看环境变量

env | grep PATH 通过管道查看环境变量中的PATH变量(管道 | 起过滤作用)

top 任务管理器 ctrl +c 退出

13、网络相关命令

IP address 或者 ifconfig 查看IP地址,MAC

ping查看是否能连通

nslookup +域名 查看域名IP

14、用户管理

sudo adduser 用户名 添加新用户 (用户名只能是小写字符)

sudo useadd -s /bin/bash -g 所属组名 -d /home/所属主 -m 创建组

切换用户 su +用户名

创建组 :sudo groupadd 组名

修改密码 :sudo passwd +用户名

修改当前用户密码 :sudo passwd

删除用户 :sudo deluser +用户名

sudo user -r 用户名 -r的作用是把用户的主目录一起删除

查看有哪些用户 vi /ect/passwd

15、ftp,ssh服务器搭建

服务器端:

sudo apt-get install vsftpd

修改配文件

sudo service vsftpd restart 重启服务

客户端:

实名登录(不常用)

登录到服务端:

先切换另一个用户,

ftp +ip(service)

服务器用户名 ,密码

bye 退出登录

上传文件 put +文件

文件下载 get +文件

不允许操作目录,如果要操作目录,则需要打包

匿名用户

ftp +service(ip)

用户名 anonymous

密码

不允许匿名用户在任意目录直接切换

只能在一个指定的目录范围内工作

需要在ftp服务器上创建一个匿名用户的目录 --匿名用户根目录

lftp 第三方ftp 软件

连接登录 lftp ip (service)

login

lftp 上传多个文件 mput aaa bbb ccc

lftp 下载多个文件 mget aaa bbb ccc

lftp 上传,下载目录

上传 mirror -R dir

下载 mirror dir

ssh 服务

安装 sudo apt-get install ssh

连接 ssh 用户名@ip

退出连接 logout

scp 超级复制

scp -r 目标用户名@目标主机IP: 目标文件绝对路径 保存文件绝对路径

16、echo ,开机关机指令

echo $变量 将变量的东西转成字符串输出

QQ截图20211115215530

poweroff 关机(init 0)

reboot 重启 (init 6)

QQ截图20211115220032

shutdown

QQ截图20211115215629

17、GCC

GCC安装 :sudo apt-get install gcc

QQ截图20211120165952

当编译过程中找不到头文件

gcc xx.c -I ./包含头文件路径 -o xx 运行: ./xx

gcc xx.c -o xx -I …/包含头文件路径 -D DEBUG 编译宏

在编译命令最后添加 -Wall 提示更多警告信息

生成.o文件

gcc *.c -c -I…/include

18、静态库,共享库

静态库:

命名:lib+库名+.a 如:libtext.a

制作过程:

1).生成对应的.o文件-- .c --> .o-c
2),将生成的.o文件打包ar rcs+静态库的名字(libMytest.a)+生成的所有的.o

共享库:

命名: lib+名字+.so

制作过程:

1).生成与位置无关的.o文件

2).打包生成的.o文件(动态库)gcc -shared -o libmytest.so *.o -I include

19、gdb调试

开始调试 :start gbd 程序

设置断点 :b n n–行(if value=?条件设置断点)

info b 查询断点信息

info x :查询x的信息

n 单步往下执行

s 单步往下执行(可以进入函数内部)

c 直接停在断点位置

l 查看代码

display 变量 :显示变量的值(跟踪)

undisplay 变量 :不显示变量的值

p 变量 :打印

u 跳出当前循环

finish 跳出当前函数,

del b :删除断点

set var 变量=值 (调试时设置某个变量的值)

quit 退出调试

20、makefile

工作原理:Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。 Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。 当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。

制作一个简单Makefile:

创建一个makefile文件,接下来就是编写makefile内容

① myapp:A.c B.c,C.c D.c //代码被修改时,需全部重新编译

​ gcc A.c B.c,C.c D.c -o myapp

② myapp:A.c B.c,C.c D.c //只需编译被修改文件

​ gcc A.c B.c,C.c D.c -o myapp

​ %.c :%.o

​ gcc -c $< -o $@

QQ截图20220118102028

③ obj =A.o B.o,C.o D.o

​ target =myapp

//Makefile维护的变量

​ CC=gcc

​ CPPFLAGS=-I

( t a r g e t ) : (target): (target):(obj)

​ $(CC) $(obj) -o $(target)

%o:%c

​ $(CC) -c $< -o $@

QQ截图20220119122619

编译 :make

21、进程和程序

程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)
进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程)

程序→剧本(纸) 进程→戏(舞台、演员、灯光、道具…)
同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)如:同时开两个终端。各自都有一个bash但彼此ID不同。

单道程序设计
所有进程一个一个排对执行。若A阻塞,B只能等待,即使cPu处于空闲状态。而在人机交互时阻塞的出现时必然的。所有这种模型在系统资源利用上及其不合理,在计算机发展历史上存在不久,大部分便被淘汰了。

多道程序设计
在计算机内存中同时存放几道相互独立的程序,它们在管理程序控制之下,相互穿插的运行。多道程序设计必须有硬件基础作为保证。
时钟中断即为多道程序设计模型的理论基础。并发时,任意进程在执行期间都不希望放弃cpu。因此系统需要一种强制让进程让出cpu资源的手段。时钟中断有硬件基础作为保障,对进程而言不可抗拒。操作系统中的中断处理函数,来负责调度程序执行。

进程控制块(PCB)

每个进程在内核中都有一个进程控制块〈PCB〉来维护进程相关的信息,Linux内核的进程控制块是task_sttuct.结构体。
/usr/src/linux-headers-3.16.0-30/include/linux/sched.h 文件中可以查看struct task_struct.
结构体定义。其内部成员有很多,我们重点掌握以下部分即可:
*进程id。系统中每个进程有唯一的id,在c语言中用pid_t类型表示,其实就是一个非负整数。
进程的状态,有就绪、运行、挂起、停止等状态。
进程切换时需要保存和恢复的一些CPU寄存器。
描述虚拟地址空间的信息。
*描述控制终端的信息。
当前工作目录(Current Working Directory)。
umask掩码。
文件描述符表,包含很多指向file结构体的指针。
*和信号相关的信息。用户 id和组id。
*会话(Session)和进程组。
*进程可以使用的资源上限(Resource Limit)。

QQ截图20220302154401

22、mmu内存管理单元

QQ截图20220302151741

QQ截图20220302152254

23、环境变量

环境变量,是指在操作系统中用来指定操作系统运行环境的一些参数。通常具备以下特征:
①字符串(本质)
②有统一的格式:名=值[:值]
③值用来描述进程环境信息。
存储形式:与命令行参数类似。char*[]数组,数组名environ,内部存储字符串,NULL作为哨兵结尾
使用形式:与命令行参数类似。
加载位置:与命令行参数类似。位于用户区,高于stack的起始位置。
引入环境变量表:须声明环境变量。extern char ** environ;

PATH
可执行文件的搜索路径。ls命令也是一个程序,执行它不需要提供完整的路径名/bin/ls:
然而通常我们执行当前目录下的程序a.out 却需要提供完整的路径名./a.out,这是因为PATH环境变量的值里面包含了ls 命令所在的目录/bin,却不包含a.out所在的目录。PATH环境变量的值可以包含多个目录,用:号隔开。在shell 中用echo命令可以查看这个环境变量的值: echo $PATH

SHELL
当前Shell,它的值通常是/bin/bash。

TERM
当前终端类型,在图形界面终端下它的值通常是xterm,终端类型决定了一些程序的输出显示方式,比如图形界面终端可以显示汉字,而字符终端一般不行。

LANG

echo $LANG 当前语言

HOME

echo $HOME 当前家目录环境

操作环境变量的相关函数

24、创建单个子进程

25、父子进程共享

进程共享
父子进程之间在fork后。有哪些相同,那些相异之处呢?刚fork之后:
父子相同处:全局变量、.data、.text、栈、堆、环境变量、用户ID、宿主目录、进程工作目录、信号处理方式…
父子不同处: 1.进程ID2.fork返回值――3.父进程TD4.进在e1P _-本地一个子进袒都更似乎,子进程复制了父进程0-3G用户空间内容,以及父进程的PCB,但pid不同。真的每一个fork一个子进程都要将父进程的0-3G地址空间完全拷贝一份,然后在映射至物理内存吗?
当然不是!父子进程间遵循读时共享写时复制的原则。这样设计,无论子进程执行父进程的逻辑还是执行自己的逻辑都能节省内存开销。

使用gdb调试的时候,gdb只能跟踪一个进程。可以在fork函数调用之前,通过指令设置gdb,调试工具跟踪父进程或者是跟踪子进程。默认跟踪父进程。
set follow-forkmode child命令设置gdb在fork 之后跟踪子进程。

set follow-fork-mode parent设置跟踪父进程。
注意,一定要在fork函数调用之前设置才有效。【follow_fork.c】

【重点】:父子进程共享: 1.文件描述符(打开文件的结构体) 2. mmap.建立的映射区(进程间通信详解)

26、回收子进程

孤儿进程
孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init.,进程,称为init,进程领养孤儿进程。【orphan.c】
僵尸进程
僵尸进程:进程终止,父进程尚未回收,子进程残留资源(PCB〉存放于内核中,变成僵尸(Zombie)进程。【zoom .c】

堆 :堆是向高地址扩展的数据结构,是不连续的内存区域。 这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。 堆的大小受限于计算机系统中有效的虚拟内存。

栈:栈是一种后进先出的元素序列,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值