Linux筆記

 

Linux文件目錄和分區

文件目錄:html

/:根目錄java

/root:存放root用戶的相關文件node

/home:存放普通用戶的相關文件mysql

/bin:存放普通用戶的可執行命令linux

/sbin:存放須要具有必定權限纔可使用的命令sql

/mnt:默認掛載光驅(iso)的掛載點mongodb

/etc:存放系統配置相關的文件shell

/var:存放常常變化的文件數據庫

/usr:存放系統的應用程序,好比apt-get install xxx安裝的軟件編程

/tmp:存放臨時文件、日誌文件

/dev:存放硬盤設備信息

/boot:存放Linux操做系統啓動時的引導文件

Linux設備命名規則:

Linux中IDE硬盤,驅動標識符爲「hdx-」,其中hd表示設備類型爲IDE硬盤,x爲盤號,表示第幾塊硬盤(a爲基本盤,b爲基本從屬盤,c爲輔助主盤,d爲輔助從屬盤),「-」表明分區,前4個分區用數字1到4表示,它們是主分區或擴展分區,從5開始就是邏輯分區(擴展分區不能直接使用,需切割出邏輯分區,邏輯分區的數量沒有限制)

Linux中SATA或SCSI硬盤,驅動標識符爲「sdx-」,sd表示設備類型爲SATA硬盤,如:

hda2:表示第一個IDE硬盤上的第二個主分區或擴展分區

sdb5:表示第二個SATA硬盤上的第一個邏輯分區

經過命令fdisk -l:查看Linux系統分區的具體狀況

 

經過命令df -h 目錄: 查看目錄在哪一個分區和磁盤使用狀況,下圖說明「/home」對應第一塊邏輯分區

 

掛載點和分區:

在Linux系統裏,「分區」被稱做掛載點,「掛載點」的意思是:把一部分硬盤容量映射成爲一個文件夾,這個文件夾的名字就叫作「掛載點」,所以Linux中只有文件夾形式存在的掛載點,而不會有C盤,D盤,E盤等,Linux中分區(硬盤容量)映射爲文件夾(掛載點)

掛載命令:mount [-參數] [設備名稱] [掛載點]

卸載命令:umount 掛載點

好比:mount  /dev/sda1  /test/ 將主分區掛載到test目錄;umount /test/ 卸載

Linux常見掛載點的容量設置:

/boot:100M

swap:交換分區,一般爲物理內存的兩倍

/:根分區,容量儘量大

/home:容量儘量大

Linux經常使用命令(有問題Google)

Tab:雙擊,命令補全

sudo su:進入root用戶

apt-get install package:安裝程序

apt-get remove --purge softname:卸載並清除配置

./test.bin &:在當前目錄下安裝bin文件,./指當前目錄,&指程序之後臺方式運行

startx:進入Linux圖形界面

shutdown –h now:馬上關機

reboot;shutdown–r now:重啓

dos2unix:Windows文件(\r\n)轉化爲Linux文件(\r)

unix2dos:Linux文件(\n)轉化爲Windows文件(\r\n)

exit:退出

clear:清空

pwd:顯示當前目錄

cd:改變目錄

cdnull:切換到當前用戶(如zzjie)的主目錄

ls:列出文件和目錄

ls -a:顯示隱藏文件

ls -l:顯示長列表格式

ll:顯示文件詳細內容

mkdir:創建目錄

rmdir:刪除空目錄

touch:創建空文件

cp:複製

cp-r 文件夾 目標目錄:拷貝文件夾

scp:在Linux主機間複製文件

scplocal_file remote_username@remote_ip:remote_folder

scplocal_file remote_username@remote_ip:remote_file

scplocal_file remote_ip:remote_folder

scplocal_file remote_ip:remote_file

scp–r:複製文件夾

scp:從遠程到本地同理             

rsync:遠程數據同步

rsync–option src dest

rsync–option src remote_username@remote_ip:remote_file

rsync–option src remote_username@remote_ip:remote_fodler

