linux學習筆記

基礎命令

網絡相關的基礎命令

ifconfig  // 查看ip地址
 ip addr   // 如何不支持,那個可使用
 vi /etc/sysconfig/network-scripts/ifcfg-xx   // 好比lo eth0 什麼的,把ONBOOT=no 改爲yes就開始網卡
 yum install net-tools  // 安裝就能夠用ipconfig了

替換默認yum源地址

http://mirrors.163.com/.help/centos.html 教程php

第一步首: 先備份/etc/yum.repos.d/CentOS-Base.repohtml

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

第二步: 下載對應版本repo文件, 放入/etc/yum.repos.d/vue

cd /etc/yum.repos.d/
ls
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

第三步: 運行如下命令生成緩存java

yum clean all
yum makecache

SSH

SSH是什麼

image

  • SSH: Secure Shell 安全外殼服務
  • 創建在應用層基礎上的安全協議
  • 可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議

服務器安裝SSH服務

安裝SSHpython

yum install openssh-server

啓動mysql

service sshd start

設置開機啓動linux

chkconfig sshd on

客戶端安裝SSH客戶端

SSH是典型的客戶端與服務端的交互模式,客戶端普遍的支持各個平臺nginx

  • windows有不少的工具能夠支持shh的鏈接功能,好比xShell,Putty,secureCRT
  • linux yum install openssh-clients

SSH客戶端鏈接服務器

ssh root@140.143.244.18 就登陸了  帳號@ip

SSH config用法詳解

  • config爲了方便咱們批量管理多個ssh
  • config存放在~/.ssh/config
  • config配置語法
    image
    vim ~/.ssh/config
host "jia"
    HostName 192.168.0.106
    User root
    Port 22
host "jia2"
    HostName 192.168.0.106
    User root
    Port 22
ssh jia 就能夠直接登陸了jia那個ip的服務器

免密碼登 方案只SSH key

  • ssh key使用非對稱加密方式生成公鑰和私鑰
  • 私鑰存放在本地~/.ssh 目錄

生成git

ssh-keygen -t rsa
ssh-keygen -t dsa
authorized_keys  那個文件新建在.ssh 下面加上公鑰就能夠免密登陸
在linex上須要ssh-add ~/.ssh/imooc_rsa 添加到空間

SSH端口安全

默認端口22
避免被別人利用,改默認端口web

修改/etc/ssh/shh_config的配置 Port 2222
而後重啓 service sshd restart

經常使用命令

軟件操做

安裝的軟件:yum
安裝:yum install xxx
卸載:yum remove xxx
搜索:yum search xxx
清理緩存:yum clean packages
列出已安裝:yum list
軟件包信息:yum info xxx

服務器強件資源和磁盤操做

內存:free -m 用m來展現g就是g
硬盤:df -h 能夠看懂的形式
負載:w/top 
cpu個數和核數 cat /proc/cpuinfo
fdisk命令用於觀察硬盤實體使用狀況,也可對硬盤分區

文件的操做命令
ls
touch
mkdir  mkdir -p c/d/s 就能夠循環建立
cd
rm 刪除文件和目錄 rm -rf 刪除非空文件
cp 複製
mv 移動 mv ./chen.log ~/ 移動到家目錄
重命名 mv ./chen.log ./j.log
pwd

文件和文件夾操做命令

根目錄 /
家目錄 /home
當前用戶的家目錄  ~
臨時目錄 /tmp
配置目錄 /etc
用戶程序目錄 /usr

vim

 

用戶權限421rwx 讀寫執行

chmod

文件搜索、查找、讀取

tail 從文件尾部開始讀
head 從文件頭部讀
cat  讀取整個文件
more 分頁讀取
less 可控分頁
grep  搜索關鍵詞  grep "a" j.log 在文件中搜索 -n就是統計
find 查找文件

    find . -name "*.vue"  
    將目前目錄及其子目錄下全部延伸檔名是vue的文件列出來
    
    find . -type f  
    將目前目錄其其下子目錄中全部通常文件列出  d: 目錄c: 字型裝置文件b: 區塊裝置文件p: 具名貯列f: 通常文件l: 符號連結s: socket
    
    find . -ctime -20 
    將目前目錄及其子目錄下全部最近 20 天內更新過的文件列出
    
    find /var/log -type f -mtime +7 -ok rm {} \;
    查找/var/log目錄中更改時間在7日之前的普通文件,並在刪除以前詢問它們,能夠用於目錄操做
    
    find . -type f -perm 644 -exec ls -l {} \;
    查找前目錄中文件屬主具備讀、寫權限,而且文件所屬組的用戶和其餘用戶具備讀權限的文件
    
    find / -type f -size 0 -exec ls -l {} \;
    爲了查找系統中全部文件長度爲0的普通文件,並列出它們的完整路徑
    
