Linux文件查找及壓縮

Linux文件查找(locate & find)

locate

    查詢系統上預建的文件索引數據庫(速度快,但更新不實時)

    /var/lib/mlocate/mlocate.db

    依賴于事先構建的索引

    索引的構建是在系統較為空閑時自動進行(周期性任務), 管理員手動更新數據庫(updatedb,實際生產環境中不建議使用)

    索引構建過程需要遍歷整個根文件系統,極消耗資源


工作特點:

    查找速度快

    模糊查找

    非實時查找

    搜索的是文件的全路徑,不僅僅是文件名

    可能只搜索用戶具備讀取和執行權限的目錄


用法

    locate KEYWORD

    選項

        ? -i 執行區分大小寫的搜索

        ? -n N 只列舉前N個匹配項目

         locate foo

        ? 搜索名稱或路徑中帶有“ foo”的文件

         locate -r ‘\.foo$’

        ? 使用Regex來搜索以“ .foo”結尾的文件


find ( 精確查找,支持匹配符;只搜索磁盤文件(如proc不搜);默認自帶遞歸)

    實時查找工具,通過遍歷指定路徑完成文件查找;

工作特點:

    ? 查找速度略慢

    ? 精確查找

    ? 實時查找

    ? 可能只搜索用戶具備讀取和執行權限的目錄

語法:

    find [OPTION]… [查找路徑] [查找條件] [處理動作]

    查找路徑:指定具體目標路徑;默認為當前目錄

    查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件

    處理動作:對符合條件的文件做操作,默認輸出至屏幕(如 -ls )

根據文件名和inode查找

    -name "文件名稱":支持使用glob

    *, ?, [], [^]

    -iname "文件名稱":不區分字母大小寫

    -inum n 按inode號查找

    -samefile name 相同inode號的文件

    -links n 鏈接數為n的文件

    -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱

根據屬主、屬組查找:(僅根據UID號 GID號進行搜索,并不會根據用戶名和組名進行搜索)

    -user USERNAME:查找屬主為指定用戶(UID)的文件

    -group GRPNAME: 查找屬組為指定組(GID)的文件

    -uid UserID:查找屬主為指定的UID號的文件

    -gid GroupID:查找屬組為指定的GID號的文件

    -nouser:查找沒有屬主的文件

    -nogroup:查找沒有屬組的文件

根據文件類型查找:

-type TYPE:

    f: 普通文件

    d: 目錄文件

    l: 符號鏈接文件

    s:套接字文件

    b: 塊設備文件

    c: 字符設備文件

    p: 管道文件

組合條件:(與 -a 的優先級比 或 -o  的優先級要高 ; 如果命令中有先計算或 -o然后再計算與-a的,要加括號 ;  (      -o      )       -a      )     )

    與: -a

    或: -o

    非: -not, !

    德·摩根定律:

    (非 P) 或 (非 Q) = 非(P 且 Q)

    (非 P) 且 (非 Q) = 非(P 或 Q)

    示例:

    !A -a !B = !(A -o B)

    !A -o !B = !(A -a B)


例子

    find -name snow.png

    ? 搜索名為snow.png的文件

    find -iname snow.png

    ? 不分大小寫地搜索名為snow.png、 Snow.png、SNOW.PNG等等的文件

    find / -name “*.txt”

    find /var –name “*log*”

    find -user joe -group joe

    搜索被用戶joe 以及組群joe所擁有的文件

    find -user joe -not -group joe

    find -user joe -o -user jane

    find -not \( -user joe -o -user jane \)

    find / -user joe -o -uid 500

    找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件

    find /tmp \( -not -user root -a -not -name 'f*' \) -ls

    find /tmp -not \( -user root -o -name 'f*' \) –ls

排除目錄

    示例:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴的文件

    find /etc -path ‘/etc/sane.d’ -a -prune

    -o -name “*.conf” -print

根據文件大小來查找

    -size [+|-]#UNIT    //-size 10k 只是搜索大小為(9-10]K的文件

常用單位: k, M, G

    #UNIT: (#-1, #]

    如: 6k 表示(5k,6k]

    -#UNIT: [0,#-1]

    如: -6k 表示[0,5k]

    +#UNIT: (#,∞)

    如: +6k 表示(6k,∞)

根據時間戳:(正數為未來時間,修改時間;負數為過去時間)

以“天”為單位;

    -atime [+|-]#,    

    #: [#,#+1)        // -atime 7 : [7,8)

    +#: [#+1,∞]      //atime +7 : [8,∞]

    -#: [0,#)            //atime -7 : [0,7)

    -mtime

    -ctime

以“分鐘”為單位

    -amin

    -mmin

    -cmin

