Linux操作系统简介

文章目录

    • Linux发行版简介
    • 学习Linux的必备硬件知识
      • 关键硬件器件——CPU
      • 关键硬件器件——存储
      • 关键硬件器件——内存
      • 其他一些查看硬件信息的命令
    • Linux开机过程(以Ubuntu16.04为例)
      • 阶段1:BIOS
      • 阶段2:boot Loader
      • 阶段3:kernel
      • 阶段4:systemd
      • 阶段5:应用软件
    • Linux常用命令
      • 基本命令
        • 文件管理
        • 文本操作
        • 磁盘管理
        • 系统管理
        • 网络通信
        • 压缩解压
        • 查询硬件信息的命令
        • 多命令协作
      • git操作命令
    • Reference

Linux发行版简介

  • 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核的操作系统。

  • Linux 的发行版简单说就是将 Linux 内核与应用软件做一个打包。知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux

  • Linux发行版主要有DebianRedhat两大系列

Debian

Redhat

发行版代表

Debian,Ubuntu,Linux Mint

Redhat,CentOS,Fedora

软件包管理方式

dpkg(管理本地的软件包,无法处理依赖关系)、 apt(联网下载软件包,自动处理依赖关系)

rpm(管理本地的软件包,无法处理依赖关系)、 yum(联网下载软件包,自动处理依赖关系)

安装包格式

deb

rpm

学习Linux的必备硬件知识

关键硬件器件——CPU

CPU是计算机的运算核心和控制核心,部分CPU内置核芯显卡

  • x86架构:Intel、AMD、海光、兆芯等芯片
  • ARM架构:飞腾、鲲鹏等

查看CPU的信息

  • lscpu
  • 在这里插入图片描述
  • cat /proc/cpuinfo
  • 在这里插入图片描述

关键硬件器件——存储

类型

  • 固态硬盘(SSD):读写速度快,价格较高
  • 机械硬盘(HDD):读写速度慢,价格便宜,容量大
  • EMMC:多用于低端嵌入式设备,容量较小,云终端的EMMC有4GB、8GB、32GB几种规格

查看存储设备信息的命令

  • fdisk
  • 在这里插入图片描述
  • blkid
  • 在这里插入图片描述
  • smartctl
  • parted
  • lsblk
  • 在这里插入图片描述

关键硬件器件——内存

目前最新是DDR4技术,速率可达3.2GHz

分为板载和插槽两种接口

云桌面的瘦终端采用1-2GB内存,胖终端标配4G或8GB内存,服务器一般是16GB*N的内存

查看内存的命令

  • free
  • cat /proc/meminfo

其他一些查看硬件信息的命令

查看PCI设备信息:lspci
查看USB设备信息: lsusb
查看网卡信息:ifconfigethtoolip

Linux开机过程(以Ubuntu16.04为例)

  • 命令行中输入systemd-analyze plot > boot.svg,用浏览器查看boot.svg
  • 在这里插入图片描述
  • 从上图可看出开机过程包含了BIOS(firmware)、boot loaderkernelsystemd这4个阶段,再加上启动应用软件,共5个阶段
  • 在这里插入图片描述
  • 虚拟中运行的Ubuntu则没有BIOS(firmware)和boot loader这两个阶段。

阶段1:BIOS

BIOS是(Basic Input Output System),是一组固化到计算机内主板上一个ROM芯片上的程序。它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。X86架构才有BIOS,ARM架构没有BIOS

DMI

  • DMI (Desktop Management Interface)是帮助收集电脑系统信息的管理系统。通过DMI可以在Linux中查询到包括CPU、内存、I/O扩展槽等在内的系统配置信息。DMI通常将上述信息存储在BIOS中一个4KB大小的DMI数据区中

  • 云终端的产品ID、产品型号、硬件版本、SN都存储在DMI中,可通过dmidecode命令查看。

BIOS与boot loader

  • MBR与GPT
    MBR:Master Boot Record,主引导扇区,它在硬盘上的三维地址为**(柱面,磁头,扇区)=(0,0,1)**。MBR中存放着boot loader(446字节)、分区表(64字节)和硬盘有效标志(55AA) 。MBR最多只能支持4个主分区,无法支持超过2T的硬盘。
    GPT: GUID Partition Table ,是一个实体硬盘的分区结构。最多支持 128 个分区,允许大于 2 TB 的卷容量

