2018年8月29日 星期三

lftp 使用方法

lftp 使用方法

大多數圖形界面的ftp客戶端,都有兩欄窗口,一欄為本地目錄,一欄為遠程目錄。lftp也採用這種方式工作,只不過沒有使用圖形界面直觀的顯示
命令本地遠程
顯示工作目錄lpwdpwd
切換目錄lcdcd
顯示文件列表!lscls
!ls -lls
  • 其中,! 表示執行本地命令,lftp中沒有與 ls對應的本地命令 lls,所以要使用!ls顯示本地目錄文件
使用以上命令確認當前工作目錄的情況。以下命令用於從本地目錄上傳,或者從遠程目錄下載:
 下載上傳
單個文件getput
多個文件mgetmput
多線程pget 
目錄mirrormirror -R
  • lftp配置文件 ~/.lftp/rc中設置pget使用的線程數
    set pget:default-n 5   
在遠程目錄中,可以使用以下命令操作文件
統計文件大小du
移動、重命名mv
刪除rm
創建文件夾mkdir
刪除文件夾rmdir

2018年8月17日 星期五

centos解决clone VM後eth0網卡找不到問題

vim /etc/udev/rules.d/70-persistent-net.rules

把新網卡ethx 改成etho

再進去網卡
vi /etc/sysconfig/network-script/ifcfg-eth0 
把UUID刪除 及變跟 HWADDR (打上新網卡MAC) 重開機 重啟網卡 收工

2018年8月9日 星期四

