Linux筆記
系統(tǒng)信息
uname -r #查看系統(tǒng)內(nèi)核版本(常用)
cat /etc/system-release 或者 cat /etc/os-release #查看系統(tǒng)版本
free -h #查看內(nèi)存的使用情況
top 查看cpu內(nèi)存使用率以及進(jìn)程信息(類似win系統(tǒng)的任務(wù)管理器信息)
鍵入“1”:可以展開/收起所有CPU的使用率信息
鍵入大寫“M”:可以以內(nèi)存使用率從高到低展示進(jìn)程信息
鍵入大寫“P”:可以以CPU使用率從高到低展示進(jìn)程信息
uptime #查看系統(tǒng)運(yùn)行時(shí)間
cat /proc/cpuinfo #查看CPU信息
cat /proc/meminfo #查看內(nèi)存信息
cat /proc/interrupts #查看中斷
cat /proc/swaps #查看swap信息
cat /proc/net/dev #查看網(wǎng)絡(luò)適配器及統(tǒng)計(jì)
cat /proc/mounts #查看已加載的文件系統(tǒng)
date +"%Y-%m-%d %H:%M:%S" #以年-月-日 時(shí):分:秒的格式查看時(shí)間日期
date +"%Y%m%d" #顯示"年月日"格式的信息(如20210611,一般用作備份文件日期變量)
date +%s #將時(shí)間轉(zhuǎn)換為秒顯示(以格林尼治時(shí)間為起點(diǎn)算起)
date -s "20200712 9:30:00" #設(shè)置時(shí)間日期為2020-07-12的9:30:00(臨時(shí)生效)
clock -w #將時(shí)間更改保存到BIOS(使上面的時(shí)間更改永久生效)
系統(tǒng)服務(wù)管理 (systemd是CentOS7版本新特性)
語(yǔ)法格式:systemctl [動(dòng)作] [服務(wù)],下面以nginx服務(wù)舉例
systemctl start nginx #啟動(dòng)nginx服務(wù)
systemctl stop nginx #停止nginx服務(wù)
systemctl restart nginx #重啟nginx服務(wù)
systemctl status nginx #查看nginx服務(wù)的狀態(tài)
systemctl enable nginx #設(shè)置nginx服務(wù)開機(jī)自啟
systemctl disable nginx #禁止nginx服務(wù)開機(jī)自啟
systemctl list-units #列舉所有已啟動(dòng)服務(wù)(unit單元)
關(guān)機(jī)重啟
poweroff #立刻將系統(tǒng)關(guān)機(jī)
shutdown -h now #立刻將系統(tǒng)關(guān)機(jī)
shutdown -h hours:minutes #定時(shí)將系統(tǒng)關(guān)機(jī)
reboot #立刻重啟系統(tǒng)
shutdown -r now #立刻重啟系統(tǒng)
shutdown -r hours:minutes #定時(shí)重啟系統(tǒng)
shutdown -c #取消預(yù)定義系統(tǒng)關(guān)機(jī)或重啟設(shè)置
exit #退出當(dāng)前賬戶
文件和目錄
cd /tmp #切換到/tmp目錄
cd .. #切換到上一級(jí)目錄
cd ../.. #切換到上兩級(jí)目錄
cd - #切換到上次所在目錄
cd ~ #切換到個(gè)人家目錄
pwd #查看當(dāng)前絕對(duì)路徑
ls #簡(jiǎn)單的查看目錄下的文件
ls -l #查看目錄下文件的詳細(xì)信息(包含文件權(quán)限)
ll -t #按日期從新到舊的順序列出文件
ll -tr #按日期從舊到新的順序列出文件(r代表反轉(zhuǎn))
ls -a #查看目錄下所有文件(包含隱藏文件)
ls *[0-9]* #顯示包含數(shù)字的文件名和目錄名
tree #查看目錄樹結(jié)構(gòu)
touch file1 #創(chuàng)建空文件file1
vi file1 或 vim file1 #創(chuàng)建文件file1并寫入內(nèi)容
mkdir dir1 #創(chuàng)建目錄dir1
mkdir -p /tmp/dir1/dir2 #遞歸創(chuàng)建目錄
rm -f file1 #強(qiáng)制刪除file1文件
rm -rf dir1 #強(qiáng)制刪除dir1目錄以及其下所有文件
mv file1 /tmp/file2 #移動(dòng)/重命名一個(gè)文件
cp file1 dir1 #把文件file1復(fù)制到目錄dir1下
cp -r dir1 dir2 #把目錄dir1及其下所有文件復(fù)制到目錄dir2下(要加-r選項(xiàng))
cp -r dir1/* dir2 #把目錄dir1下的所有文件復(fù)制到目錄dir2下(要加-r選項(xiàng))
scp a.txt root@192.168.0.10:/tmp #跨主機(jī)拷貝文件
ln -s a.txt lnk1 #創(chuàng)建一個(gè)指向文件或目錄的軟鏈接
ln a.txt lnk1 #創(chuàng)建一個(gè)指向文件或目錄的硬鏈接
查看文件內(nèi)容
cat file1 #常用來(lái)查看短文件(常用)
less file1 #常用來(lái)查看長(zhǎng)文件,可前后翻閱(常用)
head -n5 file1 #查看一個(gè)文件的開頭5行
tail -n5 file1 #查看一個(gè)文件的最后5行
tail -f /var/log/nginx/access.log #實(shí)時(shí)查看日志文件(常用)
tail -f -n100 /var/log/nginx/access.log #實(shí)時(shí)查看日志文件最后100行
文件查找
find+查找范圍+查找方式
find / -iname a.txt #在 / 范圍下以文件名的方式查找文件a.txt(-i表示忽略大小寫查找)
find / -iname "*.sh" #在 / 范圍下查找以.sh結(jié)尾的文件(*代表通配符)
find / -user alick #在 / 目錄下查找屬于用戶 alick 的文件和目錄
find /var/log -size +10k -size -10M #在/var/log目錄下查找大于10k小于10M的文件
find / -type f -mtime -10 #查找在10天以內(nèi)被創(chuàng)建或者修改過的文件(-type d表示查找目錄)
find /var/log -type f -mtime +30 -print0 | xargs -0 rm -rf #刪除30天以上未改動(dòng)過的文件(xargs結(jié)合管道可以將前一個(gè)命令的標(biāo)準(zhǔn)輸出作為參數(shù)傳遞給下一個(gè)命令,這里如果不加xargs指令的話管道符后面的rm -rf是不生效的,加-print0和-0是為了防止查找對(duì)有空格的文件名不生效)
硬盤分區(qū)及格式化
fdisk -l #查看所有磁盤及其分區(qū)信息
lsblk #查看所有設(shè)備掛載情況
fdisk /dev/sdb #給/dev/sdb盤創(chuàng)建分區(qū), 回車后還需輸入?yún)?shù) n(添加新區(qū)分)、p(選擇添加主分區(qū))、分區(qū)號(hào), 然后起始扇區(qū)直接回車, 結(jié)束扇區(qū)輸入+2G(給2G的大小), 最后w保存退出.
mkfs.xfs sdb1 #格式化分區(qū)sdb1為XFS格式的文件系統(tǒng)(輸入mkfs后可按Tab補(bǔ)全鍵查看有哪些文件系統(tǒng)類型)
mkswap /dev/sdb2 #格式化分區(qū)sdb2為swap分區(qū)
注意: 創(chuàng)建硬盤分區(qū)及格式化之后還需要掛載才能使用.
查看磁盤空間
df -h #查看磁盤空間使用情況(-h參數(shù)是以容易閱讀的方式顯示)
du -sh file1 #查看file1占用的空間大小(file1可以是文件或目錄)
du -sh dir1/* #查看目錄dir1下的所有文件占用空間大小
臨時(shí)掛載一個(gè)文件系統(tǒng)
mount /dev/sda2 /mnt/sda2 #掛載一個(gè)叫做sda2的分區(qū)文件系統(tǒng), 確定掛載點(diǎn)目錄/mnt/sda2已經(jīng)存在(沒有就先創(chuàng)建) .
umount /dev/sda2 #卸載一個(gè)叫做sda2的分區(qū)文件系統(tǒng).
mount /dev/cdrom /mnt/cdrom #將cdrom(光驅(qū))掛載到/mnt/cdrom掛載點(diǎn)目錄下(沒有就先創(chuàng)建)
swapon /dev/sdb2 #將準(zhǔn)備好的swap分區(qū)掛載到系統(tǒng)中.
mount -a #重新掛載/etc/fstab下的所有未掛載的文件系統(tǒng).
永久掛載一個(gè)文件系統(tǒng)
先vim /etc/fstab → 然后在文件最后一行添加上"設(shè)備文件、掛載點(diǎn)目錄、格式類型、權(quán)限選項(xiàng)、是否備份、是否自檢", 以空格隔開.
/dev/sdb1 /backup XFS defaults 0 0 #將sdb1以XFS格式及默認(rèn)權(quán)限掛載到/backup下, 0代表不備份不自檢(1代表備份自檢)
/dev/sdb2 swap swap defaults 0 0 #將交換分區(qū)sdb2以swap格式及默認(rèn)權(quán)限掛載到系統(tǒng)下
進(jìn)程管理
ps -ef #查看所有的進(jìn)程
ps -ef | grep nginx #查看某個(gè)指定服務(wù)的進(jìn)程信息(常用)
ps -ef | grep nginx | grep -v grep | wc -l #統(tǒng)計(jì)nginx服務(wù)的進(jìn)程數(shù)(grep -v是用來(lái)去掉包含指定內(nèi)容的)
kill -9 PID #強(qiáng)制殺死某一單個(gè)進(jìn)程(因?yàn)槭菤⑺绬蝹€(gè)進(jìn)程,所以后面接的是PID)
pidof httpd #查看httpd服務(wù)的pid
killall -9 httpd #強(qiáng)制殺死httpd的所有進(jìn)程(有時(shí)候一個(gè)系統(tǒng)服務(wù)有多個(gè)進(jìn)程, 一個(gè)一個(gè)去結(jié)束太麻煩)
用戶和群組
useradd userName #創(chuàng)建一個(gè)新用戶
passwd userName #給該用戶設(shè)置登錄密碼(若是已經(jīng)有密碼了則是更改密碼)
userdel -rf userName #刪除一個(gè)用戶(-rf參數(shù)是用于強(qiáng)制刪除該用戶所有文件)
groupadd groupName #創(chuàng)建一個(gè)新用戶組
groupdel groupName #刪除一個(gè)用戶組
groupmod -n newName oldName #重命名一個(gè)用戶組
usermod -g Group1 alan #將用戶alan變更到Group1基礎(chǔ)用戶組(每個(gè)用戶可以屬于一個(gè)基礎(chǔ)用戶組, 多個(gè)擴(kuò)展用戶組)
usermod -G Group2 alan #將用戶alan變更到Group2擴(kuò)展用戶組
文件目錄權(quán)限
注: 文件所有者(u), 所屬組(g), 其他人(o), →所有人(a) , 讀,寫,執(zhí)行權(quán)限分別為rwx(八進(jìn)制數(shù)分別為421)
ll file1 #可以查看到file1的權(quán)限
chmod u=rwx, g=rw, o=r days #給文件所有者賦予讀寫執(zhí)行權(quán)限, 給所屬組賦予讀寫權(quán)限, 給其他人賦予讀權(quán)限
chmod ugo=rwx days #等同于 chmod a=rwx days 等同于 chmod 777 days 給所有人賦予days文件的讀寫執(zhí)行權(quán)限
chmod 755 days #給文件所有者賦予讀寫執(zhí)行權(quán)限, 給所屬組和其他人賦予讀和執(zhí)行權(quán)限 ( 常用 )
chmod +x days #給所有人都加上days文件的執(zhí)行權(quán)限(常用)
更改文件所有權(quán)
chown alick days #將文件"days"的所有者更改為alick
chgrp workgroup days #將文件"days"的所屬組更改為workgroup
chown alick:workgroup days #將文件"days"的所有者更改為alick、所屬組更改為workgroup.
注:chmod和chown加-R選項(xiàng)可以同時(shí)處理其下所有子目錄及文件的權(quán)限.
文件的隱藏權(quán)限
格式: chattr 選項(xiàng) file
chattr -i file1 #無(wú)法對(duì)文件進(jìn)行修改;若file1是目錄,則僅能修改其中的子文件內(nèi)容而不能新建或刪除文件
chattr -a file1 #僅允許補(bǔ)充(追加)內(nèi)容,無(wú)法覆蓋/刪除內(nèi)容(Append Only)
lsattr file1 #查看文件的隱藏權(quán)限
打包和壓縮文件
tar -zcvf pac.tgz dir1 dir2 file1 file2 #創(chuàng)建一個(gè)名為pac.tgz的gzip格式的壓縮包
tar -zxvf pac.tgz #解壓一個(gè)gzip格式的壓縮包到當(dāng)前目錄下
tar -zxvf pac.tgz -C /pacDir #解壓到指定目錄/pacDir下(pacDir目錄沒有就需先創(chuàng)建)
zip pac.zip file1 file2 #創(chuàng)建一個(gè)名為pac.zip的zip格式的壓縮包
unzip pac.zip #解壓一個(gè)zip格式的壓縮包
unzip pac.zip -d /pacDir #解壓縮zip包到指定目錄/pacDir下
gzip file1 #壓縮一個(gè)叫file1的文件
gunzip file1.gz #解壓一個(gè)叫file1.gz的文件
yum軟件包管理器
yum install demo #安裝demo軟件包(可加-y參數(shù)避免執(zhí)行詢問)
yum remove demo #刪除指定軟件包demo
yum list #列出當(dāng)前yum源的所有可安裝軟件的清單(可搭配管道符精準(zhǔn)查看當(dāng)前yum源是否有某一個(gè)軟件的安裝包)
yum repolist #查看當(dāng)前配置了哪些yum源倉(cāng)庫(kù)
yum info demo #顯示指定軟件包demo的信息
yum check-update #列出所有可更新的軟件清單
yum update #更新所有軟件
yum update demo #更新指定軟件demo
yum search <keyword> #查找軟件包
yum clean all #清除所有緩存
yum makecache #生成yum緩存
rpm -ivh packge.rpm #直接安裝rpm軟件包
rpm -Uvh packge.rpm #升級(jí)rpm軟件包
rpm -qa | grep demo #查看demo是否已經(jīng)被安裝(以rpm -ivh方式安裝)
yum list installed | grep demo #查看demo是否已經(jīng)被安裝(以yum方式安裝)
網(wǎng)絡(luò)
ip addr #查看ip地址等網(wǎng)絡(luò)信息(可簡(jiǎn)寫成ip a)
ip addr show eth0 #查看網(wǎng)卡eth0的信息
ip addr add 192.168.10.10/24 dev eth0 #設(shè)置ip地址
ip addr del 192.168.10.10/24 dev eth0 #刪除ip地址
ip route show #查看路由表
ip route add default via 192.168.10.1 #更改默認(rèn)路由
ip link set eth0 up #激活網(wǎng)絡(luò)接口
ip link set eth0 down #停止網(wǎng)絡(luò)接口
注:ifconfig已經(jīng)被ip命令取代了
輸入輸出重定向
輸入:
command < file #將文件的內(nèi)容作為命令的標(biāo)準(zhǔn)輸入
command << -EOF 內(nèi)容 EOF #從標(biāo)準(zhǔn)輸入中讀入,直到遇見分界符才停止
command < fileA > fileB #將文件A作為命令的標(biāo)準(zhǔn)輸入并將標(biāo)準(zhǔn)輸出重定向到文件B
輸出:(注意如果重定向目標(biāo)文件不存在則會(huì)自動(dòng)創(chuàng)建該文件)
command > file #將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))
command 2> file #將錯(cuò)誤輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))
command >> file #將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)
command 2>> file #將錯(cuò)誤輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)
command &> file #將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出共同寫入到文件中(清空原有文件的數(shù)據(jù))
command &>> file #將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出共同寫入到文件中(追加到原有內(nèi)容的后面)
注:輸入輸出重定向的文件描述符分別為→ 標(biāo)準(zhǔn)輸入重定向(0)、標(biāo)準(zhǔn)輸出重定向(1)、錯(cuò)誤輸出重定向(2)
MySQL數(shù)據(jù)庫(kù)操作
☆ 本地登錄數(shù)據(jù)庫(kù):mysql -u'用戶名' -p'密碼'
☆ 遠(yuǎn)程登錄數(shù)據(jù)庫(kù):mysql -h'ip' -P'端口' -u'用戶名' -p'密碼'
☆ 退出數(shù)據(jù)庫(kù)登錄:exit
☆ 數(shù)據(jù)庫(kù)操作:
show databases; # 查看所有數(shù)據(jù)庫(kù), detabase要加復(fù)數(shù)s
create database demo charset=utf8; # 創(chuàng)建數(shù)據(jù)庫(kù)demo
drop database demo; # 刪除數(shù)據(jù)庫(kù)demo
use demo; # 切換數(shù)據(jù)庫(kù), 要操作數(shù)據(jù)庫(kù)得先選擇使用一個(gè)數(shù)據(jù)庫(kù)
select database(); # 查看當(dāng)前使用的數(shù)據(jù)庫(kù)
☆ 表操作:
show tables; # 查看所有的表,查看表也要加s
create table tenant(字段1,字段2,...); # 創(chuàng)建表tenant
實(shí)例:create table tenant(id int auto_increment primary_key, name varchar(20));
drop table tenant; # 刪除表tenant
desc tenant; # 查看表tenant的表結(jié)構(gòu)
show index from tenant; #查看表tenant的索引
show create table tenant; # 查看創(chuàng)建表tenant所使用的語(yǔ)句
rename table tenant to newtenant; # 將表tenant的表名修改為newtenant
alter table 表名 drop 字段名; # 刪除指定字段
drop index 索引名 on 表名; # 刪除指定索引
☆ 數(shù)據(jù)操作:
增:
insert into 表名(字段1,字段2,...) values(值1,值2,...) ; # 插入一條數(shù)據(jù)
insert into 表名(字段1,字段2,...) values(值1,值2,...), (值1,值2,...) ; # 插入多條數(shù)據(jù)
insert into 表1(字段1,字段2) select 字段a,字段b from 表2; # 向表1中插入從表2查出來(lái)的數(shù)據(jù)
實(shí)例:insert into student(name,age,height) values('Tom',18,175);
實(shí)例:insert into student1(name,age) select sname,sage from student2;
刪:
delete from 表名 where 條件; # 刪除表內(nèi)數(shù)據(jù) (警告:后面不加where條件會(huì)將表內(nèi)數(shù)據(jù)全部刪除)
實(shí)例:delete from student where id=4;
delete from 表名; # 清空表
truncate 表名; # 清空表
改:
update 表名 set 字段1=值1, 字段2=值2,... where 條件 ; # 修改表內(nèi)數(shù)據(jù)(警告:如果后面不加條件會(huì)將所有數(shù)據(jù)的該字段的值都修改了)
實(shí)例:update student set name='tom',age=18 where id=7;
查:
select * from 表名 where 條件; # 查看表內(nèi)數(shù)據(jù)(這里的*代表所有的字段, 如果只想查詢部分字段可用逗號(hào)分隔, 例select name,age from 表名;)
select count(*) from 表名; # 查詢某個(gè)表里面有多少條數(shù)據(jù)
select * from 表名 group by 字段1 having count(*)>1; # 查詢某個(gè)表里面"字段1"相同的數(shù)據(jù)大于1條的數(shù)據(jù)
select a.name from tenant as a; # 給tenant表設(shè)置別名為a(as可以省略掉,表名和別名用空格隔開)
select * from table1 t1 where t1.id in (select t2.id from table2 t2); # select的嵌套查詢(嵌套select一般放在in、from、exists等的后面使用)
☆ 條件查詢:
a.語(yǔ)法:select 字段 from 表名 where 條件;
b.比較運(yùn)算符(=, >, <, >=, <=, !=):
實(shí)例: select * from student where id>10;
c.邏輯運(yùn)算符(and, or, not):
實(shí)例:select * from student where id>=3 and gender=0; # 查詢id>=3且性別為女的學(xué)生
d.模糊查詢:
like: %表示多個(gè)任意字符、 _表示單個(gè)任意字符,必須要有引號(hào)
實(shí)例: select * from student where name like "alic%"; # 得到結(jié)果如alick、alickchen
實(shí)例: select * from student where name like "%alick%"; # 查詢所有包含alick的數(shù)據(jù)
實(shí)例: select * from student where name like "alic_"; # 得到結(jié)果如alick
e.范圍查詢:
實(shí)例: select * from student where id in (2,7,12); # 查詢id為2,7,12的學(xué)生
實(shí)例: select * from student where id between 5 and 10; # 查詢id在5-10之間的學(xué)生
f.空查詢:
實(shí)例: select * from student where address is null; # 查詢住址為空的學(xué)生(非空是is not null)
g.優(yōu)先級(jí):
小括號(hào) > not > 比較運(yùn)算符 > 邏輯運(yùn)算符 ; and > or =>可用()來(lái)改變優(yōu)先級(jí)
h.排序:
select * from 表名 order by 字段1 asc/desc, 字段2 asc/desc, ... ; # asc升序,desc降序
i.限制查詢:
select * from student limit 3; # 查詢前3條數(shù)據(jù)
☆ 數(shù)據(jù)庫(kù)的備份及恢復(fù)
a.物理備份(cp):
備份:cp -r /var/lib/mysql/* /bakDir
恢復(fù):cp -r /bakDir/* /var/lib/mysql/
注:mysql數(shù)據(jù)庫(kù)文件的存放路徑是/var/lib/mysql/*(該目錄下的文件一般有employees ibdata1 ib_logfile0 ib_logfile1 mysql mysql.sock)
b.邏輯備份(mysqldump):
單庫(kù)備份:mysqldump -u'root' -p'123' --databases testDB >/backup/bak.sql #備份單個(gè)指定的數(shù)據(jù)庫(kù)
多庫(kù)備份:mysqldump -u'root' -p'123' --databases testDB1 testDB2 >/backup/bak12.sql #備份多個(gè)指定的數(shù)據(jù)庫(kù)
整庫(kù)備份:mysqldump -u'root' -p'123' --all-databases >/backup/allbak.sql #備份所有的數(shù)據(jù)庫(kù)
恢復(fù)還原:mysql -u'root' -p'123' testDB </backup/bak.sql #恢復(fù)還原數(shù)據(jù)庫(kù)
☆ 表的備份及還原
備份tenant表:create table bak_tenant like tenant; insert into bak_tenant select * from tenant;
還原tenant表:drop table if exists tenant; rename table bak_tenant to tenant;
☆ Navicat工具連接不上mysql數(shù)據(jù)庫(kù)的解決方法
MySQL5解決方法:
1、需要登錄到mysql所在機(jī)器上進(jìn)行授權(quán)才能訪問: ./mysql -u'用戶名' -p'密碼'
2、登錄后,執(zhí)行以下語(yǔ)句進(jìn)行授權(quán): grant all privileges on *.* to '用戶名'@'%' identified by '密碼';
MySQL8解決方法:
1、需要登錄到mysql所在機(jī)器上進(jìn)行授權(quán)才能訪問: ./mysql -u'用戶名' -p'密碼'
2、登錄后,執(zhí)行以下語(yǔ)句進(jìn)行授權(quán)
a、create user '用戶名'@'%' identified by '密碼';
b、grant all privileges on *.* to '用戶名'@'%';
c、flush privileges;
☆ 將select查詢結(jié)果輸出到文件:
a、連接mysql,mysql -h'ip' -P'端口' -u'用戶名' -p'密碼'
b、切換到目標(biāo)數(shù)據(jù)庫(kù),use tenant;
b、mysql> select * from user into outfile '/tmp/user.txt';
正則表達(dá)式
.:匹配任意單個(gè)字符
[]:匹配中括號(hào)內(nèi)的任意一個(gè)字符
-:在[ ]中括號(hào)內(nèi)表示字符的范圍
^:位于[ ]中括號(hào)內(nèi)的開頭,匹配除括號(hào)內(nèi)的字符之外的任意一個(gè)字符
?:匹配其前面的字符0次或1次
+:匹配其前面的字符至少1次
*: 匹配其前面的字符任意多次
{N}:匹配其前面的字符N次
{N,}:匹配其前面的字符至少N次
{,M}:匹配其前面的字符最多M次
{N,M}:匹配其前面的字符N到M次
^:匹配行首的位置
$:匹配行尾的位置
\<:匹配單詞開頭的位置(比如\<ro匹配root或robot)
\>:匹配單詞結(jié)尾的位置(比如ot\>匹配root或robot)
\<word\>:精準(zhǔn)匹配單詞word
隨筆記
☆ [root@localhost ~]#:表示用戶是root、主機(jī)是localhost、當(dāng)前所在目錄是~,#表示當(dāng)前是在root用戶下,$表示當(dāng)前是在普通用戶下.
☆ Linux命令的短選項(xiàng)和長(zhǎng)選項(xiàng): 短選項(xiàng)是由單 - 引出, 多個(gè)短選項(xiàng)可以合并到一起(例如tar -zcvf), 長(zhǎng)選項(xiàng)一般是由雙 -- 引出(例如--help).
☆ 在shell腳本中,臨時(shí)變量名最好用小寫字母(避免與大寫的環(huán)境變量名相同時(shí)沖突),函數(shù)名最好用小寫字母加下劃線組合(相比于駝峰命名法更利于閱讀).
☆ 代碼程序是從前往后順序執(zhí)行的,前面的執(zhí)行完了后面的才會(huì)執(zhí)行.
☆ history 查看歷史使用過的命令(!行數(shù), 可以直接使用該行數(shù)對(duì)應(yīng)的歷史命令)
☆ 切換用戶:注意su - alick和su alick是不一樣的,如果要想連環(huán)境也一起切換過去就得用su - alick
(普通用戶免密切換到root用戶:sudo -i)
☆ read -p "please input your grade: " GRADE 讀取用戶輸入信息, -p參數(shù)用于向用戶顯示提示信息, GRADE為定義的用于接收用戶輸入信息的變量(也可以用echo的方式打印提示信息,然后read 變量名,但是如果echo不加-n選項(xiàng)的話會(huì)換行)
☆ / 代表根目錄(根目錄也叫共享目錄, 所有用戶均可見), ~代表某個(gè)用戶自己的家目錄(用戶家目錄下的文件才屬于私有文件), 注意home目錄只是/根目錄下的
一個(gè)記錄所有用戶列表信息的普通目錄而已.
☆ 執(zhí)行文件:
1. 解釋器執(zhí)行: 例如bash script.sh, python script.py
2. 路徑執(zhí)行(包括絕對(duì)路徑執(zhí)行和相對(duì)路徑執(zhí)行): /root/desktop/scripts/sayhello.sh(絕對(duì)路徑執(zhí)行) ./sayhello.sh(相對(duì)路徑執(zhí)行)
☆ 給普通用戶Alick添加sudo權(quán)限: 用root用戶登錄, vim /etc/sudoers修改sudoers配置文件, 在root ALL=(ALL) ALL下面一行添加Alick ALL=(ALL) ALL即可
☆ command &>/dev/null 將輸出重定向到黑洞文件/dev/null中, 可以不讓結(jié)果(包括標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出結(jié)果)在屏幕上輸出顯示出來(lái)
☆ echo "內(nèi)容A" | command 管道符特殊用法, 將管道符左邊的內(nèi)容A作為右邊命令enter回車之后要輸入的內(nèi)容, 內(nèi)容A可以是普通字符串也可以是命令
☆ 硬件設(shè)備文件: sda代表磁盤a, sdb3代表磁盤b的分區(qū)3,vda代表虛擬磁盤a
☆ >test.txt 清空文件test.txt(將空白重定向到test.txt文件, 可將其完全清空)
☆ file test.txt 查看test.txt的文件類型.
☆ cat test.txt | wc -l 查看test文件有多少行.
☆ dd if=源文件 of=目標(biāo)文件 dd命令為拷貝文件, 將 if 后的源文件內(nèi)容拷貝到 of 后的目標(biāo)文件中.
dd if=/dev/zero of=/testDir/test count=1 bs=100M 創(chuàng)建一個(gè)100M的test文件(/dev/zero可以無(wú)窮無(wú)盡的提供空數(shù)據(jù)), dd命令可用來(lái)測(cè)速(測(cè)試硬盤性能).
dd if=/dev/sda1 of=/dev/sdb2 將sda1中的數(shù)據(jù)拷貝到sdb2
☆ mdadm [模式] <RAID設(shè)備名稱> [選項(xiàng)] [成員設(shè)備名稱] mdadm命令是用來(lái)在linux下組RAID的(若沒有需要先安裝).
☆ 邏輯卷管理器(LVM)相關(guān)命令:
物理卷管理: pvscan pvcreate pvdisplay pvremove
卷組管理: vgscan vgcreate vgdisplay vgremove vgextend vgreduce
邏輯卷管理: lvscan lvcreate lvdisplay lvremove lvextend lvreduce
☆ shell腳本的空格問題: 寫賦值語(yǔ)句時(shí)不能有空格(例如SUM=0, SUM=SUM+$i), 但是寫條件語(yǔ)句時(shí)需要有空格(例如[ $I -eq 100 ]).
☆ 綁定兩塊網(wǎng)卡的作用: 第一,可以提高網(wǎng)絡(luò)傳輸速度(提升帶寬); 第二,可以增加冗余(防止一塊網(wǎng)卡出現(xiàn)故障影響網(wǎng)絡(luò)服務(wù))
☆ scp /tmp/test.txt root@192.168.0.10:/tmp 將本地主機(jī)上的test.txt文件拷貝到遠(yuǎn)程主機(jī)192.168.0.10的root用戶的/tmp目錄下.
scp -r root@192.168.0.10:/tmp/demoDir /tmp 將遠(yuǎn)程主機(jī)192.168.0.10上的demoDir目錄拷貝到本地主機(jī)(拷貝目錄要加 -r 選項(xiàng)).
注:cp命令可以覆蓋掉原來(lái)的重名文件或目錄,可以用來(lái)做文件恢復(fù)。
☆ vmware workstation和vmware ESXI的區(qū)別:
1. vmware workstation是軟件,需要安裝在操作系統(tǒng)上,再在軟件上創(chuàng)建出虛擬機(jī),然后在虛擬機(jī)上安裝各種OS,屬于個(gè)人實(shí)驗(yàn)測(cè)試用.
2. vmware ESXI本身就是OS,可以直接裝在物理裸機(jī)上,再在上面創(chuàng)建出虛擬機(jī),然后在虛擬機(jī)上安裝各種OS,屬于企業(yè)應(yīng)用在生產(chǎn)環(huán)境上.
☆ wget和curl下載文件:
1. wget http://www.linuxde.net/test.iso # 不用加參數(shù),直接下載文件
2. curl -O http://www.linuxde.net/test.iso # 要加-O參數(shù),O大寫,不加參數(shù)只是打印內(nèi)容不會(huì)下載
☆ 條件判斷
equal:eq(等于) not equal:ne(不等于)
great than:gt(大于) less than:lt(小于)
great equal:ge(大于等于) less equal:le(小于等于)
☆ seq:用來(lái)創(chuàng)建一個(gè)數(shù)字序列
seq 1 10:創(chuàng)建輸出序列1~10
seq 1 2 10:以2為步進(jìn)創(chuàng)建輸出序列1,3,5,7,9
☆ 正則表達(dá)式:包括字符類、數(shù)量限定符、位置限定符
其中,^和$是限定整行的開頭和結(jié)尾的,
而,\<和\>是限定一行內(nèi)容里的單詞的開頭和結(jié)尾的,比如\<un和un\>和\<un\>
☆ 正則表達(dá)式放的位置:不同的命令用法不同,所以相應(yīng)的正則表達(dá)式放的位置也不一樣,比如awk和sed命令中正則表達(dá)式是放在雙斜杠之間的,在egrep命令中正則表達(dá)式是直接寫的,而在vim編輯器里正則表達(dá)式又是放在單斜杠后面的,但不管正則表達(dá)式放在哪里,用法都是一樣的,字符類、數(shù)量限定符、位置限定符的綜合使用.
☆ 命令后臺(tái)運(yùn)行:
nohup command & #讓command命令在后臺(tái)運(yùn)行,關(guān)閉終端也不會(huì)終止該命令運(yùn)行
Ctrl C是結(jié)束正在運(yùn)行的命令,Ctrl Z是暫停正在運(yùn)行的命令并掛起到后臺(tái).
jobs -l #查看所有在后臺(tái)運(yùn)行的命令及其進(jìn)程id
fg #將上一個(gè)暫停的命令進(jìn)程調(diào)至前臺(tái)繼續(xù)運(yùn)行,fg %n調(diào)指定代號(hào)為n的后臺(tái)進(jìn)程到前臺(tái)執(zhí)行.
kill -9 PID #終止進(jìn)程
☆ 命令排序:&&代表前面為真或者成功才會(huì)執(zhí)行,||代表前面為假或者失敗才會(huì)執(zhí)行.
ping -c1 -w1 www.baidu.com && echo "is up" || echo "is down"
cmd1 && cmd2 && cmd3... 多個(gè)&&邏輯組合使用,前面成功則往后繼續(xù).
cmd1 || cmd2 || cmd3... 多個(gè)||邏輯組合使用,前面失敗則往后繼續(xù).
☆ 子shell:將命令放在小括號(hào)里執(zhí)行表示是在子shell里面執(zhí)行,比如(cd /etc; ls)這條命令執(zhí)行完后并不會(huì)把當(dāng)前目錄切換到/etc下.
☆ 腳本調(diào)試
bash -n test.sh #檢測(cè)腳本是否有語(yǔ)法錯(cuò)誤
bash -vx test.sh #可以顯示出腳本的調(diào)試過程
☆ 強(qiáng)引用和弱引用:?jiǎn)我?hào)是強(qiáng)引用,雙引號(hào)是弱引用;比如變量引用以及有特殊含義的字符在單引號(hào)下都會(huì)失去其特殊含義。
☆ 位置變量(注意: $n在函數(shù)里面時(shí)是指的函數(shù)的位置變量,在函數(shù)外面時(shí)是指的腳本的位置變量)
$0:代表腳本的名稱
$1:代表傳入腳本的第一個(gè)參數(shù)
$2:代表傳入腳本的第二個(gè)參數(shù)
$*:代表傳入腳本的所有參數(shù)
$#:代表傳入腳本的所有參數(shù)的個(gè)數(shù)
$?:代表上一條命令執(zhí)行后的返回值,執(zhí)行成功或?yàn)檎妫闹稻蜑?,否則它的值就是非0.
☆ 數(shù)字運(yùn)算
方法一: 一般用let來(lái)做數(shù)字運(yùn)算,比如let num=1+2,比如let i++
方法二: 用$加中括號(hào),比如 $[1+2]
☆ shell數(shù)組
數(shù)組定義格式: user_list=(Alan Bob Jack Amy Alick )
獲取數(shù)組中第一個(gè)元素的值:${user_list[0]}
獲取數(shù)組中所有元素的值:${user_list[*]}
獲取數(shù)組的長(zhǎng)度(元素個(gè)數(shù)):${#user_list[*]}
☆ 多行注釋: :<<!被注釋內(nèi)容 !
☆ exit與brake的區(qū)別:brake只是跳出當(dāng)前循環(huán)體,而exit是直接退出整個(gè)程序.
☆ 查看端口相關(guān)信息(ss已經(jīng)取代了netstat)
ss -anp #列出所有類型的端口信息(a代表展示所有類型的端口信息、n代表以ip形式展示、p代表展示pid)
ss -anp | grep 端口號(hào) # 通過端口號(hào)過濾查詢
ss -anp | grep 服務(wù)名 # 通過服務(wù)名稱過濾查詢
ss -anp | grep PID # 通過進(jìn)程ID過濾查詢
lsof -i:端口號(hào) # 固定格式,通過端口號(hào)查詢
☆ for和while循環(huán)誰(shuí)更適合逐行處理文件:for循環(huán)處理文件的時(shí)候是按照空格來(lái)獲取元素的,而while循環(huán)可以逐行來(lái)獲取文件內(nèi)容.
while循環(huán)逐行獲取文件內(nèi)容的格式為,while read LINE;do 函數(shù)體 ;done <ip.txt ,把ip.txt文件的每一行內(nèi)容讀取并存放在變量LINE里面(注意read不僅可以讀取用戶從鍵盤輸入的內(nèi)容,還可以用來(lái)讀取文件的每一行,然后把讀取到的內(nèi)容存放在變量里面).
☆ shell腳本遠(yuǎn)程批量修改配置
遠(yuǎn)程登錄到某一個(gè)主機(jī): ssh 目標(biāo)主機(jī)ip
創(chuàng)建秘鑰(公鑰): ssh-keygen
主機(jī)秘鑰(公鑰)推送: ssh-copy-id 目標(biāo)主機(jī)ip
解決用戶命令交互的問題:可以請(qǐng)expect這個(gè)兄弟來(lái)shell家里幫一下忙
☆ return: shell中的return也是用來(lái)返回函數(shù)的返回值的,可用echo $?來(lái)查看函數(shù)的返回值,但是在shell中return只能返回255以下的值.
☆ 環(huán)境變量配置文件
/etc/profile:系統(tǒng)級(jí)環(huán)境變量配置文件,對(duì)所有用戶有效.
~/.bashrc:用戶級(jí)環(huán)境變量配置文件,只對(duì)當(dāng)前用戶自己有效.
☆ 計(jì)算腳本運(yùn)行時(shí)間(把時(shí)間轉(zhuǎn)換成秒再計(jì)算)
startTime=$(date +%s)
程序主體
endTime=$(date +%s)
echo "use_time: $[$endTime-$startTine]"
☆ vim編輯器在"一般模式"下:
直接輸入 /test 可以正向匹配搜索到包含 test 的行(?test可以反向匹配搜索)
/^test可以匹配搜索到以 test 開頭的行
/test$可以匹配搜索到以 test 結(jié)尾的行
注:n可以向后查找下一個(gè),N可以向前查找下一個(gè).
: set number 顯示行號(hào)
: 100 快速定位到第100行
G:跳轉(zhuǎn)到文件末尾
gg:跳轉(zhuǎn)到文件開頭
dd:刪除光標(biāo)所在的行(可以按住d鍵不放來(lái)連續(xù)刪除多行)
☆ 設(shè)置登錄超時(shí)斷開時(shí)間(單位: 秒)
臨時(shí)生效:執(zhí)行命令 export TMOUT=600 (TMOUT=0命令可以防止超時(shí)退出)
永久生效:vim /etc/profile,如果之前沒設(shè)置過這個(gè)環(huán)境變量,那么就在最后加上export TMOUT=600
☆ less的管道用法:在查看命令幫助文檔或者查看進(jìn)程信息等長(zhǎng)內(nèi)容的時(shí)候,可以用管道配合less來(lái)查看,還可以前后倒退.
例如: ps -ef | less ls --help | less
☆ 查看目錄樹結(jié)構(gòu)
tree #查看當(dāng)前目錄的樹形結(jié)構(gòu)
tree testDir #查看testDir目錄的樹形結(jié)構(gòu)
☆ 計(jì)劃任務(wù)crond
系統(tǒng)級(jí)任務(wù)調(diào)度: 用/etc/crontab配置文件來(lái)設(shè)置.
用戶級(jí)任務(wù)調(diào)度: 用/var/spool/cron/<username>配置文件來(lái)設(shè)置(也可用crontab -e命令來(lái)編輯配置文件).
配置文件釋義: * * * * * command,前面5個(gè)字段分別代表"分、時(shí)、日、月、周",第6個(gè)字段代表要計(jì)劃執(zhí)行的命令(系統(tǒng)級(jí)任務(wù)調(diào)度還需要在執(zhí)行命令前面寫上執(zhí)行用戶),也可以是腳本文件,每一行配置代表一個(gè)計(jì)劃任務(wù)。
計(jì)劃任務(wù)執(zhí)行記錄日志查看: tail -f /var/log/cron
crond服務(wù)命令: systemctl status/start/stop/restart crond
☆ mkpasswd生成隨機(jī)密碼:mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
☆ 測(cè)試端口通不通: telnet ip 端口 (打印connected to ip代表通,打印connection refused代表不通,若無(wú)法退出按ctrl+] 然后quit退出)
☆ 抓包工具
tcpdump: linux系統(tǒng)自帶的命令行式抓包工具.
wireshark: 支持windows & linux平臺(tái),不過一般都是用在windows平臺(tái)上(圖形界面式抓包工具),因?yàn)閘inux系統(tǒng)下就直接用tcpdump就好了.
☆ $()與反引號(hào):這兩種方式都可以用來(lái)獲取一條命令執(zhí)行后的結(jié)果,反引號(hào)``是老的用法,$()是新的用法,為了避免產(chǎn)生問題和代碼美觀,推薦使用$().
☆ war包和jar包的區(qū)別:
war包:web應(yīng)用程序所有文件的集合.
jar包:java類庫(kù)文件.
☆ xftp傳輸文件:用xftp傳輸文件到linux系統(tǒng)一般建議先傳輸?shù)?tmp目錄下再?gòu)?fù)制到其它目錄,因?yàn)橹苯觽鞯狡渌夸浛赡軙?huì)沒寫入權(quán)限。
☆ diff命令:比較兩個(gè)文件的差異性
用法:diff file1 file2
☆ 清除系統(tǒng)緩存
echo 1 > /proc/sys/vm/drop_caches # 僅清除頁(yè)面緩存
echo 2 > /proc/sys/vm/drop_caches # 清除目錄項(xiàng)和inode
echo 3 > /proc/sys/vm/drop_caches # 清除頁(yè)面緩存、以及目錄項(xiàng)和inode
☆ 寫shell腳本時(shí),可以不空格的地方就不要空格,以免語(yǔ)句太長(zhǎng)不美觀,比如重定向符號(hào)前后、管道符號(hào)前后、分號(hào)后面...
☆ nslookup my.test.com #查詢域名綁定的ip地址信息
☆ dev、sit、uat環(huán)境的區(qū)別:dev(develop)是開發(fā)環(huán)境,sit(system Integration test)是系統(tǒng)集成測(cè)試環(huán)境,uat(user acceptance test)是用戶驗(yàn)收測(cè)試環(huán)境。
☆ md5sum file01:查看file01文件的md5值,通常用來(lái)比較兩個(gè)文件是否相等。
☆ 上傳下載文件命令
安裝文件傳輸軟件: yum install lrzsz
從服務(wù)器上下載文件到本地: sz test.txt
從本地上傳文件到服務(wù)器上: rz
☆ 查看lvs負(fù)載均衡成員信息: ipvsadm -l
☆ Nginx常用命令
find / -type f -iname nginx #首先找到名為nginx的可執(zhí)行文件所在的位置
./nginx -v #查看nginx的版本
./nginx #加載默認(rèn)配置文件的方式啟動(dòng)nginx服務(wù)
./nginx -c /opt/nginx/nginx.conf #加載指定配置文件的方式啟動(dòng)nginx服務(wù)
./nginx -s stop #強(qiáng)制立即停止nginx服務(wù)
./nginx -s quit #優(yōu)雅的停止nginx服務(wù)(即處理完所有請(qǐng)求后再停止nginx服務(wù))
./nginx -s reload #重新加載配置文件,然后以優(yōu)雅的方式重啟nginx服務(wù)
./nginx -t -c /opt/nginx/nginx.conf #檢查指定nginx配置文件是否有語(yǔ)法錯(cuò)誤
ps -ef | grep nginx #可查看當(dāng)前nginx服務(wù)是否在正常運(yùn)行
☆ shell睡眠函數(shù)sleep:sleep 1s #睡眠1秒鐘、sleep 1m #睡眠1分鐘、sleep 1h #睡眠1小時(shí)、sleep 1d #睡眠1天
☆ shell腳本換行:shell腳本中一行內(nèi)容太長(zhǎng)既不美觀也不易于維護(hù),可以在末尾加上反斜杠 \ 來(lái)?yè)Q行,注意反斜杠 \ 后面不能有空格,必須直接回車到下一行.
☆ source命令:通常用于重新執(zhí)行剛修改的初始化文件,使之立即生效而不必注銷重新登錄(例如source /etc/profile,source也可用 . 代替)
☆ dos2unix命令:dos2unix test.txt # dos2unix命令是一個(gè)Linux下的文本文件轉(zhuǎn)換工具,它的作用是將DOS/Windows格式的文本文件轉(zhuǎn)換為Unix/Linux格式的文本文件
☆ jps命令:jps全稱為Java Virtual Machine Process Status Tool,是Java提供的一個(gè)查看當(dāng)前用戶有權(quán)訪問的主機(jī)的Java進(jìn)程情況的工具.

浙公網(wǎng)安備 33010602011771號(hào)