博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux命令行与shell编程第3章基本的shell
阅读量:4222 次
发布时间:2019-05-26

本文共 10682 字,大约阅读时间需要 35 分钟。

3.3 bash手册

表3-3 Linux man 页面格式

 

描述
Name 显示命令的名称和简介
Synopsis 显示命令的格式
Description 描述每个命令的选项
Author
提供该命令开发人员的信息
Reportting Bugs 提供提交bug报告的途径
Copyright  
See Also  

3-4 浏览文件系统

3.4.1 Linux 文件系统

 

 

目录  用途   
/ 虚拟目录的根目录,通常不会在这里存储文件
/bin 二进制目录,存放许多GNU用户级的工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,存放可移动媒体设备挂载点的地方
/mnt 挂载目录,另一个存放可移动媒体设备挂载点的地方
/opt 可选目录,通常用于存放可选的软件包
/root 根主目录
/sbin 系统二进制目录,存放许多GNU管理员级工具
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户安装软件的目录
/var 可变目录,用以存放经常变化的文件,比如日志文件

1.绝对文件路径

2.相对文件路径

 

  • 单点符(.),表示当前目录;
  • 双点符(..),表示当前目录的父目录。

 

可用多个双点符来向上切换目录。比如用户现在在主目录(/home/jingpan),

想切换到/etc/目录,可以输入如下命令:

[root@localhost jingpan]# cd ../../etc

[root@localhost etc]# 

3-5 文件和目录列表

 

带-F参数的ls命令来轻松的区分文件和目录。使用-F参数可以得到如下输出:

 

[root@localhost jingpan]# ls -F

awk*   centos74.xml  ch5/      nginx-1.12.2/  模板/  文档/  桌面/
boot/  centos7.xml   c_v/      rpm_check.txt  视频/  下载/
c/     c_example/    linux_c/  公共的/        图片/  音乐/

-F参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行

文件(比如上面的awk文件)的后面加个星号,以便用户找出可在系统上运行的文件。

 

-R参数是ls命令的另一个参数。它列出了当前目录下包含的目录中的文件。如果有很多个目录

,这个输出会很长。这里有个简单的采用-R参数获得的输出:

[root@localhost test]# ls -F -R

.:
file1  test1/  test2/
./test1:
file1  file2
./test2:

注意,首先-R参数显示了当月前目录下的内容:一个主文件(file1)和两个目录(test1和test2).

然后-R遍历了这两个目录,列出了目录下的主文件。test1目录下有两个文件(file1 和file2),而

test2目录下没有文件。如果 在test1或test2目录下还有更深的子目录,-R参数将会继续遍历

这些目录。如你所见,对于大型目录结构来说,这个输出可能会很长很长。

 -u 参数 输出文件最后访问时间而非最后修改时间

 

[jingpan@localhost linux]$ ls -l test1 -rw-rw-r-- 1 jingpan jingpan 0 1月  30 14:39 test1[jingpan@localhost linux]$ ls -lu test1-rw-rw-r-- 1 jingpan jingpan 0 1月  30 14:41 test1[jingpan@localhost linux]$

最后修改时间为14:39,最后访问时间为14:41

3-6 处理文件

3-6.1 创建文件

touch命令

-a 参数,更改访问时间

[jingpan@localhost linux]$ touch -a test1[jingpan@localhost linux]$ ls -lu test1 -rw-rw-r-- 1 jingpan jingpan 0 1月  30 14:55 test1
 

-m 参数,更改修改时间

[jingpan@localhost linux]$ touch -m test1[jingpan@localhost linux]$ ls -l test1-rw-rw-r-- 1 jingpan jingpan 0 1月  30 14:57 test1
 

 

-t 参数,指定特定时间

 

 

[jingpan@localhost linux]$ touch -t 201112251200 test1[jingpan@localhost linux]$ ls -l总用量 0-rw-rw-r-- 1 jingpan jingpan 0 12月 25 2011 test1[jingpan@localhost linux]$ ls -ul总用量 0-rw-rw-r-- 1 jingpan jingpan 0 12月 25 2011 test1
 

