目录
文件的归档:归档的对象是目录(把文件弄在一个目录下),并将目录变成了一个文件)
1.软件包管理
Ubuntu有两种类型的软件包:二进制软件包(deb),源码包(deb-src)
dpkg(基本很少用,一般用APT):最早的deb包管理工具,可以实现软件包的安装,编译,卸载,查询等,但是没有解决软件包的依赖关系。
dpkg -i 软件包,安装一个在本地文件系统存在的软件包
dpkg -r 软件包,移除已经安装的软件包
dpgk -P 软件包 ,移除已经安装软件包及配置文件
dpkg -L 软件包 列出安装的软件包清单
dpkg -s 软件包 显示软件包的安装状态
APT:是Ubuntu中功能最强大的命令软件包管理工具。,能够有效的解决软件的依赖问题
查看软件源:
cat /etc/apt/sources.list
apt-get:用于管理软件包,包括安装,卸载等操作
1.更新源
sudo apt-get update //超级管理员下可以不要 sudo
2.下载安装
sudo apt-get install 软件名
sudo apt-get install -f 软件名 强制安装
sudo apt-get install sl;跑火车游戏
sudo apt-get install bastet 安装俄罗斯方块
sudo apt-get install oneko 追鼠
sudo apt-get install cmatrix 代码雨;
3.卸载:
sudo apt-get remove 软件名
4.把所有下载的软件包全部清除
sudo apt-get clean 删除包缓存中的所有包
5.只下载不安装
sudo apt-get download 软件压缩包名(权限不够再试一次)
6.获取软件包源码
sudo apt-get source 软件名
liu@ubuntu:~/下载$ sudo apt-get install sl
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
linux-headers-5.13.0-35-generic
linux-hwe-5.13-headers-5.13.0-35 linux-image-5.13.0-35-generic
linux-modules-5.13.0-35-generic
linux-modules-extra-5.13.0-35-generic
使用'sudo apt autoremove'来卸载它(它们)。
下列【新】软件包将被安装:
sl
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 191 个软件包未被升级。
需要下载 12.7 kB 的归档。
解压缩后会消耗 60.4 kB 的额外空间。
获取:1 http://mirrors.aliyun.com/ubuntu focal/universe amd64 sl amd64 5.02-1 [12.7 kB]
已下载 12.7 kB,耗时 0秒 (77.4 kB/s)
正在选中未选择的软件包 sl。
(正在读取数据库 ... 系统当前共安装有 223522 个文件和目录。)
准备解压 .../archives/sl_5.02-1_amd64.deb ...
正在解压 sl (5.02-1) ...
正在设置 sl (5.02-1) ...
正在处理用于 man-db (2.9.1-1) 的触发器 ...
查看使用 sudo apt-get install安装后的软件位置
第一种方法:dpsk -L softwarename
例如: dpsk -L sl
第二种方法:安装 apt-file,用 apt-file来查看
命令:
sudo apt-get install apt-file
apt-file list softwarename
2.文件的压缩和打包
文件的压缩:压缩的对象是文件,并且压缩之后源文件不存在
gzip 文件名 ->.gz 压缩速度最快,但是压缩率最小(前提:文件足够大)
解压:
gunzip 压缩文件名
bzip2 文件名 ->.bz2 压缩速度次之,压缩率次之
解压:
bunzip2 压缩文件名
xz 文件名 ->.xz 压缩速度最慢,压缩率最大
解压:
unxz 压缩文件名
文件的归档:归档的对象是目录(把文件弄在一个目录下),并将目录变成了一个文件)
tar命令主要是将若干个文件或者目录合并成一个文件
选项:
-c:创建一个新的归档文件
-x:释放归档文件
-v:显示归档和释放的过程信息
-f:用户指定归档文件的文件名
-z:由tar生产归档,由gzip来压缩
-j:由tar生产归档,然后由bzip2来压缩
-J:由tar生产归档,然后由xz来完成压缩
举例:
1.创建一个归档文件
tar -cvf 归档名 归档的文件名
2.创建归档文件并且进行压缩
tar -czvf 归档名(最好加上 .gz) 归档的文件名(多个文件可并列,即 t1 t2 t3)
tar -cjvf 归档名(最好加上 .bz2) 归档的文件名(多个文件可并列,即 t1 t2 t3)
tar -cJvf 归档名(最好加上 .xz) 归档的文件名(多个文件可并列,即 t1 t2 t3)
解压:
tar -xzvf 归档名(如tt.gz)
tar -xjvf 归档名(如tt.bz2)
tar -xJvf 归档名(如tt.xz)
参数除了f选项之外其他的都可以交换顺序
root@ubuntu:/Liunx/liunx# ls
t1 t1.c t2 t2.c
root@ubuntu:/Liunx/liunx# tar -cvf tt t1 t2 t1.c t2.c
t1/
t2/
t1.c
t2.c
root@ubuntu:/Liunx/liunx# ls
t1 t1.c t2 t2.c tt
root@ubuntu:/Liunx/liunx# mv tt t1
root@ubuntu:/Liunx/liunx# ls
t1 t1.c t2 t2.c tt.gz
root@ubuntu:/Liunx/liunx# cd t1
root@ubuntu:/Liunx/liunx/t1# ls
tt
root@ubuntu:/Liunx/liunx/t1# tar -xvf tt
t1/
t2/
t1.c
t2.c
root@ubuntu:/Liunx/liunx/t1# ls
t1 t1.c t2 t2.c tt
用gzip压缩归档:
root@ubuntu:/Liunx/liunx# ls
t1 t1.c t2.c
root@ubuntu:/Liunx/liunx# tar -czvf tt.gz t1.c t2.c
t1.c
t2.c
root@ubuntu:/Liunx/liunx# ls
t1 t1.c t2.c tt.gz
root@ubuntu:/Liunx/liunx# mv tt.gz t1
root@ubuntu:/Liunx/liunx# ls
t1 t1.c t2.c
root@ubuntu:/Liunx/liunx# cd t1
root@ubuntu:/Liunx/liunx/t1# ls
tt.gz
root@ubuntu:/Liunx/liunx/t1# tar -xzvf tt.gz
t1.c
t2.c
root@ubuntu:/Liunx/liunx/t1# ls
t1.c t2.c tt.gz
3.链接文件的创建
软链接:软连接有点类似于Windows中快捷方式
ln -s 源文件 链接文件
注意:
1.软链接文件创建的时候,源文件不变,链接数量也不变(下个代码段的倒数第三、五行 权限后面那个数字),可以对同一个源文件创建多个软链接文件
root@ubuntu:/Liunx/liunx# touch t1.c root@ubuntu:/Liunx/liunx# ls t1.c root@ubuntu:/Liunx/liunx# ln -s t1.c t1.ln root@ubuntu:/Liunx/liunx# ls t1.c t1.ln root@ubuntu:/Liunx/liunx# ll total 8 drwxr-xr-x 2 root root 4096 4月 15 17:30 ./ drwxr-xr-x 4 root root 4096 4月 15 17:29 ../ -rw-r--r-- 1 root root 0 4月 15 17:30 t1.c lrwxrwxrwx 1 root root 4 4月 15 17:30 t1.ln -> t1.c root@ubuntu:/Liunx/liunx# ln -s t1.c t11.ln root@ubuntu:/Liunx/liunx# ll total 8 drwxr-xr-x 2 root root 4096 4月 15 17:31 ./ drwxr-xr-x 4 root root 4096 4月 15 17:29 ../ lrwxrwxrwx 1 root root 4 4月 15 17:31 t11.ln -> t1.c -rw-r--r-- 1 root root 0 4月 15 17:30 t1.c lrwxrwxrwx 1 root root 4 4月 15 17:30 t1.ln -> t1.c root@ubuntu:/Liunx/liunx# ls t11.ln t1.c t1.ln
2.如果将源文件删除或者改变路径,软链接就断开,在相同路径下重新创建源文件,软链接又开始生效
root@ubuntu:/Liunx/liunx# ls t11.ln t1.c t1.ln root@ubuntu:/Liunx/liunx# rm t1.c root@ubuntu:/Liunx/liunx# ls t11.ln t1.ln root@ubuntu:/Liunx/liunx# ll total 8 drwxr-xr-x 2 root root 4096 4月 15 17:37 ./ drwxr-xr-x 4 root root 4096 4月 15 17:29 ../ lrwxrwxrwx 1 root root 4 4月 15 17:31 t11.ln -> t1.c lrwxrwxrwx 1 root root 4 4月 15 17:30 t1.ln -> t1.c root@ubuntu:/Liunx/liunx# touch t1.c root@ubuntu:/Liunx/liunx# ls t11.ln t1.c t1.ln root@ubuntu:/Liunx/liunx# ll total 8 drwxr-xr-x 2 root root 4096 4月 15 17:37 ./ drwxr-xr-x 4 root root 4096 4月 15 17:29 ../ lrwxrwxrwx 1 root root 4 4月 15 17:31 t11.ln -> t1.c -rw-r--r-- 1 root root 0 4月 15 17:37 t1.c lrwxrwxrwx 1 root root 4 4月 15 17:30 t1.ln -> t1.c
3.软链接的文件类型是链接文件
硬链接:类似于对文件备份并起一个别名
ln 源文件 硬链接文件
root@ubuntu:/Liunx/liunx# ls t11.ln t1.c t1.ln root@ubuntu:/Liunx/liunx# touch t2.c root@ubuntu:/Liunx/liunx# ls t11.ln t1.c t1.ln t2.c root@ubuntu:/Liunx/liunx# ln t2.c t2.lln root@ubuntu:/Liunx/liunx# ls t11.ln t1.c t1.ln t2.c t2.lln root@ubuntu:/Liunx/liunx# ll total 8 drwxr-xr-x 2 root root 4096 4月 15 17:39 ./ drwxr-xr-x 4 root root 4096 4月 15 17:29 ../ lrwxrwxrwx 1 root root 4 4月 15 17:31 t11.ln -> t1.c -rw-r--r-- 1 root root 0 4月 15 17:37 t1.c lrwxrwxrwx 1 root root 4 4月 15 17:30 t1.ln -> t1.c -rw-r--r-- 2 root root 0 4月 15 17:39 t2.c -rw-r--r-- 2 root root 0 4月 15 17:39 t2.lln root@ubuntu:/Liunx/liunx# diff t2.c t2.lln root@ubuntu:/Liunx/liunx# diff t2.c t2.lln -yw
注意:
创建硬链接的时候,链接数量会增加(上个代码段的倒数第三、四排变为2)
硬链接文件是一个普通文件
删除源文件对硬链接文件没有影响。硬链接文件任然有效
对于一个源文件,软链接和硬链接可以同时存在,互不影响,但是不可以对软链接创建硬链接,反之却可以
root@ubuntu:/Liunx/liunx# ln t1.ln t1.lln ln: failed to create hard link 't1.lln': File exists root@ubuntu:/Liunx/liunx# ll total 8 drwxr-xr-x 2 root root 4096 4月 15 17:48 ./ drwxr-xr-x 4 root root 4096 4月 15 17:29 ../ lrwxrwxrwx 1 root root 4 4月 15 17:31 t11.ln -> t1.c -rw-r--r-- 2 root root 0 4月 15 17:37 t1.c -rw-r--r-- 2 root root 0 4月 15 17:37 t1.lln lrwxrwxrwx 1 root root 4 4月 15 17:30 t1.ln -> t1.c -rw-r--r-- 1 root root 0 4月 15 17:39 t2.lln root@ubuntu:/Liunx/liunx# ln -s t2.lln t2.ln root@ubuntu:/Liunx/liunx# ls t11.ln t1.c t1.lln t1.ln t2.lln t2.ln root@ubuntu:/Liunx/liunx# ll total 8 drwxr-xr-x 2 root root 4096 4月 15 17:50 ./ drwxr-xr-x 4 root root 4096 4月 15 17:29 ../ lrwxrwxrwx 1 root root 4 4月 15 17:31 t11.ln -> t1.c -rw-r--r-- 2 root root 0 4月 15 17:37 t1.c -rw-r--r-- 2 root root 0 4月 15 17:37 t1.lln lrwxrwxrwx 1 root root 4 4月 15 17:30 t1.ln -> t1.c -rw-r--r-- 1 root root 0 4月 15 17:39 t2.lln lrwxrwxrwx 1 root root 6 4月 15 17:50 t2.ln -> t2.lln
4.进线程管理浅述(详情请看同博客进线程)
①只能同一主机发送的:无名管道(匿名)、有名管道(具名)、信号、信号量、消息队列(效率最高,对物理内存操作)
②不同主机的套接字socket(网络编程)
一个进程的虚拟内存默认分配 4G (3G用户空间、1G内核空间)
之所以分配为4G,是因为早前的32位机的一个指针长度是4个字节(32位),也就是32根地址线,而2^32次方个地址寻址恰好是4GB的大小。
虚拟内存:硬盘上的页交换文件+实际的物理内存
虚拟内存和物理内存的联系:
物理内存映射到虚拟内存,然后虚拟进程给进程分配空间,最大是4G,但是实际上可能只分配到了一个页面大小(1024,类似画大饼),等到这个页面满了才给你增加页面。不然的话 ,每个进程都分配4G,那么消耗将大大增加,有的只需要几M或者几十M,系统最终将挂掉。这个分配是由CPU操控的。等到数据被填写过后,再通过页表映射到物理内存。(这里还可以注意缓存的概念)
注意:一个进程用到的虚拟地址是由内存区域表管理的,而用到的内存区域,会通过页表映射到物理内存,所有每个进程都可以使用同样的虚拟内存地址而不冲突,这是因为它们的物理地址实际上是不同的。
注:任何快捷键都是一个进程
各个列代表的意义:
(1)USER:进程的属主;
(2)PID:进程的ID;
(3)PPID:父进程;
(4)%CPU:进程占用的CPU百分比;
(5)%MEM:占用内存的百分比;
(6)NI:进程的NICE值,数值大,表示较少占用CPU时间;
(7)VSZ:该进程使用的虚拟内存量(KB);
(8)RSS:该进程占用的固定内存量(KB)(驻留中页的数量);
(9)TT:终端名称(缩写),若为?,则代表此进程与终端无关,因为它们是由系统启动的;
(10)TTY:该进程在那个终端上运行(登陆者的终端位置),若与终端无关,则显示?。若为pts/0等,则表示由网络连接主机进程;
(11)WCHAN:当前进程是否正在进行,若为 - 表示正在进行;
(12)START:该进程被触发启动时间;
(13)TIME:该进程实际使用CPU运行的时间;
(14)COMMAND:命令的名称和参数;
(15)STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等(16)C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
原文链接:https://blog.csdn.net/ygl19920119/java/article/details/79286230
程序一次执行的过程就是进程。
ps 命令 可以显示进程的动态
常见的参数:
-A 列出所有的进程
-w:加宽显示所有进程
-au:显示较详细的进程信息
显示的信息有:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND-aux:显示所有包含其他使用者的进程信息
显示的信息有:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
-ef:标准格式显示进程信息
显示的信息有:
UID PID PPID C STIME TTY TIME CMD(COMMAND的缩写)
UID:用户的ID
GID:用户组的ID
注:COMMADN列如果过长,aux会截断显示,而ef不会
root@ubuntu:/Liunx# ps PID TTY TIME CMD 39782 pts/0 00:00:00 su 39783 pts/0 00:00:00 bash 40257 pts/0 00:00:00 ps root@ubuntu:/Liunx# ps -A PID TTY TIME CMD 1 ? 00:00:14 systemd ........... 40258 ? 00:00:00 kworker/0:2 40259 pts/0 00:00:00 ps root@ubuntu:/Liunx# ps -w PID TTY TIME CMD 39782 pts/0 00:00:00 su 39783 pts/0 00:00:00 bash 40260 pts/0 00:00:00 ps
root@ubuntu:/Liunx# ps -au USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 。。。。。。。。。。。 root 39782 0.0 0.1 14644 4372 pts/0 S 17:07 0:00 su root 39783 0.0 0.1 13052 4168 pts/0 S 17:07 0:00 bash root 40350 0.0 0.0 14572 3328 pts/0 R+ 18:19 0:00 ps -au root@ubuntu:/Liunx# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 168860 12508 ? Ss 4月14 0:15 /sbin/init auto noprompt 。。。。。。。。。。。 root 40349 0.0 0.0 14760 3552 pts/0 R+ 18:18 0:00 ps -aux root@ubuntu:/Liunx# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 4月14 ? 00:00:15 /sbin/init auto noprompt 。。。。。。。。。。。 root 40295 2 0 18:02 ? 00:00:00 [kworker/u256:2-events_unbound] root 40299 39783 0 18:04 pts/0 00:00:00 ps -ef
top:监视进程(动态的监视),按q按键退出
root@ubuntu:/Liunx# top top - 当前时间-系统的运行时间,时间,当前登陆用户数量,系统在之前 1 分钟、5 分钟、15 分钟的平均负载(CPU单核<1,四核<4) Tasks:系统中的进程总数,正在运行的进程数,睡眠的进程数,正在停止的进程数,僵尸进程数(>0,检查僵死进程) %Cpu(s): 用户模式占用的 CPU 百分比,系统模式占用的 CPU 百分比, 改变过优先级的用户进程占用的 CPU 百分比,空闲 CPU 占用的 CPU 百分比, 等待输入/输出的进程占用的 CPU 百分比, 硬中断请求服务占用的 CPU 百分比, 软中断请求服务占用的 CPU 百分比, 虚拟时间百分比(当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比) MiB Men:物理内存的总量(单位为KB), 己经使用的物理内存数量,空闲的物理内存数量,作为缓冲的内存数量 MiB Swap:交换分区(虚拟内存)的总大小,已经使用的交换分区的大小,空闲交换分区的大小,作为缓存的交换分区的大小 PID SUER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND .........
我们通过 top 命令的第一部分就可以判断服务器的健康状态。如果 1 分钟、5 分钟、15 分钟的平均负载高于 1,则证明系统压力较大。如果 CPU 的使用率过高或空闲率过低,则证明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大。
这时,我们就应该判断是什么进程占用了系统资源。如果是不必要的进程,就应该结束这些进程;如果是必需进程,那么我们该増加服务器资源(比如増加虚拟机内存),或者建立集群服务器。我们还要解释一下缓冲(buffer)和缓存(cache)的区别:
- 缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
- 缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的(降低内存压力),而缓冲(buffer)是用来加速数据"写入"硬盘的(减少内存碎片)。
原文链接:Linux top命令详解:持续监听进程运行状态 (biancheng.net)
=====================================================================
pstree:以树状图的形式显示进程
root@ubuntu:/Liunx# pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager───2*[{NetworkManager}] .............. ├─whoopsie───2*[{whoopsie}] └─wpa_supplicant root@ubuntu:/Liunx# ps PID TTY TIME CMD 39782 pts/0 00:00:00 su 39783 pts/0 00:00:00 bash 40535 pts/0 00:00:00 ps root@ubuntu:/Liunx# pstree 39783 bash───pstree
需要注意的是,在使用 pstree 命令时,如果不指定进程的 PID 号,也不指定用户名称,则会以 init 进程为根进程,显示系统中所有程序和进程的信息;反之,若指定 PID 号或用户名,则将以 PID 或指定命令为根进程,显示 PID 或用户对应的所有程序和进程。
===================================================================
信号由内核产生,3种方式:用户操作,进程执行出错,进程执行某个系统调用或函数(raise()、alarm()等),64个信号,SIGRTMIN前面的信号为传统的Unix支持的信号,是不可靠信号(非实时的,信号可能会丢失),不支持排队;SIGRTMIN后面的信号为后来扩充的,是可靠信号(实时信号,信号不会被丢失)。
信号响应方式:忽略信号、执行系统默认动作、捕捉信号
kill:终止进程( ctrl+c )
分为 root 和 非root
root:可以向所有用户发送信号,不能被忽略,必须被执行
非root:只能向同组或同用户发送信号,可以被忽略,如下:
kill命令向指定的进程发送一个杀死这个进程的信号,要求该进程被杀死,但是只是发送一个信号,能不能被杀死另算