Linux操作系统

Linux操作系统

简介:Linux操作系统课程笔记,根据课程ppt以及自己的作业完成情况进行编写示例代码

环境安装

  • Centos7.6

常用命令及文件操作

提示符

例如:[zouran@localhost ~]$ 是shell主提示符。其中

“zouran”表示当前用户名

“localhost”是默认的主机名

“~”表示默认用户主目录

“$ ” 表示当前用户是普通用户。

“# ”表示超级用户。

简单命令

who 命令
  • 列出所有正在使用系统的用户、所用终端名和注册到系统的时间

    [zouran@localhost ~]$ who
    zouran   pts/0        2023-11-08 03:34 (192.168.195.1)
    [zouran@localhost ~]$ who am i
    zouran   pts/0        2023-11-08 03:34 (192.168.195.1)
    
echo命令
  • 将命令行中的参数显示到标准输出(即屏幕)上,使用’'包括时完整输出,否则自动去空格

    [zouran@localhost ~]$ echo Hello World!
    Hello World!
    [zouran@localhost ~]$ echo 'Hello   World!'
    Hello   World!
    [zouran@localhost ~]$ echo Hello   World!
    Hello World!
    
date命令
  • 在屏幕上显示或设置系统的日期和时间 -u 世界时–格林尼治标准时间

    [zouran@localhost ~]$ date -u
    Wed Nov  8 11:59:03 UTC 2023
    
  • 如果没有选项和参数,将直接显示系统当前的日期和时间

    [zouran@localhost ~]$ date
    Wed Nov  8 03:59:07 PST 2023
    
cal命令
  • 显示公元1~9999年中任意一年或者任意一个月的日历

    [zouran@localhost ~]$ cal
        November 2023   
    Su Mo Tu We Th Fr Sa
              1  2  3  4
     5  6  7  8  9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30
    
  • 列出公元10年的日历,而不是当年10月份的日历

    [zouran@localhost ~]$ cal 10
                                    10                                
    
           January               February                 March       
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
              1  2  3  4                      1                      1
     5  6  7  8  9 10 11    2  3  4  5  6  7  8    2  3  4  5  6  7  8
    12 13 14 15 16 17 18    9 10 11 12 13 14 15    9 10 11 12 13 14 15
    19 20 21 22 23 24 25   16 17 18 19 20 21 22   16 17 18 19 20 21 22
    26 27 28 29 30 31      23 24 25 26 27 28      23 24 25 26 27 28 29
                                                  30 31
    #省略输出内容....
                           31
           October               November               December      
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
              1  2  3  4                      1       1  2  3  4  5  6
     5  6  7  8  9 10 11    2  3  4  5  6  7  8    7  8  9 10 11 12 13
    12 13 14 15 16 17 18    9 10 11 12 13 14 15   14 15 16 17 18 19 20
    19 20 21 22 23 24 25   16 17 18 19 20 21 22   21 22 23 24 25 26 27
    26 27 28 29 30 31      23 24 25 26 27 28 29   28 29 30 31
    
  • 列出2016年10月份的日历

    [zouran@localhost ~]$ cal 10 2016
        October 2016    
    Su Mo Tu We Th Fr Sa
                       1
     2  3  4  5  6  7  8
     9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31
    
clear命令
  • 清除屏幕上的信息,它类似于DOS中的CLS命令
password命令
  • 更改自己的密码

    [zouran@localhost ~]$ passwd
    Changing password for user zouran.
    Changing password for zouran.
    (current) UNIX password: 
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
ls命令
  • ls命令列出指定目录的内容

    #当前目录下
    [zouran@localhost ~]$ ls 
    Desktop  Documents  Downloads  Music  Pictures  Public  Templates  test  Videos
    #指定目录[/home/zouran]下
    [zouran@localhost ~]$ ls /home/zouran
    Desktop  Documents  Downloads  Music  Pictures  Public  Templates  test  Videos
    
pwd命令
  • pwd命令显示出当前目录的路径

    [zouran@localhost ~]$ pwd
    /home/zouran
    
su命令
  • su命令可以更改用户的身份,如从超级用户root改到普通用户zouran [不需要密码],反之则需要密码

    [zouran@localhost ~]$ su root
    Password: 
    [root@localhost zouran]# su zouran
    [zouran@localhost ~]$ 
    

命令格式

一般命令格式
  • 命令名 [选项] [参数] …

    • 使用bash命令时,应注意以下几点:
    • 命令名必须是小写的英文字母
    • 命令名、选项和参数彼此间必须用空格或制表符[ctrl+v+i]隔开
    • 命令太长,末尾使用“\”
    • 一般格式中由方括号括起来的部分是可选的
    • 选项以“-”开始,它是对命令的特别定义
    • ls -a -l 等同 ls -al; ls --all等同ls -a
    • 命令行的参数提供命令运行的信息或命令执行过程中所使用的文件名。
    • 如果命令行中没有提供参数,命令将从标准输入文件(即键盘)上接收数据
    • 命令在正常执行后返回一个0值,表示执行成功。[echo $?]
    • Linux操作系统的联机帮助[man]对每个命令的准确语法都做了说明
常用命令一般格式
who命令
  • 显示当前已注册到系统的所有用户名、所用终端名和注册到系统的时间

    一般格式:who [选项]… [参数]

    • -b,--boot   显示系统最近引导的时间

    • -H,--heading  打印出各列的标题

    • -m  仅显示与stdin(标准输入)相关的主机名和用户

    • -q,--count  显示所有注册用户名和注册用户数目

    • -t,--time  显示系统时钟最后修改情况

  • 实例

    [zouran@localhost ~]$ who -b
             system boot  2023-11-08 02:49
    [zouran@localhost ~]$ who -H
    NAME     LINE         TIME             COMMENT
    zouran   pts/0        2023-11-08 03:34 (192.168.195.1)
    [zouran@localhost ~]$ who -q
    zouran
    # users=1
    [zouran@localhost ~]$ who -t
    
echo命令
  • 将命令行中的参数回显到标准输出(即屏幕)上

    一般格式:echo [选项]… [STRING]…

    常用选项

    • -n   表示输出字符串STRING之后光标不换行
    • --help 显示帮助信息并且退出(help echo)
  • 实例

    [zouran@localhost ~]$ echo -n I love you
    I love you[zouran@localhost ~]$ 
    
date命令
  • 在屏幕上显示或设置系统的日期和时间

    只有超级用户才有权设置或修改系统时间(启动系统时从CMOS中读出)

    一般格式:

    • date [OPTION]... [+FORMAT]
    • date [选项] … [+格式控制字符串]

    常用选项

    • -d,--date=STRING 显示由字符串STRING指定的时间,比如tomorrow
    • -f, --format=FORMAT:指定输入的日期时间格式
    • -s,--set=STRING  设定由字符串STRING指定的时间
    • -u,--utc,--universal  显示或设定格林尼治时间
    • --help  在标准输出(即显示器)上输出帮助信息并且退出
    • --version   在标准输出上输出版本信息并且退出
  • 格式控制字符串用于控制日期和时间输出的格式,通常用单引号括起来

    关于日期格式的部分,可以使用的占位符包括:

    • %Y:四位数的年份,例如2023。
    • %y:年份的最后两位数字,例如23。
    • %m:两位数的月份,例如07。
    • %d:两位数的日期,例如19。
    • %H:24小时制的小时数,例如14。
    • %I:12小时制的小时数,例如02。
    • %M:分钟数,例如30。
    • %S:秒数,例如45。
  • 实例

    [zouran@localhost ~]$ date +'%Y-%m-%d'
    2023-11-08
    [zouran@localhost ~]$ date -d today +'%Y-%m-%d'
    2023-11-08
    [zouran@localhost ~]$ date -d today +'%Y_%-m_%-d'
    2023_11_8
    [zouran@localhost ~]$ date -d today +'%Y_%m_%d'
    2023_11_08
    [zouran@localhost ~]$ date -d today +'%Y-%m-%d%T'
    2023-11-0806:32:35
    [zouran@localhost ~]$ date -d today +'%Y-%m-%d %T'
    2023-11-08 06:32:50
    [zouran@localhost ~]$ date -u -d='2 days ago'
    date: invalid date=2 days ago’
    [zouran@localhost ~]$ date -u --date='2 days ago'
    Mon Nov  6 14:36:32 UTC 2023
    [zouran@localhost ~]$ date --utc --date='2 days ago'
    Mon Nov  6 14:37:19 UTC 2023
    [zouran@localhost ~]$ date -d --date='2 days ago'
    date: invalid date ‘--date=2 days ago
    [zouran@localhost ~]$ date -u '+2 days'
    2 days
    [zouran@localhost ~]$ date -d '+2 days'
    Fri Nov 10 06:45:21 PST 2023
    
    date -s //设置当前时间,只有root权限才能设置,其他只能查看.
    date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
    date -s 01:01:01 //设置具体时间,不会对日期做更改
    date -s“01:01:01 2008-05-23”//这样可以设置全部时间
    date -s“01:01:01 20080523”//这样可以设置全部时间
    date -s“2008-05-23 01:01:01”//这样可以设置全部时间
    date -s“20080523 01:01:01”//这样可以设置全部时间
    
cal命令
  • 可以显示公元1—9999年中任意一年或者任意一个月的日历

如果使用该命令时不带任何参数,则显示当前月份的日历

一般格式:cal [选项] [[[day]month] year]

常用选项

  • -1,显示一个月日历,默认方式
  • -3,显示上月本月下月三个月日历
  • -s,以周日作为一周的第一天
  • -m,以周一作为一周的第一天
  • -j,显示儒勒日期,即一个月中的日号按照在一年中第多少天来显示
  • -y,显示本年度日历

文件及其概念

