云计算百科
云计算领域专业知识百科平台

Linux 基础指令与文件操作

在这里插入图片描述

文章目录

    • 1. Linux、远程登录与命令格式
      • 1.1 Shell 与命令的执行
      • 1.2 练习目录
    • 2. 路径与工作目录
      • 2.1 当前用户与当前位置
      • 2.2 绝对路径与相对路径
      • 2.3 目录切换
    • 3. 文件属性与目录列表
      • 3.1 文件的内容与属性
      • 3.2 `ls -a`、`ls -l` 与 `ls -d`
      • 3.3 长格式字段与文件类型
    • 4. 目录创建与文本写入
      • 4.1 `mkdir` 与 `touch`
      • 4.2 `echo` 与输出重定向
      • 4.3 `cat` 与固定练习文本
    • 5. 文件复制、移动与删除
      • 5.1 `cp` 与目标路径
      • 5.2 `mv` 的移动与重命名
    • 6. 文本分页与局部查看
      • 6.1 `less` 分页阅读
      • 6.2 `head` 与 `tail`
      • 6.3 `tail -f` 跟踪追加内容
    • 7. 文件查找、文本筛选与管道
      • 7.1 `find` 查找文件
      • 7.2 `grep` 筛选文本行
      • 7.3 管道与输出文件
    • 8. 命令帮助与常用补充
      • 8.1 `man`、`–help` 与 `help`
      • 8.2 时间与系统信息

1. Linux、远程登录与命令格式

Linux 严格来说是操作系统的内核。平时安装的Centos、Ubuntu、Debian、Rocky Linux 等发行版,则把内核与系统工具、软件管理工具等组合成可以使用的系统。

如果使用云服务器,购买时关注地域、费用、配置和系统镜像即可,基础命令练习通常不需要很高的配置。

在云控制台取得服务器的公网地址与登录用户名,再通过 SSH 登录。Windows 可以使用 PowerShell 中的 ssh,也可以用 Xshell、MobaXterm 等终端软件建立 SSH 会话。

# 在本地 Windows 中执行;替换用户名和公网地址
ssh 用户名@服务器公网IP

密钥登录需要按云厂商说明指定私钥。首次连接会提示核对主机指纹;密码输入时通常不显示字符,也不显示星号。

登录以后,终端里的 Linux 命令在远端服务器执行。 本地 Windows 的磁盘路径不能直接当成服务器上的路径使用。

1.1 Shell 与命令的执行

终端提供输入和显示界面,Shell 是解释命令的程序,Bash 就是常见的一种 Shell。Shell 解析输入,处理引号、重定向等语法,再执行内建命令或启动外部程序;程序通过操作系统提供的接口完成实际工作。

常见命令格式是:

命令名 [选项] [操作对象]

方括号表示该部分可以省略,不需要把方括号输入终端。例如:

ls -l /tmp

这里 ls 是命令,-l 改变显示方式,/tmp 是被查看的目录。命令名、选项、对象之间用空格分开。很多短选项可以进行合并,例如 ls -a -l 可以写为 ls -al。

1.2 练习目录

以下练习都会在当前用户的家目录(个人云服务器)中进行,不需要 root 权限。在创建我们的练习目录前,先确认 linux-command-lab 不是存放已有资料的目录;如有重名,换一个名称,并同步修改后续路径。

下面的 mkdir -p 会创建目录及缺少的上级目录。

mkdir -p ~/linux-command-lab/logs ~/linux-command-lab/backup
cd ~/linux-command-lab

2. 路径与工作目录


2.1 当前用户与当前位置

在命令行输入whoami 显示当前有效用户的用户名,pwd 显示当前工作目录。前者回答当前登录的身份,后者回答位置,两个问题互不替代。

whoami
pwd

例如当前我作为普通用户可能看到:

在这里插入图片描述

工作目录不是“目前打开的整个服务器”,而是解析相对路径时所依据的目录。

2.2 绝对路径与相对路径

Linux 把文件和目录组织在以 / 为根的目录结构中,不采用 Windows 的 C:、D: 盘符形式。此处可以先把它理解成一棵目录树:

/ 根目录
├── home/
│ └── by2099/ 示例用户的家目录
│ └── linux-command-lab/
│ ├── logs/
│ └── backup/
└── tmp/

目录用来组织名称;普通文件则保存具体内容。在后面的学习中我们会认识到,同一个文件可以通过不同路径访问,所以“能用路径定位文件”不等于“每个文件只有一条路径”。