mv:移動文件和改文件名

rm:刪除文件和目錄

rm-rf:遞歸、強制刪除目錄和內容,fr:recursive force

ln:連接,指向源文件

ln-s 源文件 目標文件:目標指向源文件

more:分頁顯示文件內容,下一頁:空格 上一頁:Shift + PageUp

less:分頁顯示文件內容

grep:在文本中查詢內容

grep–n「xxx」 Hello.java,其中-n顯示行數

|:管道命令

在Linux系統中,| 就是管道,把上一個命令的結果交給 | 後面的命令處理,好比:

ls/etc/ | more:列出etc目錄內容,分頁顯示

find/ -name *.html | grep bookmark:在根目錄,按照文件名*.html查找,再在文件中查找bookmark

find:搜索文件(夾)

1)在特定的目錄下搜索並顯示指定名稱的文件(夾)

find/ -name Hello.java:從根目錄,按照文件名查找Hello.java

2)搜索一段時間內被存取、變動的文件(夾)

findhome/ -amin -10:10分鐘內存取的文件或目錄

findhome/ -atime -10:10小時內存取的文件或目錄

findhome/ -cmin -10:10分鐘內更改過的文件或目錄

findhome/ -ctime +10:10小時前更改過的文件或目錄

3)搜索指定大小的文件

findhome/ -size +10k:查找home下,大小爲10k的文件

>:管道定向命令,好比:

grep「main」-nam Hello.java > 1.bak:結果輸送到1.bak保存起來(覆蓋)

grep「main」-nam Hello.java >> 1.bak:結果輸送到1.bak保存起來(添加到文件末尾)

>filename 2>&1:「>&」is the syntax to redirect a streamto another file descriptor,「&」indicates that what follows is a file descripter and not a file,0 is stdin,1 is stdout,2 is stderr

chown:改變文件(夾)的全部者

chownDave hello.c

chownDave:Dave hello:改變文件(夾)的屬主和屬組

chgrp:改變文件(夾)所在組

chgrpDave hello.c

chmod:改變文件(夾)的權限,好比:chmod 777 Hello.java

jobs:查看全部的做業列表

Linux用戶(組)管理命令(只有root用戶能添加用戶)

useradd用戶名:添加用戶

useradd[-u uid] [-g group] [-d home] [-s shell]user_name:添加用戶

useradd–m 用戶名:自動創建用戶的登入目錄

useradd–d 用戶名:指定用戶登錄時的起始目錄

passwd用戶名:給用戶設密碼

userdel用戶名:刪除用戶

userdel–r 用戶名:刪除用戶和用戶相關文件

userdel–r 用戶名:刪除用戶和戶主目錄

groupadd組名:添加用戶組, 

useradd-g 組名 用戶名:建立用戶,並指定組,該命令還能用於改變用戶所在組

whoam i:顯示用戶信息

Note:

查看linux中全部用戶信息:cat/etc/passwd | more,假如顯示以下:

along:x:1001:1001::/home/along:/bin/sh

對應格式:用戶名:密碼:用戶id:組id::用戶目錄:用戶使用的shell解析器

root用戶查看用戶密碼:cat /etc/shadow | more

root用戶查看羣組信息:cat /etc/group | more

查看linux中全部組的信息:cat /etc/group | more

mount [-參數] [設備名稱] [掛載點]:掛載設備

umount 掛載點:卸載設備

fdisk -l:查看Linux系統分區的具體狀況

df -h 目錄:查看目錄在哪一個分區和磁盤使用狀況

env:查看操做系統的環境

history:顯示歷史命令

history10:顯示最近使用的10個命令

!5:執行歷史編號爲5的命令

!ls:執行最後一次以「ls」開頭的命令

ping:ping通網絡

tracepath:trace網絡節點

route:顯示路由表

ifconfig:查看ip狀況

ifconfigeth0 xxx.xxx.xxx.xxx:更改設備的IP地址