rsync 參數 用法

  • -v,-verbose增強可讀性
  • -q,-quiet忽略非錯誤信息
  • -no-motd忽略守護進程模式的MOTD信息(參見manpage告知)
  • -c,-checksum基於checksum校驗,而非mod-time和size
  • -a,-archive歸檔模式,和-rlptgoD(不要使用-H,-A,-X)參數相同
  • -no-OPTION關閉一些顯式的OPTION(比如-no-D)
  • -r,-recursive遞歸目錄
  • -R,-relative使用相對路徑
  • -no-implied-dirs不發送制定目錄的屬性,避免在目標使用-relative刪除連接重新傳輸文件
  • -b,-backup備份(查看-suffix&-backup-dir)
  • -backup-dir = DIR基於DIR來創建備份的目錄結構
  • -suffix = SUFFIX制定備份的後最(默認~w / o -backup-dir)
  • -u,-update跳過接受端較新的文件
  • -inplace直接在文件上更新(SEE MAN PAGE)
  • -append直接追加文件
  • -append-verify和-append很像,只是用文件的較舊的那部份做校驗和
  • -d,-dirs僅傳輸文件而非遞歸
  • -l,-links將軟鏈接當作軟鏈接來拷貝
  • -L,-copy-links拷貝鏈接對應的文件或者目錄而非鏈接本身
  • -copy-unsafe-links僅不安全的鏈接才被拷貝
  • -safe-links忽略那些鏈接到目錄樹外的鏈接
  • -k,-copy-dirlinks將鏈接翻譯成其鏈接的目錄
  • -K,-keep-dirlinks將目錄鏈接在接收端轉換成目錄
  • -H,-hard-links保留硬鏈接
  • -p,-perms保留權限
  • -E,-executability保留文件的可執行性
  • -chmod = CHMOD改變文件或者目錄的權限
  • -A,-acls保留ACL(暗示-perms)
  • -X,-xattrs保留擴展屬性
  • -o,-owner保留所有者(僅限超級用戶)
  • -g,-group保留組
  • -devices保留設備文件(僅限超級用戶)
  • -specials保留特殊文件
  • -D和-devices -specials一樣
  • -t,-times保留修改時間
  • -O,-omit-dir-times在-times選項裡忽略目錄的時間
  • -super允許接受方執行那個一些超級用戶的活動
  • -fake-super通過xattrs來存儲和回復權限
  • -S,-sparse高效處理稀疏文件
  • -n,-dry-run只運行,不做改變
  • -W,-whole-file拷貝貝整個文件(沒有delta-xfer算法)
  • -x,-one-file-system不跨越文件系統
  • -B,-block-size = SIZE強制指定checksum的塊大小
  • -e,-rsh = COMMAND指定要使用的遠程shell
  • -rsync-path = PROGRAM指定遠程要運行的rsync路徑
  • - 存在如果接收端不存在文件就不創建
  • -ignore-existing如果接收端存在就不更新文件
  • -remove-source-files發送端刪除已經同步的文件(非dirs)
  • -del -delete-during的別名
  • -delete刪除接收端上在發送端不存在的文件
  • -delete-before接收端在發送前刪除,而不是發送過程中
  • -delete-during接收端在發送過程中刪除
  • -delete-delay在發送過程中尋找文件,在發送完成後刪除
  • -delete-after接收端在發送完成後刪除
  • -delete-excluded在接收端刪除排除的文件
  • -ignore-errors即使有I / O錯誤也刪除
  • -force即使目錄不是空的也刪除
  • -max-delete = NUM​​最多刪除文件的數目
  • -max-size = SIZE最大傳輸文件的大小
  • -min-size = SIZE最小傳輸文件的大小
  • -partial保持部分傳輸的文件
  • -partial-dir = DIR制定部分傳輸文件的存放目錄
  • -delay-updates先傳輸,最後再更新,保持原子性
  • -m,-prune-empty-dirs接收端刪除空目錄
  • -numeric-ids接收端不要將uid / gid映射為用戶名和組名
  • -timeout = SECONDS設置I / O超時時間,s為單位
  • -contimeout = SECONDS設置鏈接服務端的時間
  • -I,-ignore-times即使mtime和size都相同也不跳過
  • -size-only只要大小相同就跳過
  • -modify-window = NUM​​比對時間時制定精確範圍,範圍內都認為時間相同
  • -T,-temp-dir = DIR指定創建臨時文件的目錄
  • -y,-fuzzy文件在接收端不存在的情況下,在當前目錄下尋找一個基礎文件,以加快傳輸
  • -compare-dest = DIR接收端除了和發送端對比還和這裡指定的目錄對比,適合備份上次備份改變的文件
  • -copy-dest = DIR和-compare-dest類似,只是接收端會用本地拷貝來複製那些未改變的文件
  • -link-dest = DIR和-compare-dest類似,只是接收端會建立那些未改變文件的硬鏈接
  • -z,-compress傳輸過程中壓縮
  • -compress-level = NUM​​指定壓縮等級
  • -skip-compress = LIST不壓縮指定後綴的文件
  • -C,-cvs-exclude以CSV的方式自動忽略文件
  • -f,-filter = RULE新增一個文件過濾規則
  • -F與-filter ='dir-merge /.rsync-filter'重複相同:-filter =' - .rsync-filter'
  • -exclude = PATTERN排除規則PATTERN
  • -exclude-from = FILE從文件中讀取排除規則
  • -include = PATTERN不要排除指定規則的文件
  • -include-from = FILE從文件中讀取包含的規則
  • -files-from = FILE從文件中讀取文件列表
  • -0,-from0 all
  • -from / filter文件由0分隔
  • -s,-protect-args參數不許要空格分割; 只有通配符特殊字符
  • -address = ADDRESS綁定監聽的地址
  • -port = PORT制定端口號
  • -sockopts = OPTIONS制定TCP選項
  • -blocking-io在遠程shell中使用阻塞I / O.
  • -stats給出文件統計信息
  • -8,-8-bit-output輸出時不對高位字符轉義
  • -h,-human-readable以易於閱讀的方式打印數字
  • -progress顯示傳輸進度
  • -P與-partial-progress相同
  • -i,-itemize-changes打印更新的總結信息
  • -out-format = FORMAT以特定的格式打印更新信息
  • -log-file = FILE日誌文件
  • -log-file-format = FMT日誌文件格式
  • -password-file = FILE密碼文件
  • -list-only僅列出文件
  • -bwlimit = KBPS限制帶寬; 每秒KBytes
  • -write-batch = FILE將批量更新寫入文件
  • -only-write-batch = FILE和-write-batch類似但沒有更新目的地
  • -read-batch = FILE從文件中讀取批量更新任務
  • -protocol = NUM​​使用舊版本的協議
  • -iconv = CONVERT_SPEC要求文件名字符轉義
  • -4,-ipv4更喜歡IPv4
  • -6,-ipv6更喜歡IPv6
  • -version打印幫助信息
  • (-h)-help打印這個幫組信息(-h僅在單獨使用時與-help同意)

