linux备忘命令

1,安装vim以后把vim中的tab键设置为4个空格

 vim ~/.vimrc一下,如果没有会创建新的, 然后添加下面两行:

set ts=4
set expandtab

   如果第二行内容是noexpandtab,就把noexpandtab改为expandtab

2,ssh和scp

ssh center@ip -p 22     ssh链接远程主机

scp -P 22 center@ip :~/test.txt .    把远程主机上的~/test.txt下载到本地当前目录

scp ~/下载/CMake_Practice.pdf center@ip:~/公共的/daqing-temp    把本地~/下载/CMake_Practice.pdf上传到远程主机上的~/公共的/daqing-temp文件夹内,不用指定端口哦

tar -xzvf daqing.tar.gz   解压daqing.tar.gz到当前文件夹

tar -czvf daqing.tar.gz etc    压缩当前文件夹下的etc文件夹以及其子文件夹为daqing.tar.gz

3,lampp ubuntu环境进入mysql:

mysql -u root -p 

或者

[ root@ha ~]# cd /opt/lampp/bin

[ root@ha bin]# ./mysql –uroot –p123456

4,后台运行

个人认为前后台程序有两种:

1),程序的运行与否和终端相关:终端关闭,则程序挂掉。这类程序一般包括:command;command &;

#!coding=utf-8
#同一个终端内,程序也有前后台运行之分

command
#这是前台程序,程序直接在命令后返回运行状态和结果

command &
#这是后台程序,程序中如果有类似print之类的控制台输出语句,依然返回到本终端,很有可能造成的结果就是,它不断返回,你一边不断尝试输入命令,基本上就是看你和电脑哪个更快了。
 
#同一个终端内的程序,前后台如何转换:
"""
1,运行的时候最后面加“  &”
2,ctrl 加 z,把当前程序挂到后台,并且中止程序运行。此时终端会返回你一个job号码加进程号,如果你想让它后台继续运行,就用:bg %job号码(挂到后台后仍然会出现人和电脑比手速的问题),如果你想让它来前台运行,那就用:fg %job号码。
"""
#如果你想直接停掉他们,直接关终端或者对前台程序做ctrl c就可以了

开启或者关闭 后台运行的常用命令:

ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停

jobs
查看当前有多少在后台运行的命令

fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %n将选中的命令调出,n是通过jobs命令查到的后台正在执行的命令的序号(不是pid),经常是1,23,这样的简单数字。fg后面不加任何东西的默认意思是:fg %1,把后台运行的第一个程序调到前台来继续跑

bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %n将选中的命令调出,%n是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

 

 

2),程序的运行与否和终端不相干:终端关闭,程序依然运行,这类程序的纯后台程序。

#纯后台进程
nohup command &;
#使用所有打印到控制台的标准输出都放到当前文件夹下的output.out中去(如果没有指定的话),然后把程序放到后台继续执行,不和终端有任何绑定。顺带一提,就算退出账户这个程序也不会停止哦
#指定nohu的输出: nohup command > myout.file 2>&1 解释一下,2>&1的意思是标准输出和标准错误都重定向到myout.file中

screen
#sudo apt-get screen直接安装就行了
#基础用法:screen -S name 新建一个叫name的虚拟终端,并且登录进去,此时,里面运行的任何程序都是在虚拟终端内部的,不会关闭。运行完一堆程序以后,screen -d name 离开name这个终端。screen -r name 重连name这个终端。screen -ls看看有几个虚拟终端;链接上screen虚拟窗口以后输入exit就关闭并且退出screen虚拟窗口了

 3,个人比较常用的命令是:

sudo nohup python ./脚本.py>nohup.out 2>&1 &     

意思是,用root权限运行脚本。并且把标准错误和标准输出保存到nohup.out中,放到后台运行起来。

但是有两个点需要十分注意,

a,有关sudo,如果系统需要提示你输入密码,在nohup的状态下你是无法收到系统提示的,所以程序根本跑不起来,解决方法是,先执行随意的sudo命令,然后再用sudo命令加上nohup

b,有关nohup.out,如果你写个while循环,每隔1秒钟输出一个数字到nohup.out中(自定义的文件需要注意是否有写入的权限),那么过了5秒以后,你肯定看不到5个数字,只有ignoring input的字样,为啥?这不代表你程序错了,个人猜测nohup具有输出策略,并不是每个字符串一生成就立马写到文件中去,而是程序执行完,或者遇到报错信息,或者到一定量,或者一定时间(细节不知)才会统一写进去。so,暂时看不到里面的内容不代表你错了。

