Linux常用命令及筆記

命令總結

cd -																#在上一次的工作目錄和當前目錄來回切換
cat filename                        #查看文件內容
head filename                       #查看文件前幾行,可以用head -n 9 filename看前9行
tail filename                       #查看文件後幾行
ls -a        												#列出所有文件,包括隱藏文件
ls -F        												#列出文件夾
ls -l        												#列出文件屬性,包括權限,屬組,時間等等,類似於視窗的詳細列表
-ld        	 												#列出所在文件夾的屬性,詳細列表【常用ls -l 和 ls -afl】
locate                              #查找全盤的文件內容,用法如下:
locate *softname*.tar.gz            #所有包括文件路徑中包含softname,並以tar.gz結尾都會被列出來
who                                 #查看誰在線
rm -rf foldername                   #強制刪除文件夾/文件
mv path/file file2                  #把路徑path下的文件file移動到當前文件夾,並命名爲file2,可以用於重命名【補:可以用於重命名】
mv -i path/file file2               #如果當前文件夾下面有file2,會提示是否覆蓋
mv -b path/file file2               #如果當前文件夾下面有file2,把新文件變成~file2
cp pathfile file2                   #把路徑path下的文件file拷貝到當前文件夾,並命名爲file2
touch filename                      #新建一個文件
echo        hello,world > hello.txt #新建hello.txt文件並輸出hello,world     
#當然,對於實際編寫大量程序的時候用這個是很麻煩的,有別的類似文本編輯器一樣的東西輔助編輯,如gedit,UE等(很久以後補充了這一段)
cat >file.f90<<EOF                  #新建file並打開等待輸入,直到遇到EOF跳出此文件,執行後如下:
> print,”test file”
> end
> EOF                               #結束輸入,文件file中寫入兩行內容






ls查看時,不同顏色表示不同文件類型:藍色(文件夾)、黑色(普通文本)、綠色(可執行文件)、淡藍色(快捷方式)、紅色(警告文件有問題)、淡紅色(壓縮包)

軟件

htop:Linux性能監控
熱鍵:
u :具有過濾功能,能顯示用戶指定用戶的進程
s :選定某個進程後,使用該命令可以跟蹤該進程所發起的系統調用
l :選定某個進程後,使用該命令可以顯示該經常打開的文件有那些
t :直接使用該命令可以顯示進程的層級機構
a :使用該命令可以設定某個進程的cpu親緣性
k :使用該命令可以結束某個指定進程
h :該工具還有衆多功能,使用該命令可以獲取該工具其他幫助信息
標識:
RES:進程佔用的物理內存值
SHR:進程佔用的共享內存值
TIME+:該進程啓動後佔用的總的CPU時間

#配置環境變量

可用 export 命令查看PATH值

單獨查看PATH環境變量,可用:echo PATH

添加PATH環境變量(臨時),可用:export PATH=/opt/STM/STLinux-2.3/devkit/sh4/bin:PATH

export PATH=PATH:/XXX 但是退出當前終端後就失效

export 路徑PATH="路徑”(“PATH= PATH:路徑”**)**

永久添加環境變量(影響當前用戶)

vim ~/.bashrc 

export PATH=“/opt/STM/STLinux-2.3/devkit/sh4/bin:PATH”

永久添加環境變量(影響所有用戶)

vim /etc/profile

在文檔最後,添加:

export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:PATH"

保存,退出,然後運行:

source /etc/profile(source也可換成“.”)

LD_LIBRARY_PATH是Linux環境變量名,該環境變量主要用於指定查找共享庫(動態鏈接庫)時除了默認路徑之外的其他路徑。當執行函數動態鏈接.so時,如果此文件不在缺省目錄下‘/lib’ and ‘/usr/lib’.那麼就需要指定環境變量LD_LIBRARY_PATH


logout退出服務器

Linux中profile、bashrc、bash_profile之間的區別和聯繫

/etc/profile: 此文件爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.並/etc/profile.d目錄的配置文件中搜集shell的設置.
/etc/bashrc: 爲每一個運行bashshell的用戶執行此文件.當bashshell被打開時,該文件被讀取.
~/.bash_profile: 每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件.

~/.bashrc: 該文件包含專用於你的bashshell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取.
~/.bash_logout: 當每次退出系統(退出``bashshell)時,執行該文件.

另外,/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承/etc/profile中的變量,他們是"父子"關係.

/etc/profile ** : 此文件爲系統每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.並從/etc/profile.d目錄的配置文件中搜集shell的設置.所以如果你有對/etc/profile有修改的話必須得重啓你的修改纔會生效**,此修改對每個用戶都生效。

