主要还是在windows上开发,linux 用得少记录下
主流发行版本:
如果需要的是一个坚如磐石的非常稳定的服务器系统,那么选择就是FreeBSD。如果需要一个稳定的服务器系统,而且想深入摸索一下Linux操作系统的各个方面的知识,想自己定制许多内容,那么推荐你使用Gentoo
Linux系统的安装
装机估摸着有微系统像winpe,进去后用虚拟光驱加载镜像文件,另一种用软碟通ultraiso(uiso9_cn_9.7.0.3476.exe)类似的工具把u盘模拟成光盘直接安装。
用软碟通刻录好u盘后,插到电脑然后设置bios从u盘启动,其他的就比较简单了,只是如果习惯用图形界面的话,要选择ghome或xwindow版本。
远程xshell 断开后指令中断问题解决
方法1:
yum install screen 安装screen
screen -S myweb 创建会话 注意是大写S
screen -r myweb 打开会话 小写r
方法2:
nohup bash a.sh 这个表示拖机后台执行
内存处理
清楚swap
swapoff -a
swapon -a
查看内存使用情况
free -m
cache释放:
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
说明,释放前最好sync一下,防止丢数据。
再不行就只能reboot了
启动执行
可以写成shell 然后放到 /etc/profile中执行
NFS相关注意问题(centos7,其他版本指令可能不一样)
1、创建需要挂载的文件夹,并修改文件夹权限chmod -R 777
配置环境变量
export PATH=$PATH:/opt/ge2011/bin/
下载软件包出现错误:Errno 14的解决办法
yum clean all
rpm --rebuilddb
配置linux(centos)的桌面环境,和远程登录
sudo yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
如果你想在系统下次启动的时候自动进入图形界面,那么我们需要更改系统的运行级别,输入下面的命令来启用图形界面
sudo ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
安装vncserver:yum install tigervnc-server -y
在linux端,执行vncserver,看vncserver启动没,启动后会显示:
New 'hadoop-0:1 (root)' desktop ishadoop-0:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/hadoop-0:1.log
类似的信息,如果没启动,执行:service vncserver start
配置环境变量:export DISPLAY=hadoop-0:1与执行vncserver中打印的信息对应
执行 xhost +
在windows端下载:VNC-Viewer(当前下载的版本VNC-Viewer-6.1.1-Windows-64bit)安装,file,新链接,然后输入远程地址,这个远程地址与hadoop-0:1对应
linux环境下的python环境搭建
下载安装:
pycharm-professional-2017.1.tar.gz (需要先装桌面环境)
Anaconda2-4.3.1-Linux-x86_64.sh 默认安装路径:/root/anaconda2
Anaconda2-4.3.1-Linux-x86_64.sh 默认安装路径:/root/anaconda3
貌似和windows下差不多
python多个版本在linux下的切换技巧
alias pyana27="/root/anaconda2/bin/python"
alias pyana36="/root/anaconda3/bin/python"
alias py27="/usr/bin/python2.7"
这样就可以想调用哪个就调用哪个了
linux下shell执行时间的计算
begin_time=$(date +%N)
...待测量的脚本...
cost_time=$(awk -v x=$end_time -v y=$begin_time 'BEGIN {print (x-y)/1000000.00}')
echo "cost time = $cost_time ms"
opencv的在linux下编译配置(centos opencv-2.4.10)
下载opencvpkg-config opencv --libs
linux下的守护进程
参考:http://blog.csdn.net/happyqwz/article/details/8237048
上面的链接已经讲得很详细了
守护进程没有控制终端。因此编写守护进程时,通常关闭标准输入、标准输出和标准出错等文件描述符(若不关闭会浪费系统资源,造成进程所在文件系统无法卸载甚至引起无法预料的错误)。这样,守护进程不再持有从其父进程继承而来的文件描述符,任何一个试图读标准输入、写标准输出和标准出错的库例程将不会产生任何效果。因为守护进程并不与终端设备相关联,所以不能在终端设备上显示其输出,也无处从交互式用户那里接收输入。
相关概念:
进程组:是一个或多个进程的集合。进程组有进程组ID来唯一标识。除了进程号(PID)之外,进程组ID也是一个进程的必备属性。每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程组ID不会因组长进程的退出而受到影响。
会话期:会话期是一个或多个进程组的集合。通常,一个会话开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。
相关函数:
setsid函数作用:
setsid函数用于创建一个新的会话,并担任该会话组的组长。调用setsid有下面的3个作用:
让进程摆脱原会话的控制
让进程摆脱原进程组的控制
让进程摆脱原控制终端的控制
void init_daemon(void)
{
int pid;
int i;
// fork函数通过系统调用创建一个与原来进程几乎完全相同的进程
if(pid=fork())
exit(0);//是父进程,结束父进程
else if(pid< 0)
exit(1);//fork失败,退出
//是第一子进程,后台继续执行
setsid();//第一子进程成为新的会话组长和进程组长
//并与控制终端分离
if(pid=fork())
exit(0);//是第一子进程,结束第一子进程
else if(pid< 0)
exit(1);//fork失败,退出
//是第二子进程,继续
//第二子进程不再是会话组长
/*关闭文件描述符:同文件权限码一样,用fork函数新建的子进程会从父进程那里继承一些已经打开了的文件。
这些被打开的文件可能永远不会被守护进程读写,但它们一样消耗系统资源,
而且可能导致所在的文件系统无法卸下。在上面的第二步之后,守护进程已经与所属的控制终端失去了联系。
因此从终端输入的字符不可能达到守护进程,守护进程中用常规方法(如printf)输出的字符也不可能在终端上显示出来。所以,文件描述符为0、1和2 的3个文件(常说的输入、输出和报错)已经失去了存在的价值,也应被关闭*/
for(i=0;i< NOFILE;++i)//关闭打开的文件描述符
close(i);
/*改变当前目录为根目录:这一步也是必要的步骤。使用fork创建的子进程继承了父进程的当前工作目录。
由于在进程运行中,当前目录所在的文件系统(如“ / mnt / usb”)是不能卸载的,
这对以后的使用会造成诸多的麻烦(比如系统由于某种原因要进入单用户模式)。
因此,通常的做法是让"/"作为守护进程的当前工作目录,这样就可以避免上述的问题,当然,
如有特殊需要,也可以把当前工作目录换成其他的路径,如 / tmp。改变工作目录的常见函数式chdir。*/
chdir("/tmp");//改变工作目录到/tmp
/*重设文件权限掩码:文件权限掩码是指屏蔽掉文件权限中的对应位。比如,有个文件权限掩码是050,
它就屏蔽了文件组拥有者的可读与可执行权限。由于使用fork函数新建的子进程继承了父进程的文件权限掩码,
这就给该子进程使用文件带来了诸多的麻烦。因此,把文件权限掩码设置为0,可以大大增强该守护进程的灵活性。
设置文件权限掩码的函数是umask。在这里,通常的使用方法为umask(0)。*/
umask(0);//重设文件创建掩模
return;
}
linux gcc编译
- I :头文件
- L:库文件目录
- l :链接库 (是l 不是 i, 与i的大写很像)
-fpic:在编译动态库时(.so文件)告诉编译器产生与位置无关代码(Position-Independent Code),若未指定-fPIC选项编译.so文件,则在加载动态库时需进行重定向
linux下很好用的工具
1、查看动态库的动态依赖库:ldd -r *.so
e.g. ldd -r _recognition.so
2、查看某个函数是否在库中:
nm-g /root/anaconda3/lib/libpython3.6m.so |grep PyObject_Init
3、c++file 查看原函数,这个指令我这提示找不到,但比较有用,记录下,以后再看是什么问题
Linux关闭图像界面
因为用到虚拟机,图形界面下很卡,使用命令行模式会好点
方案1: