工作中常用的linux操作整理

文件編輯操作命令

-----------------------------------------------------------------
在vi中查找字符串的方法如下:
1、命令模式下輸入“/字符串”,例如“/Section 3”。
2、如果查找下一個,按“n”即可。
要自當前光標位置向上搜索,請使用以下命令:
/pattern Enter
其中,pattern表示要搜索的特定字符序列。
要自當前光標位置向下搜索,請使用以下命令:
?pattern Enter
按下 Enter鍵後,vi 將搜索指定的pattern,並將光標定位在 pattern的第一個字符處。


參考資料地址:http://www.server110.com/linux/201404/10603.html


---------------------------------------------------------------------------------------


按下Insert鍵,可以見到窗口左下角有“Insert”字樣,表示當前爲插入編輯狀態,這時從鍵盤輸入的內容將插入到光標位置;再按下Insert鍵,左下角將有“Replace”字樣,表示當前爲替換編輯狀態,這時從鍵盤輸入的內容將替換光標位置的內容。


參考自;http://product.pconline.com.cn/itbk/software/linux/1311/3759019.html


--------------------------------------------------------------------------------------------
編輯文件後,先按esc,


a.若用戶就是不想保存被修改後的文件而要強行退出Vi時,可使用命令  :q!
Vi放棄所作修改而直接退到shell下;


b.輸入命令  :wq,Vi將先保存文件,然後退出Vi返回到shell。


c.連按兩次大寫字母Z,若當前編輯的文件曾被修改過,則Vi保存該文件後退出,返回到shell;
  若當前編輯的文件沒被修改過,則Vi直接退出, 返回到shell;


d.輸入命令  :w
  Vi保存當前編輯文件,但並不退出,而是繼續等待用戶輸入命令。在使用w命令時,可以再給編輯文件起一個新的文件名。 :w newfile此時Vi將把當前文件的內容保存到指定的newfile中,而原有文件保持不變。若newfile是一個已存在的文件,則Vi在顯示窗口的狀態行給出提示信息:
  File exists (use ! to override)
  此時,若用戶真的希望用文件的當前內容替換newfile中原有內容,可使用命令
  :w! newfile
  否則可選擇另外的文件名來保存當前文件。

e.輸入命令  :q
  系統退出Vi返回到shell。若在用此命令退出Vi時,編輯文件沒有被保存,則Vi在顯示窗口的最末行顯示如下信息:

  No write since last change (use ! to overrides)

 

 

 

其它常見命令


1.移動文件夾的命令:cp -r /usr/local/www/vhosts /var/ftp/pub

2.切換用戶
inux系統中用戶切換的命令爲su,語法爲:su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]

參數說明
-f , –fast:不必讀啓動文件(如 csh.cshrc 等),僅用於csh或tcsh兩種Shell。
-l , –login:加了這個參數之後,就好像是重新登陸一樣,大部分環境變量(例如HOME、SHELL和USER等)都是以該使用者(USER)爲主,並且工作目錄也會改變。如果沒有指定USER,缺省情況是root。

-m, -p ,–preserve-environment:執行su時不改變環境變數。
-c command:變更賬號爲USER的使用者,並執行指令(command)後再變回原來使用者。
–help 顯示說明文件
–version 顯示版本資訊
USER:欲變更的使用者賬號,
ARG: 傳入新的Shell參數。

2. su [user] 和 su - [user]的區別:su [user]切換到其他用戶,但是不切換環境變量,su - [user]則是完整的切換到新的用戶環境。

3.搜索文件 

find . -maxdepth 1 -name "@*" 
這個命令意思是,查找當前目錄下以@開頭的文件或者目錄,搜索深度爲一級也就是隻在當前目錄找,不進入子目錄,如果你要從/目錄開始找就:
find / -maxdepth 1 -name "@*" 
如果想搜全盤,就把-maxdepth 1 去掉

 

4.自動安裝軟件