写法含义示例
/ 单独使用表示根目录;路径中也作分隔符 /tmp
. 当前目录 ./logs
.. 上级目录 ../backup
~ 由 Shell 展开为当前用户的家目录 ~/linux-command-lab
以 / 开头的路径 绝对路径,从根目录开始定位 /home/by2099/linux-command-lab/logs
不以 / 开头的普通路径 相对路径,依赖当前工作目录 logs、../backup

注意不要把 . 和 .. 记反:一个点是当前目录,两个点是上级目录。~ 则是 Shell 的便捷写法,展开后才成为实际路径。

在这里插入图片描述

2.3 目录切换

cd 改变当前 Shell 的工作目录。下面按顺序执行,观察每次 pwd 的结果:

cd logs
pwd
cd ../backup
pwd
cd ..
pwd

在这里插入图片描述

返回路径依次以 /linux-command-lab/logs、/linux-command-lab/backup、/linux-command-lab 结尾。第二条 cd 中,先由 .. 返回练习目录,再进入其中的 backup,并不是寻找 logs 内部的 backup。

另外有三种很常用的写法:

cd ~ # 进入家目录;单独输入 cd 也可以
cd / # 进入根目录
cd – # 回到上一次工作目录,通常也会显示切换后的路径

Linux 文件名通常区分大小写,比如notes.txt 和 Notes.txt 是不同的名称。含空格的路径需要用引号整体包住,例如 cd "study notes";

3. 文件属性与目录列表


3.1 文件的内容与属性

在当前学习中,我们可以把文件概括为两个方面 “内容+属性”:

  • 内容是保存的数据;
  • 属性描述类型、大小、所有者、权限和时间等信息。

cat 等命令关注文件内容,ls -l 主要显示属性。一个空文件虽然没有正文,但仍然有名称、类型、所有者、时间等信息。

ls 不带对象时列出的是当前目录中的可见条目;指定目录时默认列出其中的条目;指定普通文件时显示该文件本身。

3.2 ls -a、ls -l 与 ls -d

选项作用适用情况
-a 包括以 . 开头的隐藏名称,也包括 . 和 .. 查看隐藏文件
-l 使用长格式显示详细信息 查看类型、大小、所有者等
-d 显示目录条目本身,不展开目录内容 查看目录自身的属性

ls
ls -a
ls -l
ls -ld logs
ls -ald .

在这里插入图片描述

ls -ald . 就是组合使用 -a、-l、-d,查看当前目录下的长格式信息。其中,查看普通名称目录自身属性的关键是 -ld;-a 负责显示隐藏名称。

比较 ls -l logs 和 ls -ld logs:前者列出 logs 内的条目,此时目录为空,通常只看到 total 0;后者显示 logs 目录本身那一行。这是 -d 最容易混淆的地方。 在这里插入图片描述

3.3 长格式字段与文件类型

下面就是是一行典型的长格式输出,具体用户名和时间以自己的环境为准:

在这里插入图片描述

在这里插入图片描述

字段当前需要理解的含义
第一个字符 – 文件类型,这里是普通文件
后面九个字符 rw-rw-r– 三组访问权限
1 硬链接数,当前先认识字段名称,不展开链接机制
两个 by2099 所有者、所属组
30 对这个普通文件而言,是文件长度,单位为字节
日期和时间 默认主要反映最后修改时间,显示形式可能不同
notes.txt 文件名

常见的文件类型标识如下,先重点记住前三种:

首字符类型
– 普通文件
d 目录
l 符号链接
c、b 字符设备、块设备
p、s FIFO 管道、套接字

普通文件内部还可能是文本、图片、可执行程序等。由于Linux 不单靠扩展名决定文件类型,所以给文本文件加上 .png 后缀并不会把它变成图片。

4. 目录创建与文本写入


4.1 mkdir 与 touch

mkdir 用来创建目录,使用mkdir -p a/b 命令会在需要时补齐上级目录。

当指定目录已经存在时,-p 通常也不会因这一点报错,也不会替你清空已有目录。

touch 在目标不存在时通常创建空文件;若目标已经存在时,默认更新时间戳,不会清空或重写已有内容。

mkdir drafts
mkdir -p work/day1
touch notes.txt
touch .practice
ls -a

在这里插入图片描述