1 在本地機器上對兩個目錄進行同步
rsync -zvr /var/opt/installation/inventory/ /root/temp
參數:
  1. -z 開啟壓縮
  2. -v 詳情輸出
  3. -r 表示遞歸
2 利用 rsync -a 讓同步時保留時間標記
rsync 選項 -a 稱為歸檔模式,執行以下操作
  1. 遞歸模式
  2. 保留符號鏈接
  3. 保留權限
  4. 保留時間標記
  5. 保留用戶名及組名
rsync -azv /var/opt/installation/inventory/ /root/temp/
3 僅同步一個文件
rsync -v /var/lib/rpm/Pubkeys /root/temp/
4 從本地同步文件到遠程服務器
rsync -avz /root/temp/ root@192.168.200.10:/home/root/temp/
就像你所看到的,需要在遠程目錄前加上 ssh 登錄方式,格式為 username@machinename:path
ADVERTISEMENT
5 同步遠程文件到本地
和上面差不多,做個相反的操作
rsync -avz root@192.168.200.10:/var/lib/rpm /root/temp
同步遠程服務器上的文件夾到本地,如果本地有的文件,遠程沒有,則刪除之。
rsync -rave "ssh -p 22 -l root" --delete 192.168.0.200:/www/web/ /www/web/
6 同步時指定遠程 shell
用 -e 參數可以指定遠程 ssh ,比如用 rsync -e ssh 來指定為 ssh
rsync -avz -e ssh root@192.168.200.10:/var/lib/rpm /root/temp
7 不要覆蓋被修改過的目的文件
使用 rsync -u 選項可以排除被修改過的目的文件
rsync -avzu root@192.168.200.10:/var/lib/rpm /root/temp
ADVERTISEMENT
8 僅僅同步目錄權(不同步文件)
使用 -d 參數
rsync -v -d root@192.168.200.10:/var/lib/
9 查看每個文件的傳輸進程
使用 – -progress 參數
rsync -avz –-progress root@192.168.200.10:/var/lib/rpm/ /root/temp/
10 刪除在目的文件夾中創建的文件
用 – -delete 參數
rsync -avz – -delete root@192.168.200.10:/var/lib/rpm/
11 不要在目的文件夾中創建新文件
有時能只想同步目的地中存在的文件,而排除源文件中新建的文件,可以使用 – -exiting 參數
rsync -avz –existing root@192.168.1.2:/var/lib/rpm/
12 查看源和目的文件之間的改變情況
用 -i 參數
rsync -avzi root@192.168.200.10:/var/lib/rpm/ /root/temp/
輸出結果中在每個文件最前面會多顯示 9 個字母,分別表示為
> 已經傳輸
f 表示這是一個文件
d 表示這是一個目錄
s 表示尺寸被更改
t 時間標記有變化
o 用戶被更改
g 用戶組被更改
13 在傳輸時啟用包含和排除模式
rsync -avz – -include ‘P*’ – -exclude ‘*’ root@192.168.200.10:/var/lib/rpm/ /root/temp/
14 不要傳輸大文件
使用 – – max-size 參數
rsync -avz – -max-size=’100K’ root@192.168.200.10:/var/lib/rpm/ /root/temp/
15 傳輸所有文件
不管有沒有改變,再次把所有文件都傳輸一遍,用 -W 參數
rsync -avzW root@192.168.200.10:/var/lib/rpm/ /root/temp

find指令用法 (補充筆記)