4,关机

常用的关机:

sudo shutdown     #一分钟内广播,清空缓存,然后一分钟时间一到就关机
sudo shutdown -h now    #shutdown -h now 是关闭运行的程序后,刷新缓冲区后再调用init 0关机
sudo init 0     #这个是直接关机,不管系统内运行的程序

 5,查看磁盘状态

df -h
#以人比较好看懂的单位返回各个磁盘或者分区的状态

 6,nmap扫描局域网ip

nmap是个很强大的工具,

sudo apt-get install nmap
sudo nmap -sP 192.168.3.0/24 
#快速检测192.168.10.0/24网段中有哪些存活主机

扫描局域网内某一段ip地址的信息

nmap 192.168.0.101-110

#扫描局域网内部0.101到0.110的IP、地址,系统会列出端口等很多详细信息

扫描局域网内的ip和mac地址:

sudo nmap -sP -PI -PT 192.168.1.0/24

详情可以参考:实例走起

7,ubuntu系统目前运行的进程相关查询

常规查询:

ps -aux
#显示当前系统的所有进程
ps -aux|grep 'xxx'
#查找和xxx相关的进程的信息,xxx有可能是名字,pid等等

按照进程号查找相关信息:

ps -q 1234 -o command
#-q表示快速查找,-o表示你需要啥东西,你需要user写user,总之是ps能查到的都可以写
#我的ps可以查到这些:USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

 8,向mysql数据库导入或者导出数据

create database 数据库名称; 
mysql -h localhost -u root -p yourdatabase < ./hehe.sql
#这是从sql文件中,向数据库yourdatabase导入数据
mysqldump -h localhost -u root -p yourdatabase > ./test.sql
#从yourdatabase中导出数据并且保存为test.sql

 9.查看磁盘相关命令

df -h
#用比较可视化的方式查看系统整个磁盘的信息

du -sh ~/home
#查看文件或者文件夹的大小,有的文件需要sudo权限

 10,grep命令查找匹配的字符上下几行

原作者

grep -C 3 love filename  显示filename文件中,love行上下3行内容(含love行)

grep -A 3 love filename  显示filename文件中,love行下3行内容(含love行)

grep -B 3 love filename  显示filename文件中,love行上3行内容(含love行)
##-B before
##-A after
##-C before+after

使用:

假设使用nmap查找局域网内某个设备的ip,

nmap 192.168.0.10-100>ip.txt
#把局域网内的0网段的10到100号ip都写出到ip.txt中

cat ip.txt|grep -B 7 xxx
#从ip.txt中查找带‘xxx’字符的行,并且把本行和本行的前7行都打出来。比如我知道我的设备22端口开放,就可以尝试grep -B 7 22

 11,watch持续调用某个命令,并且n秒刷新一次

watch -n 2 'cat /sys/devices/xxxx/temp'
#每隔两秒查看一下系统某个文件的状态

灰常好用!

12,为ubuntu更新系统时间或者更换时区

date -R
#查看当前时间
tzselect
#系统会提示你选择你所在的洲,国,根据实际情况选择完成以后确认即可,不需要图形界面

然后复制一下系统文件就可以了:

sudo mv /etc/localtime /etc/localtime_old
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

其他的设置目前还不没尝试,可参考原文档

因为原本的localtime是个软连接,而新的localtime是个文件,所以个人觉得,直接修改localtime的指向比较好,所以最终是这样的

sudo rm localtime
sudo mv localtime_old localtime
sudo ln -snf /usr/share/zoneinfo/Asia/Shanghai localtime
#先把我刚刚copy过来的localtime删掉,然后把原本的localtime(现在叫localtime_old)的名字改回来,最后把软连接链接到上海所在的时区

有些时候,如果ubuntu处于没有网络的状态下,上述设置有可能不大管用(个人没测),此时就可以尝试手动修改时间啦!

命令如下:

sudo date -s MM/DD/YY //修改日期
sudo hwclock --systohc //修改生效
sudo date -s hh:mm:ss //修改时间
sudo hwclock --systohc //修改生效

改是可以改,但是改了以后就有问题了,重启以后时间又错乱了!坑爹啊,,,那么我们来好好看看时间吧。