yum的命令形式一般是如下:yum [options] [command] [package ...]
其中的[options]是可選的,選項包括-h(幫助),-y(當安裝過程提示選擇全部爲"yes"),-q(不顯示安裝的過程)等等。[command]爲所要進行的操作,[package ...]是操作的對象。(參考自:http://blog.csdn.net/wuwenxiang91322/article/details/20076985)

比如:

yum install zabbix20-server zabbix20-agent zabbix20-web-mysql nmap httpd policycoreutils-python net-snmp net-snmp-utils zabbix20-server zabbix20-agent zabbix20-web-mysql nmap httpd policycoreutils-python net-snmp net-snmp-utils

 

 

 

5.壓縮解壓文件

    .tar   

         解壓:tar zxvf FileName.tar    

         壓縮:tar czvf FileName.tar DirName

 .gz   

         解壓1:gunzip FileName.gz   解壓2:gzip -d FileName.gz    

         壓縮:gzip FileName
 .tar.gz 和 .tgz     

         解壓:tar zxvf FileName.tar.gz       

         壓縮:tar zcvf FileName.tar.gz DirName

        tar zcvf oicqzone.tar.gz oicqzone --exclude oicqzone/data
        tar zcvf oicqzone.tar.gz oicqzone --exclude oicqzone/data1 --exclude oicqzone/data2 --excludeoicqzone/ data3
        前面一句是壓縮打包文件夾oicqzone爲oicqzone.tar.gz,不包含oicqzone文件夾下的data文件夾。
        後面一句是壓縮打包文件夾oicqzone爲oicqzone.tar.gz,不包含oicqzone文件夾下的data1 data2 data3文件夾。

        linux 的tar 命令打包制定目錄下的所有文件,卻不想包含目錄,舉例:

        tar -czvf /test/data.tar.gz */ 中間是你打包的文件名,最後“*/”表示將/some/file/中的文件全部打包

 

 .bz2  

         解壓1:bzip2 -d FileName.bz2    解壓2:bunzip2 FileName.bz2     

         壓縮: bzip2 -z FileName
 .tar.bz2    

         解壓:tar jxvf FileName.tar.bz2    

         壓縮:tar jcvf FileName.tar.bz2 DirName
    .bz
  解壓1:bzip2 -d FileName.bz
  解壓2:bunzip2 FileName.bz
  壓縮:未知
 .tar.bz
  解壓:tar jxvf FileName.tar.bz
  壓縮:未知
 .Z
  解壓:uncompress FileName.Z
  壓縮:compress FileName
 .tar.Z
  解壓:tar Zxvf FileName.tar.Z
  壓縮:tar Zcvf FileName.tar.Z DirName
 .zip
  解壓:unzip FileName.zip
  壓縮:zip FileName.zip DirName
 .rar
  解壓:rar a FileName.rar
  壓縮:r ar e FileName.rar
  解壓後請將rar_static拷貝到/usr/bin目錄(其他由$PATH環境變量指定的目錄也可以):
  [root@www2 tmp]# cp rar_static /usr/bin/rar
 .lha
  解壓:lha -e FileName.lha
  壓縮:lha -a FileName.lha FileName
  》解壓後請將lha拷貝到/usr/bin目錄(其他由$PATH環境變量指定的目錄也可以):
  [root@www2 tmp]# cp lha /usr/bin/
 .rpm
  解包:rpm2cpio FileName.rpm | cpio -div
 .deb
  解包:ar p FileName.deb data.tar.gz | tar zxf -

--------------------------------------------------------------------------------

自動安裝jdk

Oracle官網上下載jdk,需要點擊accept licence的才能下載,使用下面的命令,直接可以下載。
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.rpm

然後運行如下命令自動安裝jdk:

rpm -ivh jdk-7u71-linux-x64.rpm 

--------------------------------------------------------------------------     

安裝ant

1、從http://ant.apache.org 上下載tar.gz版ant

2、複製到/usr下

3、tar -vxzf apahce-ant-1.9.2-bin.tar.gz  解壓

4、chown -R yjdabc apahce-ant-1.9.2  改變權限

    chown -R :users apahce-ant-1.9.2

   chmod -R +x apahce-ant-1.9.2

5、vi /etc/profile    修改系統配置文件

    #set Ant enviroment

    export ANT_HOME=/usr/apache-ant-1.9.2

    export PATH=$PATH:$ANT_HOME/bin

6、source /etc/profile   立刻將配置生效

7、ant -version   測試ant是否生效

 

執行:

ant -buildfile /usr/demo/build.xml init

表示運行build.xml 中名字爲init的target

 

 

------------------------------------------------------------------

 

防火牆

/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT #開啓8000端口 
/etc/rc.d/init.d/iptables save #保存配置 
/etc/rc.d/init.d/iptables restart #重啓服務 

查看端口是否已經開放 
/etc/init.d/iptables status

 

如果linux不使用iptables(centos 7默認的 firewall),而是使用firewall進行端口開放:

firewall-cmd --zone=public --add-port=80/tcp --permanent

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動

firewall-cmd --state #查看默認防火牆狀態(關閉後顯示notrunning,開啓後顯示running)

 

防火牆白名單設置:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.86.6.202" port protocol="tcp" port=9952 accept"
firewall-cmd --reload

---------------------------------------------------------------

Linux 查看端口占用並殺掉

netstat -apn|grep 80

tcp        0      0 10.65.42.27:80              172.22.142.20:62771         ESTABLISHED6426/lighttpd

爲上面標紅顯示

kill -9 6426

--------------------------------------------------

linux下生成ssh密鑰對(使用默認的路徑)

cd  ~/.ssh

ssh-keygen -t rsa -C  "[email protected]"

接下來點擊enter鍵默認方式生成

---------------------------------------------------------------

查找文件

2.查找文件名中包含某字符(如"elm")的文件
find /home/lijiajia/ -name '*elm*'
find /home/lijiajia/ -name 'elm*'
find /home/lijiajia/ -name '*elm'
 
3.根據文件的特徵進行查詢
find /home/lijiajia/ -amin -10        #查找在系統中最後10分鐘訪問的文件
find /home/lijiajia/ -atime -2        #查找在系統中最後48小時訪問的文件
find /home/lijiajia/ -empty           #查找在系統中爲空的文件或者文件夾
find /home/lijiajia/ -group cat       # 查找在系統中屬於groupcat 的文件(試了,命令不對。)
find /home/lijiajia/ -mmin -5         # 查找在系統中最後5 分鐘裏修改過的文件
find /home/lijiajia/ -mtime -1        #查找在系統中最後24 小時裏修改過的文件
find /home/lijiajia/ -nouser          #查找在系統中屬於作廢用戶的文件(不明白是什麼意思)
find /home/lijiajia/ -amin 10         #查找在系統中最後10分鐘訪問的文件
find /home/ftp/pub -user lijiajia     #查找在系統中屬於lijiajia這個用戶的文件
(PS:以上都是在 /home/lijiajia/文件夾下進行的操作)

-------------------------------------------------------------------------------------------

進程操作

通過進程名查看進程情況

ps -ef | grep openfire 

通過pid看端口

netstat -antup |grep 2711

 

通過進程名關閉所有進程

kill -9 $(ps -ef | grep openfire | grep -v grep | gawk '$0 !~/grep/ {print $2}' | tr -s '\\n' ' ') 

 

-------------------------------------------------------------

rpm操作

查找

 

<span style="color:#333333">通過  rpm -q <關鍵字> 可以查詢到rpm包的名字</span>

 

卸載

然後 調用 rpm -e <包的名字> 刪除特定rpm包
如果遇到依賴,無法刪除,使用 rpm -e --nodeps <包的名字> 不檢查依賴,直接刪除rpm包
如果恰好有多個包叫同樣的名字,使用 rpm -e --allmatches --nodeps <包的名字> 刪除所有相同名字的包, 並忽略依賴

 

------------------------------------------------------------

 

查看文件夾大小:

du -h --max-depth=1

參考自《Linux下查看文件和文件夾大小

-------------------------------------------------------------

設置文件夾權限:

 

[root@localhost ~]# chmod 777 /home/user 注:僅把/home/user目錄的權限設置爲rwxrwxrwx

[root@localhost ~]# chmod -R 777 /home/user 注:表示將整個/home/user目錄與其中的文件和子目錄的權限都設置爲rwxrwxrwx

-----------------------------------------------------------------

TCP鏈接查詢

 查看哪些IP連接本機
netstat -an
查看TCP連接數
1)統計80端口連接數
netstat -nat|grep -i "80"|wc -l