使用範例 1:
由目前的所在目錄開始尋找所有檔案目錄
find

使用範例 2:
由指定的目錄為起始點開始尋找所有檔案目錄
find /usr/share

使用範例 3:
由多個指定的目錄為起始點開始尋找所有檔案目錄(找/find 及/usr/lib底下的)
find /etc /usr/lib

find 程式內,可以使用 –type 指定搜尋的類型。下面列出可供使用的選項類型:

b:區塊裝置 (block)
c:字元裝置 (character)
d:目錄 (directory)
p:命名管線 (named pipe,FIFO)
f:一般檔案 (regular file)
l:符號連結檔 (symbolic link)
s:網路連結裝置檔案 (socket)

使用範例 1:
列出 /etc 目錄,所有的子目錄:
find /etc –type d

使用範例 2:
列出位於 /usr/share 目錄,所有的一般檔案:
find /etc –type f

使用範例 3:
列出位於 /bin 目錄,所有的符號連結檔案
find /bin -type l
檔案目錄名稱:
使用 find 尋找檔案時,可以透過 -name的參數選項,指定搜尋特定
目錄內,是否有指定的檔案目錄名稱。該參數支援一般 shell 的通配字元
的樣式。-name 本身是區分大小寫的,-iname 參數選項則是不區分大小寫。

使用範例 1:
搜尋 /etc 目錄內,檔案名稱為 ifcfg-eth0 的一般檔案:
find /etc -type f -name “ifcfg-eth0”

使用範例 2:
搜尋 /usr/share/man 目錄內,以 printf 開頭的一般檔案:
find /usr/share/man -type f -name “printf*”

使用範例 3:
搜尋 /usr/X11R6/bin 目錄內,名稱包含 x 或是 X 的一般檔案
find /usr/X11R6/bin -iname “*x*”

檔案大小:
使用 find 程式時,透過 -size 參數的使用,可以精準的搜尋出
特定檔案長度的檔案。-size 參數的使用,支援的單位有:

b:block (1 block = 512 byte)
c:byte
k : kbyte
w : word byte

實際在使用時,可以搭配 + 與 – 表示大於或者是小於指定的大小。

使用範例 1:
搜尋 /bin 目錄內,檔案長度為大約為 10K 的一般檔案
find /bin -type f -size 10k

使用範例 2:
搜尋 /bin 目錄內,以 a ~ m 開頭,檔案長度大於 10K 的一般檔案
find /bin -type f -name “[a-m]*” -size +10k

使用範例 3:
搜尋 /usr/bin 目錄內,檔案長度在 50k ~ 100k 範圍內的檔案
find /usr/bin -type f -size +50k –size -100k


檔案目錄權限:
使用 find 程式時,透過 -perm 參數的使用,可以搜尋出特定
權限屬性的檔案。

使用上,支援 + 與 – 的方式搜尋出特定屬性權限的檔案,
表示的意義為:
perm mode
權限屬性為 mode內任何 Bit 欄位
perm +mode
權限屬性包含 mode 內任何 Bit 欄位
perm –mode
權限屬性至少要包含 mode 內任何 Bit 欄位

使用範例 1:
搜尋 /bin 目錄內,權限為 755 的一般檔案
find /bin -type f -perm 755

使用範例 2:
搜尋 /usr/bin 目錄內,任何人都可以執行的檔案
find /bin -type f -perm -0111

使用範例 3:
搜尋 /usr 目錄與其下子目錄,權限至少為 644 的一般檔案
find /usr -type f -perm +644

使用者群組資訊:
使用 find 程式時,透過 -user、-group可以搜尋特定所屬使用者、
群組的檔案目錄。透過 -nouser、-nogroup 可以找到在系統 /etc/passwd、
/etc/group 檔案內沒有對應紀錄的檔案目錄。透過 -node 可以找出 inode
編號的檔案目錄。

使用範例 1:
以 / 目錄開始,尋找出 owner 為 root,setuid 屬性,任何人都可以執行的檔案
find / -type f -user root -perm -4111