/etc/bashrc : 爲每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取.當被修改後,不用重啓只需要打開一個新的 bash 即可生效。

/etc/profile.d/:此文件夾裏是除/etc/profile之外其他的”application-specific startup files”。英文描述爲”The /etc/profile file sets the environment variables at startup of the Bash shell. The /etc/profile.d directory contains other scripts that contain application-specific startup files, which are also executed at startup time by the shell.” 同時,這些文件”are loaded via /etc/profile which makes them a part of the bash “profile” in the same way anyway.” 因此可以簡單的理解爲是/etc/profile的一部分,只不過按類別或功能拆分成若干個文件進行配置了(方便維護和理解)。

文件的執行順序爲:當登錄Linux時,首先啓動/etc/environment和/etc/profile,然後啓動當前用戶目錄下的/.bash_profile,執行此文件時一般會調用/.bashrc文件,而執行/.bashrc時一般會調用/etc/bashrc,最後退出shell時,執行/.bash_logout。簡單來說順序爲:

(登錄時)/etc/environment –> /etc/profile(以及/etc/profile.d/裏的文件) –> ~/.bash_profile –> (打開shell時)~/.bashrc –> /etc/bashrc –> (退出shell時)~/.bash_logout

查看版本:gcc --version

##編譯器 cc、gcc、g++、CC 的區別

cc來自於Unix的c語言編譯器,是 c compiler 的縮寫。gcc來自Linux世界,是GNU compiler collection 的縮寫,注意這是一個編譯器集合,不僅僅是c或c++。

gcc 是GNU Compiler Collection,原名爲Gun C語言編譯器,因爲它原本只能處理C語言,但gcc很快地擴展,包含很多編譯器(C、C++、Objective-C、Ada、Fortran、 Java),可以說gcc是GNU編譯器集合。

g++ 是C++編譯器。

cc 是 Unix系統的 C Compiler,一個是古老的 C 編譯器。而 Linux 下 cc 一般是一個符號連接,指向 gcc;可以通過 ls -l /usr/bin/cc 來簡單察看,該變量是 make 程序的內建變量,默認指向 gcc 。 cc 符號鏈接和變量存在的意義在於源碼的移植性,可以方便的用 gcc 來編譯老的用cc編譯的Unix軟件,甚至連 makefile 都不用改在,而且也便於 Linux 程序在 Unix下 編譯。

CC 則一般是 makefile 裏面的一個名字標籤,即宏定義,表示採用的是什麼編譯器(如:CC = gcc)。

-I與-L選項

 -I dir
  :使用#include<>,gcc默認目錄shi "/usr/include",如果使用#include<my.h>則找不到my.h文件,因此要通過“-I dir”參數來指定包含的頭文件my.h的位置:
   gcc 1-3.c -o 1-3 -I /root              (假設文件my.h存放在/root下)
把#include<my.h>改爲#include"my.h"就不需要“-I dir”參數也能正確編譯了。 

-L dir
: -L dir與-I dir 功能類似,能夠在庫文件的搜索路徑列表中添加dir目錄。
如果一個程序用到了目錄/root/lib下的一個動態庫libsunq.so,因爲-L dir指定的是路徑而沒有指定文件,則需要用到 -llibarry參數,它可以指定gcc去尋找libsunq.so。
在linux下的庫文件命名規定必須以lib三個字母開頭,因此,在用“-I”指定連接庫文件時可以省去lib三個字母,即,-llibsunq有時可以寫成“-lsunq”:
 gcc 1-3.c -o 1-3 -L /root/lib -lsunq


-l參數和-L參數
-l參數就是用來指定程序要鏈接的庫,-l參數緊接着就是庫名,那麼庫名跟真正的庫文
件名有什麼關係呢?
就拿數學庫來說,他的庫名是m,他的庫文件名是libm.so,很容易看出,把庫文件名的
頭lib和尾.so去掉就是庫名了。

好了現在我們知道怎麼得到庫名了,比如我們自已要用到一個第三方提供的庫名字叫lib
test.so,那麼我們只要把libtest.so拷貝到/usr/lib

裏,編譯時加上-ltest參數,我們就能用上libtest.so庫了(當然要用libtest.so庫裏
的函數,我們還需要與libtest.so配套的頭文件)。

放在/lib和/usr/lib和/usr/local/lib裏的庫直接用-l參數就能鏈接了,但如果庫文件
沒放在這三個目錄裏,而是放在其他目錄裏,這時我們