ifconfigeth0 x.x.x.x netmask x.x.x.x. up:配置eth0 IP地址和子網掩碼,同時激活設備

hostname name:更改主機名稱

netstat:顯示網絡統計信息

netstat–anp:按端口顯示網絡信息,並顯示進程號

date:顯示系統時間

date月月日日時時分分年年年年.秒秒

cal 月 年:顯示月曆

ps -aux:顯示正在運行的進程

ps–ef | grep zzjie:顯示父進程ID(PPID)

ps–aux | grep zzjie:顯示全部包含其餘使用者的進程

-a:顯示全部用戶的全部進程

-u:按用戶名和啓動時間的順序來顯示進程

-x:顯示沒法控制終端的進程

 

 

TTY:終端 「?」是守護進程,deamon無終端

VSZ:佔用虛擬內存大小

RSS:佔用內存大小

ps–axf:查看進程樹

ps–axm:列出線程

pspid:顯示pid進程

pstree:顯示即進程樹

top:動態監控進程

 

時間系統已啓動時間  用戶數 當前系統負載狀況 …殭屍進程

96.0id:CPU資源空閒比例;內存和Swap

監視特定用戶:輸入u,輸入用戶名,回車

終止指定進程:輸入k,輸入要結束的進程號

指定系統狀態更新時間:top -d 10:10秒更新1次

top運行中能夠經過 top 的內部命令對進程的顯示方式進行控制:

l:開啓或關閉第一部分第一行top信息

t:開啓或關閉第一部分第二行Tasks和第三行Cpus信息

m:開啓或關閉第一部分第四行Mem和第五行Swap信息

N:以PID的大小順序排列進程

P:以CPU佔用率大小排列進程

M:之內存佔用率大小排列進程

q:退出top

top–p pid:只監控pid線程

vmstat:Linux系統監控工具,是查看虛擬內存vm使用情況的工具

在Linux內存管理中,主要是經過「調頁Paging」和「交換Swaping」,Paging:將內存中不常使用的頁面換到磁盤上,Swaping:將整個進程交換到磁盤上

Page-out:分頁寫入磁盤;Page-in:分頁回到內存

vmstat2 10:

r:run queue運行隊列中進程數量,超過CPU數目,出現CPU瓶頸

b:blocked等待IO的進程數量,阻塞的進程

swpd:當前使用的虛擬內存KB數,若是大於0,表示機器內存不足

free:當前空閒的物理內存KB數

buff:緩衝的內存大小

cache:緩存的內存大小

si:swapin 每秒從交換區讀入虛擬內存的大小,若是大於0,表示物理內存不夠用

so:swapout 每秒從虛擬內存寫入交換區的大小,若是大於0,表示物理內存不夠用

bi:blockin 每秒從塊設備讀入內存的數據總量(讀磁盤)

bo:blockout 每秒從內存寫入塊設備的總量(寫磁盤)

in:每秒中斷數

cs:每秒上下文切換數

us:user 用戶進程執行時間

sy:system系統進程執行時間

id:idle  cpu空閒時間

wa:wait  cpu等待IO時間

經過/proc/cpuinfo:查看CPU性能

grep‘model name’/proc/cpuinfo:查看CPU和CPU核數

jstack:

jps:查出java進程的pid

top –p pid:觀察進程狀況

Shift + h:顯示該進程的全部線程

將線程id轉化爲16進程,好比線程id 3720 == 0x7d0,注意小寫

jstack pid | grep -A 10 0x7d0:查詢具體線程的狀態,基本能夠定位程序的問題所在

須要的時候再瞭解其餘JVM監控工具

kill 進程號:終止進程,本質是協商退出,並非強制退出

kill-9(KILL) 進程號:發送SIGKILL信號,強制終止進程

killall進程號:終止進程和子進程

kill–STOP pid:發送SIGSTOP信號,將後臺進程暫停

kill–CONT pid:使後臺暫停的進程恢復運行

kill–l:list available signals

kill信號說明:

2)SIGINT^C sends a SIGINT to all the processes in theforeground process group. To do the equivalent with kill,kill –SIGINT pid(OS-level concept)or to the job,kill –SIGINT %(shell-level concept,the pipeline ended with&)

man command:命令手冊

info command:在線查看命令文檔

輸入/:Gegexp search

stty –a:get all the terminal controlcharacter assignments

好比,intr = ^C,susp = ^Z等

free -m:查看內存使用狀況

內存描述文件:cat /proc/meminfo:機器的內存使用狀況

/proc/pid/maps:顯示當前進程所佔用的虛擬地址

/proc/pid/statm:進程所佔用的內存

Linux空閒內存:free+ buffers + cached

export:設置或顯示環境變量(臨時)

exportPAHT=&PATH:&HOME/bin:root/test:設置PATH環境變量

若是將export寫入:/etc/profile或/etc/bashrc等全局,那麼針對全部用戶,環境變量永久生效

若是將export寫入:/home/zzjie/.bashrc或.bash_profile,那麼僅對zzjie登錄的用戶環境變量有效

echo$PATH:查看PATH環境變量

/etc/profile:爲系統的每一個用戶設置環境信息,當用戶第一次登錄時,該文件被執行

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

/zzjie/profile:zzjie用戶的環境設置

/zzjie/bashrc:zzjie用戶的bash shell配置,給bash初始化,如bash代碼補全,bash別名等

/zzjie/bash_logout:當用戶每次退出bash shell時,該文件被執行

alias:指定別名

aliasdump=’mysqldump –u root –p db > /home/date.bak’:指定數據庫備份操道別名dump

aliassubl="/home/zzjie/Downloads/Sublime\ Text\ 2/Sublime\ Text\2/sublime_text"

shell通配符:* ?

reptyr:reptyr is a utilityfor taking an existing running program and attaching it to a new terminal

iptraf:網絡測量工具

iptraf–g:

iptraf–d eth0:

Notes:命令最終在linux的內核執行,但先傳給shell解析器,再傳給Kernel

Linux文件和文件夾權限

llHello.java和test文件夾顯示文件詳細信息

-rw-rw-r-- 1 zzjie zzjie 96  7月 1322:34 Hello.java

drwxrwxr-x 2 zzjie zzjie 4096  7月 1511:53 test/

權限說明:r:可讀,用4表示;w:可寫,用2表示;x:可執行,用1表示

文件類型:

 

分析:-rw-rw-r--;drwxrwxr-x

第一部分-表示Hello.java是普通文件,d表示test是文件夾;第二部分rw-和rwx表示文件(夾)全部者zzjie對該文件具備的權限;第三部分rw-和rwx表示文件(夾)所在組對該文件的權限;第四部分r--和r-x表示其餘組的用戶對該文件(夾)的權限

 

Linux壓縮、解壓、RPM

zip(zip --help)

zipxxx.zip 文件1 文件2 …:將多個文件壓縮

zip–r xxx.zip 目錄 文件1 文件2:將目錄下全部文件和文件夾,文件1,文件2壓縮

zip–m xxxx.zip 文件:向壓縮文件xxx.zip中添加文件

unzip–od /home/zzjie xxx.zip:把xxx.zip文件解壓到/home/zzjie

tar(tar --help):可調用gzip,bzip2,compress

-c:--create

-r:--apend

-t:--list

-u:--update

-x:--extrate

-f:--file

-v:--verbose

-z:--gzip,--gunzip

-j:--bzip2

-z:--compress,--uncompress

壓縮:

tar –cf archive.tar 1.jpg:將1.jpg文件壓縮打包成tar文件

tar –uf archive.tar 1.jpg:更新原來tar包中的1.jpg文件

tar –cvfarchive.tar *.jpg:將目錄裏全部jpg文件壓縮

tar –czf archive.tar.gz*.jpg:將目錄裏全部jpg文件打包成jpg.tar,再用gzip壓縮,生成一個gzip壓縮過的包,命名爲archive.tar.gz

