Linux学习笔记(三)

第三章 基本的bash shell命令

1.启动shell

大多数Linux发行版的默认shell都是GNU bash shell。

/etc/passwd文件包含了所有系统用户账户列表以及每个用户的基本配置信息。例如:

christine:x501:501:Christine Bresnahan:/home/christine:/bin/bash

每个条目有七个字段,字段之间用:分隔,每个字符都有其特定的含义,其中最后一个字段指定了用户使用的shell程序。

2.shell的提示符

默认bash shell提示符是美元符号$,这符号白哦名shell在等在用户输入。不同的Linux发行版采用不同格式的提示符。提示符中显示了当前用户IDchristine,系统名server01。shell提示符可以根据自己的需要进行改变。在CLI输入命令后,需要按下回车键才会执行命令。

christine@server01:~$

3.bash手册

大多数Linux发行版本自带用以查找shell命令以及其他GNU工具信息的在线手册。bash手册是作为快速参考来使用的。

man命令用来访问存储在Linux系统上的手册页面。在想要查找的工具的名称前面输入man命令,就可以找到那个工具想要的手册条目。当使用man命令查看命令手册的时候,这些手册由分页程序(pager)来显示的。分页程序是一种实用的工具,能够逐页显示文本,通过点击空格进行翻页使用回车逐行查看,q退出。可以使用关键字搜索手册页:man -k 关键字

info命令可以显示info页面的信息。大多数命令都可以接受-help--help选项,可以查看帮助信息。

4.浏览文件系统

Linux文件系统

Linux在路径中不使用驱动盘符。Windows中,PC上安装的物理驱动器决定了文件的路径名。Windows会为每个物理磁盘驱动器分配一个盘符,每个驱动器都会有自己的目录结构,一遍访问存储其中的文件。Linux将文件存储在单个目录结构中,这个目录称为虚拟目录(virtual directory),虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。

Linux虚拟目录只包含一个称为根(root)目录的基础目录。Linux中使用/(正斜线)而不是\(反斜线)在文件路径中划分目录。Linux中反斜线用来标识转义字符,不能使用在路径中。

在Linux PC上安装的第一块硬盘称为根驱动器,根驱动器包含了虚拟目录的核心,其他目录都是从这里开始构建的。Linux会在根驱动器上创建一些特别的目录,叫做挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些过载点目录中,然而实际上他们却存储在另外一个驱动器中。下图中硬盘1和虚拟目录的根目录关联起来,而硬盘2被挂在到home目录。

在这里插入图片描述

Linux常见的通用目录以及作用

/:虚拟目录的根目录,通常不会在这存储文件

/bin:二进制目录,存放用户级的GNU工具

/boot:启动目录,存放启动文件

/dev:设备目录,创建设备节点

/etc:系统配置文件目录

/home:主目录,Linux在此创建用户目录

lib:库目录,存放系统和应用程序的库文件

media:媒体目录,可以的媒体设备的常用挂载点

mnt:挂载目录,另一个可移动媒体设备的常用挂载点

opt:可选目录,常用语存放第三方软件包和数据文件

proc:进程目录,存放现有硬件及当前进程的相关信息

/root:root用户的主目录

/sbin:系统二进制目录,存放很多GNU管理员级工具

/run:运行目录,存放系统运行时的运行数据

/srv:服务目录,存放本地服务的相关文件

/sys:系统目录,存放系统硬件信息的相关文件

/tmp:临时目录,创建和擅长临时工作文件

/usr:用户二进制目录,大量用户级GNU工具和数据文件存储位置

/var:可变目录,用以存放经常变化的文件,如日志文件

常见的目录名均基于文件系统层级标准(filesystem hierarchy standard,FHS)

遍历目录

cd destination

cd:将shell会话切换到另一个目录。cd命令接受单个参数,指定切换到的目录名。如果没有指定目标路,他会切换到用户主目录。

绝对路径:以根目录开始(/),定义了在虚拟目录结构中该目录的确切位置,相当于文件的全名。如:/usr/bin

相对路径:允许用户指定一个基于当前位置的目标文件路径。相对路径不以代表根目录的正斜线(/)开头,而是以目录名或一个特殊的字符开始。有两个字符可以用于相对路径中单点符.(表示当前目录)和双点符..(表示当前目录的父目录)。如果对命令行和Linux目录结构不太熟悉,可以暂时坚持使用绝对路径,等熟悉了目录布局后,再使用相对路径。

pwd:该命令可以显示出shell会话的当前目录,这个目录被称为当前工作目录在切换到新的当前工作目录时使用pwd命令,是很好的习惯,因为很多shell命令都是在当前工作目录中操作的,在发出命令之前,你应该始终确保自己处在正确的目录中。

5.文件和目录列表

ls:显示当前目录下的文件和目录。ls命令输出的列表是按字母排序的按列排序而不是按行)。ls命令还可以以不同的颜色区分不同类型的文件,LS_COLORS环境变量控制着这个功能。使用-F参数可以轻松区分文件和目录,-F参数在目录名后加了/。类似的,它会在可执行文件(事例中my_script)的后面加个星号,以示区分。