只用-l參數的話,鏈接還是會出錯,出錯信息大概是:“/usr/bin/ld: cannot find 
-lxxx”,也就是鏈接程序ld在那3個目錄裏找不到

libxxx.so,這時另外一個參數-L就派上用場了,比如常用的X11的庫,它放在/usr/X11R
6/lib目錄下,我們編譯時就要用-L/usr/X11R6/lib -

lX11參數,-L參數跟着的是庫文件所在的目錄名。再比如我們把libtest.so放在/aaa/bb
b/ccc目錄下,那鏈接參數就是-L/aaa/bbb/ccc -ltest

查看CPU

# 總核數 = 物理CPU個數 X 每顆物理CPU的核數 
# 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數

# 查看物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看所有邏輯CPU(線程)的個數
cat /proc/cpuinfo| grep "processor"| wc -l
# 查看GPU型號
cat /proc/cpuinfo | grep 'model name' |uniq
首先要明確物理cpu個數、核數、邏輯cpu數的概念
1.物理cpu數:主板上實際插入的cpu數量,可以數不重複的 physical id 有幾個(physical id)

2.cpu核數:單塊CPU上面能處理數據的芯片組的數量,如雙核、四核等 (cpu cores)

3.邏輯cpu數:一般情況下,邏輯cpu=物理CPU個數×每顆核數,如果不相等的話,則表示服務器的CPU支持超線程技術(HT:簡單來說,它可使處理器中的1 顆內核如2 顆內核那樣在操作系統中發揮作用。這樣一來,操作系統可使用的執行資源擴大了一倍,大幅提高了系統的整體性能,此時邏輯cpu=物理CPU個數×每顆核數x2)

查看設備信息

 uname -a               # 查看內核/操作系統/CPU信息
# lsb_release -a         # 查看操作系統版本 (適用於所有的linux,包括Redhat、SuSE、Debian等發行版,但是在debian下要安裝lsb)   
# cat /proc/cpuinfo      # 查看CPU信息
# hostname               # 查看計算機名
# lspci -tv              # 列出所有PCI設備
# lsusb -tv              # 列出所有USB設備
# lsmod                  # 列出加載的內核模塊
# env                    # 查看環境變量

**資源**
# free -m                # 查看內存使用量和交換區使用量
# df -h                  # 查看各分區使用情況
# du -sh <目錄名>        # 查看指定目錄的大小
# grep MemTotal /proc/meminfo   # 查看內存總量
# grep MemFree /proc/meminfo    # 查看空閒內存量
# uptime                 # 查看系統運行時間、用戶數、負載
# cat /proc/loadavg      # 查看系統負載

**磁盤和分區**
# mount | column -t      # 查看掛接的分區狀態
# fdisk -l               # 查看所有分區
# swapon -s              # 查看所有交換分區
# hdparm -i /dev/hda     # 查看磁盤參數(僅適用於IDE設備)
# dmesg | grep IDE       # 查看啓動時IDE設備檢測狀況

**網絡**

# ifconfig               # 查看所有網絡接口的屬性
# iptables -L            # 查看防火牆設置
# route -n               # 查看路由表
# netstat -lntp          # 查看所有監聽端口
# netstat -antp          # 查看所有已經建立的連接
# netstat -s             # 查看網絡統計信息


**進程**

# ps -ef                 # 查看所有進程
# top                    # 實時顯示進程狀態

**用戶**
# w                      # 查看活動用戶
# id <用戶名>            # 查看指定用戶信息
# last                   # 查看用戶登錄日誌
# cut -d: -f1 /etc/passwd   # 查看系統所有用戶
# cut -d: -f1 /etc/group    # 查看系統所有組
# crontab -l             # 查看當前用戶的計劃任務

**服務**
# chkconfig --list       # 列出所有系統服務
# chkconfig --list | grep on    # 列出所有啓動的系統服務

Linux下的tar壓縮解壓縮命令詳解

**壓縮**
tar -cvf jpg.tar *.jpg //將目錄裏所有jpg文件打包成tar.jpg 

tar -czf jpg.tar.gz *.jpg   //將目錄裏所有jpg文件打包成jpg.tar後,並且將其用gzip壓縮,生成一個gzip壓縮過的包,命名爲jpg.tar.gz

tar -cjf jpg.tar.bz2 *.jpg //將目錄裏所有jpg文件打包成jpg.tar後,並且將其用bzip2壓縮,生成一個bzip2壓縮過的包,命名爲jpg.tar.bz2