tar –cjf archive.tar.bz2*.jpg:將目錄裏全部jpg文件打包成jpg.tar,再用bzip2壓縮,生成一個bzip2壓縮過的包,命名爲jpg.tar.bz2

tar –cZfjpg.tar.Z *.jpg:將目錄裏全部jpg文件打包成jpg.tar,再用compress壓縮,生成一個compress壓縮過的包,命名爲jpg.tar.Z

解壓:

tar –xvffile.tar:解壓tar包

tar -xzvf file.tar.gz(file.tgz):解壓tar.gz或者tgz包

tar -xjvf file.tar.bz2:解壓 tar.bz2包

tar –xZvffile.tar.Z:解壓tar.Z包

gunzip(gzip –d) *.gz:解壓gz包

bunzip(bzip –d) *.bz2:解壓bz2包

uncompress *.Z:解壓Z包

源文件安裝:

./configure(--prefix=path):針對當前系統,配置好安裝參數(配置軟件安裝目錄)

make:將源代碼文件編譯爲二進制文件

makeinstall(runas root):將編譯好的二進制文件安裝到系統中

結合:& ./configure && make && sudo make install

rpm

rpm就是軟件包管理工具,能夠安裝、刪除、更新以rpm包形式發佈的軟件,相似Windows裏面的「添加/刪除程序」,一般包括Binary和Source兩種rpm包

rpm經常使用命令:

rpm-q 軟件名 //查詢軟件是否安裝

rpm-qa | grep samba //在全部已經安裝的軟件包中查找samba

rpm-ql samba //查詢rpm包安裝位置

rpm-qi samba  //查詢rpm包的信息

對未安裝軟件包的查看:

rpm–qpi file.rpm  //查看一個軟件包的用途、版本

rpm–qpl file.rpm  //查看一個軟件包所包含的文件

rpm-ivh file.rpm  //安裝rpm包並顯示進度

rpmivh file.rpm --nodes --force:強制安裝,忽略依賴關係

rpm-ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm  //指定安裝目錄

rpm-Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降級爲舊版本

rpm–e --nodeps file.rpm  //強制刪除rpm包

Linux Shell編程

Shell基本概述:

殼(Shell)保護內部的核(Kernel),Shell是一種具有特殊功能的程序,是用戶和Linux Kernel間的接口,爲了屏蔽內核的複雜性,爲了保護內核以避免用戶誤操做形成損害,在內核的周圍建了一個外殼,用戶向shell提出請求,shell解釋並將請求轉發給內核,好比ls /home命令,首先由shell解析,最終轉發給內核,有內核處理

Shell的自己就是一個解釋型程序設計語言,shell程序設計語言支持絕大多數在高級語言中能見到的程序元素,如函數、變量、數組、程序控制結構等,任何在提示符中能鍵入的命令都能放到一個可執行的shell程序中,本質上,shell腳本:是一個文本文件,是命令的集合,有執行的權限,執行方式(./script.sh)

Shell種類有:Bourne shell(sh),Korn Shell(ksh),C shell(csh),BourneAgain Shell(bash)等,經過echo$SHELL查看當前shell

Shell的使用:

1)用戶登錄後自動執行的shell腳本文件:

.bashrc位於主目錄下,執行系統的腳本/etc/bashrc:配置系統基本數據

.bash_profile位於主目錄下,執行系統的腳本/etc/profile:配置系統環境變量

(好比PATH,CLASSPATH等都能在這裏配置)

2)在/home/zhengzj目錄下有用戶的環境變量:.bashrc、.bash_profile等

Linux任務調度:crontab

在root用戶下添加crontab定時計劃任務(修改/etc/crontab文件)

時間格式:* * * * * 對應:分鐘 小時 月 年 星期,好比:

0 2* * *  root date >> /home/date:天天凌晨2:00,root用戶,待執行命令

 

crontab調度多個任務:

1)vi /etc/crontab中寫多個命令