根據權限查找:

    -perm [/|-]MODE

    MODE: 精確權限匹配(權限前不帶任何符號,即為精確匹配)

    /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配

    即可,或關系, + : centos7之前的版本用 ; centos7開始用 /

    MODE:每一類對象都必須同時擁有指定權限,與關系

    0 表示不關注(什么權限都可以,湊數)

    find -perm 755 會匹配權限模式恰好是755的文件

    只要當任意人有寫權限時, find -perm +222就會匹配

    只有當每個人都有寫權限時, find -perm -222才會匹配

    只有當其它人( other)有寫權限時, find -perm -002才會匹配

處理動作:

     -print:默認的處理動作,顯示至屏幕;

    -ls:類似于對查找到的文件執行“ ls -l”命令

    -delete:刪除查找到的文件;

    -fls file:查找到的所有文件的長格式信息保存至指定文件中

    -ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;對于每個文件執行命令之前,都會交互式要求用戶確認

    -exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;(直接執行,不會要求用戶確認)

    {}: 用于引用查找到的文件名稱自身

find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令

有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題

    find | xargs COMMAND

    -0 換行

    -rm 刪除

軟件包管理

軟件運行環境

    API: Application Programming Interface

    POSIX: Portable OS

    程序源代碼 –> 預處理 –> 編譯 –> 匯編 –> 鏈接

    靜態編譯:

    共享編譯: .so

    ABI: Application Binary Interface

    Windows與Linux不兼容

    ELF(Executable and Linkable Format)

    PE( Portable Executable)

    庫級別的虛擬化:

    Linux: WINE

    Windows: Cywin


C程序編譯過程

Linux文件查找及壓縮

Java程序運行

Linux文件查找及壓縮

開發語言

    系統級開發

        C

        C++

    應用級開發

        java

        delphi

        Python

        go

        php

        perl

        ruby

包管理器

    二進制應用程序的組成部分:

    二進制文件、庫文件、配置文件、幫助文件

    程序包管理器:

    debian: deb文件, dpkg包管理器

    redhat: rpm文件, rpm包管理器

    rpm: Redhat Package Manager

    RPM Package Manager

包命名

    源代碼: name-VERSION.tar.gz|bz2|xz

    VERSION: major.minor.release

    rpm包命名方式:

    name-VERSION-release.arch.rpm

    例: bash-4.2.46-19.el7.x86_64.rpm

    VERSION: major.minor.release

    release: release.OS

常見的arch:

    x86: i386, i486, i586, i686

    x86_64: x64, x86_64, amd64

    powerpc: ppc

    跟平臺無關: noarch

1.png

包命名和工具

    包:分類和拆包

        Application-VERSION-ARCH.rpm: 主包

        Application-devel-VERSION-ARCH.rpm 開發子包

        Application-utils-VERSION-ARHC.rpm 其它子包

        Application-libs-VERSION-ARHC.rpm 其它子包

    包之間:可能存在依賴關系,甚至循環依賴解決依賴包管理工具:

        yum: rpm包管理器的前端工具

        apt-get: deb包管理器前端工具

        zypper: suse上的rpm前端管理工具

        dnf: Fedora 18+ rpm包管理器前端管理工具

庫文件

    查看二進制程序所依賴的庫文件:

    ldd /PATH/TO/BINARY_FILE

    管理及查看本機裝載的庫文件:

    ldconfig

    /sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件

    名及文件路徑映射關系

    配置文件: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

    緩存文件: /etc/ld.so.cache


包管理器

    程序包管理器:

    功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

1、包文件組成 (每個包獨有)

    RPM包內的文件

    RPM的元數據,如名稱,版本,依賴性,描述等

    安裝或卸載時運行的腳本

2、數據庫(公共)

    程序包名稱及版本

    依賴關系

    功能說明

    包安裝后生成的各文件路徑及校驗碼信息

程序包的來源

    管理程序包的方式:

    使用包管理器: rpm

    使用前端工具: yum, dnf

    獲取程序包的途徑:

    (1) 系統發版的光盤或官方的服務器;

        CentOS鏡像:

        https://www.centos.org/download/

        http://mirrors.aliyun.com

        http://mirrors.sohu.com

        http://mirrors.163.com

    (2) 項目官方站點

        程序包的來源

    (3) 第三方組織:

        Fedora-EPEL:

        Extra Packages for Enterprise Linux

        Rpmforge:RHEL推薦,包很全

    搜索引擎:

        http://pkgs.org

        http://rpmfind.net

        http://rpm.pbone.net

        https://sourceforge.net/

    (4) 自己制作

        注意:檢查其合法性: 來源合法性,程序包的完整性

rpm包管理

    CentOS系統上使用rpm命令管理程序包:

    安裝、卸載、升級、查詢、校驗、數據庫維護

安裝

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

    -v: verbose

    -vv:

    -h: 以#顯示程序包管理執行進度

    rpm -ivh PACKAGE_FILE …