文件
  • 文件(File)是被命名的相关信息的集合体。
  • 通常存放在外存(如磁盘、磁带)上,可以作为一个独立单位存放和实施相应的操作(如打开、关闭、读、写等)
  • 文件表示的对象相当广泛
文件的成分
  • 索引节点,又称I节点。系统利用其中的信息对相应文件实施控制和管理。 这些信息包括文件权限、文件主、文件大小、存放位置、建立日期等
  • 数据**:**文件的实际内容,它可以是空的,也可以非常大,并且有自己的结构
文件命名
  • 文件名保存在目录文件中。Linux的文件名几乎可以由ASCII字符的任意组合构成,文件名最长可多达255个字符

  • 文件命名惯例:

    • 文件名应尽量简单,并且应反映出文件的内容

    • 应避免使用/、空字符、空格、制表符或其它控制字符

    • 应避免使用有特殊的含义的字符

    > ; | < > ˋ ″ ′ $ ! % & * ? \ ( ) [ ]

    • 很多操作系统支持的文件名都由两部分构成:

    • 文件名.扩展名

    • 二者间用圆点分开,如prog.c

    • 扩展名也称为后缀,利用扩展名可以区分文件的属性

    • Linux系统区分文件名的大小写 [letter 与Letter不同]

    • 以圆点(.)开头的文件名是隐含文件 [ls默认不显示,需使用 ls -a]