2)統計httpd協議連接數
ps -ef|grep httpd|wc -l

3)、統計已連接上的,狀態爲“established
netstat -na|grep ESTABLISHED|wc -l

4)、查出哪個IP地址連接最多,將其封了.
netstat -na|grep ESTABLISHED|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n
netstat -na|grep SYN|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n

摘錄自《http://blog.csdn.net/he_jian1/article/details/40787269

-----------------------------------------------------------------------------------

文件描述符數

 

1.    系統最大打開文件描述符數:/proc/sys/fs/file-max

查看

$ cat /proc/sys/fs/file-max

186405

設置

a.    臨時性

# echo 1000000 > /proc/sys/fs/file-max

b.    永久性:在/etc/sysctl.conf中設置

fs.file-max = 1000000

 

2.    進程最大打開文件描述符數:user limit中nofile的soft limit

a.    查看

$ ulimit -n

1700000

2. 設置

a.    臨時性:通過ulimit -Sn設置最大打開文件描述符數的soft limit,注意soft limit不能大於hard limit(ulimit -Hn可查看hard limit),另外ulimit -n默認查看的是soft limit,但是ulimit -n 1800000則是同時設置soft limit和hard limit。對於非root用戶只能設置比原來小的hard limit。

查看hard limit

$ ulimit -Hn