$ ls -F
Desktop/ 	Downloads/ 			Music/ 		Pictures/ 	Templates/
Documents/ 	examples.desktop 	my_script* 	Public/ 	test_file

Linux经常采用隐藏文件来保存配置信息。在Linux中,隐藏文件以.开始的文件,这些文件没有在默认的ls命令中显示出来,因此称为隐藏文件。要把隐藏文件和普通文件及目录一起显示出来,用到-a参数。

$ ls -a
. 				.compiz 	examples.desktop 	Music 		 test_file
.. 				.config 	.gconf my_script 	Videos
.bash_history 	Desktop 	.gstreamer-0.10 	Pictures 	

-R参数是ls命令的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。-l参数会产生长列表格式输出,包含了目录中每个文件的更多相关信息。

$ ls -l
total 48
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Desktop
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Documents
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Downloads
-rw-r--r-- 1 christine christine 8980 Apr 22 13:36 examples.desktop

输出的第一行显示了目录中包含的总块数,在此之后,每一行都包含了关于文件/目录的下述信息:

文件类型:目录(d),文件(-),字符型文件(c)或块设备(b)

文件权限:读(r),写(w),执行(x)

文件的硬链接总数:数字

用户属主的用户名:christine

文件数组的组名:christine

文件的大小:4096(字节为单位)

文件的上次修改时间:Apr 22 20:37

文件名或目录名:Desktop,Document

更多的命令可以查看ls的手册,man ls。另外,可以将多个参数结合起来使用,如ls -alF

过滤输出列表(实用):当ls命令输出文件较多时,可以使用该命令,他会用过滤器决定在输出中显示哪些文件或目录。过滤器就是一个进行简单文本匹配的字符串。可以使用特定的文件名作为过滤器,也可使用模式匹配(正则表达式),模式匹配符包括以下几种****

$ ls -l my_script
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script

问号(?):代表一个字符。

$ ls -l my_scr?pt
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script

星号(*):代表零个或多个字符。

$ ls -l my*
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_file
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script

在过滤器中使用星号和问号被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫做元字符通配符(metacharacter wildcards),除了星号和问号,还有更多的元字符通配符用于文件扩展匹配。

中括号[]:表示一个字符位置并给出多个可能的选择,也可指定字符范围,例如字母范围[a-i]。

$ ls -l my_scr[ai]pt
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script

感叹号(!):将不需要的内容排除在外。

在进行文件搜索使,文件拓展匹配是一个强大的特性。

6.文件处理

touch:创建空文件。创建指定的名称的新文件,并将你的用户作为文件的属主,新文件大小为0。touch命令还可以用来改变文件的修改时间,这个操作并不需要改变文件的内容。

$ touch test_one
$ ls -l test_one
-rw-rw-r-- 1 christine christine 0 May 21 14:17 test_one
$ ls -l test_one
-rw-rw-r-- 1 christine christine 0 May 21 14:17 test_one
$ touch test_one
$ ls -l test_one
-rw-rw-r-- 1 christine christine 0 May 21 14:35 test_one

cp source destination

cp: 在文件系统中将文件和目录从一个位置复制到另一个位置。当sourcedestination参数都是文件名时,cp命令将源文件复制成一个新文件,并且以destination命名。如果目标文件已经存在,cp命令可能不会提醒,最好加上-i选项,强制shell询问是否需要覆盖已有的文件。

$ cp -i test_one test_two
cp: overwrite 'test_two'? n

也可将文件复制到现有的目录中。

$ cp -i test_one /home/christine/Documents/
$
$ ls -l /home/christine/Documents
total 0
-rw-rw-r-- 1 christine christine 0 May 21 15:25 test_one

在这个例子中在目标目录名尾部加上了一个/,这表明Documents是目录而非文件,有助于明确目的,而且在复制单个文件时非常重要。如果没有/,子目录/home/christine/Documents又不存在,就会有麻烦。这种情况下,试图将一个文件复制到Documents子目录反而会创建一个名为Documents的文件,连错误消息都不回显示。

-R参数:cp- R参数可以递归地复制整个目录的内容。

也可以在cp命令中使用通配符。

制表键(Tab)自动补全:在使用命令行时,很容易输错命令,目录名或文件名。制表键自动补全允许你在输入文件名或目录名时按一下制表键,让shell帮忙将内容补充完整。使用制表键自动补全的技巧在于要给shell足够的文件名信息,使其能够将需要的文件同其他文件区分开。

链接文件:如需要在系统上维护同一个文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件和多个虚拟副本的方法。这种虚拟的副本就称为链接。在Linux中,有两种不同类型的文件链接:

符号链接:符号链接是一个实实在在的文件,指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同(具有不同的inode编号,Linux文件系统文件和目录具有唯一的inode号)。(我的理解符号链接为指针,指针存储指向文件的地址,指向的内容为文件)。要为一个文件创建符号链接,原始文件必须事先存在,然后使用ln命令以及-s选项来创建符号链接。

$ ls -l data_file
-rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file
$
$ ln -s data_file sl_data_file
$
$ ls -l *data_file
-rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file
lrwxrwxrwx 1 christine christine 9 May 21 17:29 sl_data_file -> data_file

