Linux shell 学习笔记(1)— 文件和目录(查看、创建、复制、软硬链接、重命名及删除操作)

1. 启动 shell

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

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

其中 /bin/bash 该字段指定了用户使用的 shell 程序。在前面的 /etc/passwd 样例条目中,用户 christine 使用 /bin/bash 作为自己的默认 shell 程序。这意味着当 christine 登录 Linux 系统后,bash shell会自动启动。

man 命令:

当使用 man 命令查看命令手册页的时候,这些手册页是由分页程序(pager)来显示的。可以通过点击空格键进行翻页,或是使用回车键逐行查看。另外还可以使用箭头键向前向后滚动手册页的内容,可以点击q键退出

大多数命令都可以接受 -help 或 --help 选项。

2. 文件系统

Linux 使用正斜线(/)而不是反斜线(\)在文件路径中划分目录。在 Linux 中,反斜线用来标识转义字符。在这里插入图片描述

  • 绝对文件路径

    绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。

  • 相对文件路径

    相对文件路径允许用户指定一个基于当前位置的目标文件路径。相对文件路径不以代表根目
    录的正斜线(/)开头,而是以目录名(如果用户准备切换到当前工作目录下的一个目录)或是一个特殊字符开始。

有两个特殊字符可用于相对文件路径中:

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

3. 文件和目录列表

ls 命令输出的列表是按字母排序的(按列排序而不是按行排序)

-F 参数的 ls 命令轻松区分文件和目录

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

-F 参数在目录名后加了正斜线(/),在可执行文件(比如上面的my_script文件)的后面加个星号。在Linux上,隐藏文件通常是文件名以点号开始的文件,-a 参数可将其显示出来。

-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);
 文件的权限;
 文件的硬链接总数;
 文件属主的用户名;
 文件属组的组名;
 文件的大小(以字节为单位);
 文件的上次修改时间;
 文件名或目录名。

当用户指定特定文件的名称作为过滤器时,ls 命令只会显示该文件的信息。

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

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
$
$ 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
$
$ ls -l f[a-i]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
$
$ ls -l f[!a]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full
$

4. 处理文件

4.1 创建文件
   touch filename 

touch 命令创建了你指定的新文件,并将你的用户名作为文件的属主。注意,文件的大小是零,因为touch命令只创建了一个空文件。

4.2 复制文件
cp source destination

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

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

   $ ls -Fd *Scripts
   Scripts/
   $ ls -l Scripts/
   total 25
   -rwxrw-r-- 1 christine christine 929 Apr 2 08:23 file_mod.sh
   -rwxrw-r-- 1 christine christine 254 Jan 2 14:18 SGID_search.sh
   -rwxrw-r-- 1 christine christine 243 Jan 2 13:42 SUID_search.sh
   $
   $ cp -R Scripts/ Mod_Scripts
   $ ls -Fd *Scripts
   Mod_Scripts/ Scripts/
   $ ls -l Mod_Scripts
   total 25
   -rwxrw-r-- 1 christine christine 929 May 21 16:16 file_mod.sh
   -rwxrw-r-- 1 christine christine 254 May 21 16:16 SGID_search.sh
   -rwxrw-r-- 1 christine christine 243 May 21 16:16 SUID_search.sh
   $

在执行 cp –R 命令之前,目录 Mod_Scripts 并不存在。它是随着 cp –R 命令被创建的,整个Scripts 目录中的内容都被复制到其中。注意,在新的 Mod_Scripts 目录中,所有的文件都有对应的新日期。Mod_Scripts 目录现在已经成为了 Scripts 目录的完整副本。

ls -d 只列出目录本身的信息,不列出其中的内容。

 $ ls -Fd public/
public//

$ ls -F public/
2018/      baidusitemap.xml  css/         index.html  search.xml
archives/  categories/       favicon.ico  js/         sitemap.xml
atom.xml   CNAME             fonts/       page/       tags/

4.3 链接文件

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

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

  • 符号链接-软链接

    符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同

    要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用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
    $
    

    在上面的例子中,注意符号链接的名字sl_data_file位于ln命令中的第二个参数位置上。显示在长列表中符号文件名后的->符号表明该文件是链接到文件data_file上的一个符号链接。

    符号链接sl_data_file只有9个字节,而data_file有1092个字节。这是因为sl_data_file仅仅只是指向data_file而已。它们的内容并不相同,是两个完全不同的文件。

    另一种证明链接文件是独立文件的方法是查看 inode 编号。文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的inode编号,可以给ls命令加入-i参数。

    $ ls -i *data_file
    296890 data_file 296891 sl_data_file
    $
    

  • 硬链接

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

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

    带有硬链接的文件共享inode编号。这是因为它们终归是同一个文件。还要注意的是,链接计数(列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。

4.4 重命名文件

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

a. 可以使用mv来移动文件的位置;

b. 可以使用mv命令移动文件位置并修改文件名称;

c. 可以使用mv命令移动整个目录及其内容;

在使用 mv 的过程中,文件的时间戳和inode编号都没有改变。改变的只有位置和名称。

4.5 删除文件

bash shell中删除文件的命令是rm,-i命令参数提示你是不是要真的删除该文件。bash shell中没有回收站或垃圾箱,文件一旦删除,就无法再找回

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

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

5. 处理目录

5.1 创建目录

在Linux中创建目录很简单,用mkdir命令即可

要想同时创建多个目录和子目录,需要加入-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:
$

5.2 删除目录

默认情况下,rmdir命令只删除空目录,要删除含有整个文件的目录,可以使用:

a、可以在整个非空目录上使用rm命令。使用**-r选项**使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身

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

6. 查看文件

6.1 查看文件类型

file命令能够探测文件的内部,并决定文件是什么类型

$ file my_file
my_file: ASCII text

file命令不仅能确定文件中包含的文本信息,还能确定该文本文件的字符编码,ASCII。

$ file New_Dir
New_Dir: directory

可以使用file命令作为另一种区分目录的方法

$ file sl_data_file
sl_data_file: symbolic link to 'data_file'

file命令甚至能够告诉你它链接到了哪个文件上

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

file命令对脚本文件的返回结果。尽管这个文件是ASCII text,但因为它是一个脚本文件,所以可以在系统上执行(运行)

$ 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,
[...]

file命令能够确定该程序编译时所面向的平台以及需要何种类型的库。

6.2 查看整个文件

cat 命令

  • -n 参数会给所有的行加上行号

    $ 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 参数只给有文本的行加上行号

    $ cat -b test1
    1 hello
    2 This is a test file.
    3 That we'll use to test the cat command.
    

more 命令

more命令会显示文本文件的内容,但会在显示每页数据之后停下来。可以通过按空格键或回车键以逐行向前的方式浏览文本文件。浏览完之后,按q键退出

less 命令

less命令的操作和more命令基本一样,一次显示一屏的文件文本。除了支持和more命令相同的命令集,它还包括更多的选项。其中一组特性就是less命令能够识别上下键以及上下翻页键(假设你的终端配置正确)。

6.3 查看部分文件

tail 命令

tail命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末尾10行。可以向tail命令中加入**-n参数来修改所显示的行数**。

$ tail -n 2 log_file
line19
Last line - line20

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

head 命令

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

它也支持-n参数,这样就可以指定想要显示的内容了。这两个命令都允许你在破折号后面输入想要显示的行数(即不需要 输入 -n 参数)

$ head -5 log_file
line1
line2
line3
line4
line5

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值