wc  統計個數   cat j.log | wc -l 統計出行數    grep "a" j.log | wc -l

壓縮命令

-c: 創建壓縮檔案 
-x:解壓 
-t:查看內容 
-r:向壓縮歸檔文件末尾追加文件 
-u:更新原壓縮包中的文件

-z:有gzip屬性的 
-j:有bz2屬性的 
-Z:有compress屬性的 
-v:顯示全部過程 
-O:將文件解開到標準輸出 

參數 -f 是必須的:
-f: 使用檔案名字,切記,這個參數是最後一個參數,後面只能接檔案名。

壓縮

tar –cvf jpg.tar *.jpg       // 將目錄裏全部jpg文件打包成 tar.jpg 
tar –czf jpg.tar.gz *.jpg    // 將目錄裏全部jpg文件打包成 jpg.tar 後,而且將其用 gzip 壓縮,生成一個 gzip 壓縮過的包,命名爲 jpg.tar.gz 
tar –cjf jpg.tar.bz2 *.jpg   // 將目錄裏全部jpg文件打包成 jpg.tar 後,而且將其用 bzip2 壓縮,生成一個 bzip2 壓縮過的包,命名爲jpg.tar.bz2 
tar –cZf jpg.tar.Z *.jpg     // 將目錄裏全部 jpg 文件打包成 jpg.tar 後,而且將其用 compress 壓縮,生成一個 umcompress 壓縮過的包,命名爲jpg.tar.Z 
rar a jpg.rar *.jpg          // rar格式的壓縮,須要先下載 rar for linux 
zip jpg.zip *.jpg            // zip格式的壓縮,須要先下載 zip for linux
解壓

tar –xvf file.tar         // 解壓 tar 包 
tar -xzvf file.tar.gz     // 解壓 tar.gz 
tar -xjvf file.tar.bz2    // 解壓 tar.bz2 
tar –xZvf file.tar.Z      // 解壓 tar.Z 
unrar e file.rar          // 解壓 rar 
unzip file.zip            // 解壓 zip 
總結

一、*.tar 用 tar –xvf 解壓 
二、*.gz 用 gzip -d或者gunzip 解壓 
三、*.tar.gz和*.tgz 用 tar –xzf 解壓 
四、*.bz2 用 bzip2 -d或者用bunzip2 解壓 
五、*.tar.bz2用tar –xjf 解壓 
六、*.Z 用 uncompress 解壓 
七、*.tar.Z 用tar –xZf 解壓 
八、*.rar 用 unrar e解壓 
九、*.zip 用 unzip 解壓

系統用戶操做命令

useradd 添加用戶
adduser 添加用戶
userdel 刪除用戶
passwd  設置密碼

防火牆設置

iptables命令是Linux上經常使用的防火牆軟件

安裝 yum install firewalld
啓動 service firewalld start
檢查狀態 service firewalld status
關閉或禁用防火牆 service firewalld stop/disable

iptables(選項)(參數)
-t<表>:指定要操縱的表;
-A:向規則鏈中添加條目;
-D:從規則鏈中刪除條目;
-i:向規則鏈中插入條目;
-R:替換規則鏈中的條目;
-L:顯示規則鏈中已有的條目;
-F:清楚規則鏈中已有的條目;
-Z:清空規則鏈中的數據包計算器和字節計數器;
-N:建立新的用戶自定義規則鏈;
-P:定義規則鏈中的默認目標;
-h:顯示幫助信息;
-p:指定要匹配的數據包協議類型;
-s:指定要匹配的數據包源ip地址;
-j<目標>:指定要跳轉的目標;
-i<網絡接口>:指定數據包進入本機的網絡接口;
-o<網絡接口>:指定數據包要離開本機所使用的網絡接口。

提權操做sudo和文件傳輸操做

提權:sudo    visudo編輯
下載 wget curl
文件上傳  scp   scp j.log chenjinxinlove@192.168.0.106:/tmp/  上傳到那個目錄了

webServer

apache

安裝 yum install httpd
啓動 service httpd start
中止 service httpd stop

配置文件  /etc/httpd/conf

nginx 詳情看nginx的配置

數據庫服務

mysql

CentOS7默認安裝mariadb數據庫
    yum remove mariadb-libs.x86_64