硬链接:创建独立的虚拟文件,其中包含了原始文件的信息及位置,但是他们从根本上是同一个文件。引用硬链接文件等同于引用了源文件,要创建硬链接,原始文件也必须事先存在,在使用ln命令不需要加入额外的参数了。带有硬链接的文件共享inode编号。只能对处于统一存储媒体的文件创建硬链接,要想在不同存储媒体的文件之间创建链接,只能使用符号链接。(我理解为文件的副本,并且包含了位置等信息)

$ ls -l code_file
-rw-rw-r-- 1 christine christine 189 May 21 17:56 code_file
$
$ ln code_file hl_code_file
$
$ ls -li *code_file
296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56 code_file
296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56 hl_code_file

文件重命名:在Linux中,重命名文件称为移动(moving)mv命令可以将文件和目录移动到另一个位置或重新命名。

$ ls -li f?ll
296730 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fall
296717 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
294561 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
296742 -rw-rw-r-- 1 christine christine 0 May 21 13:44 full
$
$ mv fall fzll
$
$ ls -li f?ll
296717 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
294561 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
296742 -rw-rw-r-- 1 christine christine 0 May 21 13:44 full
296730 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fzll

mv命令只影响文件名,inode编号和时间戳保持不变。也可以使用mv命令来移动文件的位置。

$ ls -li /home/christine/fzll
296730 -rw-rw-r-- 1 christine christine 0 May 21 13:44 /home/christine/fzll
$ ls -li /home/christine/Pictures/
total 0
$ mv fzll Pictures/
$ ls -li /home/christine/Pictures/
total 0
296730 -rw-rw-r-- 1 christine christine 0 May 21 13:44 fzll
$ ls -li /home/christine/fzll
ls: cannot access /home/christine/fzll: No such file or directory

cp命令类似,也可以在mv命令中使用-i参数。这样在命令试图覆盖已有的文件时,就会得到提示。

删除文件:在Linux中,删除叫做移除(removing),命令为rm-i命令参数提示你是否真的删除该文件。bash shell中没有回收站或垃圾箱,文件一旦删除,就无法找回。因此,在使用rm命令时,要养成总是加入-i参数的习惯。

7.处理目录

创建目录:命令mkdir

$ mkdir New_Dir
$ ls -ld New_Dir
drwxrwxr-x 2 christine christine 4096 May 22 09:48 New_Dir

可以根据需要批量地创建目录和子目录。同时常见多个目录和子目录,需要加入-p参数:

$ mkdir -p New_Dir/Sub_Dir/Under_Dir
$
$ ls -R New_Dir
New_Dir:
Sub_Dir

New_Dir/Sub_Dir:
Under_Dir

New_Dir/Sub_Dir/Under_Dir:

mkdir命令的-p参数可以根据需要创建缺失的父目录。父目录是包含目录树中下一级目录的目录。

删除目录:命令rmdir,默认情况下,rmdir命令只会删除空目录。对于非空目录的删除,使用-r选项可以向下进入目录,删除其中的文件,然后在删除目录本身。rm -rf命令没有警告信息,这是一个非常危险的工具,尤其是在拥有超级用户权限时,务必谨慎使用。

8.查看文件内容

Linux中有几个命令可以查看文件内容,而不需要调用其他文本编辑器。

file:探测文件内部,决定文件是什么类型的。file命令不仅能确定文件中包含的文本信息,还能确定改文件的字符编码,ASCII。

$ file my_file
my_file: ASCII text

查看整个文件:cat命令可以显示文本文件中所有数据。-n参数会给所有的行加上行号。如果只想给有文本的行加上行号,可以使用-b参数。如果不想让制表符出现,可以使用-T参数。适用于查看较短的文本。

more命令:显示文本文件的内容,但会在显示每页数据之后停下来。more命令时分页工具,和在手册中前后移动意义,可以通过空格或回车键逐行向前的方式浏览文本文件,q退出。

less命令:more命令的升级版。

查看部分文件:如果查看的数据在文本开头或结尾,可以使用查看部分文件命令。

tail命令:显示文件最后几行的内容,默认情况下,他会显示文件的末尾10行。-n参数来修改所显示的行数。-f参数是tail的一个特性,允许在其他进程使用该文件时查看文件的内容。tail命令会保持活动状态,并不断显示添加到文件中的内容,可以用来实时检测系统日志。

head命令:显示文件的开头,默认情况下显示10行。-n参数可以指定想要显示的内容。由于文件的开头通常不会改变,因此head命令不支持-f参数。

本章小结:

​ 1.shell的基础知识

​ 2.Linux文件系统基础知识。

​ 3.文件的基本操作(创建,删除,移动,复制)。

​ 4.目录的基本操作(创建,删除,移动)。

​ 5.shell内建的查看文件命令(file,cat,less,more,head,tail)。

参考文献:Linux命令行与shell脚本编程大全(第三版)Richard Blum Christine Bresnahan著 门佳 武海峰译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

搬砖小张

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

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

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

打赏作者

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

抵扣说明:

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

余额充值