tree:以树形结构打印当前目录下所有文件和文件夹,一眼看懂目录层级关系。 默认系统没有自带 tree,需要先安装(下面为安装命令,此时直接复制执行即可):

  • sudo yum install tree -y(普通用户)
  • yum install tree -y(root用户)

.practice 以点开头,因此默认的 ls 不显示它,ls -a 可以显示。而所谓的隐藏首先是一种命名约定,不代表文件得到加密或访问保护。

4.2 echo 与输出重定向

echo 可以把参数输出出来,默认在末尾加一个换行。例如 echo 'hello Linux' 通常只在终端显示文字,不会自动保存成文件。

需要写入文件,可使用 Shell 的输出重定向:

echo 'Linux practice' > notes.txt
echo 'paths and files' >> notes.txt
cat notes.txt

输出为:

在这里插入图片描述

写法结果
命令 > 文件 将标准输出写入文件;文件不存在则创建,存在时通常先清空再写入
命令 >> 文件 将标准输出追加到文件末尾;文件不存在则创建

> 和 >> 是 Shell 语法,不是 echo 的选项。

“标准输出”可以先理解为程序正常输出数据的通道,默认通常连到终端。

特别注意,Shell 一般在命令真正读取文件前就处理重定向。 因此,不能用 cat notes.txt > notes.txt 来进行“原样写回”,输入文件可能先被清空。需要处理原文件时,先输出到不同的文件名,再检查结果。

4.3 cat 与固定练习文本

cat 文件 可以查看内容,多个文件则按参数顺序连续输出。适合短文本,不适合不加区分地查看图片、压缩包等二进制内容。

先建立一份六行的模拟日志:

echo 'INFO service start' > logs/sample.log
echo 'INFO user login' >> logs/sample.log
echo 'ERROR disk full' >> logs/sample.log
echo 'warning retry' >> logs/sample.log
echo 'error timeout' >> logs/sample.log
echo 'INFO service stop' >> logs/sample.log
cat logs/sample.log

输出为: 在这里插入图片描述

扩展选项:

  • cat -n logs/sample.log 给所有输出行编号,方便对照位置。编号只加在显示结果中,不会修改原文件。
  • cat -b 只给非空行编号。
  • cat -s 将连续的多个空行压缩显示为一个空行。

5. 文件复制、移动与删除


5.1 cp 与目标路径

cp 源 目标 用于复制文件。常见用法如下:

