linux的相关知识2

一、cd / 是跳转到根目录

根目录是所有用户共享的目录,如图所示


cd /

二、cd ~ 是跳转到当前用户的家目录

如果是root用户,cd ~ 相当于 cd /root
如果是普通用户,cd ~ 相当于cd /home/当前用户名


cd ~

三、cd /home 相当于查看有多少普通用户的家目录

因为所有的普通用户的父目录都是home目录


cd /home

cd ../ 返回上一层目录

四、cp

Linux cp(英文全拼:copy file)命令主要用于复制文件或目录。
cp [options] source dest 源文件,目标文件
参数说明:

-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。

五、Linux rm(英文全拼:remove)

命令用于删除一个文件或者目录。
rm [options] name...
参数说明:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
实例
删除文件可以直接使用rm命令,若删除目录则必须配合选项"-r",例如:

rm test.txt

rm:是否删除 一般文件 "test.txt"? y

rm homework

rm: 无法删除目录"homework": 是一个目录

rm -r homework

rm:是否删除 目录 "homework"? y
删除当前目录下的所有文件及目录,命令行为:

rm -r *
文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令。

1、./是当前目录
2、../是父级目录
3、/是根目录

七、ps -ef processs status

ps命令将某个进程显示出来
grep命令是查找
中间的|是管道命令 是指ps命令与grep同时执行,|左边的输出作为右边的输入。

linux中ps一般后面加上-ef来显示详细的进程信息。
ps -e //显示所有程序
ps -f //显示UID,PPIP,C与STIME栏位
ps -ef //是用标准的格式显示java这个进程
ps -ef |grep java //查找有无java进程
ps -ef |grep mysql //查找有无mysql进程
ps -ef | grep xxxserver | grep -v grep|wc -l
ps -ef 指令用来查询所有进程,
grep通过管道来过滤。
grep -v 是反向查询的意思,grep -v grep的作用是除去包含grep的项。

八、awk

awk 是一个文本处理工具,通常用于处理数据并生成结果报告。
给你举个例子,echo "aa bb cc" | awk -F '{print $1}' 结果就是aa,意思是把字符串按空格分割,取第一个,自己做个测试就明白了!

awk是用来提取列的主要工具;

语法格式:

awk [option] 'pattern{action}' filename

action

1、逐行打印每行内容,$0 是 awk 的内置变量,效果是打印整行内容

 ps -ef| grep uwsgi |grep -v grep |awk '{print $0}'
root      7328     1  0  2020 ?        00:07:44 /home/zhaodandan/anaconda3/bin/uwsgi --http :9005 --chdir /www/bahasavce.zhiniutech.com.cn/current --module django_wsgi -p 1 --master --max-request=50000 --harakiri=20 --listen=1000 --disable-logging --daemonize /var/log/uwsgi/bahasavce.zhiniutech.com.cn_uwsgi8000_2020-12-03.log --enable-threads
root      7341  7328  0  2020 ?        00:01:25 /home/zhaodandan/anaconda3/bin/uwsgi --http :9005 --chdir /www/bahasavce.zhiniutech.com.cn/current --module django_wsgi -p 1 --master --max-request=50000 --harakiri=20 --listen=1000 --disable-logging --daemonize /var/log/uwsgi/bahasavce.zhiniutech.com.cn_uwsgi8000_2020-12-03.log --enable-threads
root      7342  7328  0  2020 ?        00:00:38 /home/zhaodandan/anaconda3/bin/uwsgi --http :9005 --chdir /www/bahasavce.zhiniutech.com.cn/current --module django_wsgi -p 1 --master --max-request=50000 --harakiri=20 --listen=1000 --disable-logging --daemonize /var/log/uwsgi/bahasavce.zhiniutech.com.cn_uwsgi8000_2020-12-03.log --enable-threads
root      7343  7328  0  2020 ?        00:00:00 /home/zhaodandan/anaconda3/bin/uwsgi --http :9005 --chdir /www/bahasavce.zhiniutech.com.cn/current --module django_wsgi -p 1 --master --max-request=50000 --harakiri=20 --listen=1000 --disable-logging --daemonize /var/log/uwsgi/bahasavce.zhiniutech.com.cn_uwsgi8000_2020-12-03.log --enable-threads

2、每行以空格为分隔,逐行打印出第一列、第二列内容

 ps -ef| grep uwsgi |grep -v grep |awk '{print $1,$2}'
root 7328
root 7341
root 7342
root 7343

awk内置变量


ps -ef| grep uwsgi |grep -v grep |awk '{print NR,NF}'
1 24
2 24
3 24
4 24

pattern模式

当 awk 进行逐行处理的时候,pattern 作为条件去判断将要被处理的行是否满足条件,如果满足则处理,否则不处理。
需要注意的是 action 是一定会被{}包裹的,而 pattern 则没有被{}包裹着的
1、空模式,如上述的、
2、BEGIN/END模式
在开始逐行处理文本之前,先执行 BEGIN 模式所指定的动作,一般我们将其用于表头
在所有文本处理完毕之后,执行 END 模式所指定的动作,一般用于末尾说明

 ps -ef|grep uwsgi|grep -v grep |awk 'BEGIN {print "USER","PID"}{print $1,$2} END{print "end"}'
