Shell命令(1):文件操作相关命令

Shell命令

linux主要由四部分组成:

  • linux内核
  • shell
  • 图形化界面
  • 应用软件

可以看出,shell非常重要。

1. Shell版本众多,如何知道你使用的是哪一个shell版本?

一般来说,系统默认的shell就是bash shell, 但是使用的shell取决于你用户登录时的shell.
因为root用户id配置的shell是bash,所以使用root用户登录时,使用的就是bash.

2. 如何查询所有系统的账户列表

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

root:x:0:0:root:/root:/bin/bash
rebatch:x:1001:100::/home/rebatch:/bin/bash

参数解析

  • 用户名
  • 用户密码,使用x占位符
  • 用户的系统用户ID编号,创建时由系统默认分配,root用户是0
  • 用户的系统组ID编号,创建时由系统默认分配,root用户组是0
  • 用户的名称
  • 用户的默认主目录
  • 用户的默认shell程序

3. shell提示符

在登录shell之后,会跳出一行,通常是当前目录+$,提示你输入:

tyhddb:/home/rebatch #

这个就是shell CLI提示符。

  • tyhddb:表示当前主机
  • /home/rebatch:表示当前目录
  • #:表示当前是root用户登录,$为普通用户登录

问题:如果你使用不同的linux系统,或者切换其他用户时,你可能会发现提示符会出现不同的格式,这个是怎么控制的?
控制命令提示符的环境变量有两个:

  • PS1:控制默认命令行提示符的格式
  • PS2:控制第二层命令行提示符的格式

在shell中输入使用默认的PS1提示符,如果需要输入附加的信息,才使用PS2,一般很少用到PS2.

既然是环境变量,我就可以在设置环境变量的地方设置它。

export PS1='$PWD>'
  • $PWD>表示当前路径后加上>
/home/rebatch/batch-home/env>

我们也可以使用echo $PS1来看看PS1的规则:

tyhddb:~ # echo $PS1
\[\]\h:\w #\[\]

这个root用户的PS1看起来有点奇怪,解释一下
每一个指令都是 /+字符 表示

  • \[:控制码序列的开头
  • \]:控制码序列的结尾
  • \h:本地主机名
  • \w:当前工作目录
    还有一些其他常用的:
  • \u:当前用户的用户名
  • \$:如果是普通用户,则为美元符号,如果是超级用户,则为英镑符号
  • \s: shell的名称
  • \\:斜杠