tar -cZf jpg.tar.Z *.jpg   //將目錄裏所有jpg文件打包成jpg.tar後,並且將其用compress壓縮,生成一個umcompress壓縮過的包,命名爲jpg.tar.Z

rar a jpg.rar *.jpg //rar格式的壓縮,需要先下載rar for linux
zip jpg.zip *.jpg //zip格式的壓縮,需要先下載zip for linux

**解壓**
tar -xvf file.tar //解壓 tar包
tar -xzvf file.tar.gz //解壓tar.gz
tar -xjvf file.tar.bz2   //解壓 tar.bz2
tar -xZvf file.tar.Z   //解壓tar.Z
unrar e file.rar //解壓rar
unzip file.zip //解壓zip

pigz是支持並行的gzip,默認用當前邏輯cpu個數來併發壓縮,無法檢測個數的話,則併發8個線程

安裝pigz

$sudo apt install pigz
1
打包
$tar --use-compress-program=pigz -cvpf package.tgz ./package
1
解包
#tar --use-compress-program=pigz -xvpf package.tgz -C ./package
1
tar –use-compress-program=pigz表示指定pigz來進行打包

c表示create創建 x表示extract解壓 v表示verbose詳細 f表示指定壓縮文件 C表示指定目錄

-cvpf package.tgz ./ 表示將./package目錄打包爲package.tgz

-xvpf package.tgz -C ./表示將package.tgz解壓到./package目錄下



tar**

-c: 建立壓縮檔案
-x:解壓
-t:查看內容
-r:向壓縮歸檔文件末尾追加文件
-u:更新原壓縮包中的文件

以上這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的參數是根據需要在壓縮或解壓檔案時可選的。

-z:有gzip屬性的
-j:有bz2屬性的
-Z:有compress屬性的
-v:顯示所有過程
-O:將文件解開到標準輸出

下面的參數-f是必須的

-f: 使用檔案名字,切記,這個參數是最後一個參數,後面只能接檔案名。

\# tar -cf all.tar *.jpg
這條命令是將所有.jpg的文件打成一個名爲all.tar的包。-c是表示產生新的包,-f指定包的文件名。

\# tar -rf all.tar *.gif
這條命令是將所有.gif的文件增加到all.tar的包裏面去。-r是表示增加文件的意思。

\# tar -uf all.tar logo.gif
這條命令是更新原來tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

\# tar -tf all.tar
這條命令是列出all.tar包中所有文件,-t是列出文件的意思

\# tar -xf all.tar
這條命令是解出all.tar包中所有文件,-t是解開的意思

**總結**
1、*.tar 用 tar -xvf 解壓
2、*.gz 用 gzip -d或者gunzip 解壓
3、*.tar.gz和*.tgz 用 tar -xzf 解壓
4、*.bz2 用 bzip2 -d或者用bunzip2 解壓
5、*.tar.bz2用tar -xjf 解壓
6、*.Z 用 uncompress 解壓
7、*.tar.Z 用tar -xZf 解壓
8、*.rar 用 unrar e解壓
9、*.zip 用 unzip 解壓

gunzip是個使用廣泛的解壓縮程序,它用於解開被gzip壓縮過的文件,這些壓縮文件預設最後的擴展名爲".gz"

cp Make.Linux_Intel64 .

靜態鏈接庫與動態鏈接庫

所謂靜態鏈接庫,說白了就是在你把寫好的代碼編譯的時候,就把你引用的庫一起給編進去了,從此後你編出來的執行程序跟外面都不再有任何關係,即使這個庫更新了,你也搭不上邊兒,其次,如果系統中許多類似的程序都需要用到這個庫,那麼各自在編譯的時候都需要把這個庫給編進去,浪費存儲空間(加載到內存裏應該也是浪費內存空間的)。linux系統中靜態庫的名字一般叫xxx.a, 所以如果你看到一個以 .a結束的文件那麼它多半就是一個靜態鏈接庫文件。

所謂動態鏈接庫,也就是說編譯的時候不會真的把你引用到的庫給編到你的執行程序裏,而是在執行時候纔會去加載相關的庫,所有用到此庫的程序可以共享一份代碼,這樣帶來的好處是可執行程序所佔的空間變小了,同時,如果庫需要升級,你並不需要重新編譯你的程序,只要把相關的庫升級即可。 在linux下動態鏈接庫文件一般叫做libxxx.so

ln命令

這是linux中一個非常重要命令,請大家一定要熟悉。它的功能是爲某一個文件或目錄在另外一個位置建立一個同步的鏈接,類似Windows下的超級鏈接。