3.6.2 复制文件

cp命令

-R 递归地复制整个目录内容

[jingpan@localhost linux]$ cp -R dir1 dir2^C[jingpan@localhost linux]$ ls -l总用量 8drwxrwxr-x 2 jingpan jingpan 4096 1月  30 15:06 dir1drwxrwxr-x 2 jingpan jingpan 4096 1月  30 15:07 dir2-rw-rw-r-- 1 jingpan jingpan    0 1月  30 14:57 test1-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:00 test2-rw-rw-r-- 1 jingpan jingpan    0 1月  30 14:57 test3

 

[jingpan@localhost linux]$ cp -f test* dir2[jingpan@localhost linux]$ ls -al dir2总用量 8drwxrwxr-x 2 jingpan jingpan 4096 1月  30 15:07 .drwxrwxr-x 4 jingpan jingpan 4096 1月  30 15:06 ..-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:06 file1-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:06 file2-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:06 file3-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:06 file4-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:06 file5-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:11 test1-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:11 test2-rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:11 test3
-f参数用来强制覆盖dir2目录中已有的test1 文件,而不会提示用户。

 

3-6.3 链接文件

硬链接会创建一个独立文件,其中包含了源文件的信息以及位置。引用硬链接文件等

同于引用了源文件:

[jingpan@localhost linux]$ cp -l test1 test4[jingpan@localhost linux]$ ls -il总用量 824642507 drwxrwxr-x 2 jingpan jingpan 4096 1月  30 15:06 dir124642513 drwxrwxr-x 2 jingpan jingpan 4096 1月  30 15:07 dir224642504 -rw-rw-r-- 2 jingpan jingpan    0 1月  30 14:57 test124642505 -rw-rw-r-- 1 jingpan jingpan    0 1月  30 15:00 test224642506 -rw-rw-r-- 1 jingpan jingpan    0 1月  30 14:57 test324642504 -rw-rw-r-- 2 jingpan jingpan    0 1月  30 14:57 test4

 

-l参数创建了一个指向文件test1的硬链接test4。在文件列表中可以看出,文件test1

和test4的索引节点号相同的,这表明,实际上它们是同一个文件。还要注意,链接计数

(列表输出的第3列)表明现在两个文件都有两个链接了。

 

-s 参数会创建一个符号链接,或者称为软链接:

[jingpan@localhost linux]$ cp -s test1 test5[jingpan@localhost linux]$ ls -il test*24642504 -rw-rw-r-- 1 jingpan jingpan 11 1月  30 15:33 test124642505 -rw-rw-r-- 1 jingpan jingpan  0 1月  30 15:00 test224642506 -rw-rw-r-- 1 jingpan jingpan  0 1月  30 14:57 test324642496 -rw-rw-r-- 1 jingpan jingpan  0 1月  30 15:35 test424642522 lrwxrwxrwx 1 jingpan jingpan  5 1月  30 15:36 test5 -> test1
在复制链接文件时要注意,如果用cp命令来复制一个链接到另一个源文件的文件,那么

你复制的其实是源文件的另一份副本,而不是链接文件。

 

3.6.4 重命令文件

 在Linux中,重命令文件称为移动(moving)。mv命令就是将文件和目录移动到另外一个位置的。

 

[root@localhost test]# ls -il总用量 067334628 -rw-r--r--. 2 root root 0 12月  3 22:16 file167334634 -rw-r--r--. 1 root root 0 12月  3 22:23 file267334635 -rw-r--r--. 1 root root 0 12月  3 22:16 file367334628 -rw-r--r--. 2 root root 0 12月  3 22:16 file467334637 lrwxrwxrwx. 1 root root 5 12月  3 22:17 file5 -> file1[root@localhost test]# mv file2 file6[root@localhost test]# ls -il file*67334628 -rw-r--r--. 2 root root 0 12月  3 22:16 file167334635 -rw-r--r--. 1 root root 0 12月  3 22:16 file367334628 -rw-r--r--. 2 root root 0 12月  3 22:16 file467334637 lrwxrwxrwx. 1 root root 5 12月  3 22:17 file5 -> file167334634 -rw-r--r--. 1 root root 0 12月  3 22:23 file6

