歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Ubuntu小知識

Ubuntu小知識

日期:2017/3/1 11:47:32   编辑:關於Linux

一、環境變量

1、/etc/profile:在登錄時,操作系統定制用戶環境時使用的第一個文件,此文件為系統的每個用戶設置環境信息,當用戶

第一次登錄時,該文件被執行。

2、/etc/environment:在登錄時操作系統使用的第二個文件,系統在讀取你自己的profile前,設置環境文件的環境變量。

3、~/.bash_profile:在登錄時用到的第三個文件是.bash_profile文件,每個用戶都可使用該文件輸入專用於自己使用的

shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文

件。/etc/bash.bashrc:為每一個運行bash shell的用戶執行此文件,當bash shell被打開時,該文件被讀取。

4、~/.bashrc:該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取。

幾個文件的優先級:1>2>3在linux下,如果是bash環境,用戶登錄時讀取設置文件的順序是/etc/profile -->

~/.bash_profile --> ~/.bashrc --> /etc/bash.bashrc。

注意在~/.bash_profile這一步,如果沒有~/.bash_profile ,則默認讀取~/.bash_login,如果沒有~/.bash_login 才讀取

~/.profile。

根據發行版本的情況,有兩個基本的系統級配置文件:/etc/bash.bashrc和/etc/profile。這些配置文件包含兩組不同的

變量:shell變量和環境變量。

前者只是在特定的shell中固定(如bash),後者在不同shell中固定。shell變量是局部的,而環境變量是全局的。

注意:盡量避免修改root用戶的環境變量配置文件,因為那樣可能會造成潛在的危險。最好不要把當前路徑”./”放到

PATH裡,這樣可能會受到意想不到的攻擊。

使用:

把設置的環境變量給所有用戶使用:/etc/bashrc;/etc/profile

修改全局的環境變量在/etc/profile

修改某個用戶的環境變量在/home/用戶名/.bash_profile

目前在Ubuntu中有二種設置PATH環境變量的方法。

為單一用戶:

打開用戶主目錄下的.bashrc,在這個文件中加入export PATH=”$PATH:/your path1/:/your path2/…..”

重啟或注銷就好了。

全局設置:

在/etc/profile中增加

PATH="$PATH:/home/zhengb66/bin"

export PATH

二、打開txt文件亂碼

txt文件默認是GBK編碼的,而linux系統用的是UTF-8編碼

打開應用程序——系統工具——配置編輯器。如果沒有的話打開系統——首選項——主菜單——系統工具——配置編輯器。

依次點開

apps->gedit-2->preferences->encodings 中的auto-detected

在雙擊彈出對話框中加入GB18030,GBK,GB2312,然後將GB18030,GB2312移到最上

再次打開.txt文件,問題解決了。

三、去掉^M

習慣保存一些腳本文件,如果通過samba方式傳遞到Ubuntu下,用vi查看編輯此類文件時候,總會有^M出現在行尾(如:echo $contents ^M),這是因為windows下的換行符與unix上的不同。

如何快速去掉^M呢,采取以下步驟就行了:

1. vi dosfilename

2. Press Esc

3. Enter this string: %s/^M//g (^M = Ctrl v + Ctrl m)

4. Press enter (the ^M cleared!)

5. :wq! (save the file)

vim內部就可以做這件事情。首先打開文本,然後 set fileformat=unix

四、sudo不用輸入密碼

通常我們並不以root身份登錄,但是當我們執行某些命令 (command)時需要用到root權限,我們通常都是用"sudo

command"來執行command。由於使用Ubuntu,所以經常都都用sudo,而使用sudo時,又得輸入密碼,下面介紹

sudo不輸入密 碼的方法。

假設我的用戶名為jay(屬於 admin組),使sudo不用密碼的方法如下:

運行命令:sudo visudo 或者 sudovi /etc/sudoers,如果vi來編輯,則保存時記得用"wq!"強制保存,否則會提示只讀

不能保存的。就會編輯/etc/sudoers這個文件。 默認情況我們會看到有"%admin ALL=(ALL) ALL"一句話,就是允許

admin組在所有主機上執行所有命令,當然是需要passwd的。

