Linux第五周作業

1、簡述rpm與yum命令的常見選項,并舉例

RPM:

rpm命令:rpm ?[OPTIONS] ?[PACKAGE_FILE]

安裝:-i, –install

升級:-U, –update, -F, –freshen

卸載:-e, –erase

查詢:-q, –query

校驗:-V, –verify

數據庫維護:—rebuilddb, –initdb

安裝:

rpm {-i|–install} [install-options] PACKAGE_FILE …

rpm ?-ivh ?PACKAGE_FILE …

]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm

]# cat /etc/shells

GENERAL OPTIONS:

-v:verbose,詳細信息

-vv:更詳細的輸出

]# rpm -e zsh

]# rpm -ivvh zsh-5.0.2-28.el7.x86_64.rpm

[install-options]:

-h:hash marks輸出進度條;每個#表示2%的進度;

–test:測試安裝,檢查并報告依賴關系及沖突消息等;

]# rpm -ivh –test zsh-html-5.0.2-28.el7.x86_64.rpm

–nodeps:忽略依賴關系;不建議;

–replacepkgs:重新安裝

(如果配置文件有誤,刪除后在重新安裝)

注意:rpm可以自帶腳本;

四類:–noscripts

preinstall:安裝過程開始之前運行的腳本,%pre , –nopre

postinstall:安裝過程完成之后運行的腳本,%post , –nopost

preuninstall:卸載過程真正開始執行之前運行的腳本,%preun, –nopreun

postuninstall:卸載過程完成之后運行的腳本,%postun , –nopostun

–nosignature:不檢查包簽名信息,不檢查來源合法性;

–nodigest:不檢查包完整性信息;

升級:

rpm {-U|–upgrade} [install-options] PACKAGE_FILE …

rpm {-F|–freshen} [install-options] PACKAGE_FILE …

-U:升級或安裝;

-F:升級

rpm ?-Uvh PACKAGE_FILE …

rpm ?-Fvh PACKAGE_FILE …

–oldpackage:降級;

–force:強制升級;

注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,直接安裝新版本內核;

(2) 如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

卸載:

rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–test] PACKAGE_NAME …

–allmatches:卸載所有匹配指定名稱的程序包的各版本;

–nodeps:忽略依賴關系

–test:測試卸載,dry run模式

查詢:

rpm {-q|–query} [select-options] [query-options]

[select-options]

PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本;

]# rpm -q zsh

-a, –all:查詢所有已經安裝過的包;

]# rpm -qa

-f ?FILE:查詢指定的文件由哪個程序包安裝生成;

]# rpm -qf /etc/fstab

-p, –package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作;

]# rpm -qpl zsh-5.0.2-28.el7.x86_64.rpm

]# rpm -qpi zsh-5.0.2-28.el7.x86_64.rpm

]# rpm -qpc zsh-5.0.2-28.el7.x86_64.rpm

]# rpm -qp –scripts zsh-5.0.2-28.el7.x86_64.rpm

–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供;

[root@bogon ~]# rpm -q –provides zsh

config(zsh) = 5.0.2-28.el7

zsh = 5.0.2-28.el7

zsh(x86-64) = 5.0.2-28.el7

[root@bogon ~]# rpm -q –whatprovides zsh

zsh-5.0.2-28.el7.x86_64

[root@bogon ~]# rpm -q –whatprovides ‘config(zsh)’

zsh-5.0.2-28.el7.x86_64

–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;

]# rpm -q –whatrequires bash

[query-options]

–changelog:查詢rpm包的changlog;

]# rpm -q –changelog zsh

-l, –list:程序安裝生成的所有文件列表;

]# rpm -ql zsh

-i, –info:程序包相關的信息,版本號、大小、所屬的包組,等;

]# rpm -qi zsh

-c, –configfiles:查詢指定的程序包提供的配置文件;

]# rpm -qc zsh

-d, –docfiles:查詢指定的程序包提供的文檔;

]# rpm -qd zsh

–provides:列出指定的程序包提供的所有的CAPABILITY;

]# rpm -q –provides zsh