這個命令最常用的參數是-s,具體用法是:
sudo ln -s 源文件 目標文件 

舉例:

當前目錄是/local,而我經常要訪問/usr/local/linux/work

那麼我就可以使用在local下建立一個文件linkwork,

然後sudo ln -s /usr/local/linux/work  /local/linkwork

即建立兩者之間的鏈接。

刪除鏈接

rm -rf   symbolic_name   注意不是rm -rf   symbolic_name/ 
那麼上面我就是rm -rf   /local/linkwork

鏈接有兩種,一種被稱爲硬鏈接(Hard Link),另一種被稱爲符號鏈接(Symbolic Link)。建立硬鏈接時,鏈接文件和被鏈接文件必須位於同一個文件系統中,並且不能建立指向目錄的硬鏈接。而對符號鏈接,則不存在這個問題。默認情況下,ln產生硬鏈接。
  在硬鏈接的情況下,參數中的“目標”被鏈接至[鏈接名]。如果[鏈接名]是一個目錄名,系統將在該目錄之下建立一個或多個與“目標”同名的鏈接文件, 鏈接文件和被鏈接文件的內容完全相同。如果[鏈接名]爲一個文件,用戶將被告知該文件已存在且不進行鏈接。如果指定了多個“目標”參數,那麼最後一個參數 必須爲目錄。
  如果給ln命令加上- s選項,則建立符號鏈接。如果[鏈接名]已經存在但不是目錄,將不做鏈接。[鏈接名]可以是任何一個文件名(可包含路徑),也可以是一個目錄,並且允許它與“目標”不在同一個文件系統中。如果[鏈接名]是一個已經存在的目錄,系統將在該目錄下建立一個或多個與“目標”同名的文件,此新建的文件實際上是指向原“目標”的符號鏈接文件

查找文件

在使用linux時,經常需要進行文件查找。其中查找的命令主要有find和grep。兩個命令是有區的。

  區別:(1)find命令是根據文件的屬性進行查找,如文件名,文件大小,所有者,所屬組,是否爲空,訪問時間,修改時間等。 

                  (2)grep是根據文件的內容進行查找,會對文件的每一行按照給定的模式(patter)進行匹配查找。

                  (3)which       查看可執行文件的位置 ,只有設置了環境變量的程序纔可以用

                  (4)whereis    尋找特定文件,只能用於查找二進制文件、源代碼文件和man手冊頁

                  (5)locate       配合數據庫查看文件位置 ,詳情:locate -h查看幫助信息

           