Legacy BIOS 与UEFI BIOS

Legacy BIOS:传统BIOS。Legecy BIOS从MBR中寻找boot loader。目前云桌面的服务器大多还是用Legacy BIOS。

UEFI BIOS:只支持64位系统且磁盘分区必须为GPT模式,可引导大于2T的硬盘,更快的启动速度。 UEFI BIOS会自动搜索硬盘根目录的EFI目录,而boot loader就在EFI文件夹中。目前云终端都采用UEFI BIOS。

**总结:**BIOS从硬盘的特定位置寻找boot loader

阶段2:boot Loader

主要功能

  • 提供选择菜单,让使用者选择不同的开机项
  • 加载内核,启动操作系统
  • 将开机管理功能转交其他boot loader负责

常见的boot loader有GRUB(GRand Unified Bootloader )ubootLILO,云桌面的终端和服务器都使用GRUB

为什么平时一般见不到BootLoader的界面?因为超时时间被设为0了,直接从默认的启动项启动

  • 修改终端的grub超时时间:vim.tiny /boot/grub/custom.cfg,将第一行的set timeout=0改为set timeout=3

  • 查看grub.cfg:vi /boot/grub/grub.cfg

修改grub配置以及grub配置文件的各种设置选项:

https://help.ubuntu.com/community/Grub2/Setup

https://www.jianshu.com/p/a24d51276a82

https://blog.csdn.net/mr_zing/article/details/41055617

https://blog.csdn.net/dc_show/article/details/47396649

https://blog.csdn.net/shana_8/article/details/81455657

gurb.cfg

grub.cfg中,会用到/boot/vmlinuz/boot/initrd.img两个文件

vmlinuz是可引导的、压缩的内核。“vm”代表 “Virtual Memory”,z代表用gzip压缩
initrd.img是个RAM Disk(通过软件将一部分RAM模拟为硬盘的技术)的映像文件,里面包含了linux启动时需要的目录、可执行文件、内核驱动模块等。

阶段3:kernel

在这里插入图片描述
当前流行的Linux版本一般都采用模块化的内核,这种方式可以在不重新编译构建内核的情形下增加功能模块(ko)。但考虑一种场景,如果磁盘是EMMC的,但相应驱动没有编译进kernel,kernel就无法访问磁盘了,更谈不上加载ko了。这时候就需要用到RAM Disk技术了。

  1. boot loader载入kernelinitrd.img到内存中

  2. kernel启动后自解压,initrd.img的内容挂载为init根文件系统

  3. kernel从init根文件系统中加载所需功能模块

  4. kernel会根据grub.cfg中“root=XXX”部分所指定的内容创建一个根设备,然后将根文件系统以只读的方式挂载,并切换到真正的根文件系统上

  5. 调用systemd程序,进入系统初始化阶段。

详细流程可以参考man initrd

Bootloader引导内核后,进入第三个阶段:内核。这边并不打算介绍内核的函数调用流程,因为目前我自己在工作中还没遇到需要解决的问题。今天想要介绍的是内核阶段可能存在两个根文件系统。

阶段4:systemd

systemdLinux 系统中最新的初始化系统,它主要的设计目标是克服 sysv init 固有的缺点,提高系统的启动速度。

在硬件驱动成功后,kernel 会主动呼叫 systemd 。从右图可以看出,graphical.targetmulti-user.tartgetbasic.targetsysinit.target存在依次依赖的关系,systemd按照依赖关系并发启动target包含的服务后,完成图形界面的启动

rc-local.service会执行/etc/rc.local,自研脚本可以从/etc/rc.local中进行启动

在这里插入图片描述

阶段5:应用软件

使用pstree可以查看进程树。可以看到systemd的PID为1,所有应用软件都是从systemd派生出来的

学习完linux开机的5个阶段,请大家思考下,我们学习这部分知识的目的是什么,能解决什么问题?

1 开机速度的优化

2 定位BUG在哪个阶段发生

3 调试,例如grub选择内核,编辑启动参数

4 功能开发,例如自研脚本的加入,systemd服务的编写
在这里插入图片描述

Linux常用命令

基本命令