rpm包安裝

    [install-options]

    –test: 測試安裝,但不真正執行安裝; dry run模式

    –nodeps:忽略依賴關系

    –replacepkgs | replacefiles

    –nosignature: 不檢查來源合法性

    –nodigest:不檢查包完整性

    –noscipts:不執行程序包腳本片斷

    %pre: 安裝前腳本; –nopre

    %post: 安裝后腳本; –nopost

    %preun: 卸載前腳本; –nopreun

    %postun: 卸載后腳本; –nopostun

rpm包升級

    升級:

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

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

    upgrade:安裝有舊版程序包,則“升級”

    如果不存在舊版程序包,則“安裝”

    freshen:安裝有舊版程序包,則“升級”

    如果不存在舊版程序包,則不執行升級操作

    rpm -Uvh PACKAGE_FILE …

    rpm -Fvh PACKAGE_FILE …

    –oldpackage:降級

    –force: 強行升級

升級注意項

    注意:

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

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



1、寫個腳本:

   *

 ***

******

********

================================================

#!/bin/bash
#
read -p "Do you want to see how many floors ? " y
r=1
l=1
o="\033[42m \033[0m"
p="\033[42m*\033[0m"
if echo $y | egrep -q "^[[:digit:]]+$";then
#判斷用戶輸入的是否為純數字
while [[ $r -le $y ]];do
#判讀打印的行是否大于用戶要求的行
while [[ $l -le $[$[$y*2]-1] ]];do
#固定行,根據光標所在的列有要求的打印空格或者*
if [[ $l -le $[$y-$r] ]];then
echo -ne $o
elif  [[ $l -ge $[$[$[2*$r]+$y]-$r]  ]] ;then
echo -ne $o
else
echo -ne $p
fi
let l++
done
echo
let r++
l=1
done
else
echo "please try again"
fi




2、用until循環實現國際象棋棋盤

#!/bin/bash
#
r="\033[41m \033[0m"
u="\033[42m \033[0m"
l=1
h=1
until [[ $l -gt 8 ]];do
until [[ $h -gt 8 ]];do
[[ $[$h+$l]%2 -eq 0 ]] && echo -en $r || echo -en $u
let h++
done
echo
h=1
let l++
done


    

原創文章,作者:hunter,如若轉載,請注明出處:http://www.www58058.com/36368

(0)
hunterhunter
上一篇 2016-08-19
下一篇 2016-08-19

相關推薦

  • wed服務基礎·httpd基礎配置詳解

    一、 Web Service基礎: service:計算機后臺提供的功能或計算機可以提供的某一種功能 Web Service本質:通過網絡調用其它網站的資源 根據來源的不同,分為兩種服務: 本地服務:使用同一臺機器提供的服務,不需要網絡 網絡服務:使用另一臺機器提供的服務,需要網絡   IANA互聯網地址授權機構(Internet Assigned…

    2017-06-09
  • CentOS 7上的性能監控工具

    Linux中基于命令行的性能監控工具:dstat、top、netstat、vmstat、htop、ss、glances 1、dstat – 多類型資源統計工具(需配置epel源)   該命令整合了vmstat,iostat和ifstat三種命令。同時增加了新的特性和功能可以讓你能及時看到各種的資源使用情況,從而能夠使你對比和整…

    Linux干貨 2016-09-07
  • Linux文件類型以及顏色標識

    1、Linux文件類型介紹   Linux系統不同于window系統,兩者文件類型也有很大的差異。Linux文件類型和Linux文件的文件名所代表的意義是兩個不同的概念。我們通過一般應用程序而創建的比如file.txt、file.tar.gz,這些文件雖然要用不同的程序來打開,但放在Linux文件類型中衡量的話,大多是常規文件(也被稱為普…

    Linux干貨 2016-10-17
  • CentOS6 ELK實現

    1 簡介 我們來介紹Centos6.5基于SSL密碼認證部署ELK(Elasticsearch 1.4.4+Logstash 1.4.2+kibana3),同時為大家介紹如何集合如上組件來收集日志,本章的日志收集主要為大家介紹SYSTEM日志收集. 集中化日志收集主要應用場景是在同一個窗口臨時性或永久性鑒定分析系統,應用等各類日志,對用戶提供極大便…

    Linux干貨 2017-05-17
  • Linux發展及簡單命令

    一 計算機的組成及其功能 馮·諾依曼提出的計算機體系結構:計算機由控制器、運算器、存儲器、輸入設備、輸出設備五部分組成。 二?Linux的發行版 Linux發行版主要有三個分支:Debian、Slackware、Redhat。 (1)Debian:(以社區的方式運作) Ubuntu:基于Debian開發的開源Linux操作系統,主要針對桌面和服務器; Lin…

    2018-03-02

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 13:21

    文章對一些概念的東西進行了羅列,也不解釋這是什么,是用來做什么的,就跟筆記一樣,望以后能該進。

欧美性久久久久