2)shell編程:將多個任務組織到sh文件中,再寫入/etc/crontab文件,好比:

0022 * * * root /home/xx/mysql_backup.sh:每晚22:00備份mysql數據庫

crontab-r:終止任務

crontab–l:列出當前調度任務

Linux網絡環境配置

一、臨時配置:重啓機器,配置消失

ifconfigeth0 x.x.x.x netmask x.x.x.x. up:配置eth0 IP地址,同時激活設備

route adddefault gw x.x.x.x:配置網關

hostnamexxxx:配置主機名

dhcclienteth0:DHCP動態獲取IP

二、修改配置文件(Google)

Ubuntu網絡配置涉文件:

/etc/network/interfaces:網絡接口配置,包括:IP地址、子網掩碼、網關等

/etc/resolv.conf:DNS服務器設置

/etc/hostname:主機名設置

/etc/hosts:域名解析映射

/etc/hosts.allow:IP訪問容許規則

/ect/hosts.deny:IP訪問禁止規則

注意:修改網絡配置文件後,要重啓網絡接口:/etc/init.d/networking restart

Linux vi編輯器

1)vi Hello.java

2)輸入i:進入到插入模式

3)輸入esc:進入命令模式

4)輸入冒號:

5)wq:保存退出或者q!:退出不保存

Linux Java開發

在Linux上創建CookieService和TaskService,而且運行爬蟲:

目錄說明:

 

 

設置CLASSPATH:export CLASSPATH=.:/home/zzjie/service/lib/je-5.0.73.jar

或者修改vi /home/zzjie/.bashrc文件(用戶級別):

 

進入src目錄下,編譯源文件:

$javac com/crawl/common/SystemProperties.java

$javac hhf/crawl/master/InitLoadTask.java

進入src目錄下,運行InitLoadTask.class文件:

$java hhf/crawl/master/InitLoadTask:

此時,任務數據庫創建完畢

 

PS:保證文件的目錄都正確,每次修改源文件都須要從新編譯

————————————————————————————————————

啓動Cookie服務和Task服務:

問題:要導入的Jar包太多,如何處理?

exportCLASSPATH=.:$CLASSPATH:/home/zzjie/service/lib/log4j-1.2.17.jar

進入src目錄下,編譯源文件:

$javac hhf/crawl/master/MasterServer.java

進入src目錄下,運行程序:

$java hhf/crawl/master/MasterServer -start CookieService

$ javahhf/crawl/master/MasterServer -start UserTaskService

啓動服務成功:

 

 

查看service.log:ss

 

————————————————————————————————————

下面運行爬蟲程序:

在/home/zzjie目錄下創建distributed_crawler文件夾:

 

將爬蟲程序打包成Jar包:

 

MANIFEST.MF文件以下:

必定要遵循固定的格式

 

運行jar文件:

$ java-Dfile.encoding=utf-8 -jar distributed_crawler_test.jar

(注意檢查配置文件是否都已經正確)

程序正常啓動:

查看日誌文件:

登錄日誌:

 

Cookie和Task分配日誌:

 

 

微博下載日誌:

 

能夠看出多個線程同時爬取微博

查詢mongodb:

 

所以,多線程爬蟲已經正常工做

————————————————————————————————————

服務器後臺運行:

服務器後臺運行cookie和task服務:使用nohup和&,而且重定向控制檯輸出到文件

 

服務器後臺運行爬蟲:

 

Linux遠程登陸,讓程序後臺運行

nohup:讓提交的命令忽略hangup信號

 

「> filename 2>&1」來更改缺省的重定向文件名,一般配合「&」使命令成爲後臺運行的任務

catfilename;cat filename | more;cat filename | less查看文件

舉例:

nohup java-Dfile.encoding=utf-8 -jar distributed_crawler.jar > log/44 2>&1&

 

nohupcommand &:控制檯logout,進程仍然運行,起到守護進程的做用,脫離終端的控制

原理說明:

進程組(process group):每一個進程組有惟一的GID,即進程組長進程的ID