依照个人经验,系统上有三个时间:

utc:“世界标准时间”,这个时间一般我们不用,和北京时间差n小时,我们不搭理它。

cst:我理解,这个基本上就是localtime,就是使用shanghai作为时区的那个时间。属于系统时间

硬件时间:这个就比较杠了,一般电脑如果带电池,就像自带手表一样,关机,断网,断电以后仍然会保证时间的准确性,靠的就是这个硬件时间。

好的,那么,在没有互联网的情况下(ntp校时不管用了哦),我们应该如何设置时间呢?

sudo timedatectl set-ntp false
#把ntp校时服务关掉,不然你的时间你改不动哦,这个命令就相当于你在图形界面的date&time设置中把‘set the time’ 改为‘manually’
#开启ntp服务就填写true

sudo timedatectl set-local-rtc 1
#设置系统硬件的时间为本地时间,也就是那个cst,相对应的,如果最后的参数为0,则是使用utc时间。

sudo timedatectl set-time "yyyy-mm-dd hh:mm:ss"
#输入手动设置的时间

有人说,还需要设置sudo hwclock --systohc,我尝试过,,反正是不管用。。

timedatectl
#系统内详细的日期时间信息,蛮好用的
date -R
date
#查看系统时间,简略版

 修改时区

timedatectl list-timezones
timedatectl set-timezone Asia/Shanghai

 

13,修改软连接

创建

ln -s 文件名  创建软连接的名字
#ln -s daqing.txt mylink为daqing.txt下创建一个叫mylink的软连接

修改

ln -snf 文件名 要修改的软连接名
#ln -snf xiaoqing.txt mylink  修改mylink软连接的指向,指向xiaoqing.txt

删除

rm 链接名字
#后面千万不要加斜杠,‘/’,其实加了也没啥,但是还是老老实实别乱动比较好

创建一个超链接链接到某个文件夹 

ln -s ~/webroot/imgDisplay/img/autoDown/npy/ linknpy
#在当前文件夹下创建一个linknpy的链接文件,链接到某个目录,注意,千万不要写成ln -s ~/webroot/imgDisplay/img/autoDown/npy/ ./linknpy,这会导致linknpy成了一个目录,cd linknpy的时候不能跳转到链接的地方去

14,打开或者关闭ubuntu图形界面

关闭用户图形界面
sudo systemctl set-default multi-user.target

sudo reboot
开启用户图形界面
sudo systemctl set-default graphical.target

sudo reboot

15,配置pkg-config文件

如果在ubuntu上编译和开发c++,pkg-config是个非常好用的命令,他能够帮你管理头文件和a文件,让你不必在g++命令后面加上一大堆的-I,-L等,而且使用如下命令可以查看开发环境的位置:

pkg-config --cflags libavformat
#查看头文件在哪里
pkg-config --libs libavformat
#查看库文件在哪里
pkg-config  --list-all
#查看pkg-config管理的所有的项目名称和简介
pkg-config --modversion opencv
#使用pkg-config查看管理的某些包的版本信息

比如我刚刚编译的ffmpeg包,在lib/pkgconfig下有一堆pc文件,很明显这是写好了给用户用的,给ffmpeg的贴心点赞!通过把path添加到变量PKG_CONFIG_PATH中,我们就能随心所欲的使用ffmpeg了,添加方式:

vim ~/.bashrc
#在最后添加一行:
export PKG_CONFIG_PATH=/usr/local/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH

刚遇到一件坑事,装了个包叫zeromq,自以为对pkg-config很了解了,把pc文件放到$PKG_CONFIG_PATH路径了以后去查看包信息,

pkg-config --list-all

结果发现根本没有,我的pc文件叫libzmq.pc,凭啥没有?火大,,各种搜索一通,并且详细对比了本pc和其他能展示出来的pc,除了细微差别,别的根本没啥!火大,所以最终我也是很无奈啊,只能强行试试能不能用,结果,,,发现还真能用!

pkg-config --libs libzmq

返回:

-L/usr/local/lib -lzmq,,我,,呵呵了。

 刚刚又遇到一个知识点,编译好了可执行文件但是运行的时候提示找不到so库,那咋整呢?

sudo vim /etc/ld.so.conf
#直接加上文件夹路径就行,比如/usr/local/lib
sudo ldconfig -v #之前试过source,但是报错了,估计source不是这么用的,然后ldconfig这个命令估计和ldd命令有点同源关系,嗯嗯

 

