內(nèi)容轉(zhuǎn)載自我的博客
1. ubuntu桌面版安裝ssh
桌面版本的Ubuntu linux系統(tǒng),默認(rèn)沒(méi)有安裝ssh服務(wù)芝此,可以通過(guò)如下命令開(kāi)啟ssh服務(wù):
# 安裝openssh憋肖,如果安裝完成,服務(wù)默認(rèn)已經(jīng)開(kāi)啟婚苹,即可遠(yuǎn)程ssh連接
sudo apt-get install openssh-server
# 查看ssh服務(wù)狀態(tài)
sudo service ssh status
# ssh服務(wù)重啟命令
sudo service ssh restart
# 編輯ssh服務(wù)的配置文件岸更,可以修改服務(wù)端口,權(quán)限控制等
sudo vim /etc/ssh/sshd_config
ssh的配置文件sshd_config
主要參數(shù)說(shuō)明如下:
# 這個(gè)是ssh服務(wù)的監(jiān)聽(tīng)端口膊升,在實(shí)際生產(chǎn)環(huán)境中一般都不用默認(rèn)的22端口
Port 22
# AddressFamily 設(shè)置為any:默認(rèn)ipv4和ipv6地址均可連接
AddressFamily any
# ListenAddress 用來(lái)設(shè)置sshd服務(wù)器綁定的IP地址
# ListenAddress 192.168.0.231 表示只監(jiān)聽(tīng)來(lái)自192.168.0.231這個(gè)IP的SSH連接
# ListenAddress 0.0.0.0 表示監(jiān)聽(tīng)所有IPv4的SSH連接
# ListenAddress :: 表示監(jiān)聽(tīng)所有IPv6的SSH連接
# PermitRootLogin 設(shè)置root用戶(hù)是否運(yùn)行登錄以及登錄方式
PermitRootLogin no
# LoginGraceTime 寬限登錄時(shí)間不輸入密碼兩分鐘自動(dòng)退出
LoginGraceTime 2m
# AllowUsers 只允許特定的一些用戶(hù)登錄(root用戶(hù)是否可登錄要根據(jù)PermitRootLogin決定)
# AllowUsers myusername
# 優(yōu)先級(jí)最高怎炊,禁止某些用戶(hù)登錄
# DenyUsers name1
# 允許登陸的用戶(hù)組
# AllowGroups mygroupname
# 禁止登錄的用戶(hù)組
# DenyGroups groupname1
# 設(shè)置sshd是否在用戶(hù)登錄時(shí)顯示/etc/motd中的信息,可以在其中加入歡迎信息
PrintMotd no
# 是否在ssh登錄成功后用僧,顯示上次登錄信息
PrintLastLog yes
# ssh的服務(wù)端會(huì)傳送KeepAlive的訊息給客戶(hù)端结胀,以確保兩者的聯(lián)機(jī)正常
# 這種消息可以檢測(cè)到死連接、連接不當(dāng)關(guān)閉责循、客戶(hù)端崩潰等異常
# 任何一端死掉后糟港,ssh可以立刻知道,而不會(huì)有僵尸程序的發(fā)生
TCPKeepAlive yes
具體對(duì)于PermitRootLogin
選項(xiàng)來(lái)說(shuō)院仿,它可以設(shè)置為以下幾個(gè)值(其中without-password
也寫(xiě)為prohibit-password
)秸抚,且對(duì)于含義如下表:
參數(shù)類(lèi)別 | 是否允許ssh登陸 | 登錄方式 | 交互shell |
---|---|---|---|
yes | 允許 | 沒(méi)有限制 | 沒(méi)有限制 |
without-password | 允許 | 除密碼以外 | 沒(méi)有限制 |
forced-commands-only | 允許 | 僅允許使用密鑰 | 僅允許已授權(quán)的命令 |
no | 不允許 | N/A | N/A |
2. SSH保活的幾種方法
2.1 配置服務(wù)器端
SSH總是被強(qiáng)行中斷歹垫,導(dǎo)致效率低下剥汤,可以在服務(wù)端配置,讓server每隔30秒向client發(fā)送一個(gè)keep-alive包來(lái)保持連接:sudo vim /etc/ssh/sshd_config
添加以下內(nèi)容:
ClientAliveInterval 30
ClientAliveCountMax 60
然后重啟本地ssh:sudo service ssh restart
第一行配置讓server每隔30秒向client發(fā)送一個(gè)keep-alive包來(lái)保持連接排惨;第二行配置表示如果連續(xù)發(fā)送keep-alive包數(shù)量達(dá)到60次吭敢,客戶(hù)端依然沒(méi)有反應(yīng),則服務(wù)端sshd斷開(kāi)連接暮芭。如果什么都不操作鹿驼,該配置可以讓連接保持30s*60,即30分鐘
2.2 配置客戶(hù)端
如果服務(wù)端沒(méi)有權(quán)限配置辕宏,或者無(wú)法配置畜晰,可以配置客戶(hù)端ssh,使客戶(hù)端發(fā)起的所有會(huì)話都保持連接:sudo vim /etc/ssh/ssh_config
添加以下內(nèi)容:
ServerAliveInterval 30
ServerAliveCountMax 60
然后重啟本地ssh:sudo service ssh restart
本地ssh每隔30s向server端sshd發(fā)送keep-alive包瑞筐,如果連續(xù)發(fā)送60次凄鼻,server仍然無(wú)回應(yīng)斷開(kāi)連接
2.3 共享ssh連接
如果需要在多個(gè)窗口中打開(kāi)同一個(gè)服務(wù)器連接,可以嘗試添加~/.ssh/config
,添加以下兩行:
ControlMaster auto
ControlPath ~/.ssh/connection-%r@%h:%p
然后重啟本地ssh:sudo service ssh restart
配置之后块蚌,第二條連接共享第一次建立的連接闰非,加快速度
如果希望每次SSH連接建立之后,此條連接會(huì)被保持4小時(shí)匈子,退出服務(wù)器之后依然可以重用河胎,則需要設(shè)置:
ControlPersist 4h
最終,一個(gè)示例~/.ssh/config
文件配置如下:
Host *
ServerAliveInterval 3
ServerAliveCountMax 20
TCPKeepAlive no
ControlMaster auto
ControlPath ~/.ssh/connection-%r@%h:%p
ControlPersist 4h
User zfb
2.4 ssh連接的同時(shí)被⒍兀活
ssh -o ServerAliveInterval=60 user@sshserver
2.5 screen命令使用
經(jīng)常需要SSH遠(yuǎn)程登錄到Linux服務(wù)器游岳,運(yùn)行一些需要很長(zhǎng)時(shí)間才能完成的任務(wù),比如訓(xùn)練數(shù)據(jù)集其徙、ftp傳輸?shù)鹊扰咂取MǔG闆r下都要為每一個(gè)這樣的任務(wù)開(kāi)一個(gè)遠(yuǎn)程終端窗口,因?yàn)樗鼈儓?zhí)行的時(shí)間太長(zhǎng)了唾那,必須等待它們執(zhí)行完畢访锻,在此期間不能關(guān)掉窗口或者斷開(kāi)連接,否則這個(gè)任務(wù)就會(huì)被殺掉
使用screen命令可以好闹获、實(shí)現(xiàn)會(huì)話恢復(fù)期犬、會(huì)話共享、多窗口等功能
只要Screen本身沒(méi)有終止避诽,在其內(nèi)部運(yùn)行的會(huì)話都可以恢復(fù)龟虎。這一點(diǎn)對(duì)于遠(yuǎn)程登錄的用戶(hù)特別有用,即使網(wǎng)絡(luò)連接中斷沙庐,用戶(hù)也不會(huì)失去對(duì)已經(jīng)打開(kāi)的命令行會(huì)話的控制鲤妥。只要再次登錄到主機(jī)上執(zhí)行screen -r就可以恢復(fù)會(huì)話的運(yùn)行
同樣在暫時(shí)離開(kāi)的時(shí)候,也可以執(zhí)行分離命令detach拱雏,在保證里面的程序正常運(yùn)行的情況下切換到后臺(tái)
還可以讓一個(gè)或多個(gè)用戶(hù)從不同終端多次登錄一個(gè)會(huì)話棉安,并共享會(huì)話的所有特性(比如可以看到完全相同的輸出)。它同時(shí)提供了窗口訪問(wèn)權(quán)限的機(jī)制铸抑,可以對(duì)窗口進(jìn)行密碼保護(hù)
所有的會(huì)話都獨(dú)立的運(yùn)行贡耽,并擁有各自的編號(hào)、輸入鹊汛、輸出和窗口緩存菇爪。用戶(hù)可以通過(guò)快捷鍵在不同的窗口下切換,并可以自由的重定向各個(gè)窗口的輸入和輸出柒昏。它實(shí)現(xiàn)了基本的文本操作,如復(fù)制粘貼等熙揍;還提供了類(lèi)似滾動(dòng)條的功能职祷,可以查看窗口狀況的歷史記錄。窗口還可以被分區(qū)和命名,還可以監(jiān)視后臺(tái)窗口的活動(dòng)
具體使用如下:
# 啟動(dòng)一個(gè)名字為test_scr的screen有梆,此時(shí)會(huì)看到新建會(huì)話的動(dòng)作
screen -S test_scr
# 在這個(gè)新窗口可以運(yùn)行任何命令是尖,即使此時(shí)命令行在不斷刷新輸出,也可以執(zhí)行下一個(gè)動(dòng)作
# 即:按下Ctr+A泥耀,再按D饺汹,這會(huì)把test_scr放入后臺(tái),回到之前的窗口
Ctrl+A D
# [detached from 45197.test_scr]
# 列出所有的screen
screen -ls
# There is a screen on:
# 45197.test_scr (2020年07月17日 14時(shí)39分09秒) (Detached)
# 1 Socket in /run/screen/S-zfb.
# 此時(shí)退出登錄也不會(huì)影響痰催,只需要重新登陸以后兜辞,輸入以下命令
# 也可以是 screen -r 45197
screen -r test_scr
# 刪除某個(gè)screen,假設(shè)是test_scr夸溶;也可以切換到test_scr的screen逸吵,快捷鍵Ctrl+A K
screen -S test_scr -X quit
# 清除處于dead狀態(tài)的screen
screen -wipe
# 強(qiáng)制退出其他用戶(hù)正在使用的screen窗口(防止某用戶(hù)斷線且占用終端導(dǎo)致其他用戶(hù)無(wú)法使用)
screen -D -r test_scr
3. Ubuntu用戶(hù)管理
3.1 創(chuàng)建用戶(hù)
創(chuàng)建用戶(hù),同時(shí)創(chuàng)建該用戶(hù)主目錄缝裁、創(chuàng)建用戶(hù)同名的組(用戶(hù)名為username
)
sudo adduser username
會(huì)提示設(shè)置密碼扫皱,其他提示回車(chē)即可
如果需要讓此用戶(hù)有root
權(quán)限,在root
用戶(hù)下修改/etc/sudoers
文件:
root@ubuntu:~# sudo vim /etc/sudoers
修改文件如下:
# User privilege specification
root ALL=(ALL) ALL
username ALL=(ALL) ALL
保存退出捷绑,username
用戶(hù)就擁有了root
權(quán)限
或者sudo usermod -a -G sudo username
3.2 切換用戶(hù)
從當(dāng)前用戶(hù)切換到username
用戶(hù)的命令:su username
從普通用戶(hù)切換到root
用戶(hù)還可以使用命令:sudo su
在切換用戶(hù)時(shí)韩脑,如果想在切換用戶(hù)之后使用新用戶(hù)的工作環(huán)境,可以在su
和username
之間加-
粹污,例如:su - root
終端的提示符$
表示普通用戶(hù)段多;#
表示超級(jí)用戶(hù),即root
用戶(hù)
在終端輸入exit
或logout
或使用快捷方式Ctrl+d
厕怜,可以退回到原來(lái)用戶(hù)
3.3 修改用戶(hù)密碼
修改用戶(hù)名為username
的開(kāi)機(jī)登錄密碼:sudo passwd username
修改root密碼(默認(rèn)root無(wú)密碼衩匣,第一次執(zhí)行時(shí)創(chuàng)建密碼):sudo passwd root
3.4 禁用和啟用root登錄
只是禁用root
,但是root
密碼還保存著:
sudo passwd -l root
再使用su root
切換root
用戶(hù)發(fā)現(xiàn)認(rèn)證失敗
啟用root登錄:
sudo passwd -u root
3.5 多用戶(hù)共享目錄
在root用戶(hù)下創(chuàng)建文件夾粥航,再創(chuàng)建新的用戶(hù)組琅捏,將原有的用戶(hù)添加進(jìn)入這個(gè)新組。不妨假設(shè)递雀,新的用戶(hù)組為share_grp
柄延,新的共享文件夾目錄為/home/data_share/
(也可以為/media/data_share
),需要互相共享的用戶(hù)為user1缀程、user2搜吧,每個(gè)用戶(hù)都可以通過(guò)cd /home/data_share/
訪問(wèn)到此文件夾的內(nèi)容。具體操作步驟如下:
- 首先切換當(dāng)前賬戶(hù)為root賬戶(hù)杨凑,然后創(chuàng)建文件夾
mkdir /home/data_share/
- 然后創(chuàng)建新的用戶(hù)組share_grp滤奈,使用命令
sudo groupadd share_grp
- 為文件夾更改所屬的組
sudo chgrp share_grp /home/data_share
- 更改文件夾權(quán)限
sudo chmod 770 /home/data_share
- 保證子文件夾也是一樣的權(quán)限
sudo chmod +s /home/data_share
- 為用戶(hù)1添加附屬組,不影響用戶(hù)原來(lái)所在的組
sudo usermod -a -G share_grp user1
- 同理用戶(hù)2撩满,使用命令
sudo usermod -a -G share_grp user2
此時(shí)蜒程,兩個(gè)用戶(hù)都可以訪問(wèn)目錄/home/data_share/
绅你,另外,查看用戶(hù)組相關(guān)的命令如下:
-
groups
:查看當(dāng)前用戶(hù)的組 -
cat /etc/group
:查看本機(jī)所有用戶(hù)和組
如果不想繼續(xù)共享昭躺,可以通過(guò)在root賬戶(hù)下使用以下命令刪除用戶(hù)1忌锯、用戶(hù)2的附屬組(不影響原來(lái)所在的組)
sudo usermod -G "" user1
sudo usermod -G "" user1
sudo groupdel share_grp
3.6 文件系統(tǒng)設(shè)置所有者
- chown命令用于設(shè)置文件(或文件夾)的所有者和文件關(guān)聯(lián)組,文件支持通配符领炫,只有超級(jí)用戶(hù)才可以執(zhí)行此命令偶垮。使用方法如下:
# -R表示遞歸執(zhí)行,test是當(dāng)前目錄下的一個(gè)文件夾帝洪,前一個(gè)zfb表示用戶(hù)名似舵,后一個(gè)zfb表示用戶(hù)組
# 該命令會(huì)把test目錄及其子目錄下的所有文件的owner改為zfb,group也改為zfb
sudo chown -R zfb:zfb test
- chgrp命令用于改變文件(或文件夾)的所屬組碟狞,普通用戶(hù)即可執(zhí)行此命令啄枕,如:
# -R表示遞歸執(zhí)行,test是當(dāng)前目錄下的一個(gè)文件夾族沃,mygrp1表示用戶(hù)組
# 該命令會(huì)把test目錄及其子目錄下的所有文件的group改為mygrp1
chgrp -R mygrp1 test
- chmod命令用于改變文件(或文件夾)的權(quán)限频祝,普通用戶(hù)即可執(zhí)行此命令,如:
# -R表示遞歸執(zhí)行脆淹,test是當(dāng)前目錄下的一個(gè)文件夾
# 該命令會(huì)把test目錄及其子目錄下的所有文件的權(quán)限改為777常空,這是用數(shù)字來(lái)設(shè)定權(quán)限的方法
# 777三個(gè)數(shù)字分別對(duì)應(yīng):文件擁有者u的權(quán)限、與擁有者同組g的用戶(hù)的權(quán)限盖溺、其他用戶(hù)o的權(quán)限
# 7是十進(jìn)制表示漓糙,原始二進(jìn)制為111,分別對(duì)應(yīng):讀取r烘嘱、寫(xiě)入w昆禽、執(zhí)行x;1表示允許蝇庭,0表示禁止
chmod -R 777 test
# chmod命令也可以用字母設(shè)定權(quán)限
# u 表示文件所有者醉鳖;g 表示文件所屬的組;o 表示其他用戶(hù)哮内;a 表示系統(tǒng)的所有用戶(hù)
# r 表示可被讀鹊量谩;w 表示可被寫(xiě)入北发;x 表示可被執(zhí)行
# + 表示增加某個(gè)(多個(gè))權(quán)限纹因;- 表示刪除某個(gè)(多個(gè))權(quán)限;= 表示撤銷(xiāo)原來(lái)的所有權(quán)限琳拨,只設(shè)定某個(gè)(多個(gè))權(quán)限
# 例如:為文件添加可執(zhí)行權(quán)限瞭恰,若不指明用戶(hù)的話默認(rèn)為系統(tǒng)所有用戶(hù)
# 下面命令等價(jià)于 chmod a+x stop.sh
chmod +x stop.sh
# 例如:為文件屬主和同組用戶(hù)增加寫(xiě)權(quán)限,為其他用戶(hù)刪除執(zhí)行權(quán)限
chmod ug+x,o-x test.txt
# 例如:撤銷(xiāo)原來(lái)的文件權(quán)限狱庇,只為文件設(shè)置可讀寫(xiě)權(quán)限
chmod u=rw name.txt
3.7 測(cè)試某個(gè)用戶(hù)是否可以訪問(wèn)文件夾
使用如下命令:
sudo -u www-data stat /home/ubuntu/frp/log
如果具有權(quán)限則顯示類(lèi)似輸出:
File: /home/ubuntu/frp/log/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fc01h/64513d Inode: 529293 Links: 2
Access: (0777/drwxrwxrwx) Uid: ( 500/ ubuntu) Gid: ( 500/ ubuntu)
Access: 2020-09-28 15:56:40.902601841 +0800
Modify: 2020-09-28 16:32:40.728799201 +0800
Change: 2020-09-28 16:32:40.728799201 +0800
Birth: -
否則顯示:
stat: cannot stat '/home/ubuntu/frp/log/': Permission denied
4. 查看當(dāng)前活躍的用戶(hù)
查看所有用戶(hù)列表
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
查看當(dāng)前登錄的用戶(hù)
w
查看自己登錄的用戶(hù)名
whoami
5. 查看當(dāng)前占據(jù)內(nèi)存最多的進(jìn)程信息
將命令組合重命名寫(xiě)入.bashrc
文件中方便使用:首先vi ~/.bashrc
惊畏,然后將以下內(nèi)容寫(xiě)入文件末尾
alias maxmem="ps -aux|head -1;ps -aux | sort -k4nr | head "
# ps -aux會(huì)顯示all進(jìn)程是牢、userid、x指代所有程序
# ps -aux|head -1表示只保留刪除結(jié)果的第一行陕截,也就是表頭
# sort -k4nr命令:r表示是結(jié)果倒序排列,n為以數(shù)字大小排序
# -k4則是針對(duì)第4列的內(nèi)容進(jìn)行排序
# maxmem -4表示顯示4條結(jié)果
6. ubuntu設(shè)置開(kāi)機(jī)自啟程序
對(duì)于桌面版Ubuntu而言批什,只需要打開(kāi)程序列表的圖標(biāo)农曲,選擇啟動(dòng)應(yīng)用程序、Startup applications
圖標(biāo)驻债,根據(jù)提示輸入路徑即可
7. 修改ubuntu顯示管理器為lightdm
向日葵這款遠(yuǎn)程控制軟件似乎不支持Ubuntu的原始gdm3的桌面乳规,具體表現(xiàn)為:使用Windows遠(yuǎn)程到服務(wù)器的Ubuntu系統(tǒng)上進(jìn)行調(diào)試,總是出現(xiàn)連接已斷開(kāi)
合呐;而反過(guò)來(lái)控制卻可以暮的,所以安裝lightdm替換默認(rèn)的桌面顯示管理器:
sudo apt-get update
sudo apt-get upgrade
# 安裝過(guò)程中會(huì)提示選擇默認(rèn)顯示管理器,選擇lightdm即可
sudo apt install lightdm
然后重啟設(shè)備淌实,此時(shí)再測(cè)試即可正常連接
如果需要卸載lightdm冻辩,重新使用gdm3,則只需輸入以下命令:
# 查看當(dāng)前使用的顯示管理器
cat /etc/X11/default-display-manager
# 重新選擇gdm為顯示管理器拆祈,然后重啟
sudo dpkg-reconfigure gdm3
# 卸載lightdm
sudo apt-get --purge remove lightdm
8. nohup與&的使用
nohup
的意思是忽略SIGHUP信號(hào)恨闪,一般用在正常命令語(yǔ)句之前。如果用戶(hù)關(guān)閉shell, 那么使用nohup
啟動(dòng)的進(jìn)程還是存在的(因?yàn)殛P(guān)閉終端會(huì)發(fā)送SIGHUP信號(hào)放坏,而nohup對(duì)SIGHUP信號(hào)免疫)咙咽。如果不將nohup
命令的輸出重定向,輸出將附加到當(dāng)前目錄的nohup.out
文件中淤年。如果當(dāng)前目錄的nohup.out
文件不可寫(xiě)钧敞,輸出重定向到$HOME/nohup.out
文件中-
輸出重定向:程序在后臺(tái)運(yùn)行的時(shí)候,可以把輸出重定向到某個(gè)文件中麸粮,相當(dāng)于一個(gè)日志文件溉苛,記錄運(yùn)行過(guò)程中的輸出。例如
nohup command > out.txt 2>&1 &
命令的意思是- 將
command
的輸出重定向到out.txt
文件豹休,即輸出內(nèi)容不打印到屏幕上 - 0 – stdin (standard input)炊昆,1 – stdout (standard output),2 – stderr (standard error)
-
2>&1
是將標(biāo)準(zhǔn)錯(cuò)誤(2)重定向到標(biāo)準(zhǔn)輸出(&1)威根,標(biāo)準(zhǔn)輸出(&1)再被重定向輸入到out.txt
文件中
- 將
&
的意思是在后臺(tái)運(yùn)行凤巨,一般用在正常命令語(yǔ)句之后。即使用戶(hù)使用Ctrl+C
洛搀,那么使用&
啟動(dòng)的程序照樣運(yùn)行(因?yàn)閷?duì)SIGINT信號(hào)免疫)
所以可以使用如下命令來(lái)實(shí)現(xiàn)類(lèi)似守護(hù)進(jìn)程的功能:
nohup command > out.file 2>&1 &
9. 命令的掛起和前后臺(tái)切換
Linux提供了fg
和bg
命令敢茁,可以調(diào)度正在運(yùn)行的任務(wù)。假如發(fā)現(xiàn)前臺(tái)運(yùn)行的一個(gè)程序需要很長(zhǎng)的時(shí)間留美,但是需要干其他的事情彰檬,此時(shí)可以用Ctrl+Z
掛起這個(gè)程序伸刃,然后可以看到系統(tǒng)提示:
[1]+ Stopped /root/bin/rsync.sh
然后可以把程序調(diào)度到后臺(tái)執(zhí)行,使前臺(tái)可以執(zhí)行其他任務(wù)逢倍。該命令的運(yùn)行效果與在指令后面添加符號(hào)&
的效果是相同的捧颅,都是將其放到系統(tǒng)后臺(tái)執(zhí)行(bg 后面的數(shù)字為作業(yè)號(hào))
bg 1
# 終端回顯如下
# [1]+ /root/bin/rsync.sh &
用jobs
命令查看正在運(yùn)行的任務(wù)(只看當(dāng)前終端生效的柠新,關(guān)閉終端重新打開(kāi)則無(wú)法看到):
jobs
# 終端回顯如下
# [1]+ Running /root/bin/rsync.sh &
如果想把某個(gè)任務(wù)調(diào)回到前臺(tái)運(yùn)行畅铭,可以用
fg 1
# 終端回顯如下
# /root/bin/rsync.sh
這樣熬苍,在終端上就只能等待這個(gè)任務(wù)完成了
10. 遠(yuǎn)程收發(fā)文件
在不安裝第三方工具的情況下有兩種方法:
- 使用
scp
命令:例如scp -P 8899 -r root@45.67.89.12:/root/test/ ./Desktop/
命令表示將服務(wù)器的/root/test/
文件夾遞歸下載到本地的./Desktop/
文件夾下面舟山,8899
是ssh的端口输硝,默認(rèn)為22
- 使用
rsync
命令(支持?jǐn)帱c(diǎn)續(xù)傳):例如rsync -avzP --rsh='ssh -p 8899' root@45.67.89.12:/root/test/ ./Desktop
命令表示將服務(wù)器的/root/test/
文件夾下載到本地的./Desktop/
文件夾下面懂傀,8899
是ssh的端口流强,默認(rèn)為22
使用腳本下載Google Drive文件慎玖,使用方法為
curl gdrive.sh | bash -s https://drive.google.com/file/d/0B4y35FiV1wh7QWpuVlFROXlBTHc/view
11. find命令
11.1 查找文件
find命令可以在指定目錄及其子目錄下查找指定擴(kuò)展名的文件贮尖,如下所示是在當(dāng)前目錄及子目錄下查找JPG文件,并把它們移動(dòng)到當(dāng)前目錄:
find . -name "*.JPG" -exec mv {} ./ \;
find .
表示在當(dāng)前目錄及其子目錄下查找
-name "*.JPG"
表示只搜索擴(kuò)展名為JPG的文件
-exec
后面接bash命令趁怔,表示對(duì)文件進(jìn)行的操作
{}
指代找到的每一個(gè)文件
\;
bash命令的結(jié)尾需要添加;
湿硝,這里需要轉(zhuǎn)義
11.2 查找目錄
find命令也可用于查找符合條件的目錄,只需要添加參數(shù)-type d
來(lái)指定查找類(lèi)型為目錄(directory)痕钢。如下所示是在當(dāng)前目錄及其子目錄搜索所有以mat
結(jié)尾的文件夾图柏,并把a.py
復(fù)制到所有找到的文件夾中(復(fù)制單個(gè)文件到多個(gè)文件夾)
find . -type d -name "*_mat" -exec cp a.py {} \;
過(guò)程如下所示:
~/test > tree
.
├── a.py
└── mat_dir
├── 18_mat
├── 1_mat
├── 2_mat
├── 45_mat
└── 9_mat
6 directories, 1 file
~/test > find . -type d -name "*_mat" -exec cp a.py {} \;
~/test > tree
.
├── a.py
└── mat_dir
├── 18_mat
│ └── a.py
├── 1_mat
│ └── a.py
├── 2_mat
│ └── a.py
├── 45_mat
│ └── a.py
└── 9_mat
└── a.py
6 directories, 6 files
12. swap分區(qū)操作
12.1 增加分區(qū)大小
系統(tǒng)默認(rèn)已經(jīng)有了swap分區(qū),但是運(yùn)行某些程序很耗內(nèi)存任连,想臨時(shí)添加swap分區(qū)大性榇怠:
# 創(chuàng)建交換分區(qū)的文件:增加64G=65536M大小的交換分區(qū),則命令寫(xiě)法如下
# 其中的bs等于想要的塊大小随抠,of是交換文件的名稱(chēng)和位置
# 以下命令如果提示權(quán)限不足裁着,加上sudo
dd if=/dev/zero of=/home/swap bs=1M count=65536
# 設(shè)置交換分區(qū)文件,建立swap的文件系統(tǒng)
mkswap /home/swap
# 如果提示 swapon: /home/swap: insecure permissions 0644, 0600 suggested.
chmod -R 0600 /home/swap
# 立即啟用交換分區(qū)文件拱她,swapon -p 2 /home/swap可以設(shè)置該swap的優(yōu)先級(jí)
swapon /home/swap
# 如果還需要使系統(tǒng)開(kāi)機(jī)時(shí)自動(dòng)啟用二驰,在文件/etc/fstab中添加一行:
# /home/swap swap swap defaults 0 0
此時(shí)可以查看分區(qū)大小是否添加成功(系統(tǒng)原始的交換空間是swap分區(qū),大小為64G):
zfb@myServer:~$ free -m
total used free shared buff/cache available
Mem: 128804 77303 590 78 50910 50386
Swap: 126570 387 126183
zfb@myServer:~$ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda2 partition 62499836 397288 -2
/home/swap file 67108860 0 -3
zfb@myServer:~$
這里的cat /proc/swaps
命令等價(jià)于swapon -s
秉沼,在使用多個(gè)swap分區(qū)或者文件的時(shí)候桶雀,還有一個(gè)優(yōu)先級(jí)的概念,值越大優(yōu)先級(jí)越高(-1的優(yōu)先級(jí)最高唬复,-1表示在安裝系統(tǒng)時(shí)創(chuàng)建的)矗积。設(shè)置swap分區(qū)時(shí)未指定優(yōu)先級(jí),則將優(yōu)先級(jí)分配為-1敞咧,后添加的swap則依次為-2棘捣,-3;而用戶(hù)指定優(yōu)先級(jí)時(shí)必須以正數(shù)表示休建,也就是說(shuō)用戶(hù)指定的優(yōu)先級(jí)必然高于系統(tǒng)優(yōu)先級(jí)
內(nèi)核在使用swap空間的時(shí)候總是先使用優(yōu)先級(jí)高的空間乍恐,后使用優(yōu)先級(jí)低的评疗;如果把多個(gè)swap空間的優(yōu)先級(jí)設(shè)置成一樣的,那么兩個(gè)swap空間將會(huì)以輪詢(xún)方式并行進(jìn)行使用茵烈;如果兩個(gè)swap放在兩個(gè)不同的硬盤(pán)上百匆,相同的優(yōu)先級(jí)可以起到類(lèi)似RAID0的效果
12.2 刪除自己添加的swap文件
按照以下操作:
# 關(guān)閉指定swap,swapoff -a表示關(guān)閉所有
swapoff /home/swap
# 如果增加分區(qū)有設(shè)置開(kāi)機(jī)自動(dòng)掛載呜投,就需要?jiǎng)h除或者注釋文件/etc/fstab中的對(duì)應(yīng)行
# 正常刪除文件即可
rm /home/swap
12.3 設(shè)置swap的使用情況
按照如下方法設(shè)置即可:
# 查看系統(tǒng)默認(rèn)的 swappiness 值
# swappiness=0 表示最大限度使用物理內(nèi)存
# swappiness=100 表示積極的使用swap分區(qū)
cat /proc/sys/vm/swappiness
# 修改swappiness值為10胧华,臨時(shí)性的修改,重啟系統(tǒng)后會(huì)恢復(fù)默認(rèn)值
sudo sysctl vm.swappiness=10
# 永久修改swappiness宙彪,打開(kāi)文件/etc/sysctl.conf
# 在文件最后添加一行 vm.swappiness = 10
sudo vi /etc/sysctl.conf
# 使修改立即生效
sudo sysctl -p
13. 查看歷史登錄記錄
13.1 使用last命令
使用命令last
即可列出所有相關(guān)信息
zfb@myServer:~$ last
zfb pts/2 127.0.0.1 Sat Sep 5 12:29 still logged in
zfb pts/1 :pts/0:S.0 Sat Sep 5 09:23 still logged in
zfb pts/1 :pts/0:S.0 Thu Sep 3 22:38 - 22:38 (00:00)
zfb pts/1 127.0.0.1 Wed Jul 8 17:20 - 17:21 (00:00)
user1 pts/0 127.0.0.1 Wed Jul 8 17:07 - 17:21 (00:13)
user2 pts/0 127.0.0.1 Wed Jul 8 15:49 - 15:49 (00:00)
zfb pts/0 127.0.0.1 Wed Jul 8 15:42 - 15:45 (00:03)
reboot system boot 4.15.0-108-gener Wed Jul 8 15:40 - 12:00 (10+20:20)
zfb pts/2 127.0.0.1 Wed Jul 8 15:19 - 15:20 (00:00)
user2 :0 :0 Wed Jul 8 15:00 - down (00:38)
reboot system boot 4.15.0-108-gener Wed Jul 8 22:09 - 14:48 (-7:21)
reboot system boot 4.15.0-108-gener Wed Jul 8 21:28 - 21:29 (00:00)
wtmp begins Wed Jul 8 21:28:47 2019
13.2 使用awk命令
13.2.1 awk命令詳解
假定test.txt
文件內(nèi)容如下:
Aug 28 19:38:01 localhost CRON[12375]: pam_unix(cron:session): session closed for user root
Aug 28 19:39:01 localhost CRON[12511]: pam_unix(cron:session): session opened for user root by (uid=0)
Aug 28 19:39:01 localhost CRON[12511]: pam_unix(cron:session): session closed for user root
Aug 28 19:39:13 localhost sshd[12493]: Invalid user admin from 25.67.84.30 port 1345
Aug 28 19:39:14 localhost sshd[12493]: pam_unix(sshd:auth): check pass; user unknown
Aug 28 19:39:16 localhost sshd[12493]: Failed password for invalid user admin from 25.67.84.30 port 1345 ssh2
Aug 28 19:39:32 localhost sshd[12493]: Disconnecting invalid user admin 25.67.84.30 port 1345: Change of username not allowed
Aug 28 19:39:44 localhost sshd[12596]: pam_unix(sshd:auth): check pass; user unknown
Aug 28 19:40:27 localhost sshd[12679]: Failed password for root from 34.56.78.90 port 6666 ssh2
Aug 28 19:40:31 localhost sshd[12679]: Failed password for root from 78.90.12.34 port 8888 ssh2
Aug 28 19:40:53 localhost sshd[12741]: Invalid user admin from 12.34.56.78 port 3810
Aug 28 19:40:56 localhost sshd[12741]: Failed password for invalid user admin from 12.34.56.78 port 3810 ssh2
Aug 28 19:40:58 localhost sshd[12741]: Disconnecting invalid user admin 12.34.56.78 port 3810
Aug 28 19:41:01 localhost CRON[1316]: pam_unix(cron:session): session opened for user root by (uid=0)
Aug 28 19:41:01 localhost CRON[2316]: pam_unix(cron:session): session closed for user root
Aug 28 19:41:10 localhost sshd[3328]: Invalid user user from 12.34.56.78 port 9999
Aug 28 19:41:11 localhost sshd[4328]: pam_unix(sshd:auth): check pass; user unknown
Aug 28 22:34:58 localhost sshd[18689]: Failed password for root from 199.200.201.202 port 33667 ssh2
Aug 28 22:56:22 localhost sshd[18560]: Failed password for invalid user pi from 18.19.20.21 port 22222 ssh2
Aug 28 22:56:23 localhost sshd[18561]: Failed password for invalid user pi from 78.56.34.21 port 41568 ssh2
Aug 28 22:06:48 localhost sshd[18943]: Failed password for invalid user ubnt from 66.88.99.44 port 33444 ssh2
Aug 28 22:06:48 localhost sshd[18944]: Failed password for root from 193.116.1.108 port 54360 ssh2
Aug 28 22:06:48 localhost sshd[18945]: Failed password for root from 193.116.1.108 port 54362 ssh2
Aug 28 22:06:49 localhost sshd[18942]: Failed password for root from 193.116.1.108 port 54358 ssh2
Aug 28 22:11:46 localhost sshd[18589]: Failed password for root from 18.19.12.20 port 6688 ssh2
Aug 28 22:24:08 localhost sshd[18213]: Failed password for root from 185.2.99.114 port 9988 ssh2
如下所示是一個(gè)常用的awk命令的語(yǔ)法
awk '{print $1, $4}' test.txt
需要注意的是,awk后面的語(yǔ)句{print $1, $4}
必須用單引號(hào)括起來(lái)(這表明是行匹配模式有巧,即對(duì)文件中匹配到的每一行執(zhí)行操作print $1, $4
)释漆,而且awk默認(rèn)以空格對(duì)每一行進(jìn)行分割并執(zhí)行對(duì)應(yīng)語(yǔ)句
awk的語(yǔ)句完整流程為BEGIN{print "這是匹配前執(zhí)行的,一般是表頭"}{print NR,$1,$2}END{printf("統(tǒng)計(jì)完畢")}
篮迎,BEGIN
和END
語(yǔ)句可以省略
awk的條件語(yǔ)句{if($1>3) print $1;else if($2==6) print $4;else print "hh"}
OFS ORS OFMT
等可以在BEGIN模塊設(shè)置男图,例如awk 'BEGIN{FS=",";OFMT="%.3f"} {print $1,$2}' test.txt
-
print
語(yǔ)句內(nèi)部支持+-*/
等基礎(chǔ)運(yùn)算 -
printf("%d--%d\n", $1,$2)
命令與C語(yǔ)言的使用方法類(lèi)似 - 如果要使用逗號(hào)進(jìn)行行分割則
awk -F, '{print $1, $4}' test.txt
-
$0
表示整行數(shù)據(jù),$1
表示每行的第一部分(按照規(guī)則對(duì)行分割后的集合)甜橱,稱(chēng)為第一個(gè)字段逊笆,以此類(lèi)推;另外岂傲,匹配到的第一行稱(chēng)為第一條記錄 -
NR
表示當(dāng)前行的數(shù)字(即這在test.txt
中是第幾行)难裆,NF
表示當(dāng)前行的長(zhǎng)度,FNR
表示當(dāng)前行的數(shù)字(即這在匹配記錄中是第幾行)镊掖,FILENAME
表示當(dāng)前文件的名稱(chēng)乃戈,FS
表示分隔符(把一行數(shù)據(jù)分割成$1
到最后) - 創(chuàng)建變量
a
并設(shè)置a的值,則使用awk -va=1 '{print $2,$2+a}' test.txt
-
OFS
設(shè)置所有輸出字段分隔符亩进,如果要使得在print
時(shí)候$i
之間的默認(rèn)空格改為其他分割則使用awk -va=1 '{print $2,$2+a}' OFS=", " test.txt
- 設(shè)置某兩個(gè)字段之間的連接符症虑,使用代碼
awk '{print NR, $1"-"$2, $11}' test.txt
,則字段1和2輸出時(shí)使用-
連接 -
ORS
設(shè)置所有輸出記錄分隔符归薛,如果要使得在print
時(shí)候不同行之間的默認(rèn)空格改為其他分割則使用awk -va=1 '{print $2,$2+a}' ORS="\n\n " test.txt
-
OFMT
設(shè)置所有小數(shù)的顯示格式谍憔,默認(rèn)為%.6g
,若顯示3位小數(shù)則awk '{print NR, $11, $13":"$15, 1/2}' OFMT="%.3f"
例如執(zhí)行命令grep "Failed password for invalid user" test.txt | awk 'BEGIN{printf("%-10s %-10s %-20s\n", "number", "user", "IP:Port")}{printf "%-10s %-10s %-20s\n", FNR, $11, $13":"$15}END{printf("搜索結(jié)束主籍,共找到%d條記錄", FNR)}'
則輸出如下內(nèi)容习贫,使用":"
指定$13
和$15
字段的連接,如果用,
則使用默認(rèn)字段連接符(空格):
number user IP:Port
1 admin 25.67.84.30:1345
2 admin 12.34.56.78:3810
3 pi 18.19.20.21:22222
4 pi 78.56.34.21:41568
5 ubnt 66.88.99.44:33444
搜索結(jié)束崇猫,共找到5條記錄
13.2.2 awk過(guò)濾并輸出記錄
查看系統(tǒng)的登陸失敗的用戶(hù)及IP信息(只輸出ssh連接時(shí)的用戶(hù)名不存在的情況):
sudo grep "Failed password for invalid user" /var/log/auth.log | awk 'BEGIN{printf("%-10s %-10s %-20s\n", "number", "user", "IP:Port")}{printf "%-10s %-10s %-20s\n", FNR, $11, $13":"$15}END{printf("搜索結(jié)束沈条,共找到%d條記錄", FNR)}'
輸出示例:
number user IP:Port
1 admin 25.67.84.30:1345
2 admin 12.34.56.78:3810
3 pi 18.19.20.21:22222
4 pi 78.56.34.21:41568
5 ubnt 66.88.99.44:33444
搜索結(jié)束,共找到5條記錄
查看所有登陸失敗的信息:
# 首先從log文件提取出所有包含F(xiàn)ailed password for字符串的行作為awk的輸入
# 然后輸出一行表頭诅炉,并開(kāi)始執(zhí)行行匹配
# match函數(shù)的第二個(gè)參數(shù)是正則表達(dá)式(用//包圍起來(lái))蜡歹,如果未找到,返回0
# 有如下三種情況屋厘,前兩個(gè)分別對(duì)應(yīng)awk里面的if命令,第三種情況被過(guò)濾了
# Aug 28 22:11:46 localhost sshd[18589]: Failed password for root from 18.19.12.20 port 6688 ssh2
# Aug 28 22:56:22 localhost sshd[18560]: Failed password for invalid user pi from 18.19.20.21 port 22222 ssh2
# Sep 16 17:29:04 localhost sudo: ubuntu : TTY=pts/0 ; PWD=/home/ubuntu ; USER=root ; COMMAND=/bin/grep : Failed password for /var/log/auth.log
# 因?yàn)樵趫?zhí)行awk的同時(shí)會(huì)在auth.log生成一條記錄如下月而,所以需要if(length($13)>4)這個(gè)判斷
# Sep 16 17:10:31 localhost sudo: ubuntu : TTY=pts/0 ; PWD=/home/ubuntu ; USER=root ; COMMAND=/bin/grep Failed password for /var/log/auth.log
sudo grep "Failed password for" /var/log/auth.log | awk 'BEGIN{printf("%-10s %-10s %-20s\n", "number", "user", "IP:Port")}{if(match($11, /\./)!=0) printf "%-10s %-10s %-20s\n", FNR, $9, $11":"$13;else if(length($13)>4) printf "%-10s %-10s %-20s\n", FNR, $11, $13":"$15}END{printf("搜索結(jié)束汗洒,共找到%d條記錄\n", FNR)}'
輸出示例:
number user IP:Port
1 admin 25.67.84.30:1345
2 root 34.56.78.90:6666
3 root 78.90.12.34:8888
4 admin 12.34.56.78:3810
5 root 199.200.201.202:33667
6 pi 18.19.20.21:22222
7 pi 78.56.34.21:41568
8 ubnt 66.88.99.44:33444
9 root 193.116.1.108:54360
10 root 193.116.1.108:54362
11 root 193.116.1.108:54358
12 root 18.19.12.20:6688
13 root 185.2.99.114:9988
搜索結(jié)束,共找到13條記錄
注意:此命令也可以寫(xiě)成腳本形式
# 創(chuàng)建awk腳本文件并寫(xiě)入內(nèi)容
vim sshinfo.awk
# 授予執(zhí)行權(quán)限
chmod +x sshinfo.awk
# 執(zhí)行命令父款,對(duì)于CentOS系統(tǒng)為/var/log/secure文件
sudo grep "Failed password for" /var/log/auth.log | ./sshinfo.awk
sshinfo.awk的文件內(nèi)容如下:
#! /usr/bin/awk -f
BEGIN{
printf("%-10s %-10s %-20s\n", "number", "user", "IP:Port")
}
{
if(match($11, /\./)!=0)
printf "%-10s %-10s %-20s\n", FNR, $9, $11":"$13;
else if(length($13)>4)
printf "%-10s %-10s %-20s\n", FNR, $11, $13":"$15
}
END{
printf("搜索結(jié)束溢谤,共找到%d條記錄\n", FNR)
}
查看系統(tǒng)的登陸成功的用戶(hù)及IP信息:
sudo grep "Accepted password for" /var/log/auth.log | awk 'BEGIN{printf("%-10s %-10s %-20s\n", "number", "user", "IP:Port")}{printf "%-10s %-10s %-20s\n", FNR, $11, $13":"$15}END{printf("搜索結(jié)束,共找到%d條記錄", FNR)}'
輸出示例:
number user IP:Port
1 zfb 11.11.11.11:8888
2 zfb 11.11.11.11:8888
3 zfb 11.11.11.11:8888
4 root 11.11.11.11:8888
搜索結(jié)束憨攒,共找到4條記錄
查看系統(tǒng)登陸失敗的次數(shù)及對(duì)應(yīng)的IP:
sudo grep "Failed password for" /var/log/auth.log | awk '{if(match($11, /\./)!=0) print $11}' | sort | uniq -c | sort -nr | more
14. 使用FTP下載文件
FTP(文件傳輸協(xié)議)是一個(gè)較老且最常用的標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議世杀,用于在兩臺(tái)計(jì)算機(jī)之間通過(guò)網(wǎng)絡(luò)上傳/下載文件。它通過(guò)用戶(hù)憑證(用戶(hù)名和密碼)傳輸數(shù)據(jù)肝集,沒(méi)有進(jìn)行加密瞻坝。它是一個(gè)8位的客戶(hù)端-服務(wù)器協(xié)議,能操作任何類(lèi)型的文件而不需要進(jìn)一步處理杏瞻,就像MIME或Unicode一樣所刀。但是,F(xiàn)TP有著極高的延時(shí)捞挥,這意味著浮创,從開(kāi)始請(qǐng)求到第一次接收需求數(shù)據(jù)之間的時(shí)間,會(huì)非常長(zhǎng)砌函;并且不時(shí)的必須執(zhí)行一些冗長(zhǎng)的登錄進(jìn)程
一般運(yùn)行在20和21兩個(gè)端口斩披。端口20用于在客戶(hù)端和服務(wù)器之間傳輸數(shù)據(jù)流,而端口21用于傳輸控制流讹俊,并且是命令通向ftp服務(wù)器的進(jìn)口雏掠。當(dāng)數(shù)據(jù)通過(guò)數(shù)據(jù)流傳輸時(shí),控制流處于空閑狀態(tài)劣像。而當(dāng)控制流空閑很長(zhǎng)時(shí)間后乡话,客戶(hù)端的防火墻會(huì)將其會(huì)話置為超時(shí)
FTP URL的格式在RFC 1738指定,格式為:ftp://[user[:password]@]host[:port]/url-path
首先確保系統(tǒng)已經(jīng)安裝ftp
命令:
sudo apt-get install ftp
此ftp
命令的使用方法為耳奕,在終端輸入以下命令(域名或IP地址或完整FTP網(wǎng)址都可以):
ftp ftp.ngdc.noaa.gov
一般公開(kāi)的FTP資源下載站點(diǎn)的用戶(hù)名都是anonymous
绑青,密碼是空,登錄成功后即可打開(kāi)交互終端
[zfb@myServer ~]# ftp ftp.ngdc.noaa.gov
Connected to ftp.ngdc.noaa.gov (140.172.190.215).
220- ----- Notice -----
220-
220- Questions/Problems should be directed to ngdc.webmaster@noaa.gov
220
Name (ftp.ngdc.noaa.gov:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (140,172,190,215,188,178).
150 Here comes the directory listing.
-rw-rw-r-- 1 ftp ftp 1516 Feb 04 2016 INDEX.txt
-rw-rw-r-- 1 ftp ftp 3766 Feb 09 2018 README.txt
-rw-rw-r-- 1 ftp ftp 9036 Feb 04 2016 ftp.html
drwxrwsr-x 11 ftp ftp 11 Dec 19 2017 geomag
-rw-r--r-- 1 ftp ftp 53 Jul 27 2010 google12c4c939d7b90761.html
lrwxrwxrwx 1 ftp ftp 8 Aug 01 2011 index.html -> ftp.html
226 Directory send OK.
ftp> cd geomag
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (140,172,190,215,74,181).
150 Here comes the directory listing.
drwxrwxr-x 10 ftp ftp 12 Jul 08 2016 Access_Tools
drwxrwxr-x 4 ftp ftp 9 Jul 14 2008 Aeromag
226 Directory send OK.
在該交互窗口使用命令lcd /home/zfb/hh/
表示設(shè)置下載遠(yuǎn)程FTP服務(wù)器的文件默認(rèn)保存在本機(jī)的/home/zfb/hh/
目錄
在該交互窗口使用命令mget *
表示下載當(dāng)前目錄下的所有文件屋群,忽略所有子文件夾
在該交互窗口使用命令prompt off
表示關(guān)閉下載提示
批量遍歷下載FTP站點(diǎn)指定目錄下的所有數(shù)據(jù):
wget -r -nH -P/home/zfb/hh/ ftp://ftp.ngdc.noaa.gov/ionosonde/mids11/GR13L/individual/2019/* --ftp-user=anonymous --ftp-password=
15. 切割日志文件
可以分為以下兩種:
16. 設(shè)置靜態(tài)IP
有以下兩種方法:
1.方法一:系統(tǒng)安裝有GUI闸婴。打開(kāi)設(shè)置-->網(wǎng)絡(luò)
,查看哪一個(gè)是當(dāng)前正在使用的網(wǎng)絡(luò)連接芍躏,點(diǎn)擊該條右側(cè)的設(shè)置(齒輪圖標(biāo))邪乍,彈出對(duì)話框。詳細(xì)信息
頁(yè)面會(huì)顯示當(dāng)前的ip(例如:192.168.10.55
)、網(wǎng)關(guān)路由地址(例如:192.168.10.254
)庇楞、所有的DNS地址(例如:114.114.114.114,8.8.8.8
)榜配,需要記錄下來(lái),方便后期修改吕晌。然后點(diǎn)擊IPv4
選項(xiàng)
-
IPv4方式
:手動(dòng) -
地址
:共有三格蛋褥。第一格填寫(xiě)自己需要設(shè)置的靜態(tài)ip地址,例如寫(xiě)為192.168.10.56
(也可設(shè)置為與之前DHCP方式分配的IP一致睛驳,即192.168.10.55
)烙心;第二格填寫(xiě)子網(wǎng)掩碼,一般是255.255.255.0
(可以通過(guò)方法二的步驟核實(shí));第三格填寫(xiě)網(wǎng)關(guān)地址192.168.10.254
-
DNS
:填寫(xiě)之前看到的即可,如114.114.114.114,8.8.8.8
- 然后點(diǎn)擊右上角
應(yīng)用
菜拓,如果彈出輸入密碼則按要求輸入即可。最后痘昌,關(guān)閉再打開(kāi)網(wǎng)絡(luò)即可應(yīng)用成功
2.方法二:在終端窗口修改。Ubuntu 17.10 網(wǎng)絡(luò)管理引入了一個(gè)新的工具炬转,用來(lái)配置ip地址,本教程只適合此版本及更新版本(舊版本如ubuntu 16.04不支持)算灸。具體步驟如下:
- 查看并記錄相關(guān)信息(也可使用方法一來(lái)查看):
# 安裝網(wǎng)絡(luò)工具庫(kù)
sudo apt-get install net-tools
# (1)查看當(dāng)前正在使用的網(wǎng)卡信息
ifconfig -a
# 該命令會(huì)返回所有網(wǎng)卡信息扼劈,可通過(guò)查看每一條信息是否包含inet條目
# 且inet后面跟著的地址不是127.0.0.1
# 排除法即可找到當(dāng)前使用的網(wǎng)卡,最前面是網(wǎng)卡名稱(chēng)菲驴,例如
# enp0s37f2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
# inet 192.168.10.55 netmask 255.255.255.0 broadcast 192.168.10.255
# inet6 fe80::cdea:a610:64f0:bed2 prefixlen 64 scopeid 0x20<link>
# ether e3:aa:5e:6e:53:01 txqueuelen 1000 (以太網(wǎng))
# RX packets 44518 bytes 7552410 (7.5 MB)
# RX errors 0 dropped 0 overruns 0 frame 0
# TX packets 40667 bytes 51864207 (51.8 MB)
# TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# device interrupt 16 memory 0xef300000-ef320000
# 記錄: 網(wǎng)卡名稱(chēng)為enp0s37f2 當(dāng)前ip地址為192.168.10.55 子網(wǎng)掩碼為255.255.255.0
# (2)查看網(wǎng)關(guān)路由地址
route -n
# 該命令輸出的第一條(目標(biāo)為0.0.0.0)的網(wǎng)關(guān)即為所需的地址荐吵,記錄網(wǎng)關(guān)為192.168.10.254
# 內(nèi)核 IP 路由表
# 目標(biāo) 網(wǎng)關(guān) 子網(wǎng)掩碼 標(biāo)志 躍點(diǎn) 引用 使用 接口
# 0.0.0.0 192.168.10.254 0.0.0.0 UG 20100 0 0 enp0s37f2
# 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s37f2
# 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
# 192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s37f2
# 也可使用traceroute命令來(lái)查找網(wǎng)關(guān)
traceroute www.baidu.com
# 只看該命令的前兩條輸出即可,記錄網(wǎng)關(guān)地址為192.168.10.254
# traceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets
# 1 _gateway (192.168.10.254) 0.392 ms 0.379 ms 0.372 ms
# 2 * * *
# (3)查看DNS記錄
systemd-resolve --status
# 從該命令輸出中找到自己用的網(wǎng)卡
# Link 2 (enp0s37f2)
# Current Scopes: DNS
# LLMNR setting: yes
# MulticastDNS setting: no
# DNSSEC setting: no
# DNSSEC supported: no
# DNS Servers: 114.114.114.114
# 8.8.8.8
# DNS Domain: ~.
# 記錄DNS 114.114.114.114, 8.8.8.8
- 創(chuàng)建配置文件:
sudo vim /etc/netplan/01-network-manager-all.yaml
文件內(nèi)容如下:
network:
ethernets:
# set network card name
enp0s37f2:
dhcp4: no
dhcp6: no
# set your static ip
# default network mask length is 24
# 255.255.255.0 --> 24
addresses: [192.168.10.56/24]
# set ipv4 gateway address
gateway4: 192.168.10.254
nameservers:
# set dns servers
addresses: [114.114.114.114,8.8.8.8]
version: 2
- 應(yīng)用修改
# 生成配置文件
sudo netplan --debug generate
# 測(cè)試配置文件
sudo netplan try
# 應(yīng)用修改
sudo netplan apply
# 重啟網(wǎng)絡(luò)服務(wù)
sudo systemctl restart network-manager
17. 創(chuàng)建隨機(jī)文件
在Linux系統(tǒng)中有/dev/random
和/dev/urandom
可以產(chǎn)生隨機(jī)數(shù)赊瞬,前者是更加貼近數(shù)學(xué)意義的隨機(jī)數(shù)先煎,后者是比較適合生成文件的隨機(jī)數(shù),用法如下:
# 執(zhí)行命令:創(chuàng)建65536*1024Bytes(64MB)的文件
dd if=/dev/urandom of=test.txt count=65536 bs=1024
# 命令輸出
# 65536+0 records in
# 65536+0 records out
# 67108864 bytes (67 MB, 64 MiB) copied, 10.4984 s, 6.4 MB/s
還可以創(chuàng)建全是0的文件:
# 執(zhí)行命令:創(chuàng)建65536*1024Bytes(64MB)的文件
dd if=/dev/zero of=test-0.txt count=65536 bs=1024
# 命令輸出
# 65536+0 records in
# 65536+0 records out
# 67108864 bytes (67 MB, 64 MiB) copied, 9.42672 s, 7.1 MB/s
另外巧涧,可以嘗試使用zip或rar算法單獨(dú)壓縮這兩個(gè)文件薯蝎,會(huì)發(fā)現(xiàn)后者可以被壓縮到1MB以下,而前者基本不會(huì)減小體積(信息熵的體現(xiàn))
18. 重定向輸出與2>&1介紹
在linux終端下谤绳,可以在shell命令的后面占锯,使用符號(hào)>
和>>
來(lái)進(jìn)行標(biāo)準(zhǔn)輸出的重定向(不包括執(zhí)行出錯(cuò)的信息,即標(biāo)準(zhǔn)錯(cuò)誤)
-
> a.txt
表示將終端要顯示的信息全部寫(xiě)入文件(若文件已存在缩筛,則覆蓋) -
>> a.txt
表示將終端要顯示的信息全部寫(xiě)入文件(若文件已存在消略,則追加)
例如:
zfb@myServer:~$ echo "hello, world"
hello, world
zfb@myServer:~$ echo "hello, world" > a.txt
zfb@myServer:~$ cat a.txt
hello, world
zfb@myServer:~$ echo "this is second command" > a.txt
zfb@myServer:~$ cat a.txt
this is second command
zfb@myServer:~$ echo "The 3rd command" >> a.txt
zfb@myServer:~$ cat a.txt
this is second command
The 3rd command
zfb@myServer:~$
關(guān)于2>&1
的解釋?zhuān)總€(gè)程序或命令在運(yùn)行后,都會(huì)至少打開(kāi)三個(gè)文件描述符以存放命令的各種輸入輸出信息:
- 標(biāo)準(zhǔn)輸入:對(duì)應(yīng)文件
/dev/stdin
瞎抛,也可以使用文件描述符0
表示 - 標(biāo)準(zhǔn)輸出:對(duì)應(yīng)文件
/dev/stdout
艺演,也可以使用文件描述符1
表示 - 標(biāo)準(zhǔn)錯(cuò)誤:對(duì)應(yīng)文件
/dev/stderr
,也可以使用文件描述符2
表示
于是,很容易理解:
2>&1
表示將文件描述符2
(標(biāo)準(zhǔn)錯(cuò)誤)的內(nèi)容重定向到文件描述符1
(標(biāo)準(zhǔn)輸出)
當(dāng)沒(méi)有&
時(shí)胎撤,1
會(huì)被認(rèn)為是一個(gè)普通的文件晓殊,&
表示重定向的目標(biāo)不是一個(gè)文件,而是一個(gè)文件描述符
通過(guò)命令./test.sh 2>&1 >a.txt
即可實(shí)現(xiàn)腳本執(zhí)行過(guò)程的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都寫(xiě)入文件a.txt
參考如下信息
zfb@myServer:~$ ls -al /dev/std*
lrwxrwxrwx 1 root root 15 Dec 23 13:36 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Dec 23 13:36 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Dec 23 13:36 /dev/stdout -> /proc/self/fd/1
zfb@myServer:~$
19. 記錄終端信息
使用script
命令開(kāi)啟記錄:script -t 2>time.file -a -f command.log
-
-t
表示輸出時(shí)間信息到標(biāo)準(zhǔn)錯(cuò)誤
(文件描述符2
) -
2>time.file
表示將標(biāo)準(zhǔn)錯(cuò)誤
信息輸出到文件(time.file
是自己設(shè)置的文件名稱(chēng)) -
-a
表示追加模式 -
-f
表示每次寫(xiě)入后都刷新緩存 -
-q
表示安靜運(yùn)行模式(不會(huì)提示Script started
以及Script done
) -
command.log
是自己設(shè)置的用來(lái)保存輸入命令和終端回顯信息的文件名稱(chēng)
最簡(jiǎn)單的用法為script
哩照,該命令會(huì)自動(dòng)將輸入命令和終端回顯信息寫(xiě)入當(dāng)前目錄的typescript
文件
其次還可以使用script command.log
挺物,該命令會(huì)自動(dòng)將輸入命令和終端回顯信息寫(xiě)入當(dāng)前目錄的command.log
文件
退出記錄:在終端使用命令exit
或者快捷鍵Ctrl + D
使用示例:
zfb@myServer:~$ script -t 2>time.file -a -f command.log
Script started, file is command.log
zfb@myServer:~$ echo "hello, world"
hello, world
zfb@myServer:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
2020-12-23 20:48:46
zfb@myServer:~$ echo "Bye"
Bye
zfb@myServer:~$ ls -al
total 20
drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
zfb@myServer:~$ exit
Script done, file is command.log
zfb@myServer:~$
查看保存的命令和終端回顯:cat command.log
該命令得到輸出如下
zfb@myServer:~$ cat command.log
Script started on 2020-12-23 20:48:25+08:00 [TERM="xterm-256color" TTY="/dev/pts/0" COLUMNS="75" LINES="30"]
zfb@myServer:~$ echo "hello, world"
hello, world
zfb@myServer:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
2020-12-23 20:48:46
zfb@myServer:~$ echo "Bye"
Bye
zfb@myServer:~$ ls -al
total 20
drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
zfb@myServer:~$ exit
Script done on 2020-12-23 20:49:04+08:00 [COMMAND_EXIT_CODE="0"]
zfb@myServer:~$
注意:
- 在上面顯示的內(nèi)容中,只有命令
cat command.log
是手動(dòng)輸入的飘弧,其他都是自動(dòng)顯示的 - 根據(jù)上面顯示的時(shí)間
2020-12-23 20:48:46
识藤,可以看出并不是重新執(zhí)行了一遍,而是重新顯示了一遍
另外次伶,還可以使用命令scriptreplay
來(lái)重新播放命令與回顯(只是把當(dāng)時(shí)記錄的信息痴昧,播放一遍,不是重新執(zhí)行)
命令為:scriptreplay -d 1 -m 2 -t time.file -s command.log
-
-d
表示倍速播放:-d 2
表示播放速度是原始輸入單條命令的速度的兩倍冠王;-d 0.1
表示播放單條命令的速度減慢10倍 -
-m
表示命令之間的最大延遲時(shí)間(單位是秒):-m 2
表示command.log
中存放的兩條命令之間的間隔時(shí)間如果大于兩秒赶撰,則按兩秒執(zhí)行播放 -
-t
表示后面指定存放時(shí)間信息的文件 -
-s
表示后面指定存放輸入和回顯信息的文件
示例如下:
zfb@myServer:~$ scriptreplay -d 1 -m 2 -t time.file -s command.log
zfb@myServer:~$ echo "hello, world"
hello, world
zfb@myServer:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
2020-12-23 20:48:46
zfb@myServer:~$ echo "Bye"
Bye
zfb@myServer:~$ ls -al
total 20
drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
zfb@myServer:~$ exit
zfb@myServer:~$
注意:
- 在上面顯示的內(nèi)容中,只有命令
scriptreplay -d 1 -m 2 -t time.file -s command.log
是手動(dòng)輸入的柱彻,其他都是自動(dòng)顯示的 - 根據(jù)上面顯示的時(shí)間
2020-12-23 20:48:46
豪娜,可以看出并不是重新執(zhí)行了一遍,而是重新播放了一遍 - 與
cat command.log
的不同之處在于哟楷,顯示效果與手動(dòng)輸入一致瘤载,適合作為教程演示 - 可以把
time.file
和command.log
文件移動(dòng)到任意一臺(tái)支持scriptreplay
命令的機(jī)器上,都可以重現(xiàn)命令輸入與終端回顯
20. 記錄服務(wù)器用戶(hù)會(huì)話操作
使用root用戶(hù)登錄服務(wù)器卖擅,創(chuàng)建文件夾:
sudo mkdir -p /var/log/script-records/
sudo chmod 733 /var/log/script-records/
然后編輯文件/etc/profile
: sudo vim /etc/profile
在文件末尾追加以下內(nèi)容:
if [ $UID -ge 0 ]
then
exec /usr/bin/script -t 2>/var/log/script-records/$USER-$UID-`date +%Y%m%d`.time -a -f -q /var/log/script-records/$USER-$UID-`date +%Y%m%d`.log
fi
然后執(zhí)行命令source /etc/profile
即可
注意:
- 733權(quán)限表示:對(duì)于某登錄用戶(hù)
user1
鸣奔,可保證該用戶(hù)記錄日志到/var/log/script-records/
目錄內(nèi),又無(wú)法刪除日志文件 - 這里
$UID -ge 0
記錄id>=0
的用戶(hù)惩阶,其中包括root
用戶(hù) - 如果只是想記錄普通用戶(hù)挎狸,則這里改成
$UID -ge 500
,因?yàn)閘inux創(chuàng)建普通用戶(hù)id從500開(kāi)始