Linux命令行与shell脚本编程大全(一):文件操作

1.浏览文件系统

1.1 Linux文件系统

Linux在路径名中不使用驱动器盘符,它将文件存储在单个目录结构中,这个目录被称为虚拟目录。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。
Linux虚拟目录结构只包含一个称为根目录(/)的基础目录。根目录下的目录和文件会按照访问它们的目录路径一一列出。路径本身没有提供任何有关文件究竟存放在哪个物理磁盘的信息。

通常系统文件会存储在根驱动器中,用户文件存储在另一存储器中。

1.2 遍历目录

使用切换目录命令cd将shell会话切换到另一个目录:

cd destination

1.绝对文件路径
绝对文件路径总是以正斜线(/)开始,相当于目录全名。
注:提示符一开始有个波浪号~,表面shell会话位与主目录。

pwd命令可以显示shell会话的当前目录。可以在切换到新的当前工作目录时使用pwd命令。

2.相对文件路径
相对文件路径允许用户指定一个基于当前位置的目标文件路径。是以目录名或一个特殊字符开始。
有两个特殊字符可用于相对文件路径中:

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

2.文件和目录列表

可以使用ls命令来知道系统中有哪些文件。

2.1 基本列表功能区分文件和目录

ls命令最基本的形式会显示当前目录下的文件和目录。
可以带 -F参数 区分文件和目录
可以带 -a参数 把隐藏文件(以点号开头)和普通文件及目录都显示出来
ls命令另一个参数是 -R参数 ,叫作递归选项,可列出当前目录下包含的子目录中的文件。

2.2 显示长列表

要显示附加信息,另一个常用参数是-l,会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。
第一行显示目录中包含的总块数。之后每一行都包含了关于文件的下述信息:
 文件类型,比如目录( d )、文件( - )、字符型文件( c )或块设备( b );
 文件的权限;
 文件的硬链接总数;
 文件属主的用户名;
 文件属组的组名;
 文件的大小(以字节为单位);
 文件的上次修改时间;
 文件名或目录名。

$ 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
...

2.2 过滤输出列表

ls 命令支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件或目录。
这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器。
ls命令能够识别标准通配符。
 问号( ? )代表一个字符;
 星号( * )代表零个或多个字符。

$ ls -l my_s*t
-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
$

还支持其他正则表达式语法,如:
中括号:[ab]:a或b;[a-i]:a到i
感叹号!:将不需要的内容排除

3.处理文件

3.1 创建文件

touch 命令轻松创建空文件:

touch file_name

touch 命令还可用来改变文件的修改时间。这个操作并不需要改变文件的内容。如果只想改变访问时间,可用 -a 参数。
要想查看文件的访问时间,需要加入另外一个参数: --time=atime。有了这个参数,就能够显示出已经更改过的文件访问时间:

 ls -l --time=atime test_one

3.2 复制文件

cp命令可以复制文件or目录

cp  source destination

1.当 source 和 destination 参数都是文件名时, cp 命令将源文件复制成一个新文件,并且以destination 命名。新文件就像全新的文件一样,有新的修改时间。

  • 如果目标文件已经存在, cp 命令可能并不会提醒这一点。最好是加上 -i 选项,强制shell询问是否需要覆盖已有文件。
$ cp -i test_one test_two
cp: overwrite 'test_two'? n
$

2.cp命令也可以将文件复制到现有目录中。

cp -i test_one /home/christine/Documents/

新文件现就在目录Documents中了,和源文件同名。
注:**单点符(.)**就很适合用于 cp命令。记住,单点符表示当前工作目录。如果需要将一个带有很长的源对象名的文件复制到当前工作目录中时,单点符能够简化该任务。

cp 命令的 -R 参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。

$ cp -R Scripts/ Mod_Scripts

整个Scripts
目录中的内容都被复制到其中。注意,在新的Mod_Scripts目录中,所有的文件都有对应的新日期。Mod_Scripts目录现在已经成为了Scripts目录的完整副本。

3.3 链接文件

链接文件是Linux文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。

在Linux中有两种不同类型的文件链接:

  • 符号链接
  • 硬链接

符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用 ln 命令以及 -s 选项来创建符号链接。

ln -s data_file sl_data_file

硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用 ln 命令时不再需要加入额外的参数了。

ln  data_file sl_data_file

3.4 重命名文件