1. 如果想把admin組的用戶都sudo不用密碼那麼可以將這一行換為:"%admin ALL=(ALL) NOPASSWD: ALL"即可。

2. 如果僅僅想讓jay用戶sudo不需密碼,則可添加"jay ALL = NOPASSWD: ALL"這樣一行。

3. 如果讓jay用戶sudo不用密碼即可執行某幾個命令,可這樣寫"jay ALL =

NOPASSWD: /usr/bin/abc.sh, /usr/sbin/adduser"

4. 欲知其他更多配置方式,請運行"man sudoers"看幫助文檔吧。

注意:我自己的一個配置沒生效,找原因還找了陣子,寫到這裡吧。

我添 加"jay ALL = NOPASSWD: ALL"這樣一行;但是,jay執行sudo時還是需要輸入密碼,這是為什麼?

原來是, 我這一行在"%admin ALL=(ALL) ALL"組策略之前,後面的組配置覆蓋了前面的配置,而jay屬於admin

組,所以需要密碼。這時, 只需要將%admin行用#注釋掉即可。OK!然後立馬就生效了,可能執行sudo時系統

都會去讀取/etc/sudoers的,所以立即就生效了。

五、常用打包命令

gzip命令:

常用參數:

-c:將壓縮過程中產生的內容輸出到屏幕上,與>結合,可以保留原始文件

例:#gzip -c man.config >man.config.gz

壓縮完成後 man.config文件還會保留

-d:解壓參數

-v:在壓縮過程中顯示壓縮比等信息

-t:用來檢驗壓縮文件的一致性

-n:n的值為1-9,代表壓縮的等級 其中1最快 9壓縮比最好 默認為6

zcat命令:

可以不解壓文件,直接預覽後綴名為:*.gz的壓縮文件內容

bzip2命令:

常用參數:

-c:將壓縮過程中產生的資料輸出到屏幕上

-d:解壓參數

-z:壓縮參數

-k:保留原有文件

-v:在壓縮過程中顯示壓縮比等信息

-n:n的值為1-9 與gzip一樣.1為最快,9為最好


bzcat命令:

可以不解壓文件,直接預覽後綴名為:*.bz2的壓縮文件

tar命令:

常用參數

-p 保留原文件的權限與屬性,備份重要文件時最好加上

--exclude=filename 打包某目錄,但不包含filename這個文件

常見的三種用法:

打包並壓縮文件:

tar -c[z/j]vf 新文件名.tar.[gz/bz2] 要打包壓縮的文件名

-c:打包

-z:意為調用gzip命令壓縮文件.對應的新文件名後綴為*.tar.gz

-j:意為調用bzip2命令,對應的新文件名後綴為*.tar.bz2

-v:在壓縮過程中,將正在處理的文件名顯示出來

-f:filename的意思,後面接文件名.

查詢:

tar -t[z/j]vf 文件名

-t:不解壓打包文件,查詢打包文件裡的所有文件名

解包:

tar -x[j/z]vf filename -C 欲解壓到的目錄

-x:解包

-C:將包解壓到指定目錄

小技巧:

只打開包文件中的某一個文件

第一步,先查找出需解壓文件在包中的正確文件名

tar -t[z/j]vf 包的名字 |grep '欲解壓的文件名'

tar -x[j/z]vf 包的名字 欲解壓的文件名

只備份比某一時刻新的文件

三個時間點的解釋:

mtime(modification time)當文件的內容發生改變時,系統會記錄這個改變時間

atime(status time)當文件的狀態發生改變時,如權限,屬性發生改變,該時間會發生改變

ctime(access time)當文件被訪問後,該時間會發生改變

使用 ll命令時,顯示的時間默認是mtime

兩個參數的解釋

--newer後面接的時間包含mtime,atime兩種狀態

--newer-mtime只包含mtime一種

假如10月15日用tar命令備份過/etc目錄,10月30日備份時只想將15號後/etc目錄中內容發生改變的文件重新備份一下,

可以使用以下命令:

tar -cjvf etc.tar.bz2 --newer-mtime="2009/10/15" /etc/*

六、grep與正則表達式

正則表達式只是一種表示法,只要工具支持這種表示法, 那麼該工具就可以處理正則表達式的字符串。vim、grep、awk 、sed 都支持正則表達式,也正是因為由於它們支持正則,才顯得它們強大。

1. 基礎正則表達式

grep 工具,以前介紹過。

grep -[acinv] '搜索內容串' filename

-a 以文本文件方式搜索

-c 計算找到的符合行的次數

-i 忽略大小寫

-n 順便輸出行號

-v 反向選擇,即找 沒有搜索字符串的行

其中搜索串可以是正則表達式!

(1) 搜索有the的行,並輸出行號

$grep -n 'the' regular_express.txt

(2) 搜 索沒有the的行,並輸出行號

$grep -nv 'the' regular_express.txt

(3) 利 用[]搜索集合字符

[] 表示其中的某一個字符 ,例如[ade] 表示a或d或e

$ grep -n 't[ae]st' regular_express.txt

8:I can't finish the test.

9:Oh! the soup taste good!

可以用^符號做[]內的前綴,表示除[]內的字符之外的字 符。

比如搜索oo前沒有g的字符串所在的行. 使用 '[^g]oo' 作搜索字符串

$ grep -n '[^g]oo' regular_express.txt

2:apple is my favorite food.

3:Football game is not use feet only.

18:google is the best tools for search keyword.

19:goooooogle yes!

[] 內可以用范圍表示,比如[a-z] 表示小寫字母,[0-9] 表示0~9的數字, [A-Z] 則是大寫字母們。[a-zA-Z0-9]表示所有數

字與英文字符。 當然也可以配合^來排除字符。

(4) 搜索包含數字的行
$ grep -n '[0-9]' regular_express.txt

5:However ,this dress is about $ 3183 dollars.

15:You are the best is menu you are the no.1.

行首與行尾字符 ^ $. ^ 表示行的開頭,$表示行的結尾( 不是字符,是位置)那麼‘^$’ 就表示空行,因為只有行首和行

尾。這裡^與[]裡面使用的^意義不同。它表示^後面的串是在行的開頭。比如搜索the在開頭的行

$ grep -n '^the' regular_express.txt

12:the symbol '*' is represented as star.

(5) 搜索以小寫字母開頭的行

$ grep -n '^[a-z]' regular_express.txt

2:apple is my favorite food.

4:this dress doesn't fit me.

10:motorcycle is cheap than car.

12:the symbol '*' is represented as star.

18:google is the best tools for search keyword.

19:goooooogle yes!

20:go! go! Let's go.

(6) 搜索開頭不是英文字母的行

$ grep -n '^[^a-zA-Z]' regular_express.txt

1:"Open Source" is a good mechanism to develop programs.

21:#I am VBird

(7) $表示它前面的串是在行的結尾,比如 '/.' 表示 . 在一行的結尾搜索末尾是.的行

$ grep -n '/.$' regular_express.txt //. 是正則表達式的特殊符號,所以要用/轉義

1:"Open Source" is a good mechanism to develop programs.

2:apple is my favorite food.

3:Football game is not use feet only.

4:this dress doesn't fit me.

5:However ,this dress is about $ 3183 dollars.

6:GNU is free air not free beer.
.....

注意在MS的系統下生成的文本文件,換行會加上一個 ^M 字符。所以最後的字符會是隱藏的^M ,在處理Windows

下面的文本時要特別注意!

可以用cat dos_file | tr -d '/r' > unix_file 來刪除^M符號。 ^M==/r

那麼'^$' 就表示只有行首行尾的空行拉!

(8) 搜索空行

$ grep -n '^$' regular_express.txt

22:

23:

(9) 搜索非空行

$ grep -vn '^$' regular_express.txt

1:"Open Source" is a good mechanism to develop programs.

2:apple is my favorite food.

3:Football game is not use feet only.

4:this dress doesn't fit me.

..........

(10) 任意一個字符. 與重復字符 *

在bash中*代表通配符,用來代表任意個 字符,但是在正則表達式中,他含義不同,*表示有0個或多個 某個字符。

例如 oo*, 表示第一個o一定存在,第二個o可以有一個或多個,也可以沒有,因此代表至少一個o.

點. 代表一個任意字符,必須存在。 g??d 可以用 'g..d' 表示。 good ,gxxd ,gabd .....都符合。

$ grep -n 'g..d' regular_express.txt

1:"Open Source" is a good mechanism to develop programs.

9:Oh! the soup taste good!

16:The world is the same with 'glad'.

(11) 搜索兩個o以上的字符串

$ grep -n 'ooo*' regular_express.txt //前兩個o一定存在,第三個o可沒有,也可有多個。

1:"Open Source" is a good mechanism to develop programs.

2:apple is my favorite food.

3:Football game is not use feet only.

9:Oh! the soup taste good!

18:google is the best tools for search keyword.

19:goooooogle yes!

(12) 搜索g開頭和結尾,中間是至少一個o的字符串,即gog, goog....gooog...等

$ grep -n 'goo*g' regular_express.txt

18:google is the best tools for search keyword.

19:goooooogle yes!

(13) 搜索g開頭和結尾的字符串在的行

$ grep -n 'g.*g' regular_express.txt // .*表示 0個或多個任意字符

1:"Open Source" is a good mechanism to develop programs.

14:The gd software is a library for drafting programs.

18:google is the best tools for search keyword.

19:goooooogle yes!

20:go! go! Let's go.


限定連續重復字符的范圍 { }

. * 只能限制0個或多個, 如果要確切的限制字符重復數量,就用{范圍} 。范圍是數字用,隔開 2,5 表示2~5個,

2表示2個,2, 表示2到更多個

注意,由於{ }在SHELL中有特殊意義,因此作為正則表達式用的時候要用/轉義一下。

(14)搜索包含兩個o的字符串的行

$ grep -n 'o/{2/}' regular_express.txt

1:"Open Source" is a good mechanism to develop programs.

2:apple is my favorite food.

3:Football game is not use feet only.

9:Oh! the soup taste good!

18:google is the best tools for search keyword.\

19:goooooogle yes!

(15) 搜索g後面跟2~5個o,後面再跟一個g的字符串的行

$ grep -n 'go/{2,5/}g' regular_express.txt

18:google is the best tools for search keyword.


(16) 搜索包含g後面跟2個以上o,後面再跟g的行

$ grep -n 'go/{2,/}g' regular_express.txt

18:google is the best tools for search keyword.

19:goooooogle yes!


注意,相讓[]中的^ - 不表現特殊意義,可以放在[]裡面內容的後面。

'[^a-z/.!^ -]' 表示沒有小寫字母,沒有. 沒有!, 沒有空格,沒有- 的 串,注意[]裡面有個小空格。

另外shell 裡面的反向選擇為[!range], 正則裡面是 [^range]

2擴展正則表達式

擴展正則表達式是對基礎正則表達式添加了幾個特殊構成的。它令某些操作更加方便。

比如我們要去除 空白行和行首為 #的行, 會這樣用:

$ grep -v '^$' regular_express.txt | grep -v '^#'

"Open Source" is a good mechanism to develop programs.

apple is my favorite food.

Football game is not use feet only.

this dress doesn't fit me.

............

然而使用支持擴展正則表達式的 egrep 與擴展特殊符號 | ,會方便許多。

注意grep只支持基礎表達式, 而egrep 支持擴展的, 其實 egrep 是 grep -E 的別名而已。因此grep -E 支持擴展正

則。

那麼:

$ egrep -v '^$|^#' regular_express.txt

"Open Source" is a good mechanism to develop programs.

apple is my favorite food.

Football game is not use feet only.

this dress doesn't fit me.

....................

這裡| 表示或的關系。 即滿足 ^$ 或者 ^# 的字符串。

這裡列出幾個擴展特殊符號:

+, 於 . * 作用類似,表示 一個或多個重復字符。

?, 於 . * 作用類似,表示0個或一個字符。

|,表示或關系,比如 'gd|good|dog' 表示有gd,good或dog的串

(),將部分內容合成一個單元組。 比如 要搜索 glad 或 good 可以這樣 'g(la|oo)d'

()的好處是可以對小組使用 + ? * 等。

比如要搜索A和C開頭結尾,中間有至少一個(xyz) 的串,可以這樣 : 'A(xyz)+C'

Copyright © Linux教程網 All Rights Reserved