文件管理

ls, mv, cp, rm, chown, chmod, mkdir, find, touch, ln

  • ls

    ls [-alrtAFR] [name...]
    参数 :
    -a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
    -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
    -r 将文件以相反次序显示(原定依英文字母次序)
    -t 将文件依建立时间之先后次序列出
    -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
    -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
    -R 若目录下有文件,则以下之文件亦皆依序列出
    
  • mv

    mv [options] source dest
    mv [options] source... directory
    参数说明:
    
    -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
    -f: 在mv操作要覆盖某已有的目标文件时不给任何指示;
    
    • mv参数设置与运行结果

      命令格式

      运行结果

      mv 文件名 文件名

      将源文件名改为目标文件名

      mv 文件名 目录名

      将文件移动到目标目录

      mv 目录名 目录名

      目标目录已存在,将源目录 移动到目标目录;目标 目录不存在则改名

      mv 目录名 文件名

      出错

  • cp

    cp [options] source dest
    cp [options] source... directory
    参数说明:
    -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
    -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
    -f:覆盖已经存在的目标文件而不给出提示。
    -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
    -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
    -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
    -l:不复制文件,只是生成链接文件。
    
  • rm

    rm [options] name...
    参数:
    -i 删除前逐一询问确认。
    -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
    -r 将目录及以下之档案亦逐一删除。
    
  • chown

    chown [-cfhvR] [--help] [--version] user[:group] file...
    参数 :
    user : 新的文件拥有者的使用者 ID
    group : 新的文件拥有者的使用者组(group)
    -c : 显示更改的部分的信息
    -f : 忽略错误信息
    -h :修复符号链接
    -v : 显示详细的处理信息
    -R : 处理指定目录以及其子目录下的所有文件
    --help : 显示辅助说明
    --version : 显示版本
    实例
    将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :
    chown runoob:runoobgroup file1.txt
    将目前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:
    chown -R runoob:runoobgroup *
    
  • chmod

    chmod [-cfvR] [--help] [--version] mode file...
    参数说明
    mode : 权限设定字串,格式如下 :
    [ugoa...][[+-=][rwxX]...][,...]
    其中:
    u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
    + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
    r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
    其他参数说明:
    -c : 若该文件权限确实已经更改,才显示其更改动作
    -f : 若该文件权限无法被更改也不要显示错误讯息
    -v : 显示权限变更的详细资料
    -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
    --help : 显示辅助说明
    --version : 显示版本
    实例
    将文件 file1.txt 设为所有人皆可读取:
    chmod ugo+r file1.txt
    将文件 file1.txt 设为所有人皆可读取:
    chmod a+r file1.txt
    将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
    chmod ug+w,o-w file1.txt file2.txt
    将 ex1.py 设定为只有该文件拥有者可以执行:
    chmod u+x ex1.py
    将目前目录下的所有文件与子目录皆设为任何人可读取:
    chmod -R a+r *
    此外chmod也可以用数字来表示权限如:
    chmod 777 file
    语法为:
    chmod abc file
    其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
    r=4,w=2,x=1
    若要rwx属性则4+2+1=7;
    若要rw-属性则4+2=6;
    若要r-x属性则4+1=5。
    chmod a=rwx file
    和
    chmod 777 file
    效果相同
    chmod ug=rwx,o=x file
    和
    chmod 771 file
    效果相同
    若用chmod 4755 filename可使此程序具有root的权限
    
  • mkdir

    mkdir [-p] dirName
    参数说明:
    -p 确保目录名称存在,不存在的就建一个。
    实例
    在工作目录下,建立一个名为 AAA 的子目录 :
    mkdir AAA
    在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。 若 BBB 目录原本不存在,则建立一个。(注:本例若不加 -p,且原本 BBB目录不存在,则产生错误。)
    mkdir -p BBB/Test
    
  • find

    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} ;
    参数说明 :
    find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
    expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
    -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
    -amin n : 在过去 n 分钟内被读取过
    -anewer file : 比文件 file 更晚被读取过的文件
    -atime n : 在过去n天内被读取过的文件
    -cmin n : 在过去 n 分钟内被修改过
    -cnewer file :比文件 file 更新的文件
    -ctime n : 在过去n天内被修改过的文件
    -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
    -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
    -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
    -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 文件类型是 c 的文件。
    d: 目录
    c: 字型装置文件
    b: 区块装置文件
    p: 具名贮列
    f: 一般文件
    l: 符号连结
    s: socket
    -pid n : process id 是 n 的文件
    你可以使用 ( ) 将运算式分隔,并使用下列运算。
    exp1 -and exp2
    ! expr
    -not expr
    exp1 -or exp2
    exp1, exp2
    实例
    将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
    # find . -name "*.c"
    将目前目录其其下子目录中所有一般文件列出
    # find . -type f
    将目前目录及其子目录下所有最近 20 天内更新过的文件列出
    # find . -ctime -20
    查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
    # find /var/log -type f -mtime +7 -ok rm {} ;
    查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
    # find . -type f -perm 644 -exec ls -l {} ;
    为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
    # find / -type f -size 0 -exec ls -l {} ;
    
  • touch

    touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]
    参数说明:
    a 改变档案的读取时间记录。
    m 改变档案的修改时间记录。
    c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
    f 不使用,是为了与其他 unix 系统的相容性而保留。
    r 使用参考档的时间记录,与 --file 的效果一样。
    d 设定时间与日期,可以使用各种不同的格式。
    t 设定档案的时间记录,格式与 date 指令相同。
    --no-create 不会建立新档案。
    --help 列出指令格式。
    --version 列出版本讯息。
    实例
    使用指令"touch"修改文件"testfile"的时间属性为当前系统时间,输入如下命令:
    $ touch testfile                #修改文件的时间属性
    首先,使用ls命令查看testfile文件的属性,如下所示:
    $ ls -l testfile                #查看文件的时间属性
    #原来文件的修改时间为16:09  
    -rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile  
    执行指令"touch"修改文件属性以后,并再次查看该文件的时间属性,如下所示:
    $ touch testfile                #修改文件时间属性为当前系统时间  
    $ ls -l testfile                #查看文件的时间属性  
    #修改后文件的时间属性为当前系统时间  
    -rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile  
    使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件"file",输入如下命令:
    $ touch file            #创建一个名为“file”的新的空白文件 
    
  • ln

     ln [参数][源文件或目录][目标文件或目录]
     其中参数的格式为
    [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
    [--help] [--version] [--]
    命令功能 : 
    Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
    不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
    软链接:
    1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
    2.软链接可以 跨文件系统 ,硬链接不可以
    3.软链接可以对一个不存在的文件名进行链接
    4.软链接可以对目录进行链接
    硬链接:
    1.硬链接,以文件副本的形式存在。但不占用实际空间。
    2.不允许给目录创建硬链接
    3.硬链接只有在同一个文件系统中才能创建
    命令参数
    必要参数:
    -b 删除,覆盖以前建立的链接
    -d 允许超级用户制作目录的硬链接
    -f 强制执行
    -i 交互模式,文件存在则提示用户是否覆盖
    -n 把符号链接视为一般目录
    -s 软链接(符号链接)
    -v 显示详细的处理过程
    选择参数:
    -S "-S<字尾备份字符串> "或 "--suffix=<字尾备份字符串>"
    -V "-V<备份方式>"或"--version-control=<备份方式>"
    --help 显示帮助信息
    --version 显示版本信息
    实例
    给文件创建软链接,为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效:
    ln -s log2013.log link2013
    输出:
    [root@localhost test]# ll
    -rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
    [root@localhost test]# ln -s log2013.log link2013
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
    -rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
    给文件创建硬链接,为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同
    ln log2013.log ln2013
    输出:
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
    -rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
    [root@localhost test]# ln log2013.log ln2013
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
    -rw-r--r-- 2 root bin      61 11-13 06:03 ln2013
    -rw-r--r-- 2 root bin      61 11-13 06:03 log2013.log
    
文本操作

grep, cat, wc, cut, awk, sed, tr

  • grep

    grep 命令用于查找文件里符合条件的字符串。
    grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
    语法
    grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
    参数:
    -a 或 --text : 不要忽略二进制的数据。
    -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
    -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
    -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
    -c 或 --count : 计算符合样式的列数。
    -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
    -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
    -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
    -E 或 --extended-regexp : 将样式为延伸的普通表示法来使用。
    -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
    -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
    -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
    -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
    -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
    -i 或 --ignore-case : 忽略字符大小写的差别。
    -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
    -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
    -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
    -o 或 --only-matching : 只显示匹配PATTERN 部分。
    -q 或 --quiet或--silent : 不显示任何信息。
    -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
    -s 或 --no-messages : 不显示错误信息。
    -v 或 --revert-match : 显示不包含匹配文本的所有行。
    -V 或 --version : 显示版本信息。
    -w 或 --word-regexp : 只显示全字符合的列。
    -x --line-regexp : 只显示全列符合的列。
    -y : 此参数的效果和指定"-i"参数相同。
    
    实例
    1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
    grep test *file 
    结果如下所示:
    $ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件  
    testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
    testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
    testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 
    2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
    grep -r update /etc/acpi 
    输出结果如下:
    $ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  
    /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 
    3、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
    查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
    grep -v test *test*
    结果如下所示:
    $ grep-v test* #查找文件名中包含test 的文件中不包含test 的行  
    testfile1:helLinux!  
    testfile1:Linis a free Unix-type operating system.  
    testfile1:Lin  
    testfile_1:HELLO LINUX!  
    testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
    testfile_1:THIS IS A LINUX TESTFILE!  
    testfile_2:HELLO LINUX!  
    testfile_2:Linux is a free unix-type opterating system.  
    
  • cat

    cat [-AbeEnstTuv] [--help] [--version] fileName
    参数说明:
    -n 或 --number:由 1 开始对所有输出的行数编号。
    -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
    -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
    -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
    -E 或 --show-ends : 在每行结束处显示 $。
    -T 或 --show-tabs: 将 TAB 字符显示为 ^I。
    -A, --show-all:等价于 -vET。
    -e:等价于"-vE"选项;
    -t:等价于"-vT"选项;
    实例:
    把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
    cat -n textfile1 > textfile2
    把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
    cat -b textfile1 textfile2 >> textfile3
    清空 /etc/test.txt 文档内容:
    cat /dev/null > /etc/test.txt
    cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:
    cat /dev/fd0 > OUTFILE
    相反的,如果想把 image file 写到软盘,输入:
    cat IMG_FILE > /dev/fd0
    注:
    1. OUTFILE 指输出的镜像文件名。
    2. IMG_FILE 指镜像文件。
    3. 若从镜像文件写回 device 时,device 容量需与相当。
    4. 通常用制作开机磁片。
    
  • wc

    Linux wc命令用于计算字数。
    利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
    语法
    wc [-clw][--help][--version][文件...]
    参数:
    -c或--bytes或--chars 只显示Bytes数。
    -l或--lines 只显示行数。
    -w或--words 只显示字数。
    --help 在线帮助。
    --version 显示版本信息。
    实例
    在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:
    wc testfile 
    先查看testfile文件的内容,可以看到:
    $ cat testfile  
    Linux networks are becoming more and more common, but scurity is often an overlooked issue. Unfortunately, in today’s environment all networks are potential hacker targets, fro0m tp-secret military research networks to small home LANs.  
    Linux Network Securty focuses on securing Linux in a networked environment, where the security of the entire network needs to be considered rather than just isolated machines. It uses a mix of theory and practicl techniques to teach administrators how to install and use security applications, as well as how the applcations work and why they are necesary. 
    使用 wc统计,结果如下:
    $ wc testfile           # testfile文件的统计信息  
    3 92 598 testfile       # testfile文件的行数为3、单词数92、字节数598 
    其中,3 个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。
    如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:
    wc testfile testfile_1 testfile_2   #统计三个文件的信息 
    输出结果如下:
    $ wc testfile testfile_1 testfile_2  #统计三个文件的信息  
    3 92 598 testfile                    #第一个文件行数为3、单词数92、字节数598  
    9 18 78 testfile_1                   #第二个文件的行数为9、单词数18、字节数78  
    3 6 32 testfile_2                    #第三个文件的行数为3、单词数6、字节数32  
    15 116 708 总用量                    #三个文件总共的行数为15、单词数116、字节数708 
    
  • cut

    Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字。
    语法
    cut  [-bn] [file]
    cut [-c] [file]
    cut [-df] [file]
    使用说明:
    cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
    如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
    参数:
    -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
    -c :–characters=列表 只选中指定的这些字符以字符为单位进行分割。
    -d : –delimiter=分界符 使用指定分界符代替制表符作为区域分界,默认为制表符。
    -f :–fields=LIST与-d一起使用,指定显示哪个区域。
    -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除
    实例
    当你执行who命令时,会输出类似如下的内容:
    $ who
    rocrocket :0           2009-01-08 11:07
    rocrocket pts/0        2009-01-08 11:23 (:0.0)
    rocrocket pts/1        2009-01-08 14:15 (:0.0)
    如果我们想提取每一行的第3个字节,就这样:
    $ who|cut -b 3
    c
    c
    //显示查询结果的 1-10个字符
    ll | cut -c 1-10 
    //显示用空格切割后的 第一个元素
    ll | cut -d ' ' -f 1
    history |uniq|cut -c 8-999
    #截取8到999位的内容
    cat /etc/passwd|awk 'NR==1' |cut -c 1,8,10,15,22-
    #过滤passwd密码第一行,截取指定位置,22- 为22位以后所有字符,-10为10位之前
    
  • awk

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
    之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
    语法
    awk [选项参数] 'script' var=value file(s)
    或
    awk [选项参数] -f scriptfile var=value file(s)
    选项参数说明:
    -F fs or --field-separator fs
    指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
    -v var=value or --asign var=value
    赋值一个用户定义变量。
    -f scripfile or --file scriptfile
    从脚本文件中读取awk命令。
    -mf nnn and -mr nnn
    对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
    -W compact or --compat, -W traditional or --traditional
    在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
    -W copyleft or --copyleft, -W copyright or --copyright
    打印简短的版权信息。
    -W help or --help, -W usage or --usage
    打印全部awk选项和每个选项的简短说明。
    -W lint or --lint
    打印不能向传统unix平台移植的结构的警告。
    -W lint-old or --lint-old
    打印关于不能向传统unix平台移植的结构的警告。
    -W posix
    打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
    -W re-interval or --re-inerval
    允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
    -W source program-text or --source program-text
    使用program-text作为源代码,可与-f命令混用。
    -W version or --version
    打印bug报告信息的版本。
    基本用法
    log.txt文本内容如下:
    2 this is a test
    3 Are you like awk
    This's a test
    10 There are orange,apple,mongo
    用法一:
    awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号
    实例:
    # 每行按空格或TAB分割,输出文本中的1、4项
     $ awk '{print $1,$4}' log.txt
     ---------------------------------------------
     2 a
     3 like
     This's
     10 orange,apple,mongo
     # 格式化输出
     $ awk '{printf "%-8s %-10s
    ",$1,$4}' log.txt
     ---------------------------------------------
     2        a
     3        like
     This's
     10       orange,apple,mongo
     
    用法二:
    awk -F  #-F相当于内置变量FS, 指定分割字符
    实例:
    # 使用","分割
     $  awk -F, '{print $1,$2}'   log.txt
     ---------------------------------------------
     2 this is a test
     3 Are you like awk
     This's a test
     10 There are orange apple
     # 或者使用内建变量
     $ awk 'BEGIN{FS=","} {print $1,$2}'     log.txt
     ---------------------------------------------
     2 this is a test
     3 Are you like awk
     This's a test
     10 There are orange apple
     # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
     $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
     ---------------------------------------------
     2 this test
     3 Are awk
     This's a
     10 There apple
    用法三:
    awk -v  # 设置变量
    实例:
     $ awk -va=1 '{print $1,$1+a}' log.txt
     ---------------------------------------------
     2 3
     3 4
     This's 1
     10 11
     $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
     ---------------------------------------------
     2 3 2s
     3 4 3s
     This's 1 This'ss
     10 11 10s
    用法四:
    awk -f {awk脚本} {文件名}
    实例:
     $ awk -f cal.awk log.txt
    

    https://www.runoob.com/linux/linux-comm-awk.html

  • sed

    Linux sed 命令是利用脚本来处理文本文件。
    sed 可依照脚本的指令来处理、编辑文本文件。
    Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
    语法
    sed [-hnV][-e
                        
                        

你可能感兴趣的:(java,java,后端)