-R, –requires:查詢指定的程序包的依賴關系;

]# rpm -qR zsh

(查詢結果為CAPABILITY)

–scripts:查看程序包自帶的腳本片斷;

]# rpm -q –scripts zsh

用法:

-qi ?PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE

-qpi ?PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, …

校驗:

rpm {-V|–verify} [select-options] [verify-options]

]# rpm -V zsh

]# rpm -V –nofiles zsh

(Don’t verify any attributes of package files.)

S file Size differs

(文件大小發生改變)

M Mode differs (includes permissions and file type

(權限發生改變)

5 digest (formerly MD5 sum) differs

(文件完整性也就是內容發生改變)

D Device major/minor number mismatch

(主次設備號不匹配)

L readLink(2) path mismatch

U User ownership differs

(屬主發生改變)

G Group ownership differs

(屬組發生改變)

T mTime differs

(修改時間發生改變)

P caPabilities differ

(CAPABILITY發生改變)

]# rpm -V zsh

S.5….T.? d /usr/share/doc/zsh-5.0.2/FAQ

包來源合法性驗正和完整性驗正:

來源合法性驗正:

完整性驗正:

獲取并導入信任的包制作者的密鑰:

對于CentOS發行版來說:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

在光盤中獲取并導入信任的包制作者的密鑰:

]# rpm –import RPM-GPG-KEY-CentOS-7

]# cd Packages/

]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm

驗正:

(1) 安裝此組織簽名的程序時,會自動執行驗正;

(2) 手動驗正:rpm -K PACKAGE_FILE

]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm

數據庫重建:

rpm管理器數據庫路徑:/var/lib/rpm/

查詢操作:通過此處的數據庫進行;

獲取幫助:

CentOS 6:man rpm

CentOS 7:man rpmdb

rpm {–initdb|–rebuilddb} [–dbpath DIRECTORY] [–root DIRECTORY]

–initdb:初始化數據庫,當前無任何數據庫可實始化創建一個新的;當前有時不執行任何操作;

]# mkdir /tmp/rpm

]# rpm –initdb –dbpath=/tmp/rpm

]# ls /tmp/rpm/

–rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;

]# rpm –rebuilddb –dbpath=/tmp/rpm

]# ls /tmp/rpm/

YUM:

yum命令的用法:

yum [options] [command] [package …]

顯示倉庫列表:

repolist [all|enabled|disabled]

(默認是enabled)

顯示程序包:

list

# yum list [all | glob_exp1] [glob_exp2] […]

]# yum list php*

# yum list {available|installed|updates} [glob_exp1] […]

(available表示倉庫中有但尚未安裝的)

安裝程序包:

install package1 [package2] […]

reinstall package1 [package2] […] ?(重新安裝)

升級程序包:

update [package1] [package2] […]

downgrade package1 [package2] […] (降級)

檢查可用升級:

check-update

卸載程序包:

remove | erase package1 [package2] […]

查看程序包information:

info […]

]# yum info python

查看指定的特性(可以是某文件)是由哪個程序包所提供:

provides | whatprovides feature1 [feature2] […]

清理本地緩存:

clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

構建緩存:

makecache

搜索:

search string1 [string2] […]

以指定的關鍵字搜索程序包名及summary信息;

查看指定包所依賴的capabilities:

deplist package1 [package2] […]

]# yum deplist python

查看yum事務歷史:

history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

]# yum history packages-list python

]# yum history list

安裝及升級本地程序包:

* localinstall rpmfile1 [rpmfile2] […]

(maintained for legacy reasons only – use install)

]# yum localinstall zsh-5.0.2-28.el7.x86_64.rpm

* localupdate rpmfile1 [rpmfile2] […]

(maintained for legacy reasons only – use update)

(在centos6及以上版本中,可以直接使用yum install來安裝rpm包)

包組管理的相關命令:

* groupinstall group1 [group2] […]

]# yum groupinstall “Development Tools”

* groupupdate group1 [group2] […]

* grouplist [hidden] [groupwildcard] […]

]# yum grouplist

