05linux葵花寶典–linux軟件安裝、計劃任務和sed流編輯
linux系統上安裝軟件,和windows上有所區別,對于大多數初學者來說,在使用命令行模式時安裝軟件,都是一個需要跨越的難題。本節博客將以紅帽系列開發版為例,詳細介紹linux系統上安裝軟件的操作。另外,還將介紹計劃任務,以及sed流編輯命令。
一、rpm命令使用
在linux系統上,安裝軟件分為源碼安裝和二進制程序安裝。源碼安裝需要將應用程序源代碼經過編譯、鏈接等過程,生成適用于linux各系統的二進制程序后,在進行安裝。二進制格式安裝,是下載其他組織或個人已經編譯鏈接好的二進制代碼,進行安裝。通常,為方便起見,選擇二進制安裝。當需要對程序進行某些功能增加、改進或者已制作好的二進制代碼不能滿足使用者的特殊需求時,則使用源代碼編譯后安裝。
二進制代碼安裝,在紅帽系列發行版中,使用rpm命令作為軟件包的前端管理工具,debian發行版本中使dpkg命令作為軟件包管理工具,S.u.S.E使用zypper作為管理工具。下面以紅帽系列的rpm命令為例,詳細介紹其命令使用方法。
第一節博客中提到過,linux的哲學思想之一就是使用一個程序完成一個簡單功能,然后將這些簡單程序組合起來,完成復雜功能。在軟件包安裝過程中,A軟件的功能可能需要用到B軟件,這時,在安裝A軟件時,就必須先安裝B軟件,也就是A軟件包依賴B,這就是軟件包的依賴關系。
另外,為保證軟件包的可靠性(軟件包是否就是軟件開發者自己的)、完整性(軟件包是否是未經過修改加入或刪除一些其他功能的)等一些軟件的關鍵信息,軟件包中還包括了軟件的一些驗證信息。
rpm軟件包通常使用以下方式命名:PACKAGEName-Version-Release.arch.rpm 其中PACKAGEName是包名。Version是版本號,包括主版本號、次版本號和發行號,如:3.1.2,3表示主版本號,通常該軟件有重大功能改進時,改變該數值,1表示次版本號,通常該軟件有較大功能改進時,改變該數值,2表示發行號,通常軟件有較小改動時,改變該數值。Release表示從軟件從源代碼編譯成二進制格式的發行號;arch表示該軟件所適用的架構,即i386、x86_64或者noarch(于架構無關,那種平臺都可用),有時后面可能還跟有操作系統如el7,指使用于紅帽的rhel7版本操作系統。
rpm RPM package manager,在管理軟件包時,分為以下幾種操作:安裝、升級、卸載、查詢、校驗以及其他。下面分別說明
在介紹各種操作之前,先介紹rpm的通用選項:即這幾種選項是獨立或者配合以上幾種操作來完成相關軟件包管理的
-?輸出幫助
-v 輸出詳細信息
-vv 輸出更詳細信息
1、安裝
rpm {-i|–install} [install-options] PACKAGE_FILE …
其中,install-options可以的選項有
-h 輸出50個#來顯示安裝進度
--force 強制安裝
--ignoresize 不檢查磁盤可以空間大小
--ignorearch 忽略軟件包可適用的架構是否和本機一致
--ignoreos 忽略軟件包的操作系統是否和本機系統
--nodigest 不驗證包的完整性
--nodeps 不檢查軟件包的依賴關系
--nosignature 不驗證包來源的可靠性
例如
[root@localhost Packages]rpm -ivh zip-3.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:zip-3.0-10.el7 ################################# [100%]
[root@localhost Packages]#
上面使用-ivh選項來安裝了zip軟件包,i表示安裝,v表示顯示詳細信息,h表示用50個#來顯示安裝進度。
2、升級
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
-U與-F選項均表示升級操作,其區別是-U安裝軟件包后,其他版本的該軟件包將都被刪除;而-F將升級為新軟件包。
其install-options和安裝選項一樣, –oldpackage 使用舊版本的軟件包替換已安裝的新版本
3、卸載
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
卸載已安裝的軟件包,
--nodeps 卸載時不檢查軟件直接的依賴關系
--noscripts 卸載時不執行軟件默認的卸載前和卸載后的腳本命令
--test 測試卸載,即不真正卸載
注意,卸載時后面跟的是PACKAGE_NAME,而安裝升級時是PACKAGE_FILE
例如:
[root@localhost Packages]# rpm -evh zip
Preparing... ################################# [100%]
Cleaning up / removing...
1:zip-3.0-10.el7 ################################# [100%]
4、查詢
查詢是指查詢當前系統軟件相關的各種信息,例如安裝了哪些軟件,某軟件提供了什么功能,軟件有哪些文件,某個文件是哪個軟件生成的,軟件的相關信息等等。
rpm {-q|–query} [select-options] [query-options]
-q 查詢
select-options
-a 所有已安裝軟件
-f FILE 文件歸屬于哪個軟件包
-p PACKAGE_FILE 這個包有哪些文件
--whatprovides CAPABILITY 哪些包提供了CAPABILITY
--whatrequires CAPABILITY 哪些包需要CAPABILITY的運行
query-options
--changelog 軟件包的版本更新日志
-c 軟件包的配置文件
-d 軟件包的文檔
-i 軟件包的相關信息
-l 軟件包的文件
--provides 軟件包提供了哪些能力CAPABILITY
--scipts 軟件包中的腳本(最多有四種:preinstall預安裝腳本、postinstall安裝后腳本、preuninstall預卸載腳本、postuninstall卸載后腳本)
例如:
-qi PACKAGE_NAME 查詢已安裝軟件信息
[root@localhost Packages]# rpm -qi zip
Name : zip
Version : 3.0
Release : 10.el7
Architecture: x86_64
Install Date: Thu 29 Mar 2018 11:25:11 PM EDT
Group : Applications/Archiving
Size : 815037
License : BSD
Signature : RSA/SHA256, Fri 04 Jul 2014 01:53:58 AM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM : zip-3.0-10.el7.src.rpm
Build Date : Mon 09 Jun 2014 10:37:07 PM EDT
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.info-zip.org/Zip.html
Summary : A file compression and packaging utility compatible with PKZIP
Description :
The zip program is a compression and file packaging utility. Zip is
analogous to a combination of the UNIX tar and compress commands and
is compatible with PKZIP (a compression and file packaging utility for
MS-DOS systems).
Install the zip package if you need to compress files using the zip
program.
-qd PACKAGE_NAME
[root@localhost Packages]# rpm -qd zip
/usr/share/doc/zip-3.0/CHANGES
/usr/share/doc/zip-3.0/LICENSE
/usr/share/doc/zip-3.0/README
/usr/share/doc/zip-3.0/README.CR
/usr/share/doc/zip-3.0/TODO
/usr/share/doc/zip-3.0/WHATSNEW
/usr/share/doc/zip-3.0/WHERE
/usr/share/doc/zip-3.0/algorith.txt
/usr/share/man/man1/zip.1.gz
/usr/share/man/man1/zipcloak.1.gz
/usr/share/man/man1/zipnote.1.gz
/usr/share/man/man1/zipsplit.1.gz
-q –provides PACKAGE_NAME
[root@localhost Packages]# rpm -q --provides zip
zip = 3.0-10.el7
zip(x86-64) = 3.0-10.el7
-q –scipts PACKAGE_NAME
[root@localhost Packages]# rpm -q --scripts zsh
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
echo "/bin/zsh" > /etc/shells
else
grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells
fi
if [ -f /usr/share/info/zsh.info.gz ]; then
# This is needed so that --excludedocs works.
/sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \
--entry="* zsh: (zsh). An enhanced bourne shell."
fi
:
preuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ] ; then
if [ -f /usr/share/info/zsh.info.gz ]; then
# This is needed so that --excludedocs works.
/sbin/install-info --delete /usr/share/info/zsh.info.gz /usr/share/info/dir \
--entry="* zsh: (zsh). An enhanced bourne shell."
fi
fi
:
postuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ] ; then
if [ -f /etc/shells ] ; then
TmpFile=`/bin/mktemp /tmp/.zshrpmXXXXXX`
grep -v '^/bin/zsh$' /etc/shells > $TmpFile
cp -f $TmpFile /etc/shells
rm -f $TmpFile
fi
fi
zsh軟件包提供了三個腳本,分別是postinstall、preuninstall和postuninstall。
5、校驗
rpm {-V|–verify} [select-options] [verify-options]
修改了zsh相關文件后,使用校驗功能的結果
[root@localhost scripts]# rpm -V zsh
S.5....T. /usr/share/zsh/5.0.2/scripts/newuser
一共9個指示位,.表示沒有改變,不是.表示改變了,其意義如下:
S 文件大小改變
M 文件模式改變(包括權限和文件類型等)
5 信息摘要改變(MD5摘要信息)
D 設備主/次號改變
L 讀連接路徑改變
U 屬主改變
G 屬組改變
T 修改時間改變
P 能力改變(CAPABILITY)
6、其他
rpm –initdb 初始化rpm數據庫
rpm — rebuilddb 重建rpm數據庫
由于rpm是一個包安裝的前端工具,每個通過rpm安裝的軟件包的相關信息都會在數據庫中記錄,這兩個命令就是針對這個數據庫進行操作。
rpmkeys –import PUBKEY …
導入公鑰文件,主要在驗證包的信息時用到,例如,在講安裝時,默認會驗證包的簽名信息和摘要信息,使用的公鑰就是通過該命令導入
rpmkeys {-K|–checksig} PACKAGE_FILE …
驗證該包的信息,僅驗證。
[root@localhost Packages]# rpm -K zziplib-utils-0.13.62-5.el7.x86_64.rpm
zziplib-utils-0.13.62-5.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
查詢PUBKEY信息
[root@localhost Packages]# rpm -qa gpg-pubkey
gpg-pubkey-f4a80eb5-53a7ff4b
二、yum的使用
yum Yellowdog Updater Modified 是紅帽發行版yellowdog的一款rpm包管理器,在紅帽系列linux發行版中廣泛應用。
yum主要用于解決軟件包的依賴性問題。例如在安裝大型軟件包時,其可能依賴很多其他包,而其他包有可能依賴另外的包,這樣,如果使用rpm工具來安裝,將會是一個非常痛苦和漫長的過程。
yum通過一個repository(可以理解為軟件倉庫)來組織軟件包,并將軟件包的相關信息組成一個數據庫,通過數據庫中的信息來管理軟件包,并解決軟件依賴問題。
其基本功能也是安裝、升級、卸載、查詢、驗證以及其自身一些管理功能。
在使用yum命令前,需要配置好repository,這節主要將命令使用,下節詳細介紹repository配置方法。
yum的一些常用選項
-y 安裝過程中自動回答yes
-q 靜默模式安裝
--nogpgcheck不檢查簽名等信息(即使倉庫中配置了gpgcheck=1)
--enablerepo 臨時啟用一個禁用的倉庫(倉庫中配置了enabled=0)
--noplugin 禁用插件
1、yum install package1 [package2] …
使用yum安裝httpd
[root@localhost Packages]# yum install httpd
Loaded plugins: fastestmirror
CDROM | 3.6 kB 00:00:00
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-31.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-31.el7.centos for package: httpd-2.4.6-31.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-31.el7.centos.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-31.el7.centos.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-31.el7.centos.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-31.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Installing:
httpd x86_64 2.4.6-31.el7.centos CDROM 2.7 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 CDROM 103 k
apr-util x86_64 1.5.2-6.el7 CDROM 92 k
httpd-tools x86_64 2.4.6-31.el7.centos CDROM 79 k
mailcap noarch 2.1.41-2.el7 CDROM 31 k
Transaction Summary
========================================================================================================
Install 1 Package (+4 Dependent packages)
Total download size: 3.0 M
Installed size: 10 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------------------------------------
Total 22 MB/s | 3.0 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : apr-1.4.8-3.el7.x86_64 1/5
Installing : apr-util-1.5.2-6.el7.x86_64 2/5
Installing : httpd-tools-2.4.6-31.el7.centos.x86_64 3/5
Installing : mailcap-2.1.41-2.el7.noarch 4/5
Installing : httpd-2.4.6-31.el7.centos.x86_64 5/5
Verifying : httpd-tools-2.4.6-31.el7.centos.x86_64 1/5
Verifying : apr-1.4.8-3.el7.x86_64 2/5
Verifying : mailcap-2.1.41-2.el7.noarch 3/5
Verifying : httpd-2.4.6-31.el7.centos.x86_64 4/5
Verifying : apr-util-1.5.2-6.el7.x86_64 5/5
Installed:
httpd.x86_64 0:2.4.6-31.el7.centos
Dependency Installed:
apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 httpd-tools.x86_64 0:2.4.6-31.el7.centos
mailcap.noarch 0:2.1.41-2.el7
Complete!
安裝httpd時,依賴了4個軟件包(apr、apr-util、httpd-tools、mailcap),這些都由yum工具自動安裝。
2、yum update [package1] [package2] […]
升級軟件包
3、yum remove | erase package1 [package2] […]
卸載軟件包
[root@localhost Packages]# yum erase zsh
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package zsh.x86_64 0:5.0.2-7.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Removing:
zsh x86_64 5.0.2-7.el7 installed 5.6 M
Transaction Summary
========================================================================================================
Remove 1 Package
Installed size: 5.6 M
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Erasing : zsh-5.0.2-7.el7.x86_64 1/1
Verifying : zsh-5.0.2-7.el7.x86_64 1/1
Removed:
zsh.x86_64 0:5.0.2-7.el7
Complete!
4、yum list […]
列出相應信息
all 所有可安裝的和已經安裝的軟件包(可使用通配符glob_exp)
updates 列出可升級的軟件包
installed 列出已經安裝的等
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or yum provides)
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled
5、yum provides | whatprovides feature1 [feature2] […]
查詢特性由哪個軟件包
[root@localhost Packages]# yum whatprovides zip\(x86-64\)
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
zip-3.0-10.el7.x86_64 : A file compression and packaging utility compatible with PKZIP
Repo : CDROM
Matched from:
Provides : zip(x86-64) = 3.0-10.el7
zip-3.0-10.el7.x86_64 : A file compression and packaging utility compatible with PKZIP
Repo : installed
Matched from:
Provides : zip(x86-64) = 3.0-10.el7
6、yum search string1 [string2] […]
在倉庫中查找strins相關的軟件包或功能等,特別使用于知道某個功能或軟件名字,但又記不清楚時
yum search http
7、yum info package
查看包的相關信息,相當于rpm -qi package
8、yum group
軟件包組的相關內容,有yum groupinstall GRPUP_NAME安裝軟件包組
9、yum downgrade
軟件降級
10、yum repolist [all|enabled|disabled]
顯示所有、可用、禁用的軟件倉庫信息
11、yum history
顯示通過yum管理軟件的相關信息
[root@localhost Packages]# yum history
Loaded plugins: fastestmirror
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
7 | root <root> | 2018-03-30 00:37 | Erase | 1
6 | root <root> | 2018-03-30 00:33 | Install | 5 <
5 | root <root> | 2018-03-29 20:26 | Install | 4 >
4 | root <root> | 2018-03-29 19:48 | Install | 7
3 | root <root> | 2018-03-10 15:58 | Install | 1
2 | root <root> | 2018-03-08 11:52 | Install | 31
1 | System <unset> | 2018-02-23 11:35 | Install | 297
history list
三、yum倉庫配置
yum全局配置文件在/etc/yum.conf中,倉庫文件在/etc/yum.repos.d/*.repo ,注意,yum倉庫文件必須以.repo結尾。
倉庫文件示例:
[倉庫名稱] name=Centos.name.
[root@koala yum.repos.d]# cat CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#號開頭的是注釋信息
[base] 倉庫名稱 name 倉庫的意義或作用,相當于倉庫注釋 baseurl 倉庫的路徑URL,可使用httpd、ftp、file等指明倉庫的url,當使用file時,一般格式為: baseurl=file:///to/some/path,file:后有三個/,其中前兩個//和file:一起(file://)指協議,第三個/ 指文件系統下的路徑,該路徑一定是包含repodata的路徑。 gpgcheck 是否驗證倉庫的簽名和摘要信息 gpgkey 驗證信息時的公鑰位置 enabled 該倉庫是否啟用,如果沒有該條目,表示啟用,即enabled=1
在上節中提到,yum倉庫通過一個元數據文件repodata來管理軟件包,在建立yum倉庫時,首先要下載一些軟件包到某目錄下,然后使用命令生成creatrepo倉庫的數據庫文件,然后手動設置*.repo文件,并放置于/etc/yum.repos.d/目錄下,即可使用該軟件倉庫。
createrepo [options]?生成yum倉庫元數據文件(xml格式)
例如,將一些軟件包下載至/tmp/pkg/目錄下,使用createrepo ./命令即可生成metadata文件
示例:制作yum倉庫
#新建一個目錄用于倉庫目錄
[root@localhost pkg]# mkdir /tmp/yumrepo
#拷貝一些RPM軟件包到倉庫目錄下
[root@localhost pkg]# cp /media/cdrom/Packages/c*.rpm /tmp/yumrepo
[root@localhost pkg]# cd /tmp/yumrepo
#使用createrepo命令生成倉庫rpm包的元數據文件metadata
[root@localhost yumrepo]# createrepo ./
Spawning worker 0 with 279 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
#創建my.repo文件,并編輯,使其符合前面所說的倉庫文件格式,這里使用的是本地源。
#如果要使用網絡源,可將/tmp/yumrepo文件夾中的內容復制到http或ftp服務器相關目錄下,并使my.repo文件中的baseurl指向該網絡路徑。
[root@localhost yumrepo]# vi /etc/yum.repos.d/my.repo
[myrepo]
name=include c*.rpm
baseurl=file:///tmp/yumrepo/
enabled=1
#測試該倉庫是否可用
#使用yum clean all 清楚系統上的yum緩存數據
[root@localhost yum.repos.d]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: myrepo
Cleaning up everything
Cleaning up list of fastest mirrors
#使用yum makecache 重新讀取/etc/yum.repos.d/*.repo 倉庫中的medatata數據
[root@localhost yum.repos.d]# yum makecache
Loaded plugins: fastestmirror
myrepo | 2.9 kB 00:00:00
(1/3): myrepo/filelists_db | 151 kB 00:00:00
(2/3): myrepo/other_db | 93 kB 00:00:00
(3/3): myrepo/primary_db | 156 kB 00:00:00
Determining fastest mirrors
Metadata Cache Created
#查看倉庫信息
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
myrepo include c*.rpm 279
repolist: 279
#查找倉庫中cvs相關的軟件。
[root@localhost yum.repos.d]# yum list all | grep cvs*
libedit.x86_64 3.0-12.20121213cvs.el7 @anaconda
cvs.x86_64 1.11.23-35.el7 myrepo
cvs-contrib.noarch 1.11.23-35.el7 myrepo
cvs-doc.noarch 1.11.23-35.el7 myrepo
cvs-inetd.noarch 1.11.23-35.el7 myrepo
cvsps.x86_64 2.2-0.14.b1.el7 myrepo
四、計劃任務
計劃任務像鬧鐘一樣,在計劃規定的時間,執行一系列的任務。分為兩種,一是執行一次的計劃,二是周期性執行的計劃。 通常,執行一次的計劃使用at和batch命令,周期性計劃使用crond系統服務,使用crontab和anacron。
1、at
at [options] TIME
常用命令選項有
-l 同atq命令,顯示at的計劃任務
-d 同atrm命令,刪除指定的計劃任務
-v 以時間方式,顯示出任務列表
-m 任務完成后以email方式通知用戶執行結果
TIME,指定任務的執行時間,具體有以下幾種格式:
HH:MM 小時:分鐘,從現在開始,第一次出現該時間點的時刻
MMDDYY或MM/DD/YY或DD.MM.YY或YYYY-MM-DD其中Y是年,M是月,D是日
指定命令輸入完成后,使用ctrl+d退出at交互。 batch用法和at基本相同,但batch不用指定時間,該計劃任務將在系統空閑時執行。
2、crontab
crontab可以創建一個周期性執行的任務計劃。
root用戶可以為自己和其他用戶創建周期性任務計劃。其他用戶是否有權限創建周期性任務計劃,取決于/etc目錄下的cron.allow和cron.deny這兩個文件。當沒有這兩個文件時,只有root用戶可以為自己或其他用戶創建任務計劃;當存在cron.allow文件時,只有文件中允許的用戶可以創建任務計劃,而忽略有沒有cron.deny文件。當只有cron.deny文件時,文件中的用戶將不被允許創建任務計劃,不在文件中的用戶可以創建任務計劃。
crontd服務通過調用配置文件來執行計劃任務,分為系統cron和用戶cron。系統cron的配置文件為/etc/crontab,用戶的配置文件為/var/spool/cron/USERNAME
/etc/crontab格式為(用戶配置文件沒有user-name):?* user-name command to be executed
1* 表示分鐘 0-59
2* 表示小時 0-23
3* 表示天 0-31
4* 表示月 1-12
5* 表示周 0-7,0 7都表示周日
以上時間表示方法中,*代表任意取值都可以;可使用 num1-num2表示連續值;num1,num2表示離散值;/num 表示間隔num個單位,如在分鐘位置上/5表示每5分鐘。
例如: 05?表示每小時的5分鐘那一時刻
00 01?* 表示每天的01:00
03 01?1 表示每周一的01:03
可以通過編輯配置文件來創建任務計劃,但這樣做容易出現語法問題,通常通過crontab命令來創建任務計劃
在指定任務計劃時,可以執行腳本。
由于在執行任務計劃時,該任務計劃對應的用戶不一定登錄在系統上,此時,任務計劃中的命令,應該已完全路徑表示或者經命令的路徑在腳本中導入PATH環境變量,否則,很可能出現命令執行不成功。 例如,指定每周三凌晨三、五點10分執行某腳本,輸出時間,時間格式為2017-12-28 10:00:00
[root@koala etc]# crontab
10 03,05 * * 3 /tmp/crontest.sh
Ctrl+d 提交
[root@koala tmp]# vi crontest.sh
#!/bin/bash
/bin/date '+%Y-%m-%d %H:%M:%S'
[root@koala /]# cat /var/spool/cron/root
10 03,05 * * 3 /tmp/crontest.sh
不同linux發行版,date命令的路徑可能不同。
crontab常見的命令選項有: -e 編輯crontab -l 顯示 -r 移除所有crontab -u username 為指定用戶創建crontab ,只有root用戶可用
五、sed命令
sed stream editor 流編輯器,它是將指定文件或輸入的數據,逐行進行處理的命令,其基本用法是:
sed [OPTIONS] ‘AddressCommand’ file …
Address 表示行地址范圍,也就是Command的作用對象,
Address有下面幾種表示方法:
num1,num2 文件中從num1開始至num2結束的行
REG 正則表達式匹配到的行
/REG1/,/REG2/ 正則表達式REG1第一次匹配到的行至正則表達式REG2第一次匹配到的行
$ 最后一行
num1,+num2 從num1開始后的num2行
Command 命令 常用的命令有 d 刪除匹配到的行 p 顯示匹配到的行 a \string 在匹配到的行后增加一行 i \string 在匹配到的行前增加一行
注意:sed命令默認不修改源文件,只是將指定文件讀入模式空間,并予以顯示,意思是讀入該行后,改行就在模式空間內,如果使用d命令,則該匹配到的行將被從模式空間內刪除,最終結果就是沒有被匹配的行留在模式空間,并被顯示;如果使用p命令,則該文件會全部留在模式空間內,并被顯示,而匹配到的行也會被顯示,最終結果就是匹配到的行會顯示2次,未匹配到的行顯示1次。
常用選項有:
-r 可使用擴展正則表達式
-n 靜默模式
-i 修改源文件(慎用)
-f /path/to/scripts 讀入腳本文件執行
sed命令的查找替換
sed命令使用s 來完成查找替換
sed [options] ‘addresss/PATTERN/string/’ file …
其中,s///為固定格式,也可換為s@@@ s###
以上命令的含義是將file文件中被address匹配到的行中,第一次被PATTERN匹配到的字符串替換為string。注意只是第一次被匹配到的字符串會被替換,如果需要全局替換,則需要在第三個/或者@或者#后面加修飾符,常用的修飾符有g,表示全部替換;i,表示在使用PATTERN匹配時忽略大小寫。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/94864