下載MYsql源
    https://dev.mysql.com/downloads/repo/yum/
    
    cd /tmp/
    wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
安裝源
    yum localinstall mysql57-community-release-el7-8.noarch.rpm
安裝服務器
    yum install mysql-community-server
默認密碼查找
    cat /var/log/mysqld.log | grep "password"
啓動 
    service mysqld start/restart
中止
    service mysqld stop
鏈接
    mysql -uroot -p 密碼
遠程鏈接
開啓Genelog
    set global general_log_file="/tmp/genetal.log";//設置文件路徑
    set global general_log="on";// 開啓
新建用戶和權限操做
忘記root密碼怎麼辦

緩存服務

memcached

安裝  yum install memcached
啓動  memcached -d(守護進行) -l(支持的ip) -m(分配多少內存) -p (端口號11211)
中止  kill pid

redis

安裝 源碼編譯安裝

啓動 redis-server start/restart
中止 redis-server stop
客戶端 redis-client

// 下載到/tmp目錄
獲取源碼 wget http://download.redis.io/releases/redis-4.0.11.tar.gz
解壓 tar xvfz redis-4.0.11.tar.gz
cd src && ls
啓動 ./redis-server

git

安裝 yum install git
git 命令自動補全設置

php

java

java的安裝

yum -y isntall java-1.8.0 -openjdk
java -version 查看版本

tomcat安裝

官網下載,源碼編譯安裝
https://tomcat.apache.org/
wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.tar.gz

啓動到tomcat的目錄sh start.sh
 cd /tmp/apache-tomcat-9.0.10/bin/
 
 
 bootstrap.jar       ciphers.bat                   configtest.bat  digest.sh         shutdown.sh      tomcat-native.tar.gz  version.sh
catalina.bat        ciphers.sh                    configtest.sh   setclasspath.bat  startup.bat      tool-wrapper.bat
catalina.sh         commons-daemon.jar            daemon.sh       setclasspath.sh   startup.sh       tool-wrapper.sh
catalina-tasks.xml  commons-daemon-native.tar.gz  digest.bat      shutdown.bat      tomcat-juli.jar  version.bat

maven安裝

官網下載,源碼編譯安裝
https://maven.apache.org/
wget http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

解壓  tar xvfz apache-maven-3.5.4-bin.tar.gz

創建軟鏈接

ln -s /tmp/apache-maven-3.5.4/bin/mvn /usr/local/bin/
或   可是要使用絕對路徑
ln -s /tmp/apache-maven-3.5.4/bin/mvn /usr/bin/

python

軟件包管理 pip

yum install python2-pip

換成豆瓣源

mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
timeout=60
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

虛擬環境 virtualenv

pip install virtualenv

重要的服務

crontab 定時任務

ntpdate日期同步

ntpdate cn.pool.ntp.org

logrotate 日誌切割

/etc/logrotate.d 目錄下