注意,移动文件会改变文件名,但保持同样的索引节点号和时间戳。移动一个有

软链接指向的文件会带来麻烦:

 

[root@localhost test]# mv file1 file8[root@localhost test]# ls -il file*67334635 -rw-r--r--. 1 root root 0 12月  3 22:16 file367334628 -rw-r--r--. 2 root root 0 12月  3 22:16 file467334637 lrwxrwxrwx. 1 root root 5 12月  3 22:17 file5 -> file167334634 -rw-r--r--. 1 root root 0 12月  3 22:23 file667334628 -rw-r--r--. 2 root root 0 12月  3 22:16 file8[root@localhost test]# mv file8 file1

采用硬链接的file4文件依然有同样的索引节点号,这样完全没有问题,但file5文件指向了

一个无效文件,它已不再是一个有效链接。

也可以用mv命令来移动目录

 

 

[root@localhost test]# mv dir1 dir2

整个目录里的内容都没有变化。唯一改变的是目录名字。因此,mv命令运行起来比cp命令快很多。

 

3.6.5 删除文件

rm命令

[root@localhost test]# rm -i file2rm:是否删除普通空文件 "file2"?y[root@localhost test]# ls -il总用量 0 33568491 drwxr-xr-x. 2 root root 71 12月  3 22:41 dir1101977071 drwxr-xr-x. 2 root root 71 12月  3 22:35 dir2 67334628 -rw-r--r--. 2 root root  0 12月  3 22:29 file1 67334635 -rw-r--r--. 1 root root  0 12月  3 22:16 file3 67334628 -rw-r--r--. 2 root root  0 12月  3 22:29 file4 67334637 lrwxrwxrwx. 1 root root  5 12月  3 22:17 file5 -> file1

注意,命令提示你是不是要真的删除该文件。bash shell 中没有回收站或者垃圾箱,所以文件一旦删除,就无法再找回了。

 

这里有一段关于删除链接文件的小故事:

 

[root@localhost test]# rm file1rm:是否删除普通文件 "file1"?y[root@localhost test]# cat file4hello[root@localhost test]# cat file5cat: file5: 没有那个文件或目录[root@localhost test]# ls -il总用量 4 33568491 drwxr-xr-x. 2 root root 71 12月  3 22:41 dir1101977071 drwxr-xr-x. 2 root root 71 12月  3 22:35 dir2 67334635 -rw-r--r--. 1 root root  0 12月  3 22:16 file3 67334634 -rw-r--r--. 1 root root  6 12月  6 03:55 file4 67184297 lrwxrwxrwx. 1 root root  5 12月  6 03:55 file5 -> file1

文件file1含有一个指向它的硬链接file4和一个指向它的软链接file5,而它被删除了。注意观

察发生了什么。两个链接文件依然都在,尽管file1文件已经消失了(在支持彩色的终端上能看到

file5文件这时已经变成了红色了)。当你查看硬链接file4文件内容时,它依然显示了文件的内容。

当你查看软件file5文件内容时,bash表明它已经不复存在了。

 

rm命令的另外一个特性是,如果你要删除很多文件而不想被提示符烦到,可以用-f参数来强制删除。

小心为妙!

3.7 处理目录

3.7.1 创建目录

mkdir命令

3.7.2 删除目录

rmdir和rm命令

 

删除目录的基本命令是rmdir

[root@localhost test]# mkdir dir3[root@localhost test]# [root@localhost test]# rmdir dir3[root@localhost test]# rmdir dir1rmdir: 删除 "dir1" 失败: 目录非空[root@localhost test]# rmdir --ignore-fail-on-non-empty  dir1