16,查找带有某个文件内容的文件

sudo find /etc/apache2 -name '*.conf'|xargs grep 'access.log'
#find是常用的,不多讲
#从find出来的文件中查找带有access.log的文件

 17,ubuntu18.04禁止某个服务开机启动

以apache为例,网上说的如下命令,真的一点都不管用

sudo update-rc.d -f apache2 remove
#这句话的意思是删除apache2的开机启动脚本,亲测无法禁止开机启动,反而会删除很多有关开机启动的服务链接

#已经删除了的可以这样恢复
sudo update-rc.d apache2 defaults

真正的禁止开机自启是这样的:

sudo update-rc.d apache2 disable    #关闭某个service的开机自启
sudo update-rc.d apache2 enable    #打开某个service的开机自启

查看当前电脑中有哪些service

sudo service --status-all

还有一套体系是systemctl体系的,具体原因我不清楚,但是上面这种我也见过,比如apache,下面这种我也见过,

查看系统内有多少程序开机自启

systemctl list-unit-files

关掉/打开某个程序的开机自启

systemctl disable/enable motd.service

 

18,ubuntu18开发板固定ip以及修改dns(非通用ubuntu18.04)

修改ip:

sudo vim /etc/network/interfaces

内容改为:

source-directory /etc/network/interfaces.d
#上面这一句是默认的,建议不要动
auto lo
iface lo inet loopback
#给lo网卡设置ip巡回,具体啥意思不清楚,貌似和127.0.0.1有关,我所见的ubuntu电脑默认都有lo网卡,但是不排除有的没有,建议用lo之前先看看ifconfig命令

auto eth0
iface eth0 inet static
address 192.168.3.201
gateway 192.168.3.1
netmask 255.255.255.0
#以上命令是,给eth0(有的不叫eth0)网卡设置链接信息,固定ip地址(static),网址是xx,网关是xx,掩码是xx

修改dns:

临时修改,立马生效

sudo vim /etc/resolv.conf
#nameserver修改为 114.114.114.114

永久修改,重启也管用的

sudo vim /etc/systemd/resolved.conf

改为:

##找到有dns的一行,取消注释,改为如下的样子
DNS=114.114.114.114

##未修改以前的配置是如下的样子:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

那么问题来了,为啥要改俩配置文件?它俩什么关系?

/etc/resolv.conf是被systemd-resolved这个服务托管的,通过netstat -tnpl| grep systemd-resolved查看到这个服务是监听在53号端口上。而这个服务的配置文件为/etc/systemd/resolved.conf。

如果我们要想让/etc/resolve.conf文件里的配置生效,需要添加到systemd-resolved的这个配置文件里DNS配置项(如上面的示例,已经完成修改),然后重启systemd-resolved服务即可。

systemctl restart systemd-resolved.service

 

18,有关syslog文件夹的注意事项

syslog是系统级别的日志模块,服务名称叫rsyslog,日志存放位置在/var/log中,

目前仅知道次模块配置比较复杂,用户可以在/etc/rsyslog.d文件夹下编辑此模块的配置文件。

建议不要乱删除此文件下的日志文件,最起码mysql和apache的log不要删除,会导致mysql和apache跑不起来