文件名通配符
  • 星号(*

    • 与0个或多个任意的字符相匹配。 le* 可代表letter, lease

    • 星号匹配的是当前目录下的所有文件,但以点(.)开头的隐含文件除外。

    • .*只与隐含文件匹配

  • 问号( ? )

    • 问号只与单个任意的字符匹配。你可以使用多个问号。 file? name.???
  • 方括号( [ ] )

    • 只与括号中列出的字符之一匹配。例如letter[123]

    • 可以用-代表一个范围内的字符,而不用将它们一一列出。如f[1-5]、f[12345]

    • 应注意:

      • 范围内的字符都按升序排列,即[A-Z]是有效的,而[Z-A]是无效的。

      • 如果在 [ 之后是一个 ! 或 ^(shift+6) ,则表示与不在方括号中出现的字符匹配

      • 上面介绍的所有符号都可以混和使用,例如:[!A-Z]*.?

      (代表所有不以大写字母开头,但倒数第二个位置是.的文件名)

文件类型
普通文件
  • 文本文件,它由ASCII字符构成。
  • 数据文件,它由来自应用程序的数字型和文本型数据构成。
  • 可执行的二进制程序,它由机器指令和数据构成。(file *
目录
  • 是由成对的“I节点号/文件名”构成的列表

    • 节点号是检索I节点表的下标,I节点中存放有文件的状态信息

    • 文件名是给一个文件分配的文本形式的字符串,用来标识该文件

    • “点”(.)表示目录本身 ;“点点”(…)表示该目录的父目录

设备文件
  • 在Linux系统中,所有设备都作为一类特别文件对待[有I节点但无数据],用户象使用普通文件那样对设备进行操作,从而实现设备无关性。

  • 字符设备(I/O传送数据,终端、打印机、鼠标等)

  • 块设备 (核心缓冲区, 硬盘、软盘和RAM盘)(tty)

符号链接文件
  • 特别类型的小文本文件,包含所链接的目标文件的绝对路径名

有关文件显示命令

cat命令
  • 其一是经常用来显示文件的内容;其二是连接两个或多个文件

    一般格式: cat [选项] [FILE]…

    cat m1             (在屏幕上显示文件m1的内容)
    cat m1 m2          (同时显示文件m1和m2的内容)
    cat m1 m2 > mfile     (将文件m1和m2合并后放入文件mfile中)
    cat -n m1         (对文件m1的各行编号并输出)
    

    常用选项:

    • -b,--number-noblank  从1开始对所有非空输出行进行编号
    • -E,--show-ends  在每一行的末尾显示一个$
    • -n,--number  从1开始对所有输出行编号
    • -s,--squeeze-blank  将多个相邻的空行合并成一个空行
    • -help  打印该命令用法,然后退出,其返回码表示成功
    • 如果没有指定文件或者用“-”代替文件,该命令就读取标准输入
more命令
  • more命令显示文件内容,每次显示一屏

一般格式: more [选项] [file ...]

  • 先清屏,然后显示file1的内容,并且在屏幕的最下方显示完整的百分比

    [zouran@localhost test]$ more -dc file1
    Sun Oct 29 14:01:41 PDT 2023
    [zouran@localhost test]$
    
  • 显示文件file1的内容,每10行显示一次,而且在显示之前先清屏

    [zouran@localhost test]$ more -c-10 file1
    Sun Oct 29 14:01:41 PDT 2023
    [zouran@localhost test]$
    
less命令
  • 用来分屏显示文件的内容。允许用户向前或向后浏览文件
  • 用PageUp键向上翻页,用PageDown键向下翻页。要退出 less 程序,可以按q、Q键,或者:q、:Q键,或者ZZ
head命令
  • 在屏幕上显示指定文件的开头若干行。显示行数的默认值是10

    一般格式: head [选项]… [文件]…

head  -5  mfile              (显示文件mfile的前5行)
head  --bytes=-100  mfile    (显示文件mfile除最后100个字节之外的所有内容。注意:“=”与“-”之间没有空格。)
head  -v  mfile     (显示文件mfile的内容,并且给出文件名标题)
head  -q  mfile     (显示文件mfile的内容,但不列出文件名标题)
[zouran@localhost test]$ head  -5 file1
Sun Oct 29 14:01:41 PDT 2023
[zouran@localhost test]$ head --bytes=-100 file1
[zouran@localhost test]$ head -v file1
==> file1 <==
Sun Oct 29 14:01:41 PDT 2023
[zouran@localhost test]$ head -q file1
Sun Oct 29 14:01:41 PDT 2023
[zouran@localhost test]$ 
tail命令
  • tail命令在屏幕上显示指定文件FILE的末尾10行

    一般格式:tail [选项]... [FILE]...

 tail  mfile                   (显示文件mfile的最后10行)
 tail  -n +20  mfile     (显示文件mfile的内容,从第20行至文件末尾)
 tail  -c  10  mfile    (显示文件mfile的最后10个字符)
touch命令
  • 可以修改指定文件的时间标签或者创建一个空文件

    一般格式:touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]

 $ touch  ex2                        (在当前目录下建立一个空文件ex2)
 $ touch  –m  mfile               (将文件mfile的修改时间改为系统当前时间)
 $ touch -a -d "2022-11-11 23:00:00" mfile    (指定修改的时间标签)
 $ touch -m -d "2022-11-11 23:00:00" mfile
 $stat  mfile    (显示atime ,ctime, mtime)
  • 实例
[zouran@localhost test]$ touch ex2
[zouran@localhost test]$ touch -m ex2
[zouran@localhost test]$ touch -a -d "2022-10-10 23:12:12" ex2
[zouran@localhost test]$ touch -m -d "2022-10-10 23:12:12" ex2
[zouran@localhost test]$ stat ex2
  File: ‘ex2’
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d Inode: 77032       Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  zouran)   Gid: ( 1000/  zouran)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-10-10 23:12:12.000000000 -0700
Modify: 2022-10-10 23:12:12.000000000 -0700
Change: 2023-11-08 08:31:24.685123894 -0800
 Birth: -
file命令
  • file命令对每个参数FILE进行检查,并予以分类(仅当前目录下)

    一般格式: file [选项]... FILE

[zouran@localhost ~]$ pwd
/home/zouran
[zouran@localhost ~]$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  test  Videos
[zouran@localhost ~]$ file test
test: directory
[zouran@localhost ~]$ file file1
file1: cannot open (No such file or directory)
[zouran@localhost ~]$ cd /home/zouran/test
[zouran@localhost test]$ file file1
file1: ASCII text

匹配、排序及显示指定内容的命令

grep命令
  • 该命令用来在文本文件中查找指定模式的词或短语,并在标准输出上显示包括给定字符串模式的所有行
  • 该命令组包含三个命令:grepegrepfgrep命令
  • grep命令一次只能搜索一个指定的模式;
  • egrep命令等同于grep -E,可以使用扩展的字符串模式进行搜索;
  • fgrep命令等同于grep -F,是快速搜索命令,它检索固定字符串,但不识别正则表达式
  • 正则表达式[ 基本+扩展]是描述一组字符串的模式,它的构成形式类似于算术表达式,通过各种运算符把较小的表达式结合在一起例如,模式file[a-d]
  • https://blog.csdn.net/hellochenlian/article/details/34088179

一般格式:

grep [选项] 模式 [文件…]

grep [选项] [-e模式] [文件…]

grep [选项] [-f文件] [文件…]

在这里插入图片描述

在这里插入图片描述

|表示或,同时过滤多个字符串

在这里插入图片描述

grep选项

image-20231109173031076

常用选项:

  • -E   将模式解释成扩展的正则表达式
  • -F  将模式解释成一系列以换行符分开的单纯的字符串,其中任何一个都可被匹配
  • -b,--byte-offset 在输出的每一行前面显示包含匹配字符串的行在文件中的位置,用字节偏移量来表示
  • -c,--count 只显示文件中包含匹配字符串的行的总数
  • -f FILE,--file=FILE 从文件FILE中获取模式,每行一个。空文件不含模式,因此,不做匹配(grep -f fff1 fff2
  • -i,--ignore-case  匹配比较时不区分字母的大小写
  • -R,-r,--recursive 以递归方式查询目录下的所有子目录中的文件
  • -n 在输出包含匹配模式的行之前,加上该行的行号(文件首行的行号为1)
  • -v 只显示不包含匹配字符串的文本行
  • -x 只显示整个行都严格匹配的行
  • 实例

    在密码文件/etc/passwd中查找包含zouran的所有行

    [zouran@localhost ~]$ grep zouran /etc/passwd
    zouran:x:1000:1000:zouran:/home/zouran:/bin/bash
    

    先定位到zouran目录的上一级,然后在zouran及其子目录下的所有文件中查找字符串print出现的次数

    [zouran@localhost ~]$ pwd
    /home/zouran
    [zouran@localhost ~]$ cd ..
    [zouran@localhost home]$ pwd
    /home
    [zouran@localhost home]$ grep -r 'print' zouran
    Binary file zouran/.cache/tracker/meta.db matches
    Binary file zouran/.cache/tracker/meta.db-wal matches
    Binary file zouran/.config/dconf/user matches
    Binary file zouran/.local/share/tracker/data/tracker-store.journal matches
    zouran/test/subdir/file1:       date - print or set the system date and time
    zouran/test/subdir/file1:              print or set Coordinated Universal Time (UTC)
    zouran/test/subdir/file5:       date - print or set the system date and time
    

    在子目录test下与正则表达式f?.c相匹配的各个文件中查找包含main或者printf的所有行,不管首字母的大小写

    [zouran@localhost test]$ grep -E -i 'main|printf' ~/test/f?.c #~9符号表示用户的主目录
    printf(ff.c)
    

    在正则表达式中并不像通配符那样代表任意(0或多个)字符,代表重复\匹配零个或多个先前字符(零个代表先前字符不存在)

    例如 oo*, 表示第一个o一定存在,第二个o可以有一个或多个,也可以没有,因此代表至少一个o.

    'ooo*'表示oo,ooo,oooo…

    'oo*’代表为o,oo,ooo,oooo…

    'o*'代表空字符或一个o以上的字符

    [zouran@localhost test]$ cat ex2.txt
    o
    oo
    ooo
    oooo[zouran@localhost test]$ grep 'o*' ex2.txt
    o
    oo
    ooo
    oooo
    [zouran@localhost test]$ grep 'oo*' ex2.txt
    o
    oo
    ooo
    oooo
    [zouran@localhost test]$ grep 'ooo*' ex2.txt
    oo
    ooo
    oooo
    
sort命令
  • 逐行对指定文件中的所有行进行排序,并将结果显示在标准输出上

  • sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出

  • 参考文章:https://blog.csdn.net/m0_52892985/article/details/123892914

  • 实例

    sort(不带参数)

    [zouran@localhost test]$ cat ex1
    banana
    apple
    [zouran@localhost test]$ sort ex1
    apple
    banana
    

    sort-u,--unique选项

    它的作用很简单,就是在输出行中去除重复行

    [zouran@localhost test]$ cat ex1
    banana
    apple
    apple
    [zouran@localhost test]$ sort -u ex1
    apple
    banana
    

    sort-r选项

    sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了

    [zouran@localhost test]$ sort -u -r ex1
    banana
    apple
    

    sort-o选项

    由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile

    但是,如果你想把排序结果输出到原文件中,用重定向可就不行了

    [zouran@localhost test]$ sort -r ex1 > ex1
    [zouran@localhost test]$ cat ex1
    [zouran@localhost test]$ 
    
    [zouran@localhost test]$ cat ex1
    banana
    apple
    apple
    [zouran@localhost test]$ sort -r -u ex1 -o ex1
    [zouran@localhost test]$ cat ex1
    banana
    apple
    

    sort-n选项

    你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。

    我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!

    [zouran@localhost test]$ cat ex1
    10
    2
    [zouran@localhost test]$ sort ex1
    10
    2
    [zouran@localhost test]$ sort -n ex1
    2
    10
    

    sort-t选项和-k选项

    这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。

    那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现

    -t指定了间隔符之后,就可以用-k来指定列数了

    [zouran@localhost test]$ cat ex1
    banana:30:5.5
    apple:10:2.5
    [zouran@localhost test]$ sort -n -k 2 -t : ex1
    apple:10:2.5
    banana:30:5.5
    

    sort其他选项

    -f  会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

    -c,--check  会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

    -C  会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

    -M  会以月份来排序,比如JAN小于FEB等等

    -b  会忽略每一行前面的所有空白部分,从第一个可见字符开始比较

uniq命令
  • 参考文章: https://blog.csdn.net/yspg_217/article/details/122921752

  • uniq - 读取输入文件,并比较相邻的行, 删除排序文件中的重复行

    用法: uniq [OPTION]... [INPUT [OUTPUT]]

    选项:

    -c, --count 打印每行出现的次数

    -d, --repeated 只打印重复出现的行

    -D 打印所有重复行

    --all-repeated[=METHOD] 类似 -D,使用空行分隔每个组,METHOD=none,prepend,separate

    -f, --skip-fields=N 不比较前 N 个字段

    --group[=METHOD] 使用空行分隔每个组,METHOD=separate,prepend,append,both

    -i, --ignore-case 忽略大小写

    -s, --skip-chars=N 不比较前 N 个字符

    -u, --unique 只打印出现一次的行

    -z, --zero-terminated 行分隔符是 NUL 而不是换行符

    -w, --check-chars=N 比较不多于 N 个字符

    --help 帮助文档

    --version 版本信息

  • 实例

    默认命令

    [zouran@localhost test]$ cat study
    Happy Birthday
    Happy Birthday
    Merry Christmas
    Happy Birthday
    [zouran@localhost test]$ uniq study
    Happy Birthday
    Merry Christmas
    Happy Birthday
    

    结合sort

    [zouran@localhost test]$ sort study|uniq
    Happy Birthday
    Merry Christmas
    

    使用 -c 选项进行统计

    [zouran@localhost test]$ sort study|uniq -c
            3 Happy Birthday
            1 Merry Christmas
    

    --all-repeated 的使用效果

    [zouran@localhost test]$ sort study|uniq --all-repeated
    Happy Birthday
    Happy Birthday
    Happy Birthday
    

    使用 -f 选项,在过滤重复行时不比较某些字段

    [zouran@localhost test]$ cat study
    Happy Birthday
    Happy Birthday
    Happy BIrthday
    Merry Christmas
    Happy Birthday
    [zouran@localhost test]$ uniq -f 1 study
    Happy Birthday
    Happy BIrthday
    Merry Christmas
    Happy Birthday
    

    -i 选项,功能是忽略大小写

    [zouran@localhost test]$ uniq -i study
    Happy Birthday
    Merry Christmas
    Happy Birthday
    

    -u 选项,只打印出现一次的行

    [zouran@localhost test]$ uniq -u study
    Happy BIrthday
    Merry Christmas
    Happy Birthday
    

    -s 是比较 N 个字符后的内容,-w 是比较前 N 个字符的内容

    [zouran@localhost test]$ cat study
    Happy Birthday
    Happy Birthday
    Happy BIrthday
    Merry Christmas
    Happy Birthday
    [zouran@localhost test]$ uniq -s5 study
    Happy Birthday
    Happy BIrthday
    Merry Christmas
    Happy Birthday
    

比较文件的内容

comm命令
  • 参考文章: https://blog.csdn.net/qq_27870421/article/details/93972117

  • comm命令用来对两个已排序文件进行逐行比较(必须是已经排序的两个文件,可以使用sort命令先进行排序),它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作

    语法

    comm [-123][--help][--version][第1个文件][第2个文件]

    参数

    • -1 不显示只在第 1 个文件里出现过的列
    • -2 不显示只在第 2 个文件里出现过的列
    • -3 不显示在第 1 和第 2 个文件里出现过的列
    • --help 在线帮助
    • --version 显示版本信息
  • 实例

    文件file1与file2内容

    [zouran@localhost test]$ cat file1
    aaa
    bbb
    [zouran@localhost test]$ cat file2
    ccc
    bbb
    

    输出的第一列只包含在file1中出现的行,第二列包含在file2中出现的行,第三列包含在file1和file2中相同的行。各列是以制表符(\t)作为定界符

    比较两个已经排好序的文件

    #file2未排序
    [zouran@localhost test]$ comm file1 file2
    aaa
    bbb
        ccc
    comm: file 2 is not in sorted order
        bbb
    #排序后
    [zouran@localhost test]$ sort file2 -o file2
    [zouran@localhost test]$ comm file1 file2
    aaa
        bbb
        ccc
    

    交集

    [zouran@localhost test]$ comm -12 file1 file2 
    bbb
    
diff命令
  • 参考文章: https://www.runoob.com/linux/linux-comm-diff.html

  • 以逐行的方式比较文本文件的异同处(要求预先排序)。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作

    比较文件: diff [选项] 文件名1 文件名2

    比较目录: diff [选项] 目录1 目录2

    该命令输出的一般形式如下:

    • n1 a n3,n4 (把文件1的n1行附加到文件2的n3~n4行后,则二者相同)
    • n1,n2 d n3 (删除文件1的n1~n2行及文件2的n3行,则二者相同)
    • n1,n2 c n3,n4 (把文件1的n1~n2行改为文件2的n3~n4行,则二者相同)
    • 字母a表示附加,字母d表示删除,字母c表示修改
  • 实例

    文件file1与file2内容

    [zouran@localhost test]$ cat file1
    aaa
    bbb
    [zouran@localhost test]$ cat file2
    bbb
    ccc
    

    直接使用diff

    [zouran@localhost test]$ diff file1 file2
    1d0
    < aaa
    2a2
    > ccc
    

    -y--side-by-side 以并列的方式显示文件的异同之处 -y参数时,指定栏宽

    [zouran@localhost test]$ diff file1 file2 -y -W 50
    aaa        <
    bbb       bbb
            > ccc
    

复制、删除和移动文件的命令

cp命令
  • 如果源文件是普通文件,则该命令把它复制到指定的目标文件中;如果是目录,就需要使用-r选项,将整个目录下所有的文件和子目录都复制到目标位置

    一般格式: cp [选项]... 源文件或目录 目标文件或目录

    -a  该选项通常在复制目录时使用。它递归地将源目录下的所有子目录及其文件都复制到目标目录中,并且保留文件链接和文件属性不变。

    -f,--force 如果现存的目标文件不能打开,则强行删除而不加提示。

    -i,--interactive 与-f选项不同,它在覆盖目标文件之前先给出提示,要求用户予以确认。回答y,将覆盖目标文件。这是交互式复制。(w1/w2/w3/w4/w5)

    -p 除复制源文件的内容外,还将其修改时间和存取权限也复制到新文件中。

    -R,-r 递归复制目录,即将源目录下的所有文件及其各级子目录都复制到目标位置。

    -l 不复制,而是创建指向源文件的链接文件,链接文件名由目标文件给出。

    ​ (cp -l w1 w6)

    命令源文件目标文件功能
    cp普通文件目标文件当前目录下备份
    cp普通文件目录/文件名移动位置到新的目录,同时更改文件名
    cp普通文件目录移动位置到新的目录,文件名不变
    cp目录目录-r :递归复制目录
    cp目录文件
  • 实例

    将文件study复制到目录/home/zouran下,并改名为learn

    [zouran@localhost test]$ cp study /home/zouran/learn
    

    将目录/home/zouran/test下的所有文件及其子目录复制到目录/home/zouran/study

    [zouran@localhost test]$ cp /home/zouran/test /home/zouran/study #错误
    cp: omitting directory ‘/home/zouran/test’
    [zouran@localhost test]$ cp -r /home/zouran/test /home/zouran/study
    

    交互式地将目录/home/zouran/test中以f打头的所有.c文件复制到/home/zouran/study

    [zouran@localhost test]$ cp -i /home/zouran/test/f*.c /home/zouran/study
    

    将下级目录subdir中的file5文件复制到当前目录下

    [zouran@localhost test]$ cp subdir/file5 .
    
rm命令
  • 参考文章: https://blog.csdn.net/weixin_44211968/article/details/123966263

  • rm 是强大的删除命令,它可以 永久性地 删除文件系统中指定的文件或目录

    一般格式: rm [选项]... 文件...

    注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好看一下文件的内容,确定是否真要删除

    -f,--force:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直接删除目标文件或目录

    -i:和 -f 正好相反,在删除文件或目录之前,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录

    -r,-R,--recursive:递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件

    rm -r * (删除当前目录下除隐含文件外的所有文件和子目录

  • 实例

    单个交互式删除,使用-i删除ex3文件,输入y+enter确定而不是enter

    rm: remove regular file ‘ex3’? n (不删除文件ex3)

    rm: remove regular file ‘ex3’? y (删除文件ex3)

    [zouran@localhost test]$ ls
    ex1  ex2.txt  ex3  ff.c  file1  file2  study  subdir
    [zouran@localhost test]$ rm -i ex3
    rm: remove regular file ‘ex3’? 
    [zouran@localhost test]$ ls
    ex1  ex2.txt  ex3  ff.c  file1  file2  study  subdir
    [zouran@localhost test]$ rm -i ex3
    rm: remove regular file ‘ex3’? y
    [zouran@localhost test]$ ls
    ex1  ex2.txt  ff.c  file1  file2  study  subdir
    

    单个直接删除:rm -f + 文件名

    [zouran@localhost test]$ ls
    ex1  ex2.txt  ff.c  file1  file2  study  subdir
    [zouran@localhost test]$ rm -f ex1
    [zouran@localhost test]$ ls
    ex2.txt  ff.c  file1  file2  study  subdir
    

    删除文件夹 rm -rf + 路径/目录名

    [zouran@localhost test]$ ls
    ex2.txt  ff.c  file1  file2  study  subdir
    [zouran@localhost test]$ rm -rf subdir
    [zouran@localhost test]$ ls
    ex2.txt  ff.c  file1  file2  study
    
mv命令
  • 参考文章: https://blog.csdn.net/lanlangaogao/article/details/125515677

  • Linux mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置

    一般格式: mv [选项] 源文件或目录 目标文件或目录

    命令参数:

    -b:若需覆盖文件,则覆盖前先行备份
    -fforce 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
    -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
    -u :若目标文件已经存在,且 source 比较新,才会更新(update)
    -t—target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后

    源文件被移至目标文件有两种不同的结果:

    如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变

    如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖已存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名

    命令源文件目标文件功能
    mvf1f2重命名,f1变为f2,f1消失
    mvf1D1移动位置:f1到了D1下面,原来的f1消失
    mvf1D1/f2移动位置同时重命名
    mvD1D2当前路径下目录重命名,无需选项
    mvD1D2/D3移动到D2目录下并重命名为D3
  • 实例

    重命名文件ex2.txtex.txt

    [zouran@localhost test]$ ls
    ex2.txt  ff.c  file1  file2  study
    [zouran@localhost test]$ mv ex2.txt ex.txt
    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  study
    

    将文件夹/home/zouran/dir下的全部文件复制到当前目录/home/zouran/test

    [zouran@localhost dir]$ ls
    file3  file4
    [zouran@localhost dir]$ cd /home/zouran/test
    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  study
    [zouran@localhost test]$ mv /home/zouran/dir/* .
    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  file3  file4  study
    [zouran@localhost test]$ cd /home/zouran/dir
    [zouran@localhost dir]$ ls
    [zouran@localhost dir]$
    

    -i -f结合的使用

    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  file3  file4  study
    [zouran@localhost test]$ mv -i file3 file4 #-i交互式
    mv: overwrite ‘file4’? n  # y 或者 n
    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  file3  file4  study
    [zouran@localhost test]$ mv  file3 file4 # 默认 -f
    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  file4  study
    [zouran@localhost test]$ cp file4 file3 #复制file4
    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  file3  file4  study
    [zouran@localhost test]$ mv -f file3 file4 #效果与不带-f一致
    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  file4  study
    

    -t的结合使用

    [zouran@localhost test]$ cd /home/zouran/dir
    [zouran@localhost dir]$ ls
    [zouran@localhost dir]$ touch file5
    [zouran@localhost dir]$ mkdir dir
    [zouran@localhost dir]$ pwd
    /home/zouran/dir
    [zouran@localhost dir]$ ls
    dir  file5
    [zouran@localhost dir]$ mv -t /home/zouran/dir /home/zouran/test #此处将/home/zouran/test 全部移动到了-t 后的 /home/zouran/dir 目录下
    [zouran@localhost dir]$ cd /home/zouran/test
    -bash: cd: /home/zouran/test: No such file or directory
    [zouran@localhost dir]$ ls
    dir  file5  test
    

文件内容统计命令

wc命令
  • wc将计算指定文件的行数、字数,以及字节数,并将统计结果显示出来

    一般格式: wc [-clw][--help][--version][文件...]

    参数:

    • -c--bytes--chars 只显示Bytes数
    • -l--lines 显示行数
    • -w--words 只显示字数
    • --help 在线帮助
    • --version 显示版本信息
  • 实例

    测试文件studyfile1内容如下

    [zouran@localhost test]$ cat study
    Happy Birthday
    Happy Birthday
    Happy BIrthday
    Merry Christmas
    Happy Birthday
    [zouran@localhost test]$ cat file1
    aaa
    bbb
    

    使用wc

    [zouran@localhost test]$ wc study 
     5 10 81 study #行数 单词数 字节数 文件名
    

    统计文件studyfile1的字节数、字数和行数

    [zouran@localhost test]$ wc study file1
     5 10 81 study
     2  2 10 file1
     7 12 91 total
    

    wc命令怎么做到只打印统计数字不打印文件名

    #使用管道线,| 表示管道,表示上一条命令的输出,作为下一条命令参数
    [zouran@localhost test]$ wc -l study
    5 study
    [zouran@localhost test]$ cat study | wc -l
    5
    

    统计当前目录下的文件数

    [zouran@localhost test]$ ls
    ex.txt  ff.c  file1  file2  file4  study
    [zouran@localhost test]$ ls |wc -w  #统计词数,也即文件名个数
    6
    

目录及其操作

目录和路径名

目录概念
  • Linux树型目录结构

    • 在UNIX/Linux系统中,起文件控制块作用的结构称作I节点(即Inode)。在I节点中存放该文件的控制管理信息。每个文件有唯一的I节点。

    • 文件控制块的有序集合称为文件目录。文件控制块就是其中的目录项。完全由目录项构成的文件称为目录文件。

    • 子目录是挂靠在另一个目录中的目录。包含子目录的目录称作父目录。除了root目录以外,所有的目录都是子目录,并且有它们的父目录。root目录就作为自己的父目录。

    image-20231126192709067

  • 根目录

    • bin目录包含二进制(binary)文件的可执行程序。
    • sbin目录中存放用于管理系统的命令。
    • boot用于存放引导系统时使用的各种文件,如LILO等。
    • etc目录非常重要,它包含许多Linux系统配置文件(如密码文件/etc/passwd、/etc/profile等)。
    • root目录是超级用户的目录。
    • dev目录包含标示设备的特别文件。
    • home目录是用户起始目录的基础目录。通常,用户的主目录就保存在该目录中。
    • lib目录中保存程序运行时使用的共享库。
    • lost+found目录中存放系统非正常关闭时正在处理的文件,以便下次系统启动时予以恢复。
    • mnt目录中存放安装文件系统的安装点。
    • proc目录实际上是一个虚拟文件系统。
    • tmp目录用于存放程序运行时生成的临时文件。
    • usr目录中包含了多个子目录,其中保存系统上一些最重要的程序,可供所有用户共享。
    • var包括系统正常运行时要改变的数据。/var/log
  • 工作目录和主目录

    • 工作目录——使用一个目录作为参照点,以后不作具体指定情况下,所访问的文件都是该目录中的文件。
    • 用户主目录——为新用户建立帐户时系统指定的工作目录(用户也可以自行修改: usermod -d /home/hnlinux ula)。主目录往往位于/home目录之下,并且与用户的注册名相同 。
    • 通常,用户主目录包含子目录、数据文件,以及用于注册环境的配置文件。
路径名
  • 绝对路径名

    • 以根目录为起点的路径名称做绝对路径名。
    • 绝对路径名总是以斜线字符(/)开头,它表示根目录,例如:/home/mengqc/lib/func/file1
  • 相对路径名

    • 相对当前工作目录的路径名
    • 图中,若工作目录是/home/mengqc/lib ,则文件file1 的绝对路径名为/home/mengqc/lib/func/file1,而相对路径名是 func/file1。
    • 点(.)目录表示本目录自身,而点点(…)目录代表该目录的父目录。例如,当前工作目录是/home/mengqc/lib,想列出/home/liu目录的内容,可使用命令:
    • $ ls …/…/liu
    • 在每个目录中都有点点目录文件(…)。
    • 可以连续使用“…/” 形式表示父目录,直至根目录。
  • 正确使用路径名

    • 在什么情况下使用绝对路径名,什么情况下使用相对路径名,取决于哪种方式涉及到的目录更少。
    • 例如,当前的工作目录是/etc/conf/cf.d,如果需要访问系统口令文件/etc/passwd,那么:
    • 使用绝对路径名是/etc/passwd,使用相对路径名是…/…/passwd。
    • 绝对路径名/etc/passwd涉及的目录有2个,而相对路径名…/…/passwd涉及的目录却是3个。此时,使用绝对路径名更有效。
    • 但是,如果当前工作目录是/home/mengqc/lib,要访问在func目录之下的file1文那么:
    • 使用绝对路径名是/home/mengqc/lib/func/file1,使用相对路径名是func/file1。
    • 绝对路径名/home/mengqc/lib/func/file1涉及的目录有5个,而相对路径名涉及的目录只有2个。此时,使用相对路径名更有效。
用户及文件存取权限
  • 文件存取权限

    • r(读权限):表示只允许指定用户读取相应文件的内容,而禁止对它做任何的更改操作。将所访问的文件的内容作为输入的命令都需要有读的权限,如cat,more等。
    • w(写权限):表示允许指定用户打开并修改文件,如命令vi,cp等。
    • x(执行权限):表示允许指定用户将该文件作为一个程序执行。
  • 目录存取权限

    • 在ls命令后加上-d选项,可以了解目录文件的使用权限。
    • r(读权限):表示可以列出存储在该目录下的文件,即读目录内容列表。这一权限允许shell使用文件扩展名字符列出相匹配的文件名。
    • w(写权限):表示允许从目录中删除或添加新的文件。通常只有目录主才有写权限(rmdir?)。
    • x(查找权限):表示允许在目录中进行查找,并能用cd命令将该目录改为工作目录。

常用目录操作命令

创建和删除目录
mkdir命令
  • mkdir命令用来创建目录

    一般格式: mkdir [选项] dirname…

    在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。

    该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;

    如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

    选项

    -m,–mode=MODE 将新建目录的存取权限设置为MODE,存取权限用给定的八进制数字表示(详见3.2.4节)。

    -p,–parents 可一次建立多个目录,即如果为新建目录所指定的路径dirname

    中有些父目录尚不存在,此选项可以自动建立它们。

  • 示例

    在目录/home/zouran/test下建立子目录zr,并且只有文件主有读、写和执行权限,其他人无权访问

    [zouran@localhost ~]$ cd /home/zouran/test
    [zouran@localhost test]$ ls
    big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study
    [zouran@localhost test]$ mkdir --mode==700 /home/zouran/test/zr
    [zouran@localhost test]$ ls
    big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study  zr
    

    同时建立两个目录:rz和它的子目录zr,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问

    [zouran@localhost test]$ mkdir -p -m 750 rz/zr
    [zouran@localhost test]$ ls
    big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  rz  small1.csv  study  zr
    [zouran@localhost test]$ cd rz
    [zouran@localhost rz]$ ls
    zr
    
rmdir命令
  • rmdir命令可以从一个目录中删除一个或多个空的子目录

    一般格式: rmdir [选项] … dirname…

    删除子目录os_1和其父目录bin:

    $ cd /home/mengqc/test

    $ rmdir -p bin/os_1

    子目录被删除之前应该是空目录。 (rm -r dirname)

    当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。

    删除目录时,必须具有对其父目录的写权限。

    常用选项

    -p,–parents 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果有非空的目录,则该目录保留下来。

    -v,–verbose 对每个被处理的目录输出相关诊断信息。

  • 示例

    删除上一步创建的文件夹zr

    [zouran@localhost zr]$ pwd
    /home/zouran/test/zr
    [zouran@localhost zr]$ cd ..
    [zouran@localhost test]$ ls
    big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  rz  small1.csv  study  zr
    [zouran@localhost test]$ rmdir zr
    [zouran@localhost test]$ ls
    big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  rz  small1.csv  study
    

    删除文件夹rz/zr

    [zouran@localhost test]$ rmdir rz
    rmdir: failed to remove ‘rz’: Directory not empty
    [zouran@localhost test]$ rmdir -p rz
    rmdir: failed to remove ‘rz’: Directory not empty
    [zouran@localhost test]$ rmdir -p rz/zr
    [zouran@localhost test]$ ls
    big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study
    [zouran@localhost test]$ 
    
改变工作目录和显示目录内容
cd命令
  • cd命令用来改变工作目录

    一般格式: cd [dirname]

    示例:

    ① 将当前目录改到/home/liuzh:

    $ cd /home/liuzh

    ② 将当前目录改到用户的主目录:

    $ cd 或 cd ~

    将当前目录改到根目录

    cd /

    cd - 返回刚才工作目录

    ③ 将当前目录向上移动两级:

    $ cd …/…

pwd命令
  • pwd命令显示出当前工作目录的绝对路径

    pwd (不带任何参数)

    [zouran@localhost zr]$ pwd
    /home/zouran/test/zr
    
ls命令
  • ls命令列出指定目录的内容

    一般格式: ls [选项]... [FILE]...

    如果给出的参数FILE是目录,该命令将列出其中所有子目录与文件的信息;如果给出的参数FILE是文件,将列出有关该文件属性的一些信息 (ls -l file1)。

    常用选项:

    -a,–all    显示指定目录下所有子目录和文件,包括以“.”开头的隐藏文件(如.cshrc)。

    -A,–almost-all 显示指定目录下所有子目录和文件,包括以“.”开头的隐藏文件,但是不列出“.”和“…”目录项。

    -b,–escape 当文件名中包含不可显示的字符时,则用\ddd(三位八进制数)形式显示该字符。

    -c 按文件的修改时间排序。

    -C 分成多列显示各项。

    -d 如果参数是目录,则只显示它的名字(不显示其内容)。往往与-l选项一起使用,以得到目录的详细信息。

    -F,–classify 在列出的文件名后面加上不同的符号,以区分不同类型的文件。可以附加的符号有:

    / 表示目录

    ∗ 表示可执行文件

    @ 表示符号链接文件

    | 表示管道文件

    = 表示socket文件

    -i,–inode   在输出的第一列显示文件的I节点号。

    -l 以长格式显示文件的详细信息。输出的信息分成多列,它们依次是:

    文件类型与权限 链接数 文件主 文件组 文件大小 建立或最近修改的时间 文件名

    例如:-rw-r–r-- 2 mengqc group 809 12月 27 2008 mfile2

    第一个字段中头一个字符表示文件类型,所用字符及其含义是:

    - 普通文件 l 符号链接文件

    d 目录 s 套接字文件(socket)

    b 块设备文件 p 命名管道文件(pipe)

    c 字符设备文件

  • 示例

    列出当前目录的内容,并标出文件的属性

    [zouran@localhost test]$ ls -F
    big.csv  dir/  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study
    

    按多列形式列出目录/home/zouran/test的内容

    [zouran@localhost test]$ ls -C /home/zouran/test
    big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study
    

    以长列表格式列出当前目录的内容,包括隐藏文件和它们的I节点号

    [zouran@localhost test]$ ls -lai
    total 36
    33844400 drwxrwxr-x.  3 zouran zouran  136 Nov 26 03:53 .
    16778440 drwx------. 17 zouran zouran 4096 Nov 26 03:37 ..
    33844410 -rw-rw-r--.  1 zouran zouran  774 Nov 10 09:54 big.csv
    50332774 drwxrwxr-x.  2 zouran zouran   18 Nov 21 18:54 dir
    33844397 -rw-rw-r--.  1 zouran zouran   29 Nov 10 07:54 ex
       77032 -rw-rw-r--.  1 zouran zouran   16 Nov  9 06:07 ex.txt
    50332769 -rw-rw-r--.  2 zouran zouran    0 Nov 21 18:54 f.c
       77025 -rw-rw-r--.  1 zouran zouran   14 Nov  9 01:45 ff.c
     4335544 -rw-rw-r--.  1 zouran zouran   10 Nov  9 10:03 file1
     4335540 -rw-rw-r--.  1 zouran zouran   10 Nov  9 10:04 file2
    33844411 -rw-rw-r--.  1 zouran zouran  729 Nov 10 09:55 small1.csv
     4335524 -rw-rw-r--.  1 zouran zouran   81 Nov 10 07:57 study
    
ln命令
  • ln命令用来创建链接

    参考文章:https://blog.csdn.net/s1429583654/article/details/127509525

    一般格式: ln [选项]... 源文件 [目标文件]...

    常用选项

    -f,--force   删除已有的目的地文件。

    -i,--interactive 提示是否删除目的地文件。

    -s,--symbolic 建立符号链接,而不是硬链接。

    -v,--verbose 显示每个被链接文件的名字。

  • 硬链接

    建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件(如m2.c)就登记在多个目录中。 (cp -l w1 w6)

    对硬链接有如下限制:

    (1)不能对目录文件做硬链接。

    (2)不能在不同的文件系统之间做硬链接。

  • 软链接

    也称为软链接,是将一个路径名链接到一个文件。事实上,只是一个文本文件,其中包含它提供链接的另一个文件的路径名。

    符号链接确实是一个新文件,它具有不同的I节点号(硬链接?)。

    可以对目录文件做符号链接(ln -s /root/H2.1 /root/H2.1/H2.22),也可以在不同文件系统之间做符号链接。

    删除源文件或目录,只删除了数据,不会删除链接(?)。

    在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。

    符号链接的大小是其链接文件的路径名中的字节数。

    ln -s 命令建立符号链接时,源文件最好使用绝对路径,否则,如果当前工作路径与要创建的符号链接文件所在路径不同,就不能进行链接(/root/H2/bb 父目录和子目录分别创建符号链接?)。

    当用ls -l 命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如:

    lrwxrwxrwx … 14 12月 28 10:20 /etc/motd->/original_file

  • 示例

    将目录/home/zouran/test/dir下的文件a2.c链接到目录/home/zouran/test下的文件b2.c

    [zouran@localhost test]$ ls
    big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study
    [zouran@localhost test]$ cd dir
    [zouran@localhost dir]$ ls
    a2.c
    [zouran@localhost dir]$ ln a2.c ../b2.c
    [zouran@localhost dir]$ cd -
    /home/zouran/test
    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study
    

    在目录/home/zouran/test/dir下建立一个符号链接文件b2,使它指向目录/home/zouran/test/b2.c

    [zouran@localhost test]$ cd dir
    [zouran@localhost dir]$ ls
    a2.c
    [zouran@localhost dir]$ cd -
    /home/zouran/test
    [zouran@localhost test]$ ln -s b2.c dir/b2
    [zouran@localhost test]$ cd -
    /home/zouran/test/dir
    [zouran@localhost dir]$ ls
    a2.c  b2
    
chmod命令
  • 以符号模式改变权限

    一般格式: chmod [选项]... MODE[,MODE]... 文件...

    MODE 由以下各项组成: [who] [操作符号] [mode]

    操作对象who可以是下述字母中的任一个或者它们的组合:

    u(user ) g(group) o(others) a(all ,系统默认值)

    操作符号可以是:

    + 添加 - 取消 = 赋予

    mode所表示的权限可用下述字母的任意组合:r w x

    常用选项

    -c,--changes 与-v选项类似,但是仅当做了改变才报告结果。

    -v,--verbose 详细列出该命令对每个处理文件所做的工作。

    ​ (chmod -v u=rx, g=x, o= ex1)

    -R,--recursive 递归地修改文件和目录的权限。

  • 以绝对方式改变权限

    一般格式: chmod [选项]... OCTAL-MODE 文件...

    置为1表示有相应权限,置为0表示没有相应权限

    例如: r w x r – x r – –

    ​ 1 1 1 1 0 1 1 0 0

    ​ 7 5 4

  • 示例

    将文件a2.c的权限改为所有用户都有执行权限

    [zouran@localhost dir]$ ls -l
    total 0
    -rw-rw-r--. 3 zouran zouran 0 Nov 21 18:54 a2.c
    [zouran@localhost dir]$ chmod a+x a2.c
    [zouran@localhost dir]$ ls -l
    total 0
    -rwxrwxr-x. 3 zouran zouran 0 Nov 21 18:54 a2.c
    

    将文件a2.c的权限重新设置为文件主可以读和执行,组用户可以执行,其他用户无权访问

    [zouran@localhost dir]$ chmod u=r ug=x a2.c  
    chmod: cannot access ‘ug=x’: No such file or directory
    [zouran@localhost dir]$ chmod u=rx, g=x, o=  a2.c
    chmod: invalid mode: ‘u=rx,’
    Try 'chmod --help' for more information.
    [zouran@localhost dir]$ chmod u=rx,g=x,o= a2.c
    [zouran@localhost dir]$ ls -l
    total 0
    -r-x--x---. 3 zouran zouran 0 Nov 21 18:54 a2.c
    

    使文件a2.c的文件主和同组用户具有读、写权限,而其他用户只可读

    [zouran@localhost dir]$ ls -l
    total 0
    -r-x--x---. 3 zouran zouran 0 Nov 21 18:54 a2.c
    [zouran@localhost dir]$ chmod 0664 a2.c
    [zouran@localhost dir]$ ls -l
    total 0
    -rw-rw-r--. 3 zouran zouran 0 Nov 21 18:54 a2.c
    
umask命令
  • umask命令用来设置限制新建文件权限的掩码

    当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码mode来限制新文件的权限。

    用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。

    一般格式: umask [-p] [-S] [mode]

    mode

    以数字开头,就被解释为八进制数字(为反);否则,就被解释为符号方式(为正)

    不能直接利用umask命令创建一个可执行的文件,用户只能在其后利用chmod命令使它具有执行权限。

    如果创建的是目录或者通过编译程序创建的一个可执行文件,将不受此限制。

  • 示例

    查看当前掩码的设置

    [zouran@localhost dir]$ umask -S
    u=rwx,g=rwx,o=rx
    [zouran@localhost dir]$ umask -p
    umask 0002
    [zouran@localhost dir]$ umask -P
    -bash: umask: -P: invalid option
    umask: usage: umask [-p] [-S] [mode]
    

    取消组用户的写权限、其他用户的读、写和执行权限

    [zouran@localhost dir]$ umask u=rwx,g=rx,o=
    [zouran@localhost dir]$ umask 
    0027
    [zouran@localhost dir]$ umask -S
    u=rwx,g=rx,o=
    

    可以使用八进制数值来设置mode

    [zouran@localhost dir]$ umask 0037
    [zouran@localhost dir]$ umask -S
    u=rwx,g=r,o=
    
改变用户组和文件主
chgrp命令
  • chgrp命令用来改变文件或目录所属的用户组

    一般格式: chgrp [选项]... GROUP FILE...

    将/home/mengqc及其子目录下的所有文件的用户组改为friend:

    # chgrp -R -v friend /home/mengqc (诊断信息)

chown命令
  • chown命令改变某个文件或目录的所有者和/或所属的组

    一般格式: chown [选项]... OWNER或GROUP FILE...

    只有超级用户或文件主才可以使用该命令。

    将目录/home/mengqc及其下面的所有文件、子目录的文件主改成liuzh:

    # chown -R -v liuzh /home/mengqc

    # chown bin:bin /T1 (同时更改T1的文件主和组名)

联机帮助命令

man命令
  • 该命令可以格式化并显示联机帮助手册页

    一般格式: man [选项]... 参数...

    常用的命令说明格式如下所述:

    (1)NAME:表示命令的名称和用法。

    (2)SYNOPSIS:显示命令的语法格式,其中列出所有可供使用的选项及参数。方括号中的内容是可选的。

    (3)DESCRIPTION:描述命令的一般用法和每个选项的功能。

    (4)AUTHOR:说明编写这个程序的作者。

    (5)BUGS:如果用户发现该程序有问题,可以向指定机构报告。

    (6)COPYRIGHT:自由软件版权声明。

    (7)SEEALSO:说明命令的其他方面或对命令的其他解释。

  • 示例

    [zouran@localhost dir]$ man pwd
    
help命令
  • help命令用来查看所有shell内置命令的帮助信息

    shell内置命令(也称为内部命令),构造在shell内部,从而在shell环境内部执行。http://c.biancheng.net/view/1136.html

    一般格式: help [-s] [pattern]

  • 示例

    查看内置命令cd的用法

    [zouran@localhost dir]$ help cd
    cd: cd [-L|[-P [-e]]] [dir]
        Change the shell working directory.
        #省略 
        Exit Status:
        Returns 0 if the directory is changed, and if $PWD is set successfully when
        -P is used; non-zero otherwise.
    
    

    列出cd命令帮助信息的简要说明

    [zouran@localhost dir]$ help -s cd
    cd: cd [-L|[-P [-e]]] [dir]
    

进程及其管理

查看进程状态

ps命令
  • ps命令是查看进程状态的最常用的命令,它可以提供关于进程的许多信息

    一般格式: ps [选项]

  • 示例

    直接使用ps

    [zouran@localhost ~]$ ps
       PID TTY          TIME CMD
      2049 pts/0    00:00:00 bash
      2132 pts/0    00:00:00 ps
    

    ps -ef,利用选项-ef可以显示系统中所有进程的全面信息

    [zouran@localhost ~]$ ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 18:16 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deseria
    root          2      0  0 18:16 ?        00:00:00 [kthreadd]
    root          3      2  0 18:16 ?        00:00:00 [kworker/0:0]
    root          4      2  0 18:16 ?        00:00:00 [kworker/0:0H]
    root          5      2  0 18:16 ?        00:00:00 [kworker/u256:0]
    #省略部分内容
    

    ps aux 可以显示所有终端上所有用户的有关进程的所有信息

    [zouran@localhost ~]$ ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.5  0.3 193948  7040 ?        Ss   18:16   0:02 /usr/lib/systemd/systemd --switched-root --
    root          2  0.0  0.0      0     0 ?        S    18:16   0:00 [kthreadd]
    root          4  0.0  0.0      0     0 ?        S<   18:16   0:00 [kworker/0:0H]
    root          6  0.0  0.0      0     0 ?        S    18:16   0:00 [ksoftirqd/0]
    #省略部分内容
    

    结合grep使用,查找系统得python相关进程

    [zouran@localhost ~]$ ps aux|grep python
    root        741  0.1  1.5 358748 29560 ?        Ssl  18:16   0:00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
    root       1121  0.0  1.0 574292 19452 ?        Ssl  18:16   0:00 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
    zouran     2188  0.0  0.0 112812   968 pts/0    S+   18:23   0:00 grep --color=auto python
    
kill命令
  • kill命令通过向进程发送指定的信号用来终止一个进程的运行

    一般格式:

    kill [-s 信号|-p ] [-a] pid…

    kill -l [信号]

    选项

    -s signal 指定需要发送的信号,signal既可以是信号名(如KILL),也可以是对应信号的号码(如9)。(参考信号列表的功能)

    -l  显示信号名称列表。

    -p 指定kill命令只显示进程的PID(进程标识号),并不真正发出结束信号。

    ▲kill命令是通过向进程发送指定的信号来结束相应进程(pid)的。在默认情况下,采用编号为15的TERM信号。用编号为9的KILL信号,可以强行“杀掉”该进程

  • 常用命令

    前者为请求目标进程退出,后者为强制杀死目标进程

    kill PID
    kill -9 PID
    
sleep命令
  • 使进程暂停由时间值所指定的秒数。此命令大多用于shell程序设计中,使两条命令执行之间停顿指定的时间

    一般格式  sleep 时间值

    在时间值后面可以有以下后缀:

    s———表示秒数(默认);

    m———表示分钟;

    h———表示小时;

    d———表示天数。

    时间值不必是整数,可以是任意的浮点数。

nice命令
  1. Linux系统中,进程的优先级取决于两个因素:进程剩余时间配额和进程的优先数nice。优先数越小,其优先级越高。

  2. 用户可以利用nice命令设定进程的nice值。但一般用户只能设定正值,从而主动降低其优先级,只有特权用户才能把nice的值置为负数。

    一般格式: nice [选项] [命令…]

nohup命令
  • nohup命令将忽略挂起信号对命令的影响而继续运行指定的命令(它可以带参数)

    一般格式: nohup 命令 [参数]…

  • 示例

    nroffbook是一个shell脚本文件,它对一本书的手稿进行正文处理

    nohup  sh  nroffbook&     
    
wait命令
  • wait命令的功能就是等待指定的进程,并返回其终止状态

    一般格式: wait [n]

磁盘使用情况统计

df命令
  • 命令df可以报告文件系统中未用磁盘空间的情况。按照默认,磁盘盘块以1k字节为单位

    一般格式: df [选项]… [FILE]…

    选项 –i (显示i节点使用情况而不是占用盘块情况)

    ​ -t –type=TYPE(指定文件类型为TYPE的文件系统使用情况)

    ​ df –Th (查看系统里各文件系统类型)

  • 示例

    直接使用df命令

    [zouran@localhost ~]$ df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    devtmpfs          915780       0    915780   0% /dev
    tmpfs             931512       0    931512   0% /dev/shm
    tmpfs             931512   10432    921080   2% /run
    tmpfs             931512       0    931512   0% /sys/fs/cgroup
    /dev/sda3       29036696 5379308  23657388  19% /
    /dev/sda1         303780  166728    137052  55% /boot
    tmpfs             186304      12    186292   1% /run/user/42
    tmpfs             186304       0    186304   0% /run/user/1000
    

    如果使用-a选项,则把不占用磁盘空间的文件系统也列出来

    [zouran@localhost ~]$ df -a | head -5 #显示前五行
    Filesystem     1K-blocks    Used Available Use% Mounted on
    sysfs                  0       0         0    - /sys
    proc                   0       0         0    - /proc
    devtmpfs          915780       0    915780   0% /dev
    securityfs             0       0         0    - /sys/kernel/security
    

    du –a (同时显示目录+文件的磁盘利用情况)

    [zouran@localhost test]$ du -a
    4	./ff.c
    8	./file1
    4	./file2
    4	./study
    4	./ex
    0	./dir/a2.c
    0	./dir
    4	./ex.txt
    4	./big.csv
    4	./small1.csv
    4	./subdir/file1
    4	./subdir
    40	.
    

文件压缩和解压缩

gzip命令
  • gzip命令用来对文件进行压缩和解压缩

    一般格式: gzip [选项] [name…]

    压缩普通文件,不适合目录文件;.gz保持原有的权限、访问与修改时间

    常用选项

    -c,–stdout,–to-stdout    将输出写到标准输出上,并保留原有文件。

    -d,–decompress,–uncompress 将被压缩的文件进行解压缩。

    -l,–list  对每个压缩文件,列出以下字段:

    compressedsize:压缩文件的大小

    uncompressedsize:未压缩文件的大小

    ratio:压缩比(未知时为0.0%)

    uncompressed_name:未压缩文件的名字

    -r   递归地查找指定目录并压缩其中的所有文件或者是解压缩。

    -t   测试,即检查压缩文件的完整性。

    -v   对每个压缩文件和解压缩文件,显示其文件名和压缩比。

    -num 用指定的数字num 调整压缩速度,其中-1或–fast表示最快的压缩方法(低压缩比),-9或–best表示最慢的压缩方法(高压缩比)。系统默认值为-6。

  • 示例

    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ gzip dir #压缩文件夹
    gzip: dir is a directory -- ignored
    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ gzip dir
    gzip: dir is a directory -- ignored
    [zouran@localhost test]$ gzip b2.c  #压缩链接
    gzip: b2.c has 2 other links -- unchanged
    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ gzip ex.txt #压缩ex.txt
    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  ex  ex.txt.gz  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ gzip -l ex.txt.gz #查看压缩信息,不解压
             compressed        uncompressed  ratio uncompressed_name
                     36                  16  31.2% ex.txt
    [zouran@localhost test]$ gzip -dv ex.txt.gz #解压 ex.txt.gz
    ex.txt.gz:	 31.2% -- replaced with ex.txt
    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  ex  ex.txt  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ gzip -v --fast ex.txt #ex.txt进行快速压缩,并显示其压缩比
    ex.txt:	 31.2% -- replaced with ex.txt.gz
    [zouran@localhost test]$ ls 
    b2.c  big.csv  dir  ex  ex.txt.gz  f.c  ff.c  file1  file2  small1.csv  study  subdir
    
unzip命令
  • unzip命令对ZIP格式的压缩文件进行解压缩。这种格式的压缩文件带有后缀.zip

    一般格式: unzip [选项] 被压缩文件名

  • 如何获得zip文件

    检测zip unzip包: yum install -y unzip zip

    zip (-r) 创建: zip -r T1.zip T1

    ​ zip zz1.zip zz1

    unzip解压: unzip zz1.zip

    ​ unzip zz1.zip -d ./ZZ1

  • 示例

    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  ex  ex.txt.gz  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ zip -r dirzip.zip dir #压缩dir文件夹
      adding: dir/ (stored 0%)
      adding: dir/a2.c (stored 0%)
    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  dirzip.zip  ex  ex.txt.gz  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ rm -rf dir #删除原有文件夹
    [zouran@localhost test]$ ls
    b2.c  big.csv  dirzip.zip  ex  ex.txt.gz  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ unzip dirzip.zip #解压zip文件
    Archive:  dirzip.zip
       creating: dir/
     extracting: dir/a2.c                
    [zouran@localhost test]$ ls
    b2.c  big.csv  dir  dirzip.zip  ex  ex.txt.gz  f.c  ff.c  file1  file2  small1.csv  study  subdir
    [zouran@localhost test]$ unzip -v dirzip.zip #显示有关压缩文件的信息,但不作解压缩
    Archive:  dirzip.zip
     Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
    --------  ------  ------- ---- ---------- ----- --------  ----
           0  Stored        0   0% 11-27-2023 02:45 00000000  dir/
           0  Stored        0   0% 11-21-2023 18:54 00000000  dir/a2.c
    --------          -------  ---                            -------
           0                0   0%                            2 files
    

文本编辑

进入和退出vi

  • 进入vi

    在系统提示符(设为$ )下输入命令vi和想要编辑(建立)的文件名,便可进入vi

    vi b2.c

    ~                                                                                                            
    ~                                                                                                            
    "b2.c" 0L, 0C                                                                              0,0-1         All
    
  • 退出vi

    先键入冒号“:”,再键入命令wq

    :wq

    ​ 把编辑缓冲区的内容写到你编辑的文件中,退出编辑器,回到 shell下。

    (操作过程是,先键入冒号“:”,再键入命令wq。以下命令操作同。)

    :ZZ

    (大写字母ZZ)仅当作过修改时才将缓冲区内容写到文件上。

    :x

    与 :ZZ相同。

    :q!

    强行退出vi。感叹号(! )告诉vi,无条件退出,丢弃缓冲区内容。

vi的工作方式

1701919025550

  • 命令方式

    输入命令vi进入编辑器时,就处于vi的命令方式。

    从键盘上输入的任何字符都被当作编辑命令来解释

    在命令方式下输入的表示命令的字符并不在屏幕上显示出来

  • 插入方式

    输入vi的插入命令( i )、附加命令( a )、打开命令(o )、替换命令( s )、修改命令( c )或取代命令( r )可以从命令方式进入到插入方式。

    在插入方式下所有命令不再起作用,仅作为普通字母出现。

    由插入方式回到命令方式的办法是单击键(通常在键盘的左上角)。

  • Ex转义方式

    在命令方式下输入一个冒号(:)就进入 ex转义方式。

    多数文件管理命令都是在ex转义方式下执行的(如读取文件、把编辑缓冲区的内容写到文件中)。

文本输入命令

插入命令
  • 插在光标位置之前

  • 在光标所在行的行首插入新增文本

    1701920686478

附加命令
  • a 在该命令之后输入的字符都插到光标之后。

  • A 在光标所在行的行尾添加文本。

    1701920705281

打开命令
  • o 在光标所在行的下面新开辟一行,随后输入的文本就插入在这一行上。

  • O 在光标所在行的上面新开辟一行,随后输入的文本就插入在这一行上。

    1701920754881

插入方式下光标移动

在键盘的右下方有四个方向键,利用它们可以在插入方式下移动光标。

利用Backspace(退格键)可将光标从当前行上回退一个字符,并且删除光标之前的一个字符。

例如:

int main(int argc,char **argv) (光标位于该行行尾)

连续输入三次Backspace后,显示为:

int main(int argc,char **a)

光标移动命令

  • 向右(向前)移动一个字符

    使用命令(键)l(小写字母)、 、右向键将光标向右移动一个字符。

  • 向左(向后)移动一个字符

    使用命令(键)h (小写字母)、、左向键将光标向左移动一个字符。

  • 移到下一行

    使用命令(键)+、将光标移到下一行的开头。

    命令(键)j、n和下向键分别将光标向下移一行,但所在列不变。

  • 移到上一行

    可以使用命令(键)-、k(小写字母)、P 、上向键将光标上移一行。

    1701921068504

    如果在相应命令的前面加上一个数字n ,那么,就把光标相应移动n个字符。例如:

    6l,则向右移6个字符(但不能跨行); 4h ,则向左移动4个字符 (但不能跨行);

    3+,则向下移3行,光标位于行首; 6k ,则光标上移6行,列数不变。

  • 移至行首

    使用命令(键)^ 或0(数字0)将光标移到当前行的开头。例如:

     int main ( )
    
       {
         printf ( "Hello ! \ n " );   (光标位于字母e上)
    
       }
    

    输入^命令,光标移至字母p;再输入0命令,光标左移至该行的第一列(空格)上。

  • 移至行尾

​ 可以使用命令(键)$将光标移至当前行的行尾,停在最后一个字符上。

  • 移至指定行

​ 可以使用命令(键)[行号]G将光标移至由行号所指定的行的开头。

  • 移至指定列

​ 可以使用命令(键)[列号]| 将光标移至当前行指定的列上**。(**shift + |)

文本修改命令

文本删除
  • 删除字符

    命令x(小写字母)删除光标所在的字符。

    命令X(大写字母)删除光标前面的那个字符。

  • 删除文本对象

  • 命令dd删除光标所在的整行。

    命令D从光标位置开始删除到行尾。

    组合命令d+<光标移动命令>删除从光标位置开始至光标移动命令限定的位置之间的所有字符。例如:

    d0 从光标位置(不包括光标位)删至行首。

    d3l 从光标位置(包括光标位)向右删3个字符。

    d$ 从光标位置(包括光标位)删至行尾。与D相同。

    d5G 将光标所在行至第5行都删除。

复原命令

u 取消前面刚执行的插入或删除命令的效果,恢复到此前的情况。

U 总是把当前行恢复成它被编辑之前的状态。

1701924875382

重复命令

(圆点)在命令方式下,重复执行前面最近一次插入命令或删除命令

1701924930412

修改命令

命令c、C和 cc的功能是修改文本对象,即用新输入的文本代替老的文本

1.命令c

c后面紧随光标移动命令(用来限定删除文本的范围),之后是新输入的文本,最后单击 < Esc >键。

 /* thare are a C program */   

(光标位于字母a上)

输入c^ 后,屏幕显示为: a C program */

接着输入“/*this is ”,单击,显示为:

/* this is □ a C program */

2.命令C

C后面紧接新输入的文本,最后单击< Esc >键。它等价于:c$。

屏幕显示为:

/* this are a example */

输入C,显示为:

/* this 

接着输入字符串“is a program */ ”,然后单击,显示为:

/* this is a program * /

3.命令cc

命令cc删除光标所在行整行(不是行的一部分),用随后输入字符串替代。其余作用与C命令相同。

屏幕显示为:

   / * this are test */

   int main( )

输入cc后,显示为:

   int main( )

接着输入字符串“/* this is a program */ ”,并单击< Esc >键,显示为:

  /* this is a program */

   int main ( )

C和cc前面还可以加上数字——表示要修改的行数。

取代命令
  1. 命令r

    命令r用随后输入的单个字符取代光标所在的字符。

    屏幕显示为:

       /* this as a program */    (光标在字母a)
    

    输入命令:ri ,则显示为:

     /* this is a program */    (状态不变)
    
  2. 命令R

    命令R用随后输入的文本取代光标所在字符及其右面的若干字符,每输入一个字符就替代原有的一个字符。

    屏幕显示为:

       /* this as a program */
    
       main( )
    

    输入R,接着输入“is a good example program */”,单击< Esc >键,显示为:

     /* this is a good example program */
    
       main( )  (注意状态为REPLACE)
    
替换命令

1.命令s

命令s(小写)用随后输入的的正文替换光标所在的字符。

屏幕显示为:

   /* this is A example C program */

   int main( )

输入s后,显示变为:

 /* this is A xample C program */

   int main( ) (注意状态变化)

然后输入:good,并单击< Esc >键,显示为:

   /* this is A goodxample C program */

   int main( )

2.命令S

命令S(大写)用新输入的正文替换整个当前一行。

屏幕显示为:

   /* this is a program */

   int a ;

   int main( )

输入S后,光标所在行成为空行,光标停在行的开头。接着输入:()

#include < stdio.h > <Enter> #include < math.h > <Esc >

显示为:

/* this is a program */

   #include < stdio.h >

   #include < math.h >

   int main( )

字符串检索

向前检索命令的基本格式是:

/模式〈Enter〉

例如: /student 〈Enter〉

向后检索命令的基本格式是:

?模式 〈Enter〉

例如: ?flout 〈Enter〉

vim 有高亮 vi可能没有

去除高亮 :noh 或者nohl

C程序编译工具

gcc编译系统

文件名后缀

目前Linux平台上最常用的C语言编译系统是gcc(GNU Compiler Collection)

常用文件名后缀及其表示的文件类型

文件名后缀文 件 类 型
.cC源文件
.i预处理后的C源文件
.ii预处理后的C++源文件
.hC或C++头文件
.C .cc .cp .cpp .c++ .cxxC++源文件
.s汇编程序文件
.S必须预处理的汇编程序文件
.o目标文件
.a静态链接库 (.lib) (/usr/bin 或者 /bin 目录)
.so动态链接库 (.dll)

gcc命令行选项

gcc f1.c f2.c (针对C语言源程序)执行完成后,生成默认的可执行文件a.out

  • 示例

    [zouran@localhost test]$ touch HellWorld.c #创建源文件
    [zouran@localhost test]$ vi HelloWorld.c #编辑
    [zouran@localhost test]$ cat HelloWorld.c #查看内容
    #include <stdio.h>  
      
    int main(void) {  
        printf("Hello world, Linux programming!\n");  
        return 0;  
    }
    [zouran@localhost test]$ gcc HelloWorld.c #编译
    [zouran@localhost test]$ ls 
    a.out  big.csv  dir  dirzip.zip  ex  ex.txt.gz  HelloWorld.c  small1.csv  study  subdir
    [zouran@localhost test]$ ./a.out #运行可执行文件
    Hello world, Linux programming!
    

    下面这个错误表明,文件mfile.c中函数main调用了函数square,但在该文件中未定义square。所以,不带选项就直接编译mfile.c是不行的

    1701929275405

使用选项-c,分别编译mfile.csq.c文件;然后统一编译,生成的可执行代码放在meng1文件中。最后执行meng1

1701929308937

1701929321214
) (注意状态变化)


然后输入:good,并单击< Esc >键,显示为:

```bash
   /* this is A goodxample C program */

   int main( )

2.命令S

命令S(大写)用新输入的正文替换整个当前一行。

屏幕显示为:

   /* this is a program */

   int a ;

   int main( )

输入S后,光标所在行成为空行,光标停在行的开头。接着输入:()

#include < stdio.h > <Enter> #include < math.h > <Esc >

显示为:

/* this is a program */

   #include < stdio.h >

   #include < math.h >

   int main( )

字符串检索

向前检索命令的基本格式是:

/模式〈Enter〉

例如: /student 〈Enter〉

向后检索命令的基本格式是:

?模式 〈Enter〉

例如: ?flout 〈Enter〉

vim 有高亮 vi可能没有

去除高亮 :noh 或者nohl

C程序编译工具

gcc编译系统

文件名后缀

目前Linux平台上最常用的C语言编译系统是gcc(GNU Compiler Collection)

常用文件名后缀及其表示的文件类型

文件名后缀文 件 类 型
.cC源文件
.i预处理后的C源文件
.ii预处理后的C++源文件
.hC或C++头文件
.C .cc .cp .cpp .c++ .cxxC++源文件
.s汇编程序文件
.S必须预处理的汇编程序文件
.o目标文件
.a静态链接库 (.lib) (/usr/bin 或者 /bin 目录)
.so动态链接库 (.dll)

gcc命令行选项

gcc f1.c f2.c (针对C语言源程序)执行完成后,生成默认的可执行文件a.out

  • 示例

    [zouran@localhost test]$ touch HellWorld.c #创建源文件
    [zouran@localhost test]$ vi HelloWorld.c #编辑
    [zouran@localhost test]$ cat HelloWorld.c #查看内容
    #include <stdio.h>  
      
    int main(void) {  
        printf("Hello world, Linux programming!\n");  
        return 0;  
    }
    [zouran@localhost test]$ gcc HelloWorld.c #编译
    [zouran@localhost test]$ ls 
    a.out  big.csv  dir  dirzip.zip  ex  ex.txt.gz  HelloWorld.c  small1.csv  study  subdir
    [zouran@localhost test]$ ./a.out #运行可执行文件
    Hello world, Linux programming!
    

    下面这个错误表明,文件mfile.c中函数main调用了函数square,但在该文件中未定义square。所以,不带选项就直接编译mfile.c是不行的

    1701929275405

    使用选项-c,分别编译mfile.csq.c文件;然后统一编译,生成的可执行代码放在meng1文件中。最后执行meng1

    1701929308937

    1701929321214

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还没秃头~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值