[TOC]
# Linux常用命令操作
## 一:Linux下tomcat服務的啟動、關閉與錯誤跟蹤
使用**PuTTy**遠程連接到服務器以后,通常通過以下幾種方式啟動關閉tomcat服務:
切換到tomcat主目錄下的bin目錄
```shell
> cd usr/local/tomcat/bin
```
### 啟動tomcat服務
* 方式一:直接啟動
```shell
> ./startup.sh
```
* 方式二:作為服務啟動
```shell
> nohup ./startup.sh &
```
* 方式三:控制臺動態輸出方式啟動
```shell
> ./catalina.sh run
```
動態地顯示tomcat后臺的控制臺輸出信息,`Ctrl+C`后退出并關閉服務
**解釋:**
通過方式一、方式三啟動的tomcat有個弊端,當客戶端連接斷開的時候,tomcat服務也會立即停止,通過方式二可以作為linux服務一直運行
通過方式一、方式二方式啟動的tomcat,其日志會寫到相應的日志文件中,而不能動態地查看tomcat控制臺的輸出信息與錯誤情況,通過方式三可以以控制臺模式啟動tomcat服務,
直接看到程序運行時后臺的控制臺輸出信息,不必每次都要很麻煩的打開catalina.out日志文件進行查看,這樣便于跟蹤查閱后臺輸出信息。
tomcat控制臺信息包括log4j和System.out.println()等輸出的信息。
### 關閉tomcat服務
```shell
> ./shutdown.sh
```
### tomcat運行時jvm內存分配
* ⑴ 開發環境下在myeclipse中配置
~~~
-Xms256m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=128m -XX:PermSize=512m -XX:MaxPermSize=512m
~~~
* ⑵ 線上環境(直接通過catalina或startup命令行的方式啟動)
①Linux下:catalina.sh
`# OS specific support. $var _must_ be set to either true or false.在該注釋之后加下面一行`
~~~
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=128m -XX:PermSize=512m -XX:MaxPermSize=512m"
~~~
②Windows下:cattalina.bat
~~~
rem Guess CATALINA_HOME if not defined 在該注釋之后加下面一行
set JAVA_OPTS=-Xms256m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=128m -XX:PermSize=512m -XX:MaxPermSize=512m
~~~
## 二:Linux 下的一些常用命令解釋:
### `pwd`
顯示當前的工作目錄(pwd:print working directory)
### `ls`
顯示當前目錄內容(list)
### `ls|more`
分屏顯示("|"為管道符,將前一個命令結果傳遞給后面的命令,more表示分屏)
```shell
> ls /usr>test01/abc.txt
```
將指定目錄的內容追加到test01目錄下的abc.txt文本文檔中
~~~
ls -l #顯示長格式,簡寫ll,主要看文件的名,大小,權限等
ls -a #顯示隱藏文件
~~~
### `cd`
改變當前工作目錄
```shell
> cd /usr #轉到指定目錄
> cd usr #轉到指定目錄的子目錄
> cd .. #返回到上一級目錄
> cd ~ #返回到主目錄
```
### `clear`
清屏
### `cat`
顯示文件內容
```shell
> cat file|more #分屏顯示文件內容(先顯示文件內容,再將結果內容傳給后一個命令分屏)
> cat file|grep abc #顯示包含字符abc的文件內容(先顯示文件內容,再將結果內容傳給后一個命令搜索,grep具有搜索功能)
cat > catalina.out #清空日志內容
```
### `touch`
創建新文件
### `mkdir`
創建新目錄
### `rm`
刪除文件或目錄
```shell
> rm file.txt #刪除文件
> rm -rf test01 #刪除不為空的目錄(參數r:遞歸recursion,f:強制force)
```
### `rmdir`
刪除空目錄
### `cp`
復制文件
```shell
> cp src.txt dest.txt
```
### `mv`
移動文件
```shell
> mv abc.txt def.txt #改名
> mv test01 test02 #改目錄名
> mv test #相當于mv t+(按Tab鍵),tab鍵有查找補充命令功能。
```
### `chmod`
改變權限模式
```shell
> chmod +x catalina.sh #為catalina.sh加可執行的權限(參數x:執行execute)。linux下的文件是否可執行取決于文件屬性,不看擴展名。
> chmod a+r catalina.out #將文件 catalina.out 設為所有人皆可讀取。(參數a:所有人all)
> chmod ugo+r catalina.out #也是將文件 catalina.out 設為所有人皆可讀取。(參數u:檔案擁有者user,g:group群組,o:other其他)
```
### `vi`
Linux下的一個簡單編輯器
```shell
> vi .bash_profile #打開Linux的用戶級初始文件,:wq保存退出,:q!不保存退出
```
### `tail`
顯示文件尾部內容
```shell
> tail -f ./catalina.out #將文件最尾部內容顯示在屏幕上,并不斷刷新顯示,按ctrl+c或delete退出。
```
### ` netstat、lsof`
查看網絡端口與進程號
① 直接查看指定端口的進程pid
```shell
> netstat -anp|grep 8080
```
~~~
# 結果為:
協議 本地地址 外部地址 狀態 PID
TCP 0.0.0.0:80 0.0.0.0:8080 LISTENING 5144/java
~~~
② 直接查看指定端口的進程pid
```shell
lsof -i:8080
```
~~~
# 結果為
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 5144 root 33u IPv6 127800 TCP *:8080 (LISTEN)
~~~
則5144為8080這個端口的tomcat進程的pid,然后就可以kill這個進程:
```shell
kill -9 5144
```
對比Windows下`netstat`命令:
```shell
> netstat -ano|findstr 8080,taskkill -f -pid 5144 #(f:force強制)
```
### `ping`
查看網絡是連通
```shell
> ping 127.16.8.66 #查看當前機器與目錄機器是否能正常通信(主要是看TCP/IP協議是否正常)
```
### `ipconfig`
查看ip地址
```shell
> ipconfig -all #可以看到各個網絡適配器(本地網卡、無線網卡)的IP地址和MAC地址
```
### `ps`
查看程序活動進程
```shell
> ps -ef |grep tomcat #查看是否已經有tomcat在運行了,如果有則將其進程殺死
```
~~~
#結果為:
sun 1540 1 0 10:21 pts/1 00:00:06 /java/jdk/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/java/tomcat/common/endorsed -classpath :/java/tomcat/bin/bootstrap.jar:/java/tomcat/bin/commons-logging-api.jar -Dcatalina.base=/java/tomcat -Dcatalina.home=/java/tomcat -Djava.io.tmpdir=/java/tomcat/temp org.apache.catalina.startup.Bootstrap start
~~~
**Bootstrap start** 說明tomcat已經正常啟動,則 1540 就為進程號 pid = 1540,然后就可以kill這個進程:
```shell
> kill -9 1540
```
對比Windows下`tasklist`命令:
```shell
> tasklist | findstr tomcat,taskkill -f -pid 5144
```
### `telnet`
測試遠程端口是否連通
```shell
> telnet 10.4.200.114 1433
```
①端口通暢的情況
~~~
Trying 10.4.200.114...
Connected to 10.4.200.114 (10.4.200.114).
Escape character is '^]'.
~~~
②端口不通的情況
~~~
Trying 10.4.200.114...
~~~
如果能ping通,但端口不通,說明有可能被防火墻禁用了該端口
**解決辦法:**
linux下:查看防火墻:
```shell
> iptables –L
```
即時生效,重啟后失效。 (開啟: `service iptables start` ,關閉: `service iptables stop` )
設置防火墻:setup (亂碼) 解決Putty工具亂碼:查看Linux系統當中使用的字符集echo $LANG $LANGUAGE,選擇菜修改設置(change settings)--->轉換(translation)-->選utf-8-->應用(apply)
win7下防火墻開放端口方法:控制面板--系統和安全---windows防火墻---高級設置--入站規則--新建規則-->添加1433端口。
### `df`
查看磁盤空間(diskfree)
```shell
> df -lh /usr/local
```
### `du`
查看已使用空間(diskused)
```shell
> du -h /usr
> du -h --max-depth=1 #查看文件夾大小
```
### `top`
Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于Windows的任務管理器
```shell
> top -s #查看內存使用情況
> top -s | grep java #查看java進程的信息
```
### `tar、zip`
1. `tar.gz`這種格式是Linux下使用得最多的壓縮格式。它在壓縮時不會占用太多CPU的,而且可以得到一個非常理想的壓縮率。
```shell
> tar -zcvf archive_name.tar.gz directory_to_compress #壓縮一個目錄
> tar -zxvf archive_name.tar.gz #解壓縮到當前目錄下
> tar -zxvf archive_name.tar.gz -C /usr/temp/ #解壓縮到指定目錄下
```
~~~
參數解釋:
-z -gzip 調用gzip對tar歸檔文件進一步壓縮成tar.gz格式,或者對tar.gz格式完成解壓縮
-x -extract 解壓縮已歸檔的指定(或所有)文件
-c -create 創建新的歸檔文件
-v -verbose 生成詳細輸出
-f -file 指定歸檔文件名
-r 向歸檔文件末尾追加文件
-C 改變目錄
~~~
2. 壓縮/解壓zip格式
```shell
> zip file.zip ./directory/* #壓縮指定目錄下的所有文件及目錄
> unzip file.zip -d ./test #解壓縮到指定目錄
> unzip file.zip #解壓縮到當前目錄
> unzip -v largefile.zip #只查看壓縮包的內容,并不解壓縮
```
## 三:Linux與Windows的幾點區別:
```shell
> echo $PATH #回顯Linux環境變量PATH的值,Linux下的環境變量必須大寫
> echo %path% #回顯Windows環境變量path的值
> export PATH=/usr/local/tomcat #修改設置Linux環境變量PATH的值(臨時),Linux文件系統路徑是斜杠
> set path=D:\Program Files\tomcat #修改Windows環境變量path的值(臨時),Windows文件系統路徑是反斜杠
```
Linux:查看、修改Linux下的用戶級初始文件(**.bash_profile**),它是個隱藏文件(永久)
Windows:計算機-->屬性-->高級-->環境變量;查看、修改環境變量(永久)
### Linux命令搜索用grep:
```shell
> netstat -anp|grep 8080
```
### Windows Dos命令搜索用findstr:
```shell
> netstat -anp|findstr 8080
```
### Linux下Tomcat的啟動、關閉、殺死進程
```shell
> `cd /java/tomcat`
> bin/startup.sh #啟動tomcat
> bin/shutdown.sh #停止tomcat
> tail -f logs/catalina.out #看tomcat的控制臺輸出;
```
看是否已經有tomcat在運行了:
```shell
> `ps -ef |grep tomcat`
```
如果有,用`kill`:
```shell
> kill -9 pid #pid 為相應的進程號
```
例如 ` ps -ef |grep tomcat` 輸出如下
```shell
sun 5144 1 0 10:21 pts/1 00:00:06 /java/jdk/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/java/tomcat/common/endorsed -classpath :/java/tomcat/bin/bootstrap.jar:/java/tomcat/bin/commons-logging-api.jar -Dcatalina.base=/java/tomcat -Dcatalina.home=/java/tomcat -Djava.io.tmpdir=/java/tomcat/temp org.apache.catalina.startup.Bootstrap start
```
則 5144 就為進程號 `pid = 5144`,`kill -9 5144` 就可以徹底殺死tomcat
直接查看指定端口的進程pid:
```shell
> netstat -anp|grep 9217`
tcp 0 0 :::9217 :::* LISTEN 26127/java`
```
則26127為9217這個端口的tomcat進程的pid,然后就可以kill這個進程:
```shell
> kill -9 26127
```
然后再啟動tomcat即可
### linux下實時查看tomcat運行日志
1. 實時查看tomcat運行日志,先切換到:
```shell
> cd tomcat/logs
> tail -f catalina.out
> Ctrl+c #是退出tail命令。
```
2. 通過關鍵字搜索查看日志:
```shell
> cat jeewx-2015-09-20.log | grep 驗證碼
```
3. 查看固定時間日志:
```shell
> cat jeewx-2015-09-20.log | grep '2015-09-20 18:50:15'
```
4. 查看最近50行日志:
```shell
> tail -n 50 -f catalina.out
```