如果不小心执行了rm -rf /var/log/*,如何恢复?

apache2:在/var/log下重建一个文件夹apache2。

mysql:在/var/log下重建一个mysql文件夹,并且里面要有数据,数据从哪里得来?要么你之前备份过,要么从另一台电脑上拷贝过来,我的解决方案是,去另一台电脑上拷贝了一份过来。。另一台电脑和我用的电脑账户名和密码都一样,mysql配置也基本一样

19,在命令行里从u盘拷贝数据

插入u盘,

sudo fdisk -l
#主要是找到u盘,然后看看u盘的基本情况,我的返回有很多,但是u盘是这样的
Device     Boot Start       End   Sectors   Size Id Type
/dev/sda1        2048 976769023 976766976 465.8G  7 HPFS/NTFS/exFAT

然后需要把u盘mount到/mnt或者/mnt下面的某个文件夹上去,mount命令可以很详细,但是基本上就直接简单着用就行了

sudo mount /dev/sda1 /mnt
#会有提示,我的提示是这样的,
The disk contains an unclean file system (0, 0).
The file system wasn't safely closed on Windows. Fixing.
估计是u盘内文件有点小问题,不影响使用也没继续关注

然后拷贝文件的话直接cd /mnt,然后cp或者cp -r就可以了哦。

需要把u盘拔下来的话,直接这样:

sudo umount /mnt

 20,test

注意哈。test不是一个命令,而是shell程序里的一个function,或者说功能类似于function,常用于判断,可以判断文件,也可以判断其他文件。

判断文件是否存在:

if test -a file1 ;then echo 'true' ;else echo 'false';fi

test 支持的操作符:

-a如果文件存在,则为True。

-b如果文件是特殊块,则为True。

-c如果文件是特殊字符,则为真。

-d如果文件是目录,则为True。

-e如果文件存在,则为True。

-f如果文件存在并且是常规文件,则为True。

-g如果文件是set-group-id,则为True。

-h如果文件是符号链接,则为True。

-L如果文件是符号链接,则为True。

-k如果文件设置了“sticky”位,则为True。

-p如果文件是命名管道,则为True。

-r如果文件是可读的,则为True。

-s如果文件存在且不为空,则为True。

-S如果文件是套接字,则为True。

-t如果终端上的FD打开,则为真。

-u如果文件为set-user-id,则为True。

-w如果文件可由您写入,则为True。

-x如果文件可由您执行,则为True。

-O如果该文件实际上归您所有,则为真。

-G如果该文件实际上归您的组所有,则为真。

-N如果文件自上次读取后已被修改,则为True。

 

判断其他:

if test 2 -eq 30 ;then echo 'true' ;else echo 'false';fi

 21 ubuntu上安装opencv(非编译安装)

安装命令

sudo apt-get install libopencv-dev python-opencv

为python安装opencv

pip install opencv-python 

 22 apt-get 和aptitude(重新安装apt-get)

编译安装opencv提示有几个依赖解决不了,主要是gtk和gthread,然后听说有人推荐aptitude,抱着试试看的态度尝试了一下,呵呵了,不是http找不到就说gpgv找不到啊,决了,sources.list也配的不对啊,头疼,于是乎,我还是选择apt-get吧,然而,卸载aptitude以后,,一切都回不去了,,你得重新装apt-get,,呵呵了。。主要是用dpkg -i装,安装包哪里找呢?

http://security.ubuntu.com/ubuntu/pool/main/a/apt/ 这里可以找到俩,分别是apt和libapt,我机器是amd64的,所以我挑了这俩:

apt_1.6.14_amd64.deb 
libapt-pkg5.0_1.6.14_amd64.deb

除此以外还有个/ubuntu-keyring要安装,尽管我也不知道那是啥,上链接:http://archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-keyring/

我挑的是这个:

ubuntu-keyring_2018.09.18.1_18.04.2_all.deb

按顺序装起来:

sudo dpkg -i ubuntu-keyring_2018.09.18.1_18.04.2_all.deb
sudo dpkg -i libapt-pkg5.0_1.6.14_amd64.deb
sudo dpkg -i apt_1.6.14_amd64.deb

完成

23,ubuntu监控流量

sudo apt-get install nethogs
#以上是安装方式#

 sudo nethogs eno1
#查看eno1网卡的流量情况#

详情如下图

 如果有上传和下载,第一行的数据会飙升。。

24,ubuntu 更改源文件

由于众所周知的原因,ubuntu系统装好以后,apt安装文件或者update的时候会失败,那么经常需要更改国内源,一般我的常规操作是,去网上随便找个大佬写的文件,把/etc/apt/sources.list给修改一下就可以了,这大概率不会出问题,直到我用上了arm的机器。这就尴尬了,很多国内源是不支持arm框架的源文件的,然后,我就找到了华为源,啊呜啊呜真香。

上链接:走你

我自己的开发板环境是ubuntu18,arm框架的,所以我选了ubuntu-ports(说实话,我也不知到为啥是它,可能是自带的镜像文件里有ports.ubuntu.com这样的字样吧),然后方法都告诉你了。看图:

 为啥是bionic呢?据说这个单词映射的是ubuntu的版本

25,ubuntu基础信息查看

ubuntu发行版本,内核,cpu信息等

cat /proc/version
##
#Linux version 4.10.0-28-generic (buildd@lgw01-12)  ##  linux内核版本号
#gcc version 5.4.0  ## gcc编译器版本号
#Ubuntu 5.4.0-6ubuntu1  ##Ubuntu版本号


uname -a
##
#显示linux的内核版本和系统是多少位的:X86_64代表系统是64位的。

lsb_release -a
##
#Distributor ID: Ubuntu #类别是ubuntu
#Description:  Ubuntu 16.04.3 LTS #16年3月发布的稳定版本,LTS是Long Term Support:长时间支持版本,支持周期长达三至五年
#Release:    16.04   #发行日期或者是发行版本号
#Codename:   xenial   #ubuntu的代号名称

 26,ifconfig设置和route

是这样的,我装了一个vmware虚拟机然后按照网络上的教程设置了虚拟机桥接,以及从ubuntu界面上固定了ip地址,然后就开始装包调试,头一天还好的,第二天上不了网了,设置默认路由也报错说你这路由根本ping不通,没法连过去,一通操作,最后咋好的呢?

sudo ifconfig docker0 down

#偶然看到的一个命令,就是先关掉某个网卡。。

顺带提一嘴,你要是网络环境复杂,有多个局域网一个外网,但是装包的时候你又懒得切换,你可以这样设置,设置默认的路由是xxx

route add -net default gw xx.xx.xx.x

查看当前环境有多少路由

route

其他高阶操作:

#添加一条路由(发往192.168.62这个网段的全部要经过网关192.168.1.1)
route add -net 192.168.62.0 netmask 255.255.255.0 gw 192.168.1.1

#删除一条路由 删除的时候不用写网关
route del -net 192.168.122.0 netmask 255.255.255.0

#添加到主机的路由,删除将add换成del
# route add –host 192.168.168.110 dev eth0
# route add –host 192.168.168.119 gw 192.168.168.1

#添加到网络的路由
# route add –net IP netmask MASK eth0
# route add –net IP netmask MASK gw IP
# route add –net IP/24 eth1

#添加默认网关
# route add default gw IP

#删除路由
# route del –host 192.168.168.110 dev eth0

#修改路由
route change 192.168.3.98 netmask 255.255.255.0 192.168.3.45   #将目的ip为192.168.3.98且子网掩码为255.255.255.0的下一跳由x.x.x.x改为192.168.3.45

这是临时设置哈,重启网络会失效的

25,git命令和相关设置

 git和svn不一样,git有个本地仓库还有个云端仓库,大多数教程都是走的bash命令行提交或者更新哈。常用命令如下

git config --global user.name "[名称]" 
git config --global user.email [邮箱] 

#初始化
git init

# 添加指定目录到暂存区,包括子目录
git add [dir]

#提交到本地仓库
git commit -m "评论"

#提交到远程仓库
git push origin master

可参考:

 查看远程仓库链接

git remote -v

branch相关操作

#查看分支,当前分支会标绿
git branch

#更改当前分支,注意没有特殊情况,分支指的是本地分支
git checkout develop

vim README.md

git add README.md

git commit -m 'i modified readme'

#把改动推到远程的develop分支上,不管远程有没有这个分支,都能push得上去
git push origin develop

#换到其他分支然后删除本地develop分支
git checkout master
git branch -d daqing    #如果提示没有合并,就用强制删除的:-D
git push origin --delete develop    #把本地删除分支的动作推到远程上

 

 26,端口相关的命令

netstat -tanlp
#强大的调试端口的命令

或者下面这个

sudo netstat -tunlp |grep xxx
#加上sudo比较好,不然你看不到root运行的进程的pid

或者这个

lsof -i :xxx端口号
#(list open files) 是一个列出当前系统打开文件的工具

ss -tnlp | grep ssh
#查看程序占用哪个端口

 27,pip环境部署

pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
#这个包比较全,opencv-python比较精简

 28,内存申请和oom

linux内核的内存分配是有策略的,即,一般你申请要用内存,我就给你用,你申请5个g,但是只用了1个g,这样虚拟内存耗费量多,但是实际内存使用量并不高,正常的时候都没啥,等内存紧张的时候,那oom机制就出来kill一个内存占用多的,释放一些内存以保证系统的稳定运行,以redis为例,一旦上了黑名单,则后续申请内存都不给你用了,那解决办法就只能是在系统里设置overcommit_memory=1。其他几个值的意思如下:

0,:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存。

编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效  

posted @ 2019-06-04 16:07  0点0度  阅读(808)  评论(0编辑  收藏  举报