Linux基礎使用
內存
- 查看swap分區信息 >
swapon -s
- 添加swap分區 >
mkswap /dev/sdb2
> 激活swapon -a /dev/sdb2
即可 - 移除swap分區 >
swapoff /dev/sdb2
- 查看系統版本 >
cat /etc/redhat-release
>more /etc/*release
可以看到更多信息 - buffer A buffer is something that has yet to be "written" to disk
- cache A cache is something that has been "read" from the disk and stored for late use
- 清理cache >
echo 3 > /proc/sys/vm/drop_caches
echo $[88316+8764]
進行簡單的計算(+-*/)- total-used=free+buff/cache 內存就是用來分buffer和cache的
dd if=/dev/zero of=/root/test bs=50M count=1
測試磁盤速度,zero為空文件
進程管理
ps aux
查看所有進程 >grep
過濾的意思- 查看特定的進程 >
ps aux | grep firefox
- 殺死進程 >
kill -9 3489
( 9表示強制殺) 或者pkill -9 firefox
firefox &
即命令后接&
在后台啟動,在當前終端使用jobs
可以查看工作號 >kill -9 %1
使用工作號殺- centos7最小化安裝沒有ptree (樹型顯示當前運行的進程),需要安裝
yum install psmisc
- pgrep sshd 直接顯示包含sshd的進程的PID號
軟件包管理
-
rpm -ivh rpm文件名
i 安裝, v 顯示安裝信息, h顯示進度條 后接--nodeps
忽略以來,--force
覆蓋安裝 -
rpm -qi 軟件名
查看軟件的詳細信息 ,q 表示查詢, i information -
rpm -ql 軟件名
查看軟件位置, l 表示位置 -
rpm -qf 文件名
查看該文件是由哪個軟件包產生的 -
查看命令對應的文件的真實位置
which ls
-
rpm -qa
顯示全部安裝的rpm包,跟grep結合驗證是否安裝了某個包,rpm -qa | grep vsftp
或者rpm -q vsftpd
必須知道軟件包全名 -
ls ----> /etc/usr/ls --color=auto 這是流程 ,
alias s='ls'
為ls命令起別名, 永久的話修改vim /etc/bashrc
或者vim /etc/profile
-
rpm -e 軟件包名
卸載軟件 -
rpm -e `rpm -qa \grep vsftp
這里反引號的作用是把后面的結果看作變量作為前面的輸入 -
rpm安裝對依賴性問題不好解決,需要先手動安裝依賴包,yum自動解決依賴性
-
手動配置yum源,事先將完整的光盤掛載到
/opt
,移走原有的repo,然后vi /etc/yum.repos.d/loal.repo
[local] name=local.repo baseurl=file:///opt #可以本地也可以網上 enable=1 gpgcheck=0
yum clean all
清除緩存后就可以用自己配置的yum源安裝yum -y install xxxxx
-
yum erase xxx
刪除已經安裝的軟件 或yum remove xxx
-
yum install epel-*
安裝擴展源 -
yum makecache
創建緩存提高下次裝軟件的速度 -
要想保留yum下載的rpm包,需要更改設置
vim /etc/yum.conf
cachedir=/root/rpm_bak #路徑自己設置 keepcache=1 #0改為1
-
部署自己的yum倉庫
- 新建倉庫文件夾
mkdir /repo_httpd
- 將所有依賴包和該rpm包放在這個文件夾中,方法如上一條所示
- 創建依賴關系
createrepo /repo_httpd
, 之后在該文件夾中生成repodata文件夾 - 手動配置yum源,如之前所示, 其中
baseurl=file:///repo_httpd
- 同理修改
baseurl=http://xxxxx
可以自定義網絡yum源
- 新建倉庫文件夾
-
yum grouplist
列出有哪些軟件包組,yum groupinstall "開發工具"
安裝開發工具 -
wget --no-check-certificate https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
下載,tar xvf Python-3.6.1.tgz
解壓,進入目錄,configure為安裝配置文件,為了生成makefile文件,./configure --prefix=/usr/local/python3.6
, 然后make && make install
編譯並安裝,報錯的話缺啥裝啥yum install zlib*
-
PATH=/usr/local/python3.6/bin:$PATH
設置臨時的環境變量, 永久的話vim /etc/profile
在末尾加上PATH=/usr/local/python3.6/bin:$PATH export PATH
-
yum update
全部更新包括配置和內核,yum upgrade
只更新軟件包 -
安裝
yum install sysstat*
里面有查看運行信息的軟件vmstat
iostat
-
安裝
yum install net-tools
,執行netstat -tunalp
查看端口詳細信息 可以netstat -tunalp | grep 22
查看目的端口 。另外sar
啥也能看
n g i n x
-
yum install nginx
安裝 -
寫配置
vim /etc/nginx/nginx.conf
摘取部分如下worker_processes auto; #自動檢測CPU數目,幾個CPU開幾個進程 error_log /var/log/nginx/error.log; #錯誤日志 include /usr/share/nginx/modules/*.conf; #包含的模塊 events { #一個進程開多少線程 worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #日志格式 access_log /var/log/nginx/access.log main; #訪問日志,以main格式寫入 sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; #包含的配配置文件 server { #核心配置 listen 80 default_server; #監聽端口號 listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; #Web根目錄 # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { #匹配/a/b/c/d.txt,若以/開頭則匹配這個配置,沒有內容則按全局配置 } }
-
URL 統一資源定位符 11.12.13.14:80 找到唯一的一個軟件
-
URI 統一資源標識符 /a/b/c/d.txt 找到唯一的一個文件 /usr/share/nginx/html/a/b/c/d.txt
-
systemctl start nginx
啟動nginx status查看狀態 -
systemctl stop firewalld
關閉防火牆,systemctl disable firewalld
開機不啟動,enable開機啟動,iptables -F
清除防火牆配置 -
tail -f /var/log/nginx/access.log
動態查看日志文件
反向代理
-
將虛擬機拷貝3個提供Web功能,原虛擬機提供反向代理
-
按照官網的手冊 Using nginx as HTTP load balancer 配置提供反向代理的機器
-
為實現數據的一致,給幾台Web服務器提供共享存儲 如 NFS,文件存儲
對象存儲--->像網盤一樣,下載下來修改再上傳覆蓋,通過URI定位。 塊存儲 ---> 類似一整塊磁盤
-
可以給NFS服務器專門掛載一塊硬盤
-
臨時配置IP地址
ifconfig 網卡名 IP地址
-
##服務端配置 [root@localhost ~]# mkdir /share #新建文件夾 [root@localhost ~]# mount /dev/sdb1 /share/^C #掛載一塊硬盤 [root@localhost ~]# touch /share/share.txt [root@localhost ~]# echo 'hello share' > /share/share.txt [root@localhost ~]# vim /etc/exports #編輯配置文件 [root@localhost ~]# cat /etc/exports /share 192.168.58.0/24(rw,sync,fsid=0) #配置文件內容 [root@localhost ~]# chmod -R o+w /share #為文件夾添加權限 [root@localhost ~]# systemctl start rpcbind.service #先開啟RPC服務 [root@localhost ~]# systemctl start nfs-server.service #再開啟NFS服務 [root@localhost ~]# systemctl enable nfs-server.service #設置開機啟動 Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. [root@localhost ~]# systemctl enable rpcbind.service
-
##客戶端配置 [root@localhost ~]# systemctl enable rpcbind.service && systemctl enable nfs-server.service Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. #開機啟動 [root@localhost ~]# showmount -e 192.168.58.129 #查看共享服務 Export list for 192.168.58.129: /share 192.168.58.0/24 [root@localhost ~]# mount -t nfs 192.168.58.129:/share /usr/share/nginx/html/ #掛載 [root@localhost ~]# ls /usr/share/nginx/html/ #查看掛載后文件內容 share.txt [root@localhost ~]# df |grep 129 #查看磁盤信息 192.168.58.129:/share 18351104 2376448 15974656 13% /usr/share/nginx/html
-
網絡配置
ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>#功能# mtu 1500#最大傳輸單元,字節單位#
inet 192.168.58.129 netmask 255.255.255.0 broadcast 192.168.58.255
inet6 fe80::c00d:cb8b:4aed:6cc7 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:1c:9a:5a#MAC地址# txqueuelen 1000 (Ethernet)
RX packets 3422 bytes 444096 (433.6 KiB) #收了多少包#
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2374 bytes 418819 (409.0 KiB) #傳了多少包#
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 20 bytes 1524 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20 bytes 1524 (1.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
ifconfig ens33 192.168.58.200/24
手動配置IP地址, 24表示子網掩碼255.255.255.0 -
vim /etc/resolv.conf
修改DNS信息nameserver 192.168.58.2
-
route add default gw 192.168.58.254 netmask 255.255.255.0
添加網關,route -n
查看路由信息, del為刪除[root@localhost share]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.58.2 0.0.0.0 UG 100 0 0 ens33 #不一個子網 192.168.58.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 #同一個自網內
-
要想永久修改
cd /etc/sysconfig/network-scripts/
該目錄下有很多配置信息vim ifcfg-ens33
TYPE=Ethernet BOOTPROTO=static IPADDR=192.168.58.200 NETMASK=255.255.255.0 GATEWAY=192.168.58.254 DNS1=192.168.58.254 DNS2=114.114.114.114 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=2ceec922-bd48-4fcb-8c96-56a288ddb680 DEVICE=ens33 ONBOOT=yes #開機激活網卡
重啟網絡服務
systemctl restart network
即可 -
vim /etc/hosts
修改hosts -
[root@localhost network-scripts]# hostnamectl set-hostname centostest #設置hostname [root@localhost network-scripts]# hostname #查看hostname centostest
SSH
-
[root@localhost ~]# ssh 192.168.58.129 #登錄默認root 實際ssh root@192.168.58.129 The authenticity of host '192.168.58.129 (192.168.58.129)' can't be established. ECDSA key fingerprint is 82:68:11:05:e9:98:f9:bb:df:a1:02:e2:72:59:cb:0e. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.58.129' (ECDSA) to the list of known hosts. root@192.168.58.129's password: #輸入密碼 Last login: Mon Apr 3 22:48:51 2017 from 192.168.58.1 [root@centostest ~]# #SSH登錄成功,前后主機名不一樣
-
scp遠程復制文件
[root@centostest ~]# scp /etc/hosts 192.168.58.131:/tmp #遠程復制,也可用域名,前后位置可換 -r目錄 The authenticity of host '192.168.58.131 (192.168.58.131)' can't be established. ECDSA key fingerprint is 82:68:11:05:e9:98:f9:bb:df:a1:02:e2:72:59:cb:0e. Are you sure you want to continue connecting (yes/no)? y Please type 'yes' or 'no': yes Warning: Permanently added '192.168.58.131' (ECDSA) to the list of known hosts. root@192.168.58.131's password: #輸入密碼 hosts 100% 159 0.2KB/s 00:00 #復制成功
-
在客戶端把SSH密鑰生成
ssh-keygen
之后在/root/.ssh/
目錄下有生成的信息id_rsa.pub
-
把密鑰等發給服務端
ssh-copy-id -i 192.168.58.131
之后在服務端的相同路徑下會找到相關文件authorized_keys
, 即發給了root用戶目錄下,如發給其他用戶可以在該用戶目錄下找到公鑰 -
之后客戶端直接
ssh 192.168.58.131
不需要輸入密碼即可登陸成功 -
配置文件在
vim /etc/ssh/sshd_config
。若服務端更改端口為8888,以上發送密鑰時需要ssh-copy-id -i id_rsa.pub 192.168.58.131 -p 8888
,連接時ssh 192.168.58.131 -p 8888
即可
bash
-
source a.sh
沒加權限也可以執行 -
命令優先級
1. alias #alias查看當前的別名 alias ppp='ls -l'設置 unalias ppp取消 2. compound commands #if for while 3. function #function ppp() { echo hello;echo bash; }定義 ppp執行 set查看當前函數 unset ppp清除 4. build_in #內建 如cd 5. hash #hash查看 hash -r清除 6. $PATH #路徑 7. error:command not found
-
通配符
$[] #運算 同$(()) $() #同``一樣 ${} # % 取余 ^ ! #取反 & #后台運行 && 與 | 管道 || 或 * 任意 ? 任意一個 = 賦值 == 判斷是否相等 [ $x == $y ] ---> test echo $? 取上一條命令的執行結果 \ ---> "$x"軟引用,取值 '$x'硬引用,$沒有其他意義 : 永遠為真,常與while連用 ; 命令分割 / 路徑分割符 >> 追加 > 覆蓋
固化命令的方式
#以登錄的方式加載順序
/etc/profile
/etc/profile.d/a.sh
/root/.bash_profile
/root/.bashrc
/etc/bashrc
#不登錄的方式加載順序
/root/.bashrc
/etc/bashrc
/etc/profile.d/a.sh
正則表達式
grep ----
-
常用參數
-n :顯示行號 -e :指定多個規則 -o :只顯示匹配的內容 -q :靜默模式,沒有任何輸出,得用echo $?來判斷執行成功(0)沒有,即有沒有過濾到想要的內容 -l :如果匹配成功,則只將文件名打印出來,失敗則不打印,通常-rl一起用,grep -rl 'root' /etc -A :如果匹配成功,則將匹配行及其后n行一起打印出來 如 grep -A 2 'root' test.txt -B :如果匹配成功,則將匹配行及其前n行一起打印出來 -C :如果匹配成功,則將匹配行及其前后n行一起打印出來 --color -c :如果匹配成功,則將匹配到的行數打印出來 -E :等於egrep,擴展 -i :忽略大小寫 -v :取反,不匹配 -w:匹配單詞 例:過濾掉無用的行,包括注釋和空格 grep -v '^#' /etc/ssh/sshd_config | grep -v '^ *$'
-
正則表達式
^ 行首 $ 行尾 . 除了換行符以外的任意單個字符 * 前導字符的零個或多個 .* 所有字符 [] 字符組內的任一字符 #若要匹配-需要放在最后\- [^] 對字符組內的每個字符取反(不匹配字符組內的每個字符) ^[^] 非字符組內的字符開頭的行 [a-z] 小寫字母 [A-Z] 大寫字母 [a-Z] 小寫和大寫字母 [0-9] 數字 \< 單詞頭 單詞一般以空格或特殊字符做分隔,連續的字符串被當做單詞 \> 單詞尾 ? 前導字符零個或一個 + 前導字符一個或多個 abc|def abc或def a(bc|de)f abcf 或 adef x\{m\} x出現m次 #egrep不加\ x\{m,\} x出現m次至多次(至少m次) x\{m,n\} x出現m次至n次
sed ---- 流編輯器 stream editer,是以行為單位的處理程序
sed [options] 'command' in_file[s]
options 部分
-n 靜默模式,不顯示默認輸出
-e 指定多個規則
-i 直接修改原文件
-f 指定匹配規則文件
command 部分
'[地址1,地址2] [函數] [參數(標記)]'
//里面正則表達式定址
例: sed -r '1 s/()()()/\1\2\3/g' passwdbk 1表示定位第幾行,g表示把這一行的所有匹配的都修改了,括號表示第幾部分,后面的\1表示第一部分顯示的位置
awk ---- 處理有格式的文件 !!!!!!
awk [options] 'commands' files
option
-F 定義字段分隔符,默認的分隔符是連續的空格或制表符
使用option中的-F參數定義間隔符號
用$1,$2,$3等的順序表示files中每行以間隔符號分隔的各列不同域 例:awk -F: '{print $1,$4}' passwdbk $0所有
NF變量表示當前記錄的字段數 可用 $NF 取最后一段
NR表示行號 例: awk -F: 'NR>=3 && NR<=5{print NR,"----",$1}' passwdbk ||或
//里面正則表達式定址 例 awk -F: '/nologin$/{print $1}' passwdbk
讓某一部分匹配正則 awk -F: '$1~/^r.*t$/{print $NF}' passwdbk
-v 定義變量並賦值 也可以借用次方式從shell變量中引入
例:
count=7
awk -v x=$count -F: '$3 >= x{print $1}' passwdbk
addr=`ifconfig |awk 'NR==2{print $2}'` 取IP地址
其他命令
du -sh /boot/ #統計目錄大小
cat test |sort |uniq -c #排序去重,c顯示重復的行數
cat /etc/passwd |cut -d: -f2,3 #d表示以什么分割 f指定取第幾部分 可作為awk的簡單模式
dd if=/dev/zero of=/test.ha bs=20M count=1 #新建一個指定大小的文件
find / -size +10M -size -30M -type f -name \*.ha #在/目錄下尋找文件大小>10M且<30M,類型為普通文件,后綴名為ha的文件
grep -rl 'root' /etc #在/etc目錄下尋找文件內含有'root'的文件並把文件名輸出,r表示遞歸,l表示顯示文件名
shell script
中括號 [] 相當於 test
獲取當前內存使用率:
mem_per=`echo "scale=2;$mem_used/$mem_total" | bc -l | cut -d. -f2` #scale保留幾位小數,bc浮點運算
echo ${mem_per}%
$$ 進程PID
$* 所有參數
$# 參數個數
當nginx關閉時開啟nginx
#!/bin/bash
var=`systemctl status nginx| awk 'NR==3{print $2}'`
if [ $var = inactive ]
then
systemctl start nginx
fi
將x.sh文件移動到/usr/bin/目錄下可以在任何位置使用x執行改腳本
計划任務
rondtab -e -u root #e表示編輯 u表示用戶
在計划任務中所有命令都使用絕對路徑!!!
------------本地有md文件備份----------
-----------------end------------------