Ubuntu系統(tǒng)的常用命令:ssh绷苫希活嗤瞎、用戶(hù)管理、開(kāi)機(jī)自啟频伤、后臺(tái)運(yùn)行

內(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)境,可以在suusername之間加-粹污,例如:su - root
終端的提示符$表示普通用戶(hù)段多;#表示超級(jí)用戶(hù),即root用戶(hù)
在終端輸入exitlogout或使用快捷方式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提供了fgbg命令敢茁,可以調(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ì)完畢")}篮迎,BEGINEND語(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.filecommand.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/profilesudo 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)始
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末断楷,一起剝皮案震驚了整個(gè)濱河市锨匆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冬筒,老刑警劉巖统刮,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異账千,居然都是意外死亡侥蒙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)匀奏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鞭衩,“玉大人,你說(shuō)我怎么就攤上這事÷垩埽” “怎么了瑞佩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)坯台。 經(jīng)常有香客問(wèn)我炬丸,道長(zhǎng),這世上最難降的妖魔是什么蜒蕾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任稠炬,我火速辦了婚禮,結(jié)果婚禮上咪啡,老公的妹妹穿的比我還像新娘首启。我一直安慰自己,他們只是感情好撤摸,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布毅桃。 她就那樣靜靜地躺著,像睡著了一般准夷。 火紅的嫁衣襯著肌膚如雪钥飞。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天衫嵌,我揣著相機(jī)與錄音读宙,去河邊找鬼。 笑死渐扮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掖棉。 我是一名探鬼主播墓律,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幔亥!你這毒婦竟也來(lái)了耻讽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤帕棉,失蹤者是張志新(化名)和其女友劉穎针肥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體香伴,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慰枕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了即纲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片具帮。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜂厅,到底是詐尸還是另有隱情匪凡,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布掘猿,位于F島的核電站病游,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏稠通。R本人自食惡果不足惜衬衬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望采记。 院中可真熱鬧佣耐,春花似錦、人聲如沸唧龄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)既棺。三九已至讽挟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丸冕,已是汗流浹背耽梅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胖烛,地道東北人眼姐。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像佩番,于是被迫代替她去往敵國(guó)和親众旗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一趟畏、文件/文件夾管理 ls 列出當(dāng)前目錄文件(不包括隱含文件) ls -a 列出當(dāng)前目錄文件(包括隱含文件) ls...
    會(huì)飛的魚(yú)Coo閱讀 4,527評(píng)論 1 23
  • 一贡歧、文件/文件夾管理 ls 列出當(dāng)前目錄文件(不包括隱含文件)ls -a 列出當(dāng)前目錄文件(包括隱含文件)l...
    路癡千行閱讀 2,398評(píng)論 0 5
  • Ubuntu 常用命令大全 查看軟件 xxx 安裝內(nèi)容 #dpkg -L xxx 查找軟件 #apt-cache ...
    guiwuzhe閱讀 2,554評(píng)論 0 14
  • 找出符合描述的命令,適合不知道命令的情況apropos "list director*" 使用root用戶(hù)創(chuàng)建新用...
    木木與呆呆閱讀 423評(píng)論 0 12
  • 設(shè)置root用戶(hù) sudo passwd root 輸入密碼赋秀,并確認(rèn)密碼su root 切換到root用戶(hù) 添加用...
    乘瓠散人閱讀 384評(píng)論 0 0