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命令
- 该命令用来在文本文件中查找指定模式的词或短语,并在标准输出上显示包括给定字符串模式的所有行
- 该命令组包含三个命令:
grep
,egrep
和fgrep
命令 grep
命令一次只能搜索一个指定的模式;egrep
命令等同于grep -E
,可以使用扩展的字符串模式进行搜索;fgrep
命令等同于grep -F
,是快速搜索命令,它检索固定字符串,但不识别正则表达式- 正则表达式[ 基本+扩展]是描述一组字符串的模式,它的构成形式类似于算术表达式,通过各种运算符把较小的表达式结合在一起例如,模式
file[a-d]
- https://blog.csdn.net/hellochenlian/article/details/34088179
一般格式:
grep [选项] 模式 [文件…]
grep [选项] [-e模式] [文件…]
grep [选项] [-f文件] [文件…]
|
表示或,同时过滤多个字符串
grep
选项
常用选项:
-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命令
-
以逐行的方式比较文本文件的异同处(不要求预先排序)。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作
比较文件:
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
:若需覆盖文件,则覆盖前先行备份
-f
:force
强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i
:若目标文件 (destination
) 已经存在时,就会询问是否覆盖
-u
:若目标文件已经存在,且source
比较新,才会更新(update
)
-t
:—target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
,即指定mv
的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后源文件被移至目标文件有两种不同的结果:
如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变
如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖已存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名
命令 源文件 目标文件 功能 mv f1 f2 重命名,f1变为f2,f1消失 mv f1 D1 移动位置:f1到了D1下面,原来的f1消失 mv f1 D1/f2 移动位置同时重命名 mv D1 D2 当前路径下目录重命名,无需选项 mv D1 D2/D3 移动到D2目录下并重命名为D3 -
实例
重命名文件
ex2.txt
为ex.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
显示版本信息
-
实例
测试文件
study
、file1
内容如下[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 #行数 单词数 字节数 文件名
统计文件
study
和file1
的字节数、字数和行数[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目录就作为自己的父目录。
-
-
根目录
- 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命令
-
Linux系统中,进程的优先级取决于两个因素:进程剩余时间配额和进程的优先数nice。优先数越小,其优先级越高。
-
用户可以利用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的工作方式
-
命令方式
输入命令vi进入编辑器时,就处于vi的命令方式。
从键盘上输入的任何字符都被当作编辑命令来解释
在命令方式下输入的表示命令的字符并不在屏幕上显示出来
-
插入方式
输入vi的插入命令( i )、附加命令( a )、打开命令(o )、替换命令( s )、修改命令( c )或取代命令( r )可以从命令方式进入到插入方式。
在插入方式下所有命令不再起作用,仅作为普通字母出现。
由插入方式回到命令方式的办法是单击键(通常在键盘的左上角)。
-
Ex转义方式
在命令方式下输入一个冒号(:)就进入 ex转义方式。
多数文件管理命令都是在ex转义方式下执行的(如读取文件、把编辑缓冲区的内容写到文件中)。
文本输入命令
插入命令
-
插在光标位置之前
-
在光标所在行的行首插入新增文本
附加命令
-
a 在该命令之后输入的字符都插到光标之后。
-
A 在光标所在行的行尾添加文本。
打开命令
-
o 在光标所在行的下面新开辟一行,随后输入的文本就插入在这一行上。
-
O 在光标所在行的上面新开辟一行,随后输入的文本就插入在这一行上。
插入方式下光标移动
在键盘的右下方有四个方向键,利用它们可以在插入方式下移动光标。
利用
Backspace
(退格键)可将光标从当前行上回退一个字符,并且删除光标之前的一个字符。例如:
int main(int argc,char **argv) (光标位于该行行尾)
连续输入三次
Backspace
后,显示为:int main(int argc,char **a)
光标移动命令
-
向右(向前)移动一个字符
使用命令(键)l(小写字母)、 、右向键将光标向右移动一个字符。
-
向左(向后)移动一个字符
使用命令(键)h (小写字母)、、左向键将光标向左移动一个字符。
-
移到下一行
使用命令(键)+、将光标移到下一行的开头。
命令(键)j、n和下向键分别将光标向下移一行,但所在列不变。
-
移到上一行
可以使用命令(键)-、k(小写字母)、P 、上向键将光标上移一行。
如果在相应命令的前面加上一个数字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 总是把当前行恢复成它被编辑之前的状态。
重复命令
(圆点)在命令方式下,重复执行前面最近一次插入命令或删除命令
修改命令
命令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前面还可以加上数字——表示要修改的行数。
取代命令
-
命令r
命令r用随后输入的单个字符取代光标所在的字符。
屏幕显示为:
/* this as a program */ (光标在字母a)
输入命令:ri ,则显示为:
/* this is a program */ (状态不变)
-
命令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)
常用文件名后缀及其表示的文件类型
文件名后缀 | 文 件 类 型 |
---|---|
.c | C源文件 |
.i | 预处理后的C源文件 |
.ii | 预处理后的C++源文件 |
.h | C或C++头文件 |
.C .cc .cp .cpp .c++ .cxx | C++源文件 |
.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
是不行的
使用选项-c
,分别编译mfile.c
和sq.c
文件;然后统一编译,生成的可执行代码放在meng1
文件中。最后执行meng1
) (注意状态变化)
然后输入: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)
常用文件名后缀及其表示的文件类型
文件名后缀 | 文 件 类 型 |
---|---|
.c | C源文件 |
.i | 预处理后的C源文件 |
.ii | 预处理后的C++源文件 |
.h | C或C++头文件 |
.C .cc .cp .cpp .c++ .cxx | C++源文件 |
.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
是不行的使用选项
-c
,分别编译mfile.c
和sq.c
文件;然后统一编译,生成的可执行代码放在meng1
文件中。最后执行meng1