會話期(session):有惟一一個會話期首進程(session leader),會話期ID爲首進程ID,會話期能夠有一個單獨的控制端,與控制終端鏈接的會話期首進程叫作控制進程

當網絡斷開或者終端窗口關閉時,終端接口將掛斷信號送給控制進程(會話期首進程),控制進程收到SIGHUP信號退出,使得會話期內其餘進程退出

&:在結尾加上「&」使命令成爲做業,並放入後臺運行,能經過jobs查看做業狀況

setsid:run a program in a new session

 

咱們知道若是事先在命令前加上nohup或者setsid就可避免HUP信息的影響,但若是咱們未加任何處理就已經提交了命令,該如何補救才能讓它避免HUP信號的影響:

disown:detachthe process from its parent(the shell)

 

$ disown –h jobspec:使某個做業忽略HUP信號

$ disown –ah:使全部做業都忽略HUP信號

$ disown –rh:使正在運行的做業忽略HUP信號

disown示例1:若是提交命令時未使用&將命令放入後臺運行

若是沒有把命令當作做業來運行,能經過CTRL-z:將當前的進程掛起到後臺暫停運行,而後經過jobs查看它的做業號,用fg(foreground)將掛起的進程從新放回前臺,bg(background)將掛起的進程放在後臺繼續運行,這樣咱們就能在一個終端內靈活切換多個任務,可是若是掛起會影響進程的運行結果,得慎用此方法(使用fg和bg可以在一個終端內靈活的切換做業)

 

disown示例2:若是提交做業時已經使用&命令放入後臺運行

 

咱們已經知道如何讓進程避免HUP信號的影響,但若是有大量這種命令須要穩定在後臺運行,如何避免對每條命令都作這樣的操做?

screen:

Screen是一個能夠在多個進程之間多路複用一個物理終端的窗口管理器,screen中有會話的概念,用戶能夠在一個session會話中建立多個screen窗口(^a + a),在每個screen窗口中就像操做一個真實的SSH鏈接窗口那樣:

$ screen:登錄Linux,輸入screen命令,建立screen會話,同時建立第一個screen窗口(^a + w

 

(子進程、父進程的關係很是清楚)

screen還有更高級的功能,咱們能夠在不中斷screen各窗口中程序的運行而暫時斷開(detach)screen會話,並在隨後時間從新鏈接(attach),從新控制各窗口中運行的程序

好比,咱們在一個screen會話中打開4個窗口(/bin/bash),輸入^a + d ,斷開會話:

 

看出screen會話中保存了4個screen窗口,screen會話首進程父進程爲1

若是退出screen窗口,當只剩餘那一個窗口時,screen會話結束,不然回到上一個窗口

在一個screen窗口中輸入screen命令,至關於^a +c:建立一個新窗口

(注意到給screen發送命令使用了特殊的組合鍵:^a)

$ screen –ls:列出全部會話

$ screen –rsession_name:從新鏈接指定的會話

$ screen –dmSsession_name:創建一個處於斷開模式下的會話

$ screen –wipe:同list,但刪除那些沒法鏈接的會話

當咱們用「-r」鏈接到screen會話後,咱們就能夠在這個僞終端裏執行各類操做,不再用擔憂HUP信號會對咱們的進程形成影響,也不用給每一個命令都加上「nohup」或者「setsid」

緣由:

未使用screen時新進程的進程樹:

 

使用screen後新進程的進程樹:

 

screen經常使用鍵綁定:

 

總結:

nohup/setsid/&:臨時須要

disown:補救當前已經在運行了的做業

screen:大批量操做命令

Windows下Linux開發

1)samba服務器:實現Windows和Linux文件共享

2)ssh:Windows客戶端遠程登陸Linux服務器,而且上傳、下載(sftp)文件到Linux

下圖是Windows用戶遠程登陸到Linux服務器:

 

3)Xshell:集成ssh客戶端

相關文章
相關標籤/搜索