* groupremove group1 [group2] […]

* groupinfo group1 […]

]# yum groupinfo “Development Tools”

yum的命令行選項:

–nogpgcheck:禁止進行gpg check;

-y: 自動回答為“yes”;

-q:靜默模式;

–disablerepo=repoidglob:臨時禁用此處指定的repo;

]# yum –disablerepo=base install tree

–enablerepo=repoidglob:臨時啟用此處指定的repo;

]# yum –enablerepo=base install tree

注意:“base”為repo_name,在/etc/yum.repos.d/xxxxxx.repo文件里,名字為[base]的倉庫,并且當enabled=0時,安裝包如果報錯,建議把yum源換成官方的

–noplugins:禁用所有插件;

2、自建yum倉庫,分別為網絡源和本地源

創建yum倉庫:

createrepo [options] <directory>

]# yum install createrepo

]# mkdir -p /yum/repo

]# cp /media/cdrom/Packages/*.rpm /yum/repo

]# cd /yum/repo

]# createrepo ./

]# cd repodata

]# ls

(repodata目錄里有一個以.xml結尾的文件,此文件就是緩存文件,是本地緩存與文件服務器上的.xml校驗的文件)

]# cd /etc/yum.repos.d/

]# vim centos-local.repo

[base]

name=CentOS7 Local

baseurl=file:///yum/repo

gpgcheck=1

]# yum repolist

]# yum install zsh

網絡源為:baserul指向網絡URL,例如:https://opsx.alibaba.com/mirror

3、簡述at和crontab命令,制定 每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00

未來的某時間點執行一次某任務:at, batch

周期性運行某任務:crontab

兩種執行結果:會通過郵件發送給用戶

? ?at命令:

at ?[OPTION]… TIME

TIME:

HH:MM [YYYY-mm-dd]

noon(中午12點),midnight(晚上12點), teatime(下午4點)

tomorrow

now+#

UNIT:minutes, hours, days, OR weeks

]# at now+1min

at> ls /var

at> <EOT>

(ctrl+d提交)

]# at -l

(列出此前提交的任務)

]# mail

如果無法收到mail,需要啟動atd服務,在centos7中啟動方法如下:]# systemctl start atd

at的作業有隊列,用單個字母表示,默認都使用a隊列;

常用選項:

-l:查看作業隊列,相當于atq

]# at -l

-f /PATH/FROM/SOMEFILE:從指定文件中讀取作業任務,而不用再交互式輸入;

]# at -f at.task now+5min

-d:刪除指定的作業,相當于atrm;

]# at -l

]# at -d 4

-c:查看指定作業的具體內容;

]# at -c 5

-q QUEUE:指明隊列;

]# at -f at.task now+5min -q b

]# at -l

? ?周期性任務計劃:cron

服務程序:

cronie:主程序包,提供了crond守護進程及相關輔助工具;

確保crond守護進程(daemon)處于運行狀態:

CentOS 7:

systemctl ?status ?crond.service

Active: active (running) … …

CentOS 6:

service ?crond ?status

… is running

向crond提交作業的方式不同于at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器直接編輯此文件;要使用crontab命令;

cron任務分為兩類:

系統cron任務:主要用于實現系統自身的維護;

手動編輯:/etc/crontab文件

用戶cron任務:

命令:crontab命令

系統cron的配置格式:/etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# For details see man 4 crontabs

# Example of job definition:

# .—————- minute (0 – 59)

# | ?.————- hour (0 – 23)

# | ?| ?.———- day of month (1 – 31)

# | ?| ?| ?.——- month (1 – 12) OR jan,feb,mar,apr …

# | ?| ?| ?| ?.—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | ?| ?| ?| ?|

# * ?* ?* ?* ?* user-name ?command to be executed

注意:

(1) 每一行定義一個周期性任務,共7個字段;

* ?* ?* ?* ?* : 定義周期性時間

user-name : 運行任務的用戶身份

command to be executed:任務

(2) 此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;

(3) 執行結果郵件發送給MAILTO指定的用戶