1700000

設置soft limit,必須小於hard limit:

$ ulimit -Sn 1600000

2.    永久性:上面的方法只是臨時性的,註銷重新登錄就失效了,而且不能增大hard limit,只能在hard limit範圍內修改soft limit。若要使修改永久有效,則需要在/etc/security/limits.conf中進行設置(需要root權限),可添加如下兩行,表示用戶chanon最大打開文件描述符數的soft limit爲1800000,hard limit爲2000000。以下設置需要註銷之後重新登錄才能生效:

chanon           soft    nofile          1800000

chanon           hard   nofile          2000000

設置nofile的hard limit還有一點要注意的就是hard limit不能大於/proc/sys/fs/nr_open,假如hard limit大於nr_open,註銷後無法正常登錄。可以修改nr_open的值:

# echo 2000000 > /proc/sys/fs/nr_open

3.    查看當前系統使用的打開文件描述符數

[root@localhost bin]# cat /proc/sys/fs/file-nr

5664        0        186405

其中第一個數表示當前系統已分配使用的打開文件描述符數,第二個數爲分配後已釋放的(目前已不再使用),第三個數等於file-max

4.    總結:

a.    所有進程打開的文件描述符數不能超過/proc/sys/fs/file-max

b.    單個進程打開的文件描述符數不能超過user limit中nofile的soft limit

c.    nofile的soft limit不能超過其hard limit

d.    nofile的hard limit不能超過/proc/sys/fs/nr_open

-----------------------------------------------------------------------------------

linux資源排查(cpu、內存、io)

查看某進程內存情況

1:使用 ps -ef|grep xxx 命令查找需要查看的進程,xxx是進程名字
2:top -p pid 查看程序的情況 
3:ps -aux | grep process_name
4:cat /proc/pid/status 

這裏會打印出當前進程詳細的情況,其中,內存是 VmRSS。 

linux磁盤操作

1.查看linux分區格式掛載點:

df -hT

2.磁盤掛載

 mount /dev/xvdb1 /mnt 掛載新分區,然後執行 df -h 查看分區

具體參考:《Linux 硬盤掛載》

tcpdump

tcpdump -i any -s0 host 192.168.1.45 -w "/user/local/packet/tcpdump.cap" & > /dev/null

- 抓取所有經過 eth1,目的網絡是 192.168,但目的主機不是 192.168.1.200 的 TCP 數據

# tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

- 只抓 SYN 包

 

# tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'

- 抓 SYN, ACK

 

 

# tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0'

 

- 抓 DNS 請求數據

# tcpdump -i eth1 udp dst port 53

-同時不抓多個ip

tcpdump -i any -s0 port 5222 and not host 10.200.110.17 and not host 10.200.110.15 and not host 10.86.199.52 -w "/home/uc/packet/im_cap.cap" & > /dev/null

 

 

-------------------------------------------

Linux查找含有某字符串的所有文件

轉自:http://151wqooo.blog.51cto.com/2610898/1162118

如果你想在當前目錄下 查找"hello,world!"字符串,可以這樣:

grep -rn "hello,world!" *

* : 表示當前目錄所有文件,也可以是某個文件名

-r 是遞歸查找

-n 是顯示行號

-R 查找所有文件包含子目錄

-i 忽略大小寫

下面是一些有意思的命令行參數:

grep -i pattern files :不區分大小寫地搜索。默認情況區分大小寫, 

grep -l pattern files :只列出匹配的文件名, 

grep -L pattern files :列出不匹配的文件名, 

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

grep -C number pattern files :匹配的上下文分別顯示[number]行, 

grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行, 

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

後續補充...

 

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