[root@VM_0_4_centos logrotate.d]# ls
2017-08-29  bootlog  chrony  httpd  mysql  nginx  ppp  syslog  wpa_supplicant  yum
[root@VM_0_4_centos logrotate.d]# cat nginx
/var/log/nginx/*.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}
[root@VM_0_4_centos logrotate.d]# pwd

supervisor 進程管理

pip install supervisor

監控系統zabbix

官網 https://www.zabbix.com/

安裝 https://www.zabbix.com/download

其餘學習

linux服務

RPM包默認安裝的服務

獨立服務

啓動
    使用/etc/init.d/ 目錄中腳本啓動服務如:/etc/init.d/httpdstart/stop/restart
    使用servide命令啓動服務如:service httpd start|stop|restart
自啓動
    使用chkconfig命令來管理自啓動如:chkconfig --level 2345 httpd on | off
    修改/etc/rc.local文件,如vi/etc/rc.d/rc.local 加入 /etc/init.d/httpd  start
    使用ntsysv命令管理服務自啓動

源碼包安裝的服務

啓動
    使用源碼包啓動腳本啓動服務:如 /usr/local/apache2/bin/apachect| start
自啓動
    自能修改/etc/rc.loacl文件

系統管理

進程管理

進程查看

ps aux
    USER:該進程屬於那個使用者帳號的?
    • PID :該進程的進程ID號。
    • %CPU:該進程使用掉的 CPU 資源百分比;
    • %MEM:該進程所佔用的物理內存百分比;
    • VSZ :該進程使用掉的虛擬內存量 (Kbytes)
    • RSS :該進程佔用的固定的內存量 (Kbytes)
    • TTY :該進程是在那個終端機上面運做,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者程序,若爲 pts/0 等等的,則表示爲由網絡鏈接進主機的程序。
    • STAT:該程序目前的狀態,主要的狀態有:
           R :該程序目前正在運做,或者是可被運做;
           S :該程序目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號(signal) 喚醒。
           T :該程序目前正在偵測或者是中止了;
           Z :該程序應該已經終止,可是其父程序卻沒法正常的終止他,形成 zombie (疆屍) 程序的狀態
    • START:該進程被觸發啓動的時間;
    • TIME :該進程實際使用 CPU 運做的時間。
    • COMMAND:該程序的實際指令爲何?
ps -le
pstree
    -p   顯示進程pid
    -u  顯示進程的所屬用戶

查看系統監控健康狀態

選項
    -d讀秒:指定top命令每隔幾秒更新,默認3秒
    -b :使用批處理模式輸出。通常和-n選項合用
    -n 次數:指定top命令執行的次數。通常和-b一塊兒使用
top命令的交互模式當中能夠執行的命令
    h幫助
    P: 以cpu使用頻率排序,是默認的
    M:之內存的使用率排序
    N:以pid排序
    q:退出top
殺死進程
kill【選項】【信號】進程名
    選項
        -t  
信號:kill -l
    SIGHUP  1
        從新讀取配置文件,而後重啓
    SIGKILL 9
        強制殺死
killall/pkill
    根進程名 來殺死所有進程
        -i 交互氏
pkill -t 能夠根據終端號,只有root能夠踢用來提出終端用戶
    w   命令來查看登陸那些用戶,而後在提出
修改進程的優先級

工做管理

命令後面很 &能夠放入後臺,可是綁定終端號,不能有交互的命令,使用jobs命令查看
使用ctrl + z是在後臺暫定的
jobs [-l] -l是查看工做的pid的。+是最近一個放入的後臺的程序,-是倒數第二個
    fg  % 工做號 恢復到前臺
    bg % 工做號   回到後臺去
後臺命令脫離登陸終端執行的方法
    第一種,把執行的命令加倒入/etc/rc.local文件中開機自啓動
    加入到定時任務中
    使用nohup命令
    系統資源查看

系統定時任務

at一次性定時任務

肯定at安裝
    chkconfig --list | grep atd
        at服務是否安裝
    service atd restart
        at服務的啓動
at的訪問控制
    若是系統中有/etc/at.allow文件,那麼只有寫入/etc/at.allow文件(白名單)中的用戶可使用at命令(/etc/at.deny文件會被忽略)
    若是系統中沒有/etc/at.allow文件,只有/etc/at.deny文件,那麼寫入/etc/at.deny(黑名單)中的用戶不能使用at命令。對root不起做用
    若是都不存在,只能root用戶來操做
at命令
    通常直接加時間
        HH:MM  02:30
        HH:MM YYYY-MM-DD   02:30 2013-07-25
        HH:MM[am|pm] [month] [date] 02:30 july 25
        HH:MM[am|pm]+[minutes|hours|days|weeks]
例子1
    at now +2 minutes
    在兩分鐘以後執行hello.sh腳本
    at> /root/hello.sh 
atq:查看正在容許的at命令
例子2:
    at 02:00 2013-07-26
    在指定的時間重啓
    at> /bin/sync
    at> /sbin/shutdown -r now

crontab循環定時任務

也存在cron.allow和cron.deny的白黑名單
    選項
        -e  編輯crontab定時
        -l  查詢crontab任務
        -r  刪除當前用戶全部的crontab任務
系統的crontab設置
    crontab -e 進入編輯界面,
    *****   執行的任務
        第一個*    一小時當中第幾分鐘   0-59
        第二個*  一天當中的第幾個小時  0-23
        第三個* 一個月當中的第幾天   1-31
        第四個 *  一年當中的第幾個月   1-12
        第五個*     一週當中的星期幾   0-7 (0和7都表明星期日)
    特殊符合
        *表明任意時間,第一個*就是一個小時每分鐘都執行一次的意思
        ,  表明不連續的時間,好比「0, 8,12,16 ***」 ,就表明在天天的8點0分,12點0分,16點0分都執行一次
        -   表明連續的時間範圍,好比「0 5 * * 1-6」 表明在週一到週六的凌晨5點0分執行命令
        */n  表明每一個多久執行一次   好比 */10 * * * *  ,表明每隔10分鐘就執行一遍命令
    例子:
        45 22 * * *    表明在22點45分執行
        0 17 * * 1   表明每週一的17點0分執行
        0 5 1,15  * * 表明每個月1號和15號的凌晨5點0分執行命令
        */10 4 * * * 表明  天天的凌晨4點,每隔十分鐘執行一次
        0 0 1,15 * 1 表明1號15號,每週1的0點0分都會執行:注意周不要和月混在一塊兒
    設置
        有些定時任務須要系統執行,這時咱們就須要編輯/etc/crontab這個配置文件
    系統定時任務
        第一種是須要定時執行的腳本複製到/etc/cron.{daily,weekly,monthly}目錄下
        第二種修改/etc/crontab配置文件