一.find命令

    基本格式:find  path expression

    1.按照文件名查找

    (1)find / -name httpd.conf  #在根目錄下查找文件httpd.conf,表示在整個硬盤查找
    (2)find /etc -name httpd.conf  #在/etc目錄下文件httpd.conf
    (3)find /etc -name '*srm*'  #使用通配符*(0或者任意多個)。表示在/etc目錄下查找文件名中含有字符串‘srm’的文件
    (4)find . -name 'srm*'   #表示當前目錄下查找文件名開頭是字符串‘srm’的文件

    2.按照文件特徵查找     

    (1)find / -amin -10   # 查找在系統中最後10分鐘訪問的文件(access time)
    (2)find / -atime -2   # 查找在系統中最後48小時訪問的文件
    (3)find / -empty   # 查找在系統中爲空的文件或者文件夾
    (4)find / -group cat   # 查找在系統中屬於 group爲cat的文件
    (5)find / -mmin -5   # 查找在系統中最後5分鐘裏修改過的文件(modify time)
    (6)find / -mtime -1   #查找在系統中最後24小時裏修改過的文件
    (7)find / -user fred   #查找在系統中屬於fred這個用戶的文件
    (8)find / -size +10000c  #查找出大於10000000字節的文件(c:字節,w:雙字,k:KB,M:MB,G:GB)
    (9)find / -size -1000k   #查找出小於1000KB的文件

    3.使用混合查找方式查找文件

    參數有: !,-and(-a),-or(-o)。

    (1)find /tmp -size +10000c -and -mtime +2   #在/tmp目錄下查找大於10000字節並在最後2分鐘內修改的文件
         (2)find / -user fred -or -user george   #在/目錄下查找用戶是fred或者george的文件文件
         (3)find /tmp ! -user panda  #在/tmp目錄中查找所有不屬於panda用戶的文件
        

  二、grep命令

     基本格式:find  expression

     1.主要參數

    [options]主要參數:
    -c:只輸出匹配行的計數。
    -i:不區分大小寫
    -h:查詢多文件時不顯示文件名。
    -l:查詢多文件時只輸出包含匹配字符的文件名。
    -n:顯示匹配行及行號。
    -s:不顯示不存在或無匹配文本的錯誤信息。
    -v:顯示不包含匹配文本的所有行。

    pattern正則表達式主要參數:
    \: 忽略正則表達式中特殊字符的原有含義。
    ^:匹配正則表達式的開始行。
    : 匹配正則表達式的結束行。
    \<:從匹配正則表達 式的行開始。
    \>:到匹配正則表達式的行結束。
    [ ]:單個字符,如[A]即A符合要求 。
    [ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。
    .:所有的單個字符。
    * :有字符,長度可以爲0。

    2.實例  

        grep -r "字符串"  很方便

  (1)grep 'test' d*  #顯示所有以d開頭的文件中包含 test的行
  (2)grep ‘test’ aa bb cc    #顯示在aa,bb,cc文件中包含test的行
  (3)grep ‘[a-z]\{5\}’ aa   #顯示所有包含每行字符串至少有5個連續小寫字符的字符串的行
  (4)grep magic /usr/src  #顯示/usr/src目錄下的文件(不含子目錄)包含magic的行
  (5)grep -r magic /usr/src  #顯示/usr/src目錄下的文件(包含子目錄)包含magic的行

  (6)grep -w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

man命令

man命令是Linux下的幫助指令,通過man指令可以查看Linux中的指令幫助、配置文件幫助和編程幫助等信息。 
語法 
man+(選項)+參數

選項 
-a:在所有的man幫助手冊中搜索; 
-f:等價於whatis指令,顯示給定關鍵字的簡短描述信息; 
-P:指定內容時使用分頁程序; 
-M:指定man手冊搜索的路徑。

top命令

top 命令實時顯示進程的狀態。默認狀態顯示的是cpu密集型的進程,並且每5秒鐘更新一次。你可以通過PID的數字大小,age (newest first), time (cumulative time),resident memory usage(常駐內存使用)以及進程從啓動後佔用cpu的時間。

PID: 進程描述符 
USER: 進程的擁有者 
PRI:進程的優先級 
NI: nice level 
SIZE: 進程擁有的內存(包括code segment + data segment + stack segment) 
RSS: 物理內存使用
VIRT(virtul memory usage): 進程需要的虛擬內存大小
RES(resident memory usage): 常駐內存 
SHARE: 和其他進程共享的物理內存空間 
STAT:進程的狀態,有 S=sleeping,R=running,T=stopped or traced,D=interruptible sleep(不可中斷的睡眠狀態),Z=zombie。 
%CPU: CPU使用率 
%MEM: 物理內存的使用
TIME: 進程佔用的總共cpu時間 
COMMAND:進程的命令

 t: 用於是否顯示總的統計數據(關閉或開啓第一部分第二行 Tasks 和第三行 Cpus 信息的表示)
 
 l – 關閉或開啓第一部分第一行 top 信息的表示
 
 m:用戶是否顯示內存的信息(關閉或開啓第一部分第四行 Mem 和 第五行 Swap 信息的表示)
 
 A: 根據單窗口切換成多窗口,可以看到四個不同的窗口,可以通過a或者w來切換多個窗口。 四個窗口的名字分別爲:Def,Job,Mem,Usr
 
f:進入一個動態配置top的screen中,可以根據自己的喜好配置top

o:對top的現有配置排序(order)

r:使用renice命令

k:使用kill命令

sudo ldconfig

ldconfig是一個動態鏈接庫管理命令,其目的爲了讓動態鏈接庫爲系統所共享。

ldconfig的主要用途:

默認搜尋/lilb和/usr/lib,以及配置文件/etc/ld.so.conf內所列的目錄下的庫文件。

搜索出可共享的動態鏈接庫,庫文件的格式爲:lib***.so.**,進而創建出動態裝入程序(ld.so)所需的連接和緩存文件。

緩存文件默認爲/etc/ld.so.cache,該文件保存已排好序的動態鏈接庫名字列表。

ldconfig通常在系統啓動時運行,而當用戶安裝了一個新的動態鏈接庫時,就需要手工運行這個命令。

#ldconfig需要注意的地方:

1、往/lib和/usr/lib裏面加東西,是不用修改/etc/ld.so.conf文件的,但是添加完後需要調用下ldconfig,不然添加的library會找不到。

2、如果添加的library不在/lib和/usr/lib裏面的話,就一定要修改/etc/ld.so.conf文件,往該文件追加library所在的路徑,然後也需要重新調用下ldconfig命令。比如在安裝MySQL的時候,其庫文件/usr/local/mysql/lib,就需要追加到/etc/ld.so.conf文件中。命令如下:

# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf

# ldconfig -v | grep mysql

3、如果添加的library不在/lib或/usr/lib下,但是卻沒有權限操作寫/etc/ld.so.conf文件的話,這時就需要往export裏寫一個全局變量LD_LIBRARY_PATH,就可以了。

軟件的安裝與卸載

一、Ubuntu中軟件安裝方法

1、APT方式

(1)普通安裝:apt-get install softname1 softname2 …;

(2)修復安裝:apt-get -f install softname1 softname2... ;(-f Atemp to correct broken dependencies)

(3)重新安裝:apt-get --reinstall install softname1 softname2...;

2、Dpkg方式

(1)普通安裝:dpkg -i package_name.deb

3、源碼安裝(.tar、tar.gz、tar.bz2、tar.Z)

首先解壓縮源碼壓縮包然後通過tar命令來完成

a.解xx.tar.gz:tar zxf xx.tar.gz 
b.解xx.tar.Z:tar zxf xx.tar.Z 
c.解xx.tgz:tar zxf xx.tgz 
d.解xx.bz2:bunzip2 xx.bz2 
e.解xx.tar:tar xf xx.tar

然後進入到解壓出的目錄中,建議先讀一下README之類的說明文件,因爲此時不同源代碼包或者預編譯包可能存在差異,然後建議使用ls -F --color或者ls -F命令(實際上我的只需要 l 命令即可)查看一下可執行文件,可執行文件會以*號的尾部標誌。

一般依次執行./configure

                      make

                     sudo make install

即可完成安裝。

二、Ubuntu中軟件包的卸載方法

1、APT方式

(1)移除式卸載:sudo apt-get remove softname1 softname2 …;(移除軟件包,當包尾部有+時,意爲安裝)

(2)清除式卸載:sudo apt-get purge sofname1 softname2...;(同上,也清除配置文件)

2、Dpkg方式

(1)移除式卸載:dpkg -r pkg1 pkg2 ...;
(2)清除式卸載:dpkg -P pkg1 pkg2...;

常見 Shell :sh、bash、csh、tcsh、ash

Shell 既是一種腳本編程語言,也是一個連接內核和用戶的軟件。
常見的 Shell 有 sh、bash、csh、tcsh、ash 等。
sh
sh 的全稱是 Bourne shell,由 AT&T 公司的 Steve Bourne開發,爲了紀念他,就用他的名字命名了。

sh 是 UNIX 上的標準 shell,很多 UNIX 版本都配有 sh。sh 是第一個流行的 Shell。
csh
sh 之後另一個廣爲流傳的 shell 是由柏克萊大學的 Bill Joy 設計的,這個 shell 的語法有點類似C語言,所以才得名爲 C shell ,簡稱爲 csh。

Bill Joy 是一個風雲人物,他創立了 BSD 操作系統,開發了 vi 編輯器,還是 Sun 公司的創始人之一。
BSD 是 UNIX 的一個重要分支,後人在此基礎上發展出了很多現代的操作系統,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就連 Mac OS X 在很大程度上也基於BSD。
tcsh
tcsh 是 csh 的增強版,加入了命令補全功能,提供了更加強大的語法支持。
ash
一個簡單的輕量級的 Shell,佔用資源少,適合運行於低內存環境,但是與下面講到的 bash shell 完全兼容。
bash
bash shell 是 Linux 的默認 shell,本教程也基於 bash 編寫。

bash 由 GNU 組織開發,保持了對 sh shell 的兼容性,是各種 Linux 發行版默認配置的 shell。
bash 兼容 sh 意味着,針對 sh 編寫的 Shell 代碼可以不加修改地在 bash 中運行。
儘管如此,bash 和 sh 還是有一些不同之處:
一方面,bash 擴展了一些命令和參數;
另一方面,bash 並不完全和 sh 兼容,它們有些行爲並不一致,但在大多數企業運維的情況下區別不大,特殊場景可以使用 bash 代替 sh。
查看 Shell
Shell 是一個程序,一般都是放在/bin或者/user/bin目錄下,當前 Linux 系統可用的 Shell 都記錄在/etc/shells文件中。/etc/shells是一個純文本文件,你可以在圖形界面下打開它,也可以使用 cat 命令查看它。

通過 cat 命令來查看當前 Linux 系統的可用 Shell:
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

在現代的 Linux 上,sh 已經被 bash 代替,/bin/sh往往是指向/bin/bash的符號鏈接。
如果你希望查看當前 Linux 的默認 Shell,那麼可以輸出 SHELL 環境變量:
$ echo $SHELL
/bin/bash

輸出結果表明默認的 Shell 是 bash。

/usr/bin/env

#!/usr/bin/env 
在linux的一些bash的腳本,需在開頭一行指定腳本的解釋程序,如: 
#!/usr/bin/env python 
再如: 
#!/usr/bin/env perl 
#!/usr/bin/env zimbu 
#!/usr/bin/env ruby 
但有時候也用 
#!/usr/bin/python #!/usr/bin/perl 
那麼 env到底有什麼用?何時用這個呢? 
    腳本用env啓動的原因,是因爲腳本解釋器在linux中可能被安裝於不同的目錄,env可以在系統的PATH目錄中查找。同時,env還規定一些系統環境變量。 

#wc命令

Linux系統中的wc(Word Count)命令的功能爲統計指定文件中的字節數、字數、行數,並將統計結果顯示輸出。

-c 統計字節數。

-l 統計行數。

-m 統計字符數。這個標誌不能與 -c 標誌一起使用。

-w 統計字數。一個字被定義爲由空白、跳格或換行字符分隔的字符串。

-L 打印最長行的長度。

-help 顯示幫助信息

--version 顯示版本信息

文件權限詳解

文件權限
ls
 -l中顯示的內容如下:

-rwxrw-r‐-1 root root 1213 Feb 2 09:39 abc

- 10個字符確定不同用戶能對文件幹什麼

- 第一個字符代表文件(-)、目錄(d),鏈接(l)

- 其餘字符每3個一組(rwx),讀(r)、寫(w)、執行(x)

- 第一組rwx:文件所有者的權限是讀、寫和執行

- 第二組rw-:與文件所有者同一組的用戶的權限是讀、寫但不能執行

- 第三組r--:不與文件所有者同組的其他用戶的權限是讀不能寫和執行

也可用數字表示爲:r=4,w=2,x=1  因此rwx=4+2+1=7

- 1 表示連接的文件數

- root 表示用戶

- root表示用戶所在的組

- 1213 表示文件大小(字節)

- Feb 2 09:39 表示最後修改日期

- abc 表示文件名

改變權限的命令

chmod 改變文件或目錄的權限

chmod 755 abc:賦予abc權限rwxr-xr-x

chmod u=rwx,g=rx,o=rx abc:同上u=用戶權限,g=組權限,o=不同組其他用戶權限

chmod u-x,g+w abc:給abc去除用戶執行的權限,增加組寫的權限

chmod a+r abc:給所有用戶添加讀的權限


linux系統文件夾644、755、777權限設置詳解 ,左至右,第一位數字代表文件所有者的權限,第二位數字代表同組用戶的權限,第三位數字代表其他用戶的權限。

而具體的權限是由數字來表示的,讀取的權限等於4,用r表示;寫入的權限等於2,用w表示;執行的權限等於1,用x表示;

通過4、2、1的組合,得到以下幾種權限:0(沒有權限);4(讀取權限);5(4+1 | 讀取+執行);6(4+2 | 讀取+寫入);7(4+2+1 | 讀取+寫入+執行)

以755爲例:

第一位7等於4+2+1,rwx,所有者具有讀取、寫入、執行權限;

第二位5等於4+1+0,r-x,同組用戶具有讀取、執行權限但沒有寫入權限;

第三位5,同上,也是r-x,其他用戶具有讀取、執行權限但沒有寫入權限。

更改目錄權限與所有者

1、利用chmod修改權限:

對Document/目錄下的所有子文件與子目錄執行相同的權限變更:

chmod -R 700 Document/

-R參數是遞歸 處理目錄下的所有文件以及子文件夾

700是變更後的權限表示(只有所有者有讀和寫以及執行的權限)

Document/ 是需要執行的目錄

2、利用chown改變所有者:

對Document/ 目錄下的所有文件與子目錄執行相同的所有者變更,修改所有者爲users用戶組的username用戶

sudo chown -R username:users Document/
-R表示遞歸式地改變指定目錄及其下的所有子目錄和文件的擁有者。 

username:users users用戶組的username,用戶組參數不是必須有

輸出gcc預定義宏

gcc -dM -E - <<< ‘’

或echo | gcc -dM -E -

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