示例:
主机名/用户名:当前目录 (普通用户使用,root用户使用#)

export PS1='\h/\u:\w \$\[\]'
tyhddb/rebatch:~ $
tyhddb/rebatch:~ $su root
密码:
tyhddb/root:/home/rebatch #

注意:一定要在头尾加上单引号',否则/转义不起作用

4. bash手册

bash有自己的帮助文档,如果有命令不是很了解时可以查询,只要使用man 命令名称即可。

man cp

NAME
       cp - copy files and directories
SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
DESCRIPTION
       Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
       -a, --archive
              same as -dR --preserve=all
AUTHOR
REPORTING BUGS
COPYRIGHT
SEE ALSO
  • name: 命令的简单描述
  • synopsls: 命令的格式
  • description: 描述每个命令选项,主要了解内容
  • author: 命令开发人员的信息
  • reporting bug: 提供报告bug的信息
  • copyright: 命令代码的版权信息
  • see also: 提供类似命令

5. 文件系统

我们在登录shell的时候,一般当前的位置都是主目录,需要进入其他目录进行操作。了解一下linux的文件系统。

5.1 根目录

linux中只有一个目录,存贮所有的文件,这个目录是虚拟目录,而最基本最开始的一个是根目录。
一般使用cd /即可进入根目录

5.2 常用目录

在根目录下有很多目录,而且系统中这些目录都相同

  • /: 虚拟目录的根目录,通常此处没有文件
  • /bin: 二进制目录,存放用户的实用程序,bash shell就在这个目录中
  • /boot: 引导目录,存储引导文件
  • /dev: 设备目录,在该目录中创建设备节点
  • /etc: 系统配置文件目录
  • /home: 普通用户主目录
  • lib: 库目录,存储系统和应用程序库文件
  • media: 媒体目录,可移动媒体设备的常用挂载点
  • mnt: 挂载目录,也是常用的媒体设备的挂载点
  • opt: 可选目录,存储可选软件包
  • root: 根主目录
  • sbin: 二进制目录,存储管理级别的实用程序
  • tmp: 临时目录,可以在该目录创建和销毁临时工作文件
  • usr: 用户安装软件的目录
  • var: 可变目录,用于经常更改的文件,比如日志文件

5.3 浏览目录命令

更改目录命令:cd 路径
路径可以是绝对路径,也可以相对路径

  • .:表示当前目录
  • ..:表示父目录

5.4 文件和目录列表

查看文件和目录命令:ls

    1. ls命令以最基本的形式显示当前目录中的文件和目录。
    1. ls -F 区分文件和目录,目录后面+/,文件后面+*
    1. ls -a 查看所有文件,包括以.开头的隐藏文件
    1. ls -R 显示当前目录下所有目录中的文件,内容会很长
    1. ls -l 以列表形式显示每个文件的详细信息
      文件列表详细信息解析:
      • 文件类型:(d)目录,(-)文件,(c)字符设备,(b)块设备
      • 文件的权限
      • 指向该文件的硬连接的数据
      • 文件所有者的用户名称
      • 文件所属的组的名称
      • 文件的字节大小
      • 上次修改文件的时间
      • 文件或目录的名称
    1. ls -i 列出每个文件的索引节点,索引节点是每一个文件的标识

ls命令可以查看某些文件

  • ls -l file1 :查看file1这一个文件
    也可以使用通配符查看多个文件,支持正则表达式
  • ?表示一个字符
  • *表示表示零个或多个字符

5.5 文件处理

5.5.1 创建文件

创建空文件使用touch命令: touch 文件名

  • touch -a filename: 更改文件访问时间
  • touch -m filename: 更改文件修改时间
  • touch -t 时间戳 filename:加上指定时间戳

5.5.2 复制文件

复制文件使用cp命令:cp src dest
若文件已存在,会提示是否覆盖
将文件复制到当前所在目录,可以使用.

cp /home/test .
  • cp -p src dest: 复制的文件访问时间和修改时间与源文件一致。
  • cp -R dir1 dir2: 复制整个目录的内容
  • cp -f test* dir2: 使用通配符复制筛选的文件,-f 会强制重写已存在的文件

5.5.3 链接文件

链接文件有两种:

  • 软链接:使用cp -sln -s
  • 硬链接:使用cp -lln

硬链接创建的文件索引号相同,实际上是同一个文件。
软链接创建的文件索引号不相同,是不同的文件,而且软链接文件至存储源文件的相关信息,而不是文件中的实际数据。

5.5.4 重命名文件

重命名文件也是移动文件,使用mv src dest
如果在同一个目录,就是文件重命名的功能
移动带有链接的文件会有问题,链接的文件不再有效。

5.5.5 删除文件

删除文件使用rm file
rm删除的文件无法还原
如果删除带有软链接和硬链接的文件,软链接无法打开文件,但可以打开硬链接。

5.6 目录处理

5.6.1 创建目录

创建目录使用mkdir dir

5.6.2 删除目录

删除目录使用rmdir dir,但只能删除空目录,目录下有文件不能删除
所以一般使用rm -r dir删除目录
但一般会出现很多删除提示,所以使用rm -rf dir强制删除所以目录

5.7 查看文件内容

5.7.1 查看文件系统中文件的完整摘要

使用ls不能查看出所有信息,使用stat file命令查看完整摘要信息

5.7.2 查看文件类型

stat命令查询的信息少了文件类型信息,查看文件类型使用file test命令。
file命令将文件分为3类:

  • 文本文件
  • 可执行文件
  • 数据文件:不可执行,不可打印的二进制字符文件

5.7.3 查看整个文件

5.7.3.1 cat命令

cat file直接显示所有的文件内容。
cat -n file:为所有行添加编号,在查看脚本很有用
cat -b file:为带文本的行添加编号
cat -T file: 去掉所有的跳格字符
cat命令对于大的文件不好用,查找某些数据需要不停的滚动,建议大文件使用more命令

5.7.3.2 more 命令

more file也是显示文本文件,但显示完一页数据就停止,可以手动翻页或查询。
在more程序中,可以使用提示符进行一些操作

  • z: 翻页
  • enter: 下一行
  • q: 退出
  • f: 向前跳过一页
  • b: 向后跳过一页
  • /expression: 在文件中搜索expression代表的文本,常用于搜索
  • =:显示当前行号
  • v:在当前打开vi编辑器
  • !cmd:执行shell命令
5.7.3.3 less命令

less命令比more命令更加高级,可以在命令读完整个文件之前显示文件内容,可以轻松应对大型文件。
less命令操作和more命令操作基本相同,而且可以识别向上向下,翻页键等。

5.7.4 查看部分文件

5.7.4.1 tail命令

tail命令显示最后一组文件行,默认显示最后10
行。

  • tail -f file: 保持tail激活状态,继续显示添加的文本的新行。
  • tail -n 300 file:显示文件最后300行
  • tail -c 300 file:显示文件最后300个字节
5.7.4.2 head 命令

与tail命令类似,head命令显示开头的一组文件行,默认显示10行,也支持-c-n命令。
因为文件开头不会更改,所以没有-f命令

    原文作者:xuweizhen
    原文地址: https://www.jianshu.com/p/c44b6c639243
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