linux 使用記錄

主要還是在windows上開發,linux 用得少記錄下

主流發行版本:


Debian
(1、是社區類Linux操作系統的典範,是迄今爲止最遵循GNU規範的Linux系統)
(2、apt-get / dpkg包管理方式)
     stable    一般只用於服務器,上面的軟件包大部分都比較過時,但是穩定和安全 *** 都非常的高
    testing     經過unstable中的測試,相對較爲穩定,也支持了不少新技術(比如SMP等)
    unstable    最新的測試版本,其中包括最新的軟件包,但是也有相對較多的bug,適合桌面用戶

    Tails 目的就是爲了幫助用戶實現匿名上網,並最大限度保護個人隱私
    Ubuntu是Debian的衍生版本,有好的桌面環境
        基於Gnome的Ubuntu
        基於KDE的Kubuntu
        基於Xfc的Xubuntu
    LinuxMint Ubuntu的衍生版本


red hat
(1、Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所謂的Redhat Advance Server,收費版本))    
(2、基於RPM包的YUM包管理方式)
    Fedora    原來的Redhat桌面版本發展而來,免費版本
    centos    適合於服務器使用
    opensuse

如果不想自己定製任何東西,不想在系統上浪費太多時間,那麼很簡單,你就根據自己的愛好在ubuntu、kubuntu以及xubuntu中選一款吧,三者的區別僅僅是桌面程序的不一樣
如果需要一個桌面系統,而且還想非常靈活的定製自己的Linux系統,想讓自己的機器跑得更歡,不介意在Linux操作系統安裝方面浪費一點時間,那麼選擇就是Gentoo
如果需要的是一個服務器系統,而且非常厭煩各種Linux操作系統的配置,只是想要一個比較穩定的服務器系統而已,那麼你最好的選擇就是CentOS了,安裝完成後,經過簡單的配置就能提供非常穩定的服務了

如果需要的是一個堅如磐石的非常穩定的服務器系統,那麼選擇就是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
2、將該文件夾共享的方式寫入/etc/exports
/opt/ge2011 *(rw,insecure,no_all_squash,no_root_squash,sync)
/usr/wxf/kaldi *(rw,insecure,no_all_squash,no_root_squash,sync)
“*”表示訪問的主機不過濾,如果寫一個IP,就只有這個IP能訪問了,一般會報這個錯誤:
mount.nfs: access denied by server while mounting192.168.1.216:/opt/ge2011
3、exportfs –av使exports生效
4、啓動nfs
service rpcbind restart
service nfs restart
5、防火牆設置開放NFS端口:
service iptables restart
firewall-cmd--add-service=nfs
firewall-cmd--reload
6、掛載
mount 192.168.1.216:/opt/ge2011 /opt/ge2011


配置環境變量

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)

下載opencv
https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/
編譯opencv
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON CMakeLists.txt
make -j 4
查詢配置文件opencv.pc
lacate opencv.pc
將配置文件配置到環境變量
vim /etc/profile
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/use/wxf/opencv/lib/pkgconfig/
查看是否配置成功

pkg-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 查看原函數,這個指令我這提示找不到,但比較有用,記錄下,以後再看是什麼問題

[taoge@localhost test]$ c++filt _ZNK4Json5ValueixEPKc  
    Json::Value::operator[](char const*) const 

Linux關閉圖像界面

因爲用到虛擬機,圖形界面下很卡,使用命令行模式會好點

方案1:

開機以命令模式啓動,執行:
systemctl set-default multi-user.target
開機以圖形界面啓動,執行:
systemctl set-default graphical.target

方案2:
/etc/inittab
將id:5:initdefault:
修改爲id:3:initdefault:

centos7 掛載ntfs文件
下載ntfs-3g:yum install ntfs-3g
創建掛載文件節點:/mnt/usb2
掛載:ntfs-3g /dev/sdb1 /mnt/usb2 要先判斷硬盤盤符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章