默认情况下,rmdir命令只删除空目录。在dir1目录中有一个文件,所以rmdir没有删除它。

 

老朋友rm命令也可以在处理目录上帮我们一把。如果你在用它时不带参数,你可以会有点失望:

[root@localhost test]# rm dir1rm: 无法删除"dir1": 是一个目录

但如果你真想删除一个目录,可以用-r参数来递归地删除目录中的文件,最后删除目录自身:

 

[root@localhost test]# rm -r dir2rm:是否进入目录"dir2"? yrm:是否删除普通空文件 "dir2/file1"?yrm:是否删除普通空文件 "dir2/file3"?yrm:是否删除普通空文件 "dir2/file4"?yrm:是否删除普通空文件 "dir2/file5"?yrm:是否删除普通空文件 "dir2/file6"?yrm:是否删除目录 "dir2"?y

这种方法虽然可行,但很难用。你依然要确认每个文件是否要被删除。如果该目录有很多个文件和子目录,

将会非常琐碎。省心而惯用的终极办法是使用rm命令,并加上参数-r和-f

 

 

 

[root@localhost test]# rm -rf dir2
就这么简单。没有警告,也没有一大堆问题,仅需一个shell提示符。当然,这个方法是非常
危险的,尤其是当你作为root用户登录时;尽量保守地采用这种做法,在使用之前再三检查,
确认你真的要这样做。
 

3.8 查看文件内容

3.8.1 查看文件统计信息

stat 命令可以提供文件系统上某个文件的所有状态信息:

 

[root@localhost test]# stat file4  文件:"file4"  大小:6               块:8          IO 块:4096   普通文件设备:fd00h/64768d      Inode:67334634    硬链接:1权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)环境:unconfined_u:object_r:admin_home_t:s0最近访问:2017-12-06 03:56:32.257023236 +0800最近更改:2017-12-06 03:55:09.525470604 +0800最近改动:2017-12-06 03:56:22.264672294 +0800创建时间:-

 

stat命令的结果显示了几乎所有你想知道的关于被检查文件的信息,甚至连存储该文件的设备的主设备和次

设备编号都有。

 

3.8.2 查看文件类型

尽管stat命令提供了几乎所有的信息,但依然有一项重要信息它没提供--文件类型。在尝试打开一个1KB大小的文件之前,了斛一下这个文件是什么类型的也会大有裨益。如果打开了一个二进制文件,你会在屏幕上看到各种乱码,甚至会忠你的终端模拟器扶起。

 

[root@localhost test]# file file4file4: ASCII text[root@localhost test]# file myscriptmyscript: Bourne-Again shell script, ASCII text executable[root@localhost test]# file findfind: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=74b4eaedafaf96ab3244c568dc0c9a90de2cc7d6, stripped

file命令将文件分成3类。

 

 文本文件:包含可打印字符的文件

可执行文件:可在系统上运行的文件

 

数据文件:包含不可打印二进制字符,又不能在系统上运行的文件。

 

第一个例子显示了一个文本文件。file命令不光判断出该文件包含文本,还判断出了文本的字

 

符编码。第二个例子显示了一个文本脚本文件。虽然文件是文本的,却是个脚本文件,可以在

系统上运行。最后一个例子是一个二进制的要执行程序。file命令判断出了文件在编译时面向的

平台,以及它需要哪种类型的库。如果你有从未知源获得的二进制文件,这会是个非常有用的特性。

3.8.3 查看整个文件

如果手头一个很大的文本,你可能会想看看是什么内容。在Linux上有3个不同的命令可以完成这个任务

1.cat命令

cat命令是显示文本文件中所有数据的得力工具:

[root@localhost test]# cat test1helloThis is a test fileThat we'll use to       test the cat command.
没什么特别的,只是文本文件的内容。这里还有一些可以和cat命令一起用的参数,可以会对你有所帮助。
-n参数会给所有的行加上行号:
[root@localhost test]# cat -n test1      1  hello     2     3  This is a test file     4     5     6  That we'll use to       test the cat command.
这个功能在检查脚本时会很有用。如果你只想给有文本的行加上行号,可以用-b参数:
[root@localhost test]# cat -b test1     1  hello     2  This is a test file     3  That we'll use to       test the cat command.
如果需要将多个空白行压缩到单个空白行,可用-s参数:
[root@localhost test]# cat -s test1 helloThis is a test fileThat we'll use to       test the cat command.
最后,如果不想让制表符出现,可以-T参数:
[root@localhost test]# cat -T test1helloThis is a test fileThat we'll use to^Itest the cat command.
-T参数会用^I字符组合去替换文本的所有制表符。

对于大型文件来说,cat命令会有点烦琐。文件的文本会在显示屏上一晃而过。好在这里有一个

解决这个问题的简单办法。

2.more 命令

more命令会显示文本文件的内容,但会在显示每页数据之后停下来。

3.less命令

d 键与b键

 

man less 

       d or ^D
              Scroll forward N lines, default one half of the screen size.  If N is specified, it becomes the new default for subsequent d and u commands.
       b or ^B or ESC-v
              Scroll backward N lines, default one window (see option -z below).  If N is more than the screen size, only the final  screenful  is displayed.

 

3.8.4 查看部分文件

通常用户要查看的数据要么在文本文件的开头,要么在文本文件的末尾。如果这些数据是在一个大型文件中,那你就得等cat或more加载完整个文件之后才能看到内容。如果数据是在文件的末尾(比如日志文件),你可

能需要翻成千上万行的文本才能到最后的内容。好在Linux 有解决这个问题的专用命令。

1.tail命令

 tail命令会显示文件末尾部分内容。默认情况下它会显文件的末尾10行。

-f参数是tail命令的一个突出的特性,它允许你在其他进程使用该文件时查看文件的内容。tail命令会保持活动状态

并不断显示添加到文件中的内容。这是实时监测系统日志的绝妙方式。

 2.head 命令

尽管不及tail命令那么知名,head命令依然可以如你所愿:它会显示文件开关那些的内容。

默认情况下,它会显示文件前十行的文本。类似于tail命令,它也支持-c和-n参数,这样就可以指定想要显示的内容了。

通常文件的开关不会改变,head命令不支持-f参数特性。head命令是不知道文件内容而想知道大致内容时的利器,而无需加载全部文件。

 

 

 

 

转载地址:http://eqrmi.baihongyu.com/

你可能感兴趣的文章
增加windows下Tomcat运行时的内存
查看>>
tomcat群集中session共享的几个方案
查看>>
查找google谷歌北京IP地址的方法
查看>>
使用Beyond Compare合并代码后出现乱码问题
查看>>
dmp数据文件导入问题
查看>>
使用Beyond Compare对比文件夹
查看>>
深入理解java虚拟机 -- jVM高级特性与最佳实践
查看>>
ora-01756
查看>>
java 核心技术Ⅱ--章四:网络
查看>>
java 核心技术Ⅱ--章五:JDBC数据库编程
查看>>
java 核心技术Ⅱ--章六:时间与日期API
查看>>
链表,循环链表,双向链表,判环和入环点
查看>>
浅谈HashMap,HashTable,ConcurrentHashMap,WeakHashMap,HashMap源码分析
查看>>
云创大数据校企合作项目斩获“全国校企合作十佳案例”
查看>>
云创大数据与宽泛科技签订战略合作协议
查看>>
免费!免费!免费!全国高校大数据师资实战免费培训班
查看>>
“南京市独角兽瞪羚企业俱乐部创始人简餐会”走进云创
查看>>
本科大数据专业该怎么上?
查看>>
云创大数据1+X大数据应用部署与调优职业技能等级证书预申报正式开启!
查看>>
人工智能需要一个可被证明的理论作为基础 | 哈佛丘成桐
查看>>