用戶cron的配置格式:/var/spool/cron/USERNAME

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# For details see man 4 crontabs

# Example of job definition:

# .—————- minute (0 – 59)

# | ?.————- hour (0 – 23)

# | ?| ?.———- day of month (1 – 31)

# | ?| ?| ?.——- month (1 – 12) OR jan,feb,mar,apr …

# | ?| ?| ?| ?.—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | ?| ?| ?| ?|

# * ?* ?* ?* ?* ? command to be executed

注意:

(1) 每行定義一個cron任務,共6個字段;

(2) 此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;

(3) 郵件發送給當前用戶;

時間表示法:

(1) 特定值;

給定時間點有效取值范圍內的值;

注意:day of week和day of month一般不同時使用;

(2) *

給定時間點上有效取值范圍內的所有值;表“每..”

(3) 離散取值:,

在時間點上使用逗號分隔的多個值;

#,#,#

(4) 連續取值:-

在時間點上使用-連接開頭和結束

#-#

(5) 在指定時間點上,定義步長:

/#:#即步長;

注意:

(1) 指定的時間點不能被步長整除時,其意義將不復存在;

(2) 最小時間單位為“分鐘”,想完成“秒”級任務,得需要額外借助于其它機制;

定義成每分鐘任務:而在利用腳本實現在每分鐘之內,循環執行多次;

示例:

(1) 3 * * * *:每小時執行一次;每小時的第3分鐘;

(2) 3 4 * * 5:每周執行一次;每周5的4點3分;

(3) 5 6 7 * *:每月執行一次;每月的7號的6點5分;

(4) 7 8 9 10 *:每年執行一次;每年的10月9號8點7分;

(5) 9 8 * * 3,7:每周三和周日;

(6) 0 8,20 * * 3,7:

(7) 0 9-18 * * 1-5:

(8) */5 * * * *:每5分鐘執行一次某任務;

(9) */7 * * * *: ? 每7分鐘執行一次某任務,最后4分鐘執行一次;

crontab命令:

crontab [-u user] [-l | -r | -e] [-i]

-e:編輯任務;

-l:列出所有任務;

-r:移除所有任務;即刪除/var/spool/cron/USERNAME文件;

-i:在使用-r選項移除所有任務時提示用戶確認;

-u user:root用戶可為指定用戶管理cron任務;

注意:運行結果以郵件通知給當前用戶;如果拒絕接收郵件:

(1) COMMAND > /dev/null

(2) COMMAND &> /dev/null

注意:(1)為輸出真重定向到“黑洞中”;(2)為輸出無論真假都定向到“黑洞”中,以(2)為例,當執行一個命令,如果這個命令寫錯,比如ls寫成lssss,此時系統無法識別這個命令,所以就不會執行命令之后的內容了,此時會發一封郵件到用戶賬號中,再比如,如果啟動一個服務,此時服務故障無法開啟,雖然錯誤,但命令能夠從頭到尾執行一遍,所以最后會重定向到“黑洞中”,并不會發送郵件到用戶賬號中;

注意:定義COMMAND時,如果命令需要用到%,需要對其轉義;但放置于單引號中的%不用轉義亦可;

]# crontab -l

10 3,5 * * 3 echo “$(date +’\%F \%T’)” >>/tmp/a.txt

4、簡述sed常用操作命令,并舉例

sed [OPTION]… ?‘script’ ?[input-file] …

script:

地址定界編輯命令

常用選項:

-n:不輸出模式空間中的內容至屏幕;

]# sed -n ‘/^#/d’ /etc/fstab

]# sed -n ‘1~2p’ /etc/fstab

]# sed -n ‘/^[^#]/p’ /etc/fstab

-e script, –expression=script:多點編輯;

]#? sed -e ‘s@^#[[:space:]]*@@’ -e ‘/^UUID/d’ /etc/fstab

-f ?/PATH/TO/SED_SCRIPT_FILE

每行一個編輯命令;

-r, –regexp-extended:支持使用擴展正則表達式;

-i[SUFFIX], –in-place[=SUFFIX]:直接編輯原文件 ;

