常用命令使用記錄

根據日期字符串截取日誌文件

sed 按行處理,不會將整個文件加載到內存中

要切出從2012-02-09到2012-09-10的所有數據行,(假設你的日誌文件以yyyy-MM-dd的日期格式開頭)只需要:

sed -n '/^2012-02-09/,/^2012-09-10/p' whole.log > part.log

查看系統64位還是32位:

getconf LONG_BIT

修改文件權限

$ chmod u+x filefile的屬主增加執行權限
$ chmod 751 filefile的屬主分配讀、寫、執行(7)的權限,給file的所在組分配讀、執行(5)的權限,給其他用戶分配執行(1)的權限
$ chmod u=rwx,g=rx,o=x file      上例的另一種形式
$ chmod =r file        爲所有用戶分配讀權限
$ chmod 444 file       同上例
$ chmod a-wx,a+r   file    同上例
$ chmod -R u+r directory   遞歸地給directory目錄下所有文件和子目錄的屬主分配讀的權限
$ chmod 4755      設置用ID,給屬主分配讀、寫和執行權限,給組和其他用戶分配讀、執行的權限。

創建用戶(useradd):

(1)用useradd命令創建用戶創建用戶:

語法: useradd [所要創建的用戶名] ,回車

(2)用passwd命令爲該用戶創建密碼:

語法: passwd [用戶名] ,回車

刪除用戶(userdel命令)

語法:userdel [-r] [要刪除的用戶的名稱]

例如:[root@localhost ~]userdel -r aillo


查看文件中關鍵字所在上下文

1、或操作

grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename    // 用egrep同樣可以實現
awk '/123|abc/' filename   // awk 的實現方式

2、與操作

grep pattern1 files | grep pattern2 //顯示既匹配 pattern1 又匹配 pattern2 的行。

3、其他操作

grep -i pattern files   //不區分大小寫地搜索。默認情況區分大小寫,
grep -l pattern files   //只列出匹配的文件名,
grep -L pattern files   //列出不匹配的文件名,
grep -w pattern files  //只匹配整個單詞,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files //匹配的上下文分別顯示[number]行,

多文件字符串替換-linux

sed [-nefri] ‘command’ 輸入文本/文件
如:將當前文件夾下所有包含字符串2,'POINT'的文本文件均替換爲4,'POINT'.
可使用命令:

sed -i  s/2,\'POINT\'/4,\'POINT\'/g  `grep 2,\'POINT\' -rl .`

命令解析:
1. sed ‘s/要替換的字符串/新的字符串/g’ (要替換的字符串可以用正則表達式)
2. -i∶直接修改讀取的文件內容,而不是由屏幕輸出
3. `grep 2,\’POINT\’ -rl .` 執行查詢命令 ,查找滿足條件的文件列表

重複行

方法一:uniq

  1. 查找非重複行(結果不包含重複行)
    sort file |uniq -u
  2. 查找重複行
    sort file |uniq -d
  3. 統計(結果的第一列爲 該行信息重複次數,然後爲行內容)
    sort file | uniq -c
  4. 去除重複行
    sort file |uniq
    以上命令均不對源文件做改動,可通過 >命令指定輸出文件
    如: sort test.txt |uniq -u > uniq.txt

    • 如要將 1.txt 中 所有 “相鄰” 重複行合併成一行,結果存入 2.txt 使用 :uniq 1.txt > 2.txt
    • 如果是想將相鄰重複行徹底刪掉(而不是合併成一行),可以用 uniq -u 1.txt > 2.txt

方法二:Vim

先sort排序,再去重

:sort       //直接排序
:g/^\(.*\)$\n\1$/d       //去除重複行
:g/\%(^\1$\n\)\@<=\(.*\)$/d    //功能同上
:g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d       //功能同上

方法三:使用awk

awk '!a[$0]++' file

解析: awk 流程是逐行處理的,默認從文件的第一行一直處理到文件最後一行,還要知道 awk 的基本命令格式是pattern{action}先匹配各種各樣的模式,然後大括號裏處理如何打印輸出,默認的只要匹配了pattern{print $0},如果pattern未命中其判斷值爲假(0)那麼就不會再去處理{action}了;

