前言
最近公司在大力推廣DevOps開發運維一體化,作為一名開發人員,不熟悉linux怎么做運維呢,我們雖然是開發,但是基本的linux命令還是要懂得一點的,文章中命令給開發人員部署上線絕對是沒問題的;本文章中的所有命令都是在centos7系統下進行測驗通過的;
linux目錄介紹
玩linux,首先記住一點點:一切皆檔案,根目錄是/,所有的檔案都在這個目錄下
- /bin: bin是Binary的縮寫,這個目錄存放著最經常使用的命令,
- /boot: 這里存放的是啟動Linux時使用的一些核心檔案,包括一些連接檔案以及鏡像檔案,
- /dev : dev是Device(設備)的縮寫,該目錄下存放的是Linux的外部設備,比如U盤
- /etc: 這個目錄用來存放所有的系統管理所需要的組態檔和子目錄,比如nginx和tomcat的組態檔就可以放到這個目錄
- /home: 用戶的主目錄,在Linux中,每個用戶都有一個自己的目錄,一般該目錄名是以用戶的賬號命名的,
- /lib: 這個目錄里存放著系統最基本的動態連接共享庫,其作用類似于Windows里的DLL檔案,幾乎所有的應用程式都需要用到這些共享庫,和java的依賴包一樣
- /lost+found: 這個目錄一般情況下是空的,當系統非法關機后,這里就存放了一些檔案,
- /media: linux系統會自動識別一些設備,例如U盤、光驅等等,當識別后,linux會把識別的設備掛載到這個目錄下,
- /mnt: 系統提供該目錄是為了讓用戶臨時掛載別的檔案系統的,我們可以將光驅掛載在/mnt/上,然后進入該目錄就可以查看光驅里的內容了,比如DVD/VCD就是掛載到mnt的
- /opt: 這是給主機額外安裝軟體所擺放的目錄,比如你安裝一個ORACLE資料庫則就可以放到這個目錄下,默認是空的,
- /proc: 這個目錄是一個虛擬的目錄,它是系統記憶體的映射,我們可以通過直接訪問這個目錄來獲取系統資訊, 這個目錄的內容不在硬碟上而是在記憶體里,我們也可以直接修改里面的某些檔案,比如可以通過下面的命令來屏蔽主機的ping命令,使別人無法ping你的機器
- /root: 該目錄為系統管理員,也稱作超級權限者的用戶主目錄,
- /sbin: s就是SuperUser的意思,這里存放的是系統管理員使用的系統管理程式,
- /selinux: 這個目錄是Redhat/CentOS所特有的目錄,Selinux是一個安全機制,類似于windows的防火墻,但是這套機制比較復雜,這個目錄就是存放selinux相關的檔案的,
- /srv: 該目錄存放一些服務啟動之后需要提取的資料,
- /sys:這是linux2.6內核的一個很大的變化,該目錄下安裝了2.6內核中新出現的一個檔案系統 sysfs ,sysfs檔案系統集成了下面3種檔案系統的資訊:針對行程資訊的proc檔案系統、針對設備的devfs檔案系統以及針對偽終端的devpts檔案系統,該檔案系統是內核設備樹的一個直觀反映,當一個內核物件被創建的時候,對應的檔案和目錄也在內核物件子系統中被創建,
- /tmp: 這個目錄是用來存放一些臨時檔案的,
- /usr: 這是一個非常重要的目錄,用戶的很多應用程式和檔案都放在這個目錄下,類似于windows下的program files目錄,
- /usr/bin: 系統用戶使用的應用程式,
- /usr/sbin: 超級用戶使用的比較高級的管理程式和系統守護程式,
- /usr/src: 內核源代碼默認的放置目錄,
- /var: 這個目錄中存放著在不斷擴充著的東西,我們習慣將那些經常被修改的目錄放在這個目錄下,包括各種日志檔案,
- /run: 是一個臨時檔案系統,存盤系統啟動以來的資訊,當系統重啟時,這個目錄下的檔案應該被刪掉或清除,如果你的系統上有 /var/run 目錄,應該讓它指向 run,
- /www :存放服務器網站相關的資源,環境、網站的專案等等
開/關機、重啟
資料同步到硬碟
# 將資料由記憶體同步到硬碟,關機前先做這一步,避免資料丟失
sync
開關機命令
# 立馬關機
shutdown -h now
# 10分鐘后關機
shutdown -h 10
# 今天20:25關機
shutdown -h 20:25
# 立馬重啟
shutdown -r now
# 10分鐘后重啟
shutdown -r +10
# 立馬重啟
reboot
# 關機
poweroff
關閉系統-但好像不會關機
halt
查看/修改主機名
查看當前主機名
hostname
修改主機名
hostname 主機名
基本命令
目錄管理
cd 切換目錄
# 進入相對目錄
cd xxx
cd ./xxx
# 進入絕對目錄
cd /xxx/xxx
# 回傳上一個目錄
cd ..
# 進入用戶目錄
cd ~
ls 查看目錄
# 列出當前目錄下的目錄和檔案
ls
# 查看當前目錄的全部檔案-包含隱藏檔案
ls -a
# 列出所有檔案的詳細資訊-不包含隱藏檔案
# ls -l
pwd 顯示當前所在目錄
pwd
mkdir 創建目錄
mkdir 目錄名稱
rmdir 洗掉目錄
# -p表示連同子目錄一起洗掉
rmdir -p 目錄名稱
rm 洗掉檔案或目錄
# -r 遞回洗掉,表示連同子目錄一起洗掉,
# -f表示不需要確認,強制洗掉
rm -rf 檔案名/目錄名稱
cp 復制檔案或目錄
cp 原檔案地址 新目錄
cp /root/nginx.conf /home
# 如果是復制目錄,需要加上-r引數
cp -r /原目錄 /新目錄
mv 移動檔案或目錄
# -u 只替換已經更新的檔案
# -f 強制移動
mv -fu /源檔案 /新目錄
touch 創建檔案
touch 檔案名
看懂檔案屬性
當我們查看目錄時會使用ls -l命令,顯示內容都表示什么呢?
[root@localhost /]# ls -l
total 16
lrwxrwxrwx. 1 root root 7 Sep 15 10:09 bin -> usr/bin
第一項
第一個字母
- d:d表示該檔案是一個目錄,字母"d",是dirtectory(目錄)的縮寫
- l:l表示該檔案是一個軟鏈接檔案,字母"l"是link(鏈接)的縮寫,類似于windows下的快捷方式
- -:表示是一個硬鏈接檔案
- b:b的表示塊設備檔案(block),一般置于/dev目錄下,設備檔案是普通檔案和程式訪問硬體設備的入口,是很特殊的檔案,沒有檔案大小,只有一個主設備號和一個輔設備號,一次傳輸資料為一整塊的被稱為塊設備,如硬碟、光碟等,最小資料傳輸單位為一個資料塊(通常一個資料塊的大小為512位元組)
- c:c表示該檔案是一個字符設備檔案(character),一般置于/dev目錄下,一次傳輸一個位元組的設備被稱為字符設備,如鍵盤、字符終端等,傳輸資料的最小單位為一個位元組
- p:p表示該檔案為命令管道檔案,與shell編程有關的檔案
- s:s表示該檔案為sock檔案,與shell編程有關的檔案
接下來的字符
接下來的字符每三個為一組
-
r:表示讀權限
-
w:表示寫權限
-
x:表示執行權限
-
第一組為屬主權限,誰創建的誰就是主
-
第二組為屬于組權限
-
第三組為其他用戶的權限
第二項
第二項是檔案個數,我們看到第二項顯示的是1,表示里面只有一個檔案
lrwxrwxrwx. 1 root root 7 Sep 15 10:09 bin -> usr/bin
第三項 和 第四項
我們看到第三項和第四項都是root,
第三項是屬主,也就是誰創建的,
第四項是屬組,也就是屬于哪個用戶組,
第五項
檔案大小
第六項
創建時間
修改檔案屬性
charp:更改檔案組
- R 遞回修改檔案屬組
charp -R 屬組名 檔案名
chmod 修改檔案的9個權限
# r 表示第一組的權限
# w 表示第二組的權限
# x 表示第三組的權限
chmod -R rwx 檔案名
# 除了用字母表示,也可以使用數字來表示
# r 用4表示
# w 用2表示
# x 用1表示
# 設定最高權限
chmod 777 檔案名
# 設定可讀可寫
chmod 666 檔案名
# 設定只讀
chmod 444 檔案名
# 設定只寫
chmod 222 檔案名
# 設定只能執行
chmod 111 檔案名
檔案夾內容查看
cat 順序查看
cat 檔案名
tac 倒序查看
tac 檔案名
nl 查看時輸出行號
nl 檔案名
more 一頁頁地顯示
more只能往下翻頁,不能往上翻
more 檔案名
# 快捷鍵
空格鍵 : 下一頁
回車:看下一行
:f 查看行號
less 一頁頁顯示
less可以往下翻頁,也能往上翻
less 檔案名
# 快捷鍵
上鍵 :向上翻頁
下鍵 :向下翻頁
q:退出
head 只看頭幾行
# 只看前20行
head -n 20 檔案名
tail 看尾部幾行
tail -n 20 檔案名
# 持續跟蹤檔案,輸出新內容
tail -f 檔案名
軟鏈接和硬鏈接
軟鏈接
類似windows下的快捷方式,洗掉了源檔案的話,軟鏈接也無法訪問;洗掉軟鏈接不會影響源檔案
ln -s 源檔案 軟鏈接
添加軟鏈接后會有個箭頭->
lrwxrwxrwx. 1 root root 7 Sep 15 10:09 bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Sep 15 10:09 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Sep 15 10:09 lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Sep 15 10:09 sbin -> usr/sbin
硬鏈接
2個檔案指向同一個檔案,相當于一個檔案擁有多個路徑;比如A檔案和B檔案都指向同一個檔案,不管洗掉A還是B,都不會洗掉源檔案,可以有效防止誤刪
ln 源檔案 硬鏈接
vi/vim 編輯器
vim fileName
vi fileName
命令模式
x # 洗掉游標所在的文字
i # 進入編輯模式,可修改檔案內容
a # 進入編輯模式,可修改檔案內容
o # 進入編輯模式,可修改檔案內容
v # 進入可視模式, 在可視模式下,移動游標可以選擇文本, 總是整行整行的選中
ctrl + v # 進入可視塊模式,之后使用 j/k/h/l鍵可以選中一塊
ctrl + f # 向下移動一頁
ctrl + b # 向上移動一頁
ctrl + d # 向下移動半頁
ctrl + u # 向上移動半頁
r # 替換模式,可替換游標處的字符
n + 回車 # n為數字,游標向下移動n行
dd # 洗掉行
gg # 移動到檔案的首行
shift + g # 移動到檔案的尾行
n + shift + g # n為數字,移動到檔案的第n行,先輸入行號n,然后shift + g一起按
/xx # 查詢檔案內容,xx為你需要查詢的關鍵字,如果查詢到會有多個關鍵字,n 往下尋找,N 往上尋找
?xx # 游標之上查詢內容,xx為你需要查詢的關鍵字
eas # 從編輯模式回傳到命令模式
esc + : # 切換到底線命令模式
輸入/編輯模式
# 正常輸入字符
enter # 回車換行
底線命令模式
:q # 退出程式
::w # 保存檔案
:w fileName # 保存為指定檔案
:q! # 不保存檔案并退出
:qw! # 強制保存退出,忽略只讀屬性
:w! # 強制保存,
:set nu # 顯示行號
:set nonu # 取消行號
賬號管理
linux系統是一個多任務的分時作業系統,在使用資源時需要申請一個賬號,在多人同時操作linux系統時,可以給部門的人每人申請一個賬號供其使用
添加賬號
# 創建賬號
useradd -選項 用戶名
# 選項說明
-m : 使用者目錄不存在時自動創建
-c comment :給用戶一段描述字串,隨便寫
-d /目錄:指定用戶主目錄
-g 用戶組 :指定用戶所屬的用戶組
-G 用戶組 :指定用戶所屬的附加組
-s shell檔案 : 指定用戶登錄的shell
-u 用戶號: 指定用戶的用戶號,
添加后就可以在passwd檔案內看到剛剛創建的用戶了
# 后面的 | grep yexindong -0 表示查詢yexindong這個字串, -0 表示只顯示一行
[root@localhost yexindong]# cat /etc/passwd | grep yexindong -0
yexindong:x:1000:1000::/home/yexindong:/bin/bash
修改用戶
# 修改用戶的選項和添加用戶一致
usermod -選項 用戶名
修改密碼
# 密碼長度必須大于8,設定密碼時需要確認密碼
passwd 用戶名
洗掉用戶
# -r 表示洗掉用戶后將用戶目錄也一起洗掉, -f 表示強制洗掉
userdel -rf 用戶名
切換用戶
# 注意,在切換用戶時,用戶主目錄必須已存在,否則無法使用目錄
su user_name
鎖定賬戶
# -l 是lock 的簡寫,鎖定后就無法登錄了
passwd -l 用戶名
# -d 是去掉密碼,沒有密碼的情況下也無法登錄;
passwd -d 用戶名
用戶組管理
用戶組的增刪改,其實就是對/etc/group 檔案的更新
創建用戶組
groupadd 選項 組名稱
# 選項
-g id: 指定組的id,如果不指定,默認自增id
修改用戶組
groupmod 選項 組名稱
# 選項
-g id: 指定組的id,如果不指定,默認自增id
-n name : 修改組名
洗掉用戶組
groupdel 組名稱
切換用戶組
# 1、登錄當前用戶
su 用戶名
# 2、切換用戶組
newgrp 組名
# 當然,最好的方式是創建用戶的時候就添加一個用戶組
useradd -g 組名 用戶名
磁盤管理
列出磁盤整體使用量
df 選項
# 選項
-m :以MB單位顯示
-g :以GB為單位顯示
-k :以KB為單位顯示(默認)
df命令展示說明
當我們輸入df命令時會展示以下內容
[yexindong@yexindong root]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 495612 0 495612 0% /dev
tmpfs 507572 0 507572 0% /dev/shm
tmpfs 507572 7304 500268 2% /run
tmpfs 507572 0 507572 0% /sys/fs/cgroup
/dev/mapper/centos-root 28289540 1662604 26626936 6% /
/dev/sda1 1038336 139160 899176 14% /boot
tmpfs 101516 0 101516 0% /run/user/0
tmpfs 101516 0 101516 0% /run/user/1000
# 說明
Filesystem :檔案系統
1K-blocks :空間 (單位:KB)
Used :已使用空間
Available : 未使用
Use% :使用率
Mounted on : 掛載的目錄 (這個相當于windows的C盤、D盤)
檢查當前目錄的磁盤空間使用量
cd /home
# 查看home目錄的使用情況; -a 可查看子目錄的情況
du -a
掛載目錄
# 將 /dev/yexindong 掛載到 /mnt/yexindong目錄下
mount /dev/yexindong /mnt/yexindong
卸載目錄
# -f 表示強制卸載
unmount -f 掛載位置
行程管理
- 在linux中,每一個程式都有自己的行程,每一個行程都有一個id號,
- 每一個行程都有一個父行程,代表著是誰創建的
- 行程可以有2中存在方式,前臺和后臺
ps 查看當前系統正在執行的行程資訊
ps 選項
# 選項
-a :顯示當前行程資訊
-u :以用戶的資訊顯示行程
-x :顯示所有后臺運行的行程引數
ps -ef 和 ps -aux的區別
其實這2個命令顯示的資訊都是差不多的,但是ps -ef可以看到父行程的資訊;
查看父行程也可以用pstree命令;但是centos默認不支持pstree,可以先安裝yum install psmisc -y
[root@yexindong ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
│ └─3*[{NetworkManager}]
├─VGAuthService
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─login───bash
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─nm-dispatcher───2*[{nm-dispatcher}]
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd
結束行程
# 終端短線
kill -1 pid
# 中斷,相當于按下快捷鍵 ctrl + C
kill -2 pid
# 退出,相當于按下快捷鍵 ctrl + \
kill -3 pid
# 強制停止行程
kill -9 pid
# 作業系統發送一個通知告訴應用主動關閉.
kill -15 PID
# 繼續執行,(與19相反)
kill -18 pid
# 暫停,相當于按下快捷鍵 ctrl + Z
kill -19 pid
安裝軟體
linux系統安裝軟體有三種方式
- rpm安裝
- 解壓縮安裝
- yum在線安裝
1、rpm安裝
執行以下命令就已經安裝好了,但是還未配置環境變數
rpm -ivh rpm包
# 選項
-i:表示安裝,--install的簡寫
-v:表示顯示詳細資訊
-h:以#號來顯示安裝進度,--hash的簡寫,就像這樣:################################# [100%]
-q : 查詢指定包名,--query 的簡寫
-e:卸載指定包名,
-U:升級軟體
-F:升級軟體
-V:對rpm包進行驗證
--nodeps:忽略依賴關系
–test:僅作測驗,不真正執行,可用于測驗安裝,測驗卸載,
–replacepkgs:重新安裝,替換原有的安裝,
–force:忽略軟體包及檔案的沖突,
–initdb:新建RPM的資料庫,
–rebuilddb:重建RPM的資料庫,
–percent:以百分比的形式輸出安裝的進度,
rpm卸載
這里用卸載JDK來示例
# 先查詢有哪些jdk
[root@yexindong ~]# rpm -qa | grep jdk
copy-jdk-configs-3.3-10.el7_5.noarch
java-1.8.0-openjdk-devel-1.8.0.302.b08-0.el7_9.x86_64
java-1.8.0-openjdk-headless-1.8.0.302.b08-0.el7_9.x86_64
java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
# 然后依次洗掉
rpm -e --nodeps copy-jdk-configs-3.3-10.el7_5.noarch
rpm -e --nodeps java-1.8.0-openjdk-devel-1.8.0.302.b08-0.el7_9.x86_64
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.302.b08-0.el7_9.x86_64
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
2、tar.gz 解壓縮安裝
直接解壓即可
tar -zvxf xxx.tar.gz
3、yum在線安裝
centos默認是自帶yum的,如果是debain系統,默認自帶的是apt-get的在線安裝程式;
使用yum在線安裝時,電腦必須聯網,無網路的情況下是無法安裝軟體的
安裝
安裝時會詢問你Is this OK[y/d/N],需要你手動進行選擇,但是如果加上引數-y,就會自動選擇y,不需要你再手動選擇!
yum -y install xxxx
在線模糊搜索字串相關的軟體
yum search xxx
卸載
yum remove xxxx
更新
yum update xxx
列出所有可安裝的軟體包
yum list
列出所有可更新的軟體包
yum list updates
列出所有可更新的軟體包資訊
yum info updates
列出所有已安裝的軟體包
yum list installed
列出所有已安裝的軟體包資訊
yum info installed
配置環境變數
第一種方式
僅對當前會話臨時生效
export PATH=/usr/local/java/bin
第二種方式
僅對當前用戶永久生效
# 編輯檔案
vim ~/.bash_profile
# 在檔案中加入以下內容
JAVA_HOME=/usr/local/java/jdkxxx
CLASSPATH=%JAVA_HOME%/lib;%JAVA_HOME%/jre/bin
PATH=$JAVA_HOME/bin
export PATH CLASSPATH JAVA_HOME # 匯出,讓系統能識別
# 讓環境變數生效
source ~/.bash_profile
第三種方式
對系統所有用戶永久生效
# 編輯檔案
vim /etc/profile
# 在檔案中加入以下內容
JAVA_HOME=/usr/local/java/jdkxxx
CLASSPATH=%JAVA_HOME%/lib;%JAVA_HOME%/jre/bin
PATH=$JAVA_HOME/bin
export PATH CLASSPATH JAVA_HOME # 匯出,讓系統能識別
# 讓環境變數生效
source /etc/profile
防火墻
安裝防火墻
默認的centos沒有防火墻,所以我們安裝一下
yum install firewalld
啟動防火墻
systemctl start firewalld
查看狀態
通過命令可以看到防火墻是正在運行中的狀態
[root@yexindong ~]# firewall-cmd --state
running
# 也可以通過以下命令查看運行狀態,但是顯示資訊有點多
systemctl status firewalld
關閉防火墻
systemctl stop firewalld
重啟
firewall-cmd --reload
開機啟用/禁用
# 開機啟用
systemctl enable firewalld
# 開機禁用
systemctl disable firewalld
查看開放的埠
firewall-cmd --list-ports
開啟防火墻埠
開啟后,外部就可以訪問這個埠了;
# –permanent 表示永久生效,沒有此引數重啟后會失效
# --zone 表示作用域
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 添加的埠重啟后才會生效
firewall-cmd --reload
后臺運行
nohup
先寫一個腳本print.sh,每秒列印一個123,一直回圈列印下去
!/bin/sh
while [ true ]; do
/bin/sleep 1
echo 123
done
運行
# 后臺運行,將列印結果保存到print.out檔案中
nohup ./print.sh > print.out &
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/347122.html
標籤:其他
上一篇:「offer來了」2種遞進學習思維,24道計網題目,保姆級鞏固你的計網知識體系
下一篇:Java無頭單向非回圈鏈表實作