使用範例 2:
以 /home 開始,尋找出 owner 為 peter,可執行屬性的一般檔案
find /home -type f -user peter -perm +0111

使用範例 3:
尋找整個檔案系統,列出沒有 owner 與 group 對應的孤兒清單
find / -nouser -nogroup

使用範例 4:
以 /usr 目錄開始,尋找出 inode 編號為 19011 的一般檔案
find /usr -type f -inum 19011

時間欄位:
Unix 的檔案系統上,對於檔案的建立、存取、修改等資訊都會加以
紀錄。使用 find 程式時,可以搭配 -amin、-atime、-cmin、-ctime、-mmin、-mtime 等參數選項搜尋出特定時間欄位屬性的檔案目錄。

參數意義:

-amin
檔案於幾分鐘前被存取過
-atime
檔案於幾天前被存取過
-cmin
檔案的狀態於幾分鐘前被修改過
-ctime
檔案的狀態於前幾天前被修改過
-mmin
檔案內容於幾分鐘前被修改過
-mtime
檔案內容於幾天前被修改過

參數使用支援 +、- 等項目,用來表示大於該時間區段,
或者是小於該時間區段。

使用範例 1:
搜尋 /etc 目錄,列出前一天到現在被修改過的檔案
find /etc –mtime -1

使用範例 2:
搜尋 /var/log 目錄,列出已經有 7 天以上沒有更動過的一般檔案
find /var/log -type f -mtime +7

搜尋深度:
使用 find 程式時,可以搭配 –maxdepth 指定搜尋檔案目錄時,其最大的路徑深度。

使用範例 1:
搜尋 /etc 該層目錄 (不包含其下子目錄) 內所有的一般檔案
find /etc -type f -maxdepth 1

使用範例 2:
搜尋 /usr/lib 該層目錄內,檔案附檔名為 .so ,長度大於 100k的一般檔案
find /usr/lib -type f -maxdepth 1 -size +100k

外部程式呼叫:
find 程式支援 –exec 與 –ok 參數,能夠將執行 find 得到的搜尋的結果,呼叫外部程式作為該程式的參數進行處理。
另外常與 find 程式搭配使用的還有 xargs 程式,該程式能夠將程式
透過標準輸出的訊息,轉為呼叫外部程式,並以該標準輸出的訊息,作為該
程式的命令列引數。 xargs 程式的使用,多半都是透過管線的方式呼叫執行。

使用範例 1:
以 / 目錄開始進行,搜尋檔案名稱為 core的一般檔案,然後加以刪除
find / -type f -name “core” -exec rm –f {} ;

上面範例中,{} 為代換 find 搜尋到的檔案完整路徑名稱,然後作為
rm -f 程式的引數。需要注意是,使用 –exec 參數,最後要使用 “;” 分號作為結尾字元,不過因為 shell 對於命令列上的 “;” 分號有特殊的
解釋,所以需要在 “;” 分號前面加上 “” 反斜線,以避免 shell 解釋
“;” 為命令的區隔,find 程式也才能夠判定命令的結尾。

若搭配 -exec 參數時改用 -ok 替換,表示執行命令時會提示使用者是否確定要執行。

若是使用 xargs 使用的話,上述範例可以修改為
find / -type f -name “core” | xargs rm -f

使用範例 2:
搜尋 /home/peter 目錄,找出副檔名為 “.doc” 的一般檔案,然後使用
touch 程式將檔案時間更新到現在最新時間
find /home/pter -type f -name “*.doc” -exec touch {} ;

上面範例,也可以使用 xargs 程式達成
find /home/pter -type f -name “*.doc” | xargs touch



相關教學連結參考:
find指令

2018年8月8日 星期三

Linux shell 的date表示法

Linux shell中用 csh/tcsh

顯示前一天日期

$ /bin/date --date='1 day ago' +%Y%m%d%H%M%S
20161026214123

顯示前一週日期

$ /bin/date --date='1 week ago' +%Y%m%d%H%M%S
20161020214123

顯示前一月日期