舉個最簡單的例子:awk ‘1’ file和awk ‘{print $0}’ file是一個道理,都是從頭到尾依次打印文件的每一行。

a[$0]這個非常好理解,建立數組a,其變量是文本中的每一行,awk裏$1是第一列,$2是第二列,以此類推$NF是最後一列,而$0是代表所有列及分隔符,也就是一整行,這樣如果pattern是真的那就打印一整行 ++的意思是 a 數組取變量完畢後,對該數組值 +1。
找個最簡單的文檔來解釋一下:

cat file
1 xxx
2 yyy
3 zzz
4 xxx
5 yyy
6 zzz
7 xxx
8 yyy
9 zzz

則執行命令:

awk '!a[$0]++{print NR,$0}' file
1 xxx
2 yyy
3 zzz

awk 'a[$0]++{print NR,$0}' file
4 xxx
5 yyy
6 zzz
7 xxx
8 yyy
9 zzz

其中 NR表示行號。

刪除包含text這個字符串的行 -vim

:g/text/d

統計文件行數 -linux

wc filename
- c 統計字節數。
- l 統計行數。
- w 統計字數。

列塊對應行粘貼 -vim

例如原有數據如下:

Names
Donald Knuth
Sebastian Thrun
Peter Norvig
Satoshi Nakamoto

Age
100
50
60
45

期望結果爲:

Names Age
Donald Knuth 100
Sebastian Thrun 50
Peter Norvig 60
Satoshi Nakamoto 45

可以理解爲將第二列粘貼到第一列後:

  1. Yank it in visual mode: //在 visual 模式拷貝

    • Move cursor to the beginning of Age //將光標移至 Age 的首字母
    • Press Ctrl + v to enter visual mode //進入VISUAL BLOCK 模式
    • Move cursor to 5 in 45 //光標移至下數第五行
    • Press y to yank (or d to delete) //按 y 拷貝或 d 刪除
    • You have now yanked in visual mode.
  2. Paste (in normal mode) //在 normal 模式粘貼

    • Move to the end of the first line and add more spaces because it’s shorter than the second line for example. If you paste a “block” without adding extra spaces, it will overwrite the “run” in Sebastian Thrun. //光標移至首行,並在行尾添加空格使之與下面對齊。
    • Now you’re on the first line, insert a few spaces after the last character. Make sure you’re not in insert mode and hit p to paste the block. (If you want to paste in insert mode, use ctrl+r “)//按 p 粘貼即可。

沒看懂^_^,沒關係,上圖:

操作命令演示

vim 與系統剪切板的互動

"+y 複製當前行到系統剪切板
"+p 粘貼系統剪切板內容到當前位置後

/**************************************************/
參考文章
Linux常用文本操作命令整理

查看linux系統信息

一、查看Linux內核版本命令(兩種方法):

1、cat /proc/version

[root@localhost ~]# cat /proc/version
Linux version 2.6.18-194.8.1.el5.centos.plus ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Wed Jul 7 11:50:45 EDT 2010

2、uname -a

[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-194.8.1.el5.centos.plus #1 SMP Wed Jul 7 11:50:45 EDT 2010 i686 i686 i386 GNU/Linux

二、查看Linux系統版本的命令(3種方法):

1、lsb_release -a,即可列出所有版本信息:

[root@localhost ~]# lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description: CentOS release 5.5 (Final)
Release: 5.5
Codename: Final

這個命令適用於所有的Linux發行版,包括Redhat、SuSE、Debian…等發行版。

2、cat /etc/redhat-release,這種方法只適合Redhat系的Linux:

[root@localhost ~]# cat /etc/redhat-release
CentOS release 5.5 (Final)

3、cat /etc/issue,此命令也適用於所有的Linux發行版。

[root@localhost ~]# cat /etc/issue
CentOS release 5.5 (Final)
Kernel \r on an \m

yum make install 如何“uninstall”

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