USER PID
root 7328
root 7341
root 7342
root 7343
end

九 、例子

ps -aux | grep ping6 | cut -c 9-15 | xargs kill -9
这条命令用了管道的方式,|左边的输出作为右边的输入。
ps -aux 列出进程。or ps -ef
grep ping6是找出上一步输出的进程中包含ping6的进程
cut -c 9-15是截取上面输出的结果中的进程号,9-15正好是进程号
xargs命令可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数。
kill、rm这样的命令是不会处理管道等过来的标准输入的。所以用xargs。
关于xargs的用法可参见:
https://www.cnblogs.com/wangqiguo/p/6464234.html
说一个管道和xargs的区别:
管道是作为后面的命令的输入的,而xargs是作为后面命令的参数。

程序成为僵尸进程以后需要通过进程号来强制终止,因此先需要获取进程的pid

 ps | grep test | awk 'NR==1{print $1}'  

获取test进程的ID,具体形式要按照linux输出的格式来,我的设备中的是第一行的第一列的第一个参数即为test的PID

由于通过管道把PID传给KILL -9无法生效。因此需要使用 ps |

grep test| awk 'NR==1{print $1}' | xargs kill -9 

但是当前嵌入式设备上无法使用xargs 所以我们需要使用如下的方式:

 kill -9 `ps | grep test | awk 'NR==1{print $1}' ` 

注意这里是反单引号

或者:

 kill -9 $(ps | grep test | awk 'NR==1{print $1}') 
ps -ef|grep python| grep -v grep | awk '{print $2}' | xargs kill -9

十、vim和cat的区别

vim打开后可以修改文件内容,但是cat只能查看文件

十一、如何区别linux中的文件与文件夹

可以使用ll命令判断,命令如下:

得到的结果,如果首字母是d则为文件夹,如果为-则为文件。
效果如下:


十二、mkdir

Linux mkdir(英文全拼:make directory)命令用于创建目录。
语法
mkdir [-p] dirName
参数说明:
-p 确保目录名称存在,不存在的就建一个。
实例
在工作目录下,建立一个名为 test的子目录 :
mkdir test
在工作目录下的 test2目录中,建立一个名为 test3的子目录。
若 test2目录原本不存在,则建立一个。(注:本例若不加 -p 参数,且原本 test2目录不存在,则产生错误。)
mkdir -p test2/test3

十三、chmod

Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。



image.png

十四、source ~/.bash_profile

~ 这个符号表示你的家目录,
.bash_profile 是一个[隐藏文件]主要是用来配置bash shell的,
source ~/.bash_profile 就是让这个配置文件在修改后立即生效。

十五、source/etc/profile

是让/etc/profile文件修改后立即生效,
linux中source命令
source命令也称为“点命令”也就是一个符号(.).source命令通常用于重新执行刚修改的初始或文件,使之立即生效,而不必注销并重新登录。
用法: source filename 或. filename
附:source命令除了上述的用途之外,还有一个用途。

十七、ln -s

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。
例如:ln -s /bin/less /usr/local/bin/less
-s 是代号(symbolic)的意思。
这 里有两点要注意:
第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
第二,ln的链接又软链接 和硬链接两种,软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls -l命令去察看,就可以看到显示的link的路径了。


十八、mv

Linux mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。
mv [options] source dest
mv [options] source... directory
dest 有这个目录,就是移动,没有此目录,就是更名。


十九、touch命令

Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
ls -l 可以显示档案的时间记录。


二十 、| 管道符号 wc

word count



列出所有;查找有20的;统计输出信息的行数:wc -l


二十一、gt

-gt是大于的意思。
-eq是等于的意思。
-ne是不等于的意思。
-ge是大于等于的意思。
-lt是小于的意思。
-le是小于等于的意思。

二十二、sed

二十三、xargs = eXtended ARGuments



image.png

每个if语句都要用fi结束,而且是每一个if都要对应一个fi。
整个if语句用fi闭合起来才算完整,书写时if和fi要垂直对齐以方便查看。
格式举例:
if condition
then
command1
command2
fi
condition是判断条件,如果 condition 成立(返回“真”),那么 then 后边的语句将会被执行;如果 condition 不成立(返回“假”),那么不会执行任何语句。最后必须以fi来闭合,fi 就是 if 倒过来拼写,即使有多条语句也不需要用{ }包围起来。

二十四、linux free命令详解

free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。

free

输出简介

下面先解释一下输出的内容:
Mem 行(第二行)是内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列显示系统总的可用物理内存和交换空间大小。
used 列显示已经被使用的物理内存和交换空间。
free 列显示还有多少物理内存和交换空间可用使用。
shared 列显示被共享使用的物理内存大小。
buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。
available 列显示还可以被应用程序使用的物理内存大小。

我想只有在理解了一些基本概念之后,上面的输出才能帮助我们了解系统的内存状况。

buff/cache

先来提一个问题: buffer 和 cache 应该是两种类型的内存,但是 free 命令为什么会把它们放在一起呢?要回答这个问题需要我们做些准备工作。让我们先来搞清楚 buffer 与 cache 的含义。