cp notes.txt notes-copy.txt
cp notes.txt backup/
cp -r logs logs-copy

  • 第一条创建不同名称的副本;
  • 第二条把副本放到已存在的 backup 目录中,名称仍为 notes.txt;
  • 第三条递归复制目录。这里 logs-copy 原先不存在,执行后得到 logs-copy/sample.log。 在这里插入图片描述
  • 目标是否已经存在,会影响结果。 上述情况如果 logs-copy 已经是一个目录,再执行 cp -r logs logs-copy时,通常会把 logs 放进它里面,形成 logs-copy/logs/…。

    复制普通文件时,如果目标文件已经存在,默认可能覆盖它。如果希望覆盖前询问用户是否确认执行,可以使用 cp -i 源 目标。

    5.2 mv 的移动与重命名

    mv 源 目标 用来移动文件或目录,同时也用于重命名:

    mv notes-copy.txt notes-renamed.txt
    mv notes-renamed.txt backup/
    ls backup

    此时输出为: 在这里插入图片描述

    第一条修改名称,第二条改变所在目录;移动后,原位置不再保留那个副本。

    移动整个目录不需要像 cp 那样添加 -r。

    在这里插入图片描述

    也可以同时改变文件的位置与名称,例如 mv old.txt backup/new.txt。但目标文件已存在时也可能发生覆盖;需要询问确认时使用 mv -i。

    6. 文本分页与局部查看


    6.1 less 分页阅读

    当一个文件比较长时,cat 会把内容直接全部输出,容易刷过需要的位置。less logs/sample.log 则进入分页阅读界面。

    按键常见作用
    空格、PageDown 向后翻页
    PageUp、b 向前翻页
    /ERROR 后按 Enter 向后搜索 ERROR
    n、N 重复上次搜索、反方向重复搜索
    g、G 到文件开头、末尾
    q 退出分页界面

    需要指定行号时使用 less -N logs/sample.log,这里是大写 N。

    6.2 head 与 tail

    只想看文件的开头或结尾时,用 head 和 tail,默认通常显示十行,-n 可指定行数:

    head -n 3 logs/sample.log
    tail -n 2 logs/sample.log

    第一条输出: 在这里插入图片描述 第二条输出: 在这里插入图片描述

    6.3 tail -f 跟踪追加内容

    tail -f 先显示末尾内容,再继续等待新追加的数据:

    # 服务器终端 A
    cd ~/linux-command-lab
    tail -f logs/sample.log

    再开一个登录到同一台服务器、同一用户的终端:

    # 服务器终端 B
    cd ~/linux-command-lab
    echo 'INFO new connection' >> logs/sample.log

    终端 A 随后显示新行。按 Ctrl+C 结束跟踪,回到命令提示符。

    在这里插入图片描述 在这里插入图片描述

    7. 文件查找、文本筛选与管道


    7.1 find 查找文件

    知道文件的名称、但不知道文件在哪时,可以使用 find 起点 条件。它遍历指定目录范围,输出符合条件的路径:

    find . -name 'notes.txt'
    find . -type f -name '*.log'

    输出: 在这里插入图片描述

    第一条找到两条路径,输出先后顺序不作保证。

    第二条查找后缀为.log的普通文件,-type f 是类型条件,-name 后是名称模式,不是搜索文件正文(*号是通配符)。

    7.2 grep 筛选文本行

    find 查找路径,grep 按模式筛选文本行。它通常输出整条匹配行,而不只是命中的几个字符。

    grep 'ERROR' logs/sample.log
    grep -ni 'error' logs/sample.log
    grep -nvi 'error' logs/sample.log

    在这里插入图片描述

    第一条区分大小写,只输出:

    ERROR disk full

    第二条带行号、忽略大小写:

    3:ERROR disk full
    5:error timeout

    第三条是在同样忽略大小写的前提下,输出不匹配的行:

    1:INFO service start
    2:INFO user login
    4:warning retry
    6:INFO service stop

    选项作用
    -n 显示输入中的行号
    -i 忽略大小写差异
    -v 反向选择不匹配的行

    7.3 管道与输出文件

    管道符 | 可以把左边命令的标准输出连接到右边命令的标准输入。标准输入可以理解为程序接收数据的通道;前面没有给 head、tail 直接指定文件时,也可以由这个通道提供数据。

    例如查看日志的第 2~4 行:

    head -n 4 logs/sample.log | tail -n 3

    结果为: 在这里插入图片描述

    左边先取前四行,右边再从这四行里取最后三行。因此,tail 接收到的是文本数据,不是字符串 logs/sample.log,也不是左边命令的文件名参数。

    筛选结果还可以继续保存:

    grep -i 'error' logs/sample.log > errors.txt
    cat errors.txt

    输出为: 在这里插入图片描述 在这里插入图片描述

    8. 命令帮助与常用补充


    8.1 man、–help 与 help

    刚开始学习时可以不必要把全部选项背下来,但是要能找到本机工具的说明:

    man ls
    ls –help
    help cd

    • man 查找本机手册,分页器常支持 /关键词 搜索、n 继续查找、q 退出。
    • –help 常用于 GNU 工具的简要帮助,并非所有命令都支持。

    8.2 时间与系统信息

    以下用法偶尔需要时再查,不扩展成另一套选项目录:

    命令用途与边界
    date 查看服务器当前时间,时区以服务器设置为准
    date '+%Y-%m-%d %H:%M:%S' 格式化显示时间;大写 %M 是分钟,小写 %m 是月份
    date +%s 查看 Unix 时间戳,即从 UTC 的 1970-01-01 00:00:00 起计的秒数,不计闰秒
    uname -r 查看内核版本,不是发行版版本
    cat /etc/os-release 在提供该文件的发行版上查看发行版标识
    cal 查看日历
    bc 命令行计算器,可能需要另装软件;交互时输入 quit 退出

    终端里的 Ctrl+C 通常用于中断当前前台任务;Ctrl+D 常用于在当前输入为空时表示输入结束,在 Shell 提示符处也可能退出会话,所以不能把它们都当作是 Windows 的复制或粘贴快捷键,复制、粘贴快捷键取决于使用的终端软件。

    至此,日常文件操作已经能连起来:用路径确定对象,用 ls 观察属性,用 cp/mv/rm 整理文件,再用 less/head/tail/grep 读取需要的信息。

    在这里插入图片描述

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux 基础指令与文件操作
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!