在Linux中,重命名文件称为移动(moving)。 mv 命令可以将文件和目录移动到另一个位置或重新命名。
1.移动文件会将文件名从fall更改为fzll,但inode编号和时间戳保持不变。这是因为 mv只影响文件名。
2.也可以使用 mv 来移动文件的位置:

mv f1 FILR1/

3.也可以使用 mv 命令移动文件位置并修改文件名称,这些操作只需一步就能完成。

 mv /home/christine/Pictures/fzll   /home/christine/fall

4.也可以使用 mv 命令移动整个目录及其内容:

mv Mod_Scripts Old_Scripts

3.5 删除文件

在Linux中,删除(deleting)叫作移除(removing) 。bash shell中删除文件的命令是 rm

$ rm -i fall
rm: remove regular empty file 'fall'? y
$

在使用 rm 命令时,要养成总是加入 -i 参数的好习惯。

rm 命令的另外一个特性是,如果要删除很多文件且不受提示符的打扰,可以用 -f 参数强制删除。小心为妙!

4.处理目录

4.1 创建目录

在Linux中创建目录很简单,用 mkdir 命令即可。
可以根据需要批量地创建目录和子目录。要想同时创建多个目录和子目录,需要加入 -p 参数,它可以根据需要创建缺失的父目录。父目录是包含目录树中下一级目录的目录。

$ mkdir -p New_Dir/Sub_Dir/Under_Dir

4.2 删除目录

删除目录的基本命令是 rmdir
默认情况下, rmdir 命令只删除空目录。得先把目录中的文件删掉,然后才能在空目录上使用 rmdir 命令。
也可以在整个非空目录上使用 rm 命令。使用 -r 选项使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身。

$ rm -ri My_Dir
rm: descend into directory 'My_Dir'? y
rm: remove regular empty file 'My_Dir/another_file'? y
rm: remove directory 'My_Dir'? y
$

一口气删除目录及其所有内容的终极大法就是使用带有 -r 参数和 -f 参数的 rm 命令:

$ rm -rf Small_Dir

-r是递归删除,-f是强制删除。

5.查看文件内容

5.1 查看文件类型

file 命令是一个随手可得的便捷工具。它能够探测文件的内部,并决定文件是什么类型的。
1.文本类型

$ file my_file
my_file: ASCII text
$

2.目录类型

$ file New_Dir
New_Dir: directory
$

3.符号链接

$ file sl_data_file
sl_data_file: symbolic link to 'data_file'
$

4.脚本文件,可以在系统上执行(运行):

$ file my_script
my_script: Bourne-Again shell script, ASCII text executable
$

5.二进制可执行程序。 file 命令能够确定该程序编译时所面向的平台以及需要何种类型的库。如果你有从未知源处获得的二进制文件,这会是个非常有用的特性:

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.24,
[...]
$

5.2 查看整个文件

5.2.1 cat命令

cat 命令是显示文本文件中所有数据的得力工具。
相关参数:
-n 参数会给所有的行加上行号。
如果只想给有文本的行加上行号,可以用 -b 参数。
如果不想让制表符出现,可以用 -T 参数。

5.2.2 more命令

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

5.2.3 less命令

less命令实为 more 命令的升级版。它提供了一些极为实用的特性,能够实现在文本文件中前后翻动,而且还有一些高级搜索功能。
less 命令的操作和 more 命令基本一样,一次显示一屏的文件文本。除了支持和 more 命令相同的命令集,它还包括更多的选项。

5.3 查看部分文件

5.3.1 tail命令

tail 命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末
尾10行。

5.3.2 head命令

head 命令,顾名思义,会显示文件开头那些行的内容。默认情况下,它会显示文件前10行
的文本

6.总结

使用切换目录命令cd将shell会话切换到另一个目录
pwd命令可以显示shell会话的当前目录
使用ls命令来知道系统中有哪些文件
touch 命令轻松创建空文件
cp命令可以复制文件or目录
mv 命令可以将文件和目录移动到另一个位置或重新命名
shell中删除文件的命令是 rm
在Linux中创建目录很简单,用 mkdir 命令即可
删除目录的基本命令是 rmdir
file 命令是一个随手可得的便捷工具。它能够探测文件的内部,并决定文件是什么类型。
cat 命令是显示文本文件中所有数据的得力工具。

你可能感兴趣的:(笔记)