地址定界:

(1) 空地址:對全文進行處理;

(2) 單地址:

#:指定行;

/pattern/:被此模式所匹配到的每一行;

(3) 地址范圍

#,#:

#,+#:

#,/pat1/

/pat1/,/pat2/

$:最后一行;

(4) 步進:~

1~2:所有奇數行

2~2:所有偶數行

編輯命令:

d:刪除;

]# sed ‘1,5d’ /etc/fstab

]# sed ‘/^#/d’ /etc/fstab

]# sed ‘3d’ /etc/fstab

]# sed ‘1~2d’ /etc/fstab

p:顯示模式空間中的內容;

]# sed ‘1~2p’ /etc/fstab

a ?\text:在行后面追加文本“text”,支持使用\n實現多行追加;

]# sed ‘3a\new line’ /etc/fstab

]# sed ‘/^UUID/a\NEW LINE’ /etc/fstab

i ?\text:在行前面插入文本“text”,支持使用\n實現多行插入;

]# sed ‘3i\new line’ /etc/fstab

c ?\text:把匹配到的行替換為此處指定的文本“text”;

]# sed ‘/^UUID/c\NEW LINE’ /etc/fstab

w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;

]# sed ‘/^[^#]/w/tmp/fstab.new’ /etc/fstab

r ?/PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行后面;文件合并;

]# sed ‘3r/etc/issue’ /etc/fstab

]# sed ‘/^UUID/r/etc/issue’ /etc/fstab

=:為模式匹配到的行打印行號;

]# sed ‘/^UUID/=’ /etc/fstab

!:條件取反;

地址定界!編輯命令;

]# sed ‘/^#/!d’ /etc/fstab

s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;

替換標記:

g:全局替換;

w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;

p:顯示替換成功的行;

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/103064

(1)
opfsopfs
上一篇 2018-07-16
下一篇 2018-07-16

相關推薦

  • Vim文本編輯器

    Vim文本編輯器 行編輯器:sed 全屏編輯器:nano ,vim :r!cat a.將a的內容粘貼到vim ZZ保存退出 ,ZQ不保存退出 ,:q!強退 :wq!保存強退 vim?的三種工作模式 控制模式 改寫模式 命令模式 命令模式: W file?另存為。 r??file?寫入文件內容。 !command?執行命令 r!command?讀取命令輸出 地…

    2018-04-15
  • 運維之ansible

    運維工作:系統安裝(物理機、虛擬機)–> 程序包安裝、配置、服務啟動 –> 批量操作 –> 程序發布 ?–> 監控 穩定可用 ? ? ——- ? ? ?標準化 ? ? ? ? ? ?——— ? ? ? ?自動化 系統安裝: 1、…

    2018-07-16
  • liunx 基礎

    簡單命令:如圖是

    Linux筆記 2018-04-01
  • sed的高級用法,rpm .yum的使用以及磁盤存儲和文件系統

    sed的高級用法 和 包管理器(rpm , yum )

    Linux筆記 2018-04-19
  • 第一周-Linux基礎

    一、計算機的組成及其功能 由上圖可知,計算機由硬件系統和軟件系統組成: ? 1. 計算機硬件系統從邏輯上主要由運算器、控制器、存儲器、輸入設備、輸出設備這五部分組成。 ● 存儲器:實現記憶功能的部件用來存放計算程序及參與運算的各種數據;● 運算器:負責數據的算術運算和邏輯運算即數據的加工處理;● 控制器:負責對程序規定的控制信息進行分析,控制并協調輸入,輸出…

    Linux筆記 2018-05-11
  • awk

    使用方法 awk ‘{pattern + action}’ {filenames} 盡管操作可能會很復雜,但語法總是這樣,其中 pattern 表示 AWK 在數據中查找的內容,而 action 是在找到匹配內容時所執行的一系列命令?;ɡㄌ枺▄})不需要在程序中始終出現,但它們用于根據特定的模式對一系列指令進行分組。 pattern就是要表示的正則表達式,用…

    2018-05-20
欧美性久久久久