buffer 在操作系统中指 buffer cache, 中文一般翻译为 “缓冲区”。要理解缓冲区,必须明确另外两个概念:”扇区” 和 “块”。扇区是设备的最小寻址单元,也叫 “硬扇区” 或 “设备块”。块是操作系统中文件系统的最小寻址单元,也叫 “文件块” 或 “I/O 块”。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示(下图来自互联网):


注意,buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。

cache 在操作系统中指 page cache,中文一般翻译为 “页高速缓存”。页高速缓存是内核实现的磁盘缓存。它主要用来减少对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。页高速缓存缓存的是内存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是 buffer cache 呀)和内存映射文件的读写。

页高速缓存对普通文件的缓存我们可以这样理解:当内核要读一个文件(比如 /etc/hosts)时,它会先检查这个文件的数据是不是已经在页高速缓存中了。如果在,就放弃访问磁盘,直接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。然后内核将读来的数据放入页高速缓存中。这种缓存的目标是文件系统可以识别的文件(比如 /etc/hosts)。

页高速缓存对块设备文件的缓存就是我们在前面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。

到这里我们应该搞清楚了:无论是缓冲区还是页高速缓存,它们的实现方式都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。

那么为什么 free 命令不直接称为 cache 而非要写成 buff/cache? 这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。

free 与 available

在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?

free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。


free / available

交换空间(swap space)

swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。

现在的机器一般都不太缺内存,如果系统默认还是使用了 swap 是不是会拖累系统的性能?理论上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在 ubuntu 系统中,swappiness 的默认值是 60

二十五、top 主要的作用就是用来查看CPU和内存的消耗。

top输出参数的含义

top

第一行表示系统的运行时间和平均负载

top - 18:00:30 up 371 days,  7:33,  3 users,  load average: 0.00, 0.05, 0.10

18:00:30 表示系统的当前时间;
up 371 days 表示这个Linux系统已经启动371天
3 user 表示当前有3个用户登陆系统
load average: 0.00, 0.05, 0.10 最近1、5和15分钟内的平均负载 现实生产中,不会让负载数值/CPU核数任意接近1的。一般当这个值达到0.8或者0.9时就需要分析分析原因了

第二行表示任务信息

Tasks: 119 total,   1 running, 116 sleeping,   2 stopped,   0 zombie

Tasks — 任务(进程),系统现在共有119个进程,其中处于运行中的有1个,116个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
按t 可以关闭显示这个任务信息,再按下 t 可以开启这个任务信息

第三行表示CPU状态

%Cpu(s):  0.8 us,  0.5 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

us 列显示了用户模式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的 CPU 时间多,但是如果长期大于50%,需要考虑优化用户的程序
sy 列显示了内核进程所花费的 CPU 时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
ni 列显示了用户进程空间内改变过优先级的进程占用CPU百分比。
id 列显示了 CPU 处在空闲状态的时间百分比。
wa 列显示了IO等待所占用的CPU时间的百分比。这里 wa 的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。 这个wa和vmstat中的wa是相同含义。
hi 硬件中断占用CPU
si 软件中断占用CPU
st 丢失时间占用CPU
在后台开发中需要关注us,sy,id,wa等常用指标。

第四、五行内存使用情况#

KiB Mem :  8008716 total,  1694940 free,  2284040 used,  4029736 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  5417080 avail Mem

第六行以下 进程的状态监控


PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:virtual memory usage 进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:resident memory usage 常驻内存,驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:shared memory ,SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

多U多核CPU监控

在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:逻辑上有4个,实际中只有1个,4核8G


高亮显示当前运行进程

敲击键盘“b”, 进程pid = 23572的 ,top进程是显示的唯一的运行态(runing)的那个进程



3.进程字段排序
默认进入top时,各进程是按照CPU的占用量来排序的,敲击键盘“x”(打开/关闭排cpu序列的加亮效果)
q 退出程序

二十六、group基本操作命令

  1. 显示当前用户所在组

2.查看当前系统所有的组


3.添加一个组


  1. 如何删除一个组
    groupdel 删除组时出现:groupdel: cannot remove the primary group of user 'dudu'

【故障现象】用groupdel删除test组时,报以上错误。原因为dudu组中有dudu用户(nginx的主组)。

【解决办法】先删除dudu用户


二十七、useradd和userdel命令

useradd是添加一个用户的命令,同样反过来写adduser也是可以的。passwd是对某一个用户进行密码设置。在使用者两个命令之前,前面要加上sudo命令,因为做这些事情是需要管理员权限的。



su是英文单词switch user的缩写,sudo是supperuser do的缩写。

二十八、ifconfig命令

查看网络相关的一个命令,例如可以查看MAC地址,网络地址,网关等信息。



eth0表示有线网卡1,如果有多个网卡,可能还有eth1,eth2等等。如果是无线的笔记本,可能有wth0,表示无线网卡。上面可以看到硬件地址,I地址,网关,接收数据包等信息。

二十九、tar压缩包和解压命令

你可能感兴趣的:(linux的相关知识2)