anacron配置
    因爲服務器等緣由,沒有執行定時任務,開機以後會在次執行定時任務
    anacron會使用一天,七天,一個月做爲檢測週期
    在系統的/var/spool/anacron/目錄中存在cron.{daily,weekly,monthly}文件,用於記錄上次執行cron的時間
    和當前時間作比較,若兩個時間的插值超過了anacron的指定時間差,證實有cron任務錯過執行
    配置文件
         /etc/anacrontab

系統管理

vmstat[刷新延時 刷新次數] 命令監控系統資源: 例如vmstat 1 3
    r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閒,沒什麼程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關係,通常負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載相似每秒的運行隊列。若是運行隊列過大,表示你的CPU很繁忙,通常會形成CPU使用率很高。
    b 表示阻塞的進程,這個很少說,進程阻塞,你們懂的。
    swpd 虛擬內存已使用的大小,若是大於0,表示你的機器物理內存不足了,若是不是程序內存泄露的緣由,那麼你該升級內存了或者把耗內存的任務遷移到其餘機器。
    free   空閒的物理內存的大小,個人機器內存總共8G,剩餘3415M。
    buff   Linux/Unix系統是用來存儲,目錄裏面有什麼內容,權限等的緩存,加速讀取
    cache cache直接用來記憶咱們打開的文件,給文件作緩衝, 加速寫入
    si  每秒從磁盤讀入虛擬內存的大小,若是這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。個人機器內存充裕,一切正常。
    so  每秒虛擬內存寫入磁盤的大小,若是這個值大於0,同上。
    bi  塊設備每秒接收的塊數量,這裏的塊設備是指系統上全部的磁盤和其餘塊設備,默認塊大小是1024byte,我本機上沒什麼IO操做,因此一直是0,可是我曾在處理拷貝大量數據(2-3T)的機器上看過能夠達到140000/s,磁盤寫入速度差很少140M每秒
    bo 塊設備每秒發送的塊數量,例如咱們讀取文件,bo就要大於0。bi和bo通常都要接近0,否則就是IO過於頻繁,須要調整。
    in 每秒CPU的中斷次數,包括時間中斷
    cs 每秒上下文切換次數,例如咱們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,咱們通常作性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程能夠由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,咱們的代碼就會進入內核空間,致使上下文切換,這個是很耗資源,也要儘可能避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,致使CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。
    us 用戶CPU時間,我曾經在一個作加密解密很頻繁的服務器上,能夠看到us接近100,r運行隊列達到80(機器在作壓力測試,性能表現不佳)。
    sy 系統CPU時間,若是過高,表示系統調用時間長,例如是IO操做頻繁。
    id  空閒 CPU時間,通常來講,id + us + sy = 100,通常我認爲id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
    wt 等待IO CPU時間
        
dmesg  看內核自檢測信息

dmesg grep | CPU  查看cpu的信息。能夠用來查看硬件信息

free[-b|-k|-m|-g] 以b、k、m、g來顯示,顯示內存狀態
                         total       used       free     shared    buffers     cached
Mem:          7872       1806       6066          0        172       1177
-/+ buffers/cache:        456       7416
Swap:            0          0          0

cat  /proc/cpuinfo  查看cpu的信息
uptime查看系統當前時間等,就是top的第一行
10:31:42 up 54 days, 15:48,  1 user,  load average: 0.00, 0.00, 0.00

查看內核相關的信息
uname
    -a  查看系統全部相關信息
    -r  查看內核版本
    -s 查看內核名稱
file /bin/ls  來查看系統位數
    /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
lsb_release -a 查看發行版本
    LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
    Distributor ID: CentOS
    Description:    CentOS release 6.8 (Final)
    Release:    6.8
    Codename:   Final
lsof命令
    lsof | more
        查看系統中全部進程調用的文件
    lsof /sbin/init
        查詢摸個文件被那個進程調用
    lsof -c httpd
        查看httpd進程調用了那些文件
    lsof -u root
        根據用戶名,查詢某用戶的進程調用的文件名
相關文章
相關標籤/搜索