$ /bin/date --date='1 month ago' +%Y%m%d%H%M%S
20160926214123

環境變數 locale

在date 如果叫用 %b的參數會顯示出月份的地區名稱,注意格式前的 '+' 代表的是要輸出的格式
$ date +%a%A%b%B%c%C
結果:
六週六 1月一月西元2016年10月27日 (週四) 15時30分35秒20
如果要用日期作為檔名,我們一般而言不喜歡檔名有中文字。例如檔名是2009Jan,你不希望取出的檔名是"2009一月",則就要把日期輸出改為英文,因此在Linux下先 叫用這一行:
$ export LC_TIME=en_US.utf8
$ date +%a%A%b%B%c%C
SatSaturdayJanJanuarySat 24 Jan 2009 03:31:36 PM CST20

有關shell 中date 格式(FORMAT)變數的意義

%  Literal %. <== 代表'%' 符號(常用到的標紅底)
-(hyphen)  Do not pad fields (default: pad fields with zeros).  <== 字元不足不用補0,預設有補0
_ (underscore)  Pad fields with space (default: zeros). <== 字元不足用空白補
%a Abbreviated weekday.
%b Abbreviated month name.
%c Country-specific date and time format.
%d Day of month (01-31).
%h Same as %b.
%j Julian day of year (001-366).
%k Hour in 24-hour format, without leading zeros (0-23).
%l Hour in 12-hour format, without leading zeros (1-12).
%m Month of year (01-12).
%n Insert a new line.
%p String to indicate a.m. or p.m.
%r Time in %I:%M:%S %p (12-hour) format.
%s Seconds since "the Epoch," which is 1970-01-01 00:00:00 UTC (a nonstandard extension).
%t Insert a tab.
%w Day of week (Sunday = 0).
%x Country-specific date format based on locale.
%y Last two digits of year (00-99).
%z RFC 822-style numeric time zone.
%A Full weekday.
%B Full month name.
%D Date in %m/%d/%y format.
%H Hour in 24-hour format (00-23).
%I Hour in 12-hour format (01-12).
%M Minutes (00-59).
%S Seconds (00-59).
%T Time in %H:%M:%S format.
%U Week number in year (00-53); start week on Sunday.
%V Week number in year (01-52); start week on Monday.
%W Week number in year (00-53); start week on Monday.
%X  Country-specific time format based on locale.
%Y Four-digit year (e.g., 2006).
%Z Time-zone name.

用find指令在Linux上列出舊的檔案 (刪除)


find /var/log/apache2 -mtime +30
上面這個指令的意思是在/var/log/apache2底下,-mtime是限定修改時間(單位是24小時),後面接著的數字的表示法如下:
  1. +n:表示比n單位以上的檔案 (例如:+30,代表30天之前)
  2. n:表示比n單位之內的檔案 (例如:-30,代表30天之內)
  3. n:不給給正負號代表正好n單位的檔案。
此外還有time跟min也都是代表修改時間,但是後面接的數字的單位變成分鐘。此外其他相關的指令如下:
  1. -mtime、-mmin:檔案內容(data)最後的修改(modify)時間
  2. -atime、-amin:檔案最後被存取(access)的時間
  3. -ctime、-cmin:檔案狀態(status)最後被修改的時間(change)。 (註:檔案狀態是指:修改擁有者或群組(即調用chown、chgrp)、修改檔案存取權限(即調用chmod)

2. find資料後執行刪除指令

find到檔案後可以用-exec指令來進行相應的處理,下面這個指令示範的是直接下rm指令刪除
find /var/log/apache2 -mtime +30 -exec rm -f {} ;
-exec是表示找到檔案後要執行的指令,現在要執行移除檔案的指令rm,但rm指令會與使用者確認是不是要刪除檔案,因為每個檔案都會問所以挺麻煩的所以加入-f (force) 參數讓rm強制移除檔案。然後 {} 則代表指令接檔案名稱的地方,find會將找到檔案的檔名與路徑帶入到{} 這邊。最後加入; 代表指令結束,不可以省略。