XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


基本bash shell命令《Linux命令行与Shell脚本编程大全》

目录

基本bash shell命令

大多数的Linux默认的都是GUN bash shell, 在ubuntu6.1之后大部分是dash

启动shell

GUN bash shell能提供对Linux的交互式访问.它是作为普通程序运行的, 通常在用户登录的时候启动.登录时启动依赖于用户的账户设置

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

jiao:x:1000:1000:jiao,,,:/home/jiao:/bin/bash

有七个字段, 每个字段用冒号分割, 系统利用数据赋予用户特定的属性, 最后代表使用的shell程序

最后一个是bash, 在启动之后使用/bin/bash作为默认的shell程序, 启动之后bash shell自动启动, 是否出现命令界面(CLI), 取决于登录的方式是不是图形界面

shell提示符

默认的提示符是$, 表明正在等待用户输入, 出现的时候可以输入新的命令

jiao@jiao-virtual-machine:~$

除了用户名还有用户的系统名

bash中还有bash手册大有帮助

bash手册

查找shell命令以及其他GUN工具信息的在线手册, 可以帮你查找参数

man命令: 访问手册页面, 在想要查找的工具之前输入man可以找到对应的手册条目

  • 手册把不同的信息分为不同的节
描述
Name 显示命令名和一段简短的描述
Synopsis 命令的语法
Confi guration 命令配置信息
Description 命令的一般性描述
Options 命令选项描述
Return Value 命令的返回值
Errors 命令的错误消息
Environment 描述所使用的环境变量
Files 命令用到的文件
Versions 命令的版本信息
Conforming To 命名所遵从的标准
Notes 其他有帮助的资料
Bugs 提供提交bug的途径
Example 展示命令的用法
Authors 命令开发人员的信息
Copyright 命令源代码的版权状况
See Also 与该命令类型的其他命令

如果不记得命令名怎么办?可以使用关键字搜索手册页。语法是:man -k 关键字。例如,要查找与终端相关的命令,可以输入man -k terminal

还为每一个区域都分配了一个数字

  1. 可执行的shell命令
  2. 系统调用
  3. 库调用
  4. 特殊文件
  5. 文件格式与约定
  6. 游戏
  7. 概览、约定及杂项
  8. 超级用户和管理员命令
  9. 内核例程

一个命令有时候会在多个区域, 要查看不同区域的

$ man section# topic
例如hostname同时在1和7
$ man 1 hostname
$ man 7 hostname

大多数命令都接受–help或-help

可以使用help help查看, 有中文

info

  • info [选项] 参数
  • 参数:指定需要获得帮助的主题,可以是指令、函数以及配置文件。

-d:添加包含info格式帮助文档的目录; -f:指定要读取的info格式的帮助文档; -n:指定首先访问的info帮助文件的节点; -o:输出被选择的节点内容到指定文件。

快捷键

?键:它就会显示info的常用快捷键。 N键:显示(相对于本节点的)下一节点的文档内容。 P键:显示(相对于本节点的)前一节点的文档内容。 U键:进入当前命令所在的主题。 M键:敲M键后输入命令的名称就可以查看该命令的帮助文档了。 G键:敲G键后输入主题名称,进入该主题。 L键:回到上一个访问的页面。 SPACE键:向前滚动一页。 BACKUP或DEL键:向后滚动一页。 Q:退出info。

常用指令

? 显示帮助窗口

在帮助窗口中: Ctrl-x 0 关闭帮助窗口 Ctrl-x Ctrl-c 关闭整个 Info

q 退出 info n 打开与本 Node 关联的下一个 Node p 打开与本 Node 关联的前一个 Node u 打开与本 Node 关联的上一个 Node l 回到上一次访问的 Node m或g 选择一个菜单项(Node 的名字) 输入指定菜单的名字后按回车,打开指定菜单项关联的 Node 空格键 下一页(PageDown 也可以,下一页从当前页的最后两行开始算起) 下一个 Node (若当前页在 Node 文档的末尾) Del 键 上一页(PageUp 也可以,上一页从当前页的开始两行开始算起) 上一个 Node (若当前页 Node 文档的开始)

b 或 t 或 Home 文档的开始(b 是 begining 的意思) e 或 End 文档的末尾(b 是 ending 的意思) Ctrl-l 刷新当前页,若当前文档显示情况有问题时 Ctrl-g 取消所键入的指令

浏览文件系统

Linux文件系统

不使用驱动盘符, windows会为每一个物理磁盘驱动器分配一个盘符

Linux把文件存储在单个文件目录之中, 这个目录叫虚拟目录

虚拟目录把所有存储设备的文件目录路径纳入单个文件目录之中

Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照访问它们的目录路径一一列出,这点跟Windows类似

在Linux上安装的第一块硬盘为根驱动器, 包含了虚拟内存的核心, 其他目录都是从那里开始挂载的

Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然而实际上它们却存储在另外一个驱动器中

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

  • 在Linux之中通用的目录名用于一些常见的功能
目录 用途
/ 虚拟目录的根目录。通常不会在这里存储文件
/bin 二进制目录,存放许多用户级的GNU工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/mnt 挂载目录,另一个可移动媒体设备的常用挂载点
/opt 可选目录,常用于存放第三方软件包和数据文件
/proc 进程目录,存放现有硬件及当前进程的相关信息
/root root用户的主目录
/sbin 系统二进制目录,存放许多GNU管理员级工具
/run 运行目录,存放系统运作时的运行时数据
/srv 服务目录,存放本地服务的相关文件
/sys 系统目录,存放系统硬件信息的相关文件
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
/var 可变目录,用以存放经常变化的文件,比如日志文件

常见的目录名均基于文件系统层级标准(filesystem hierarchy standard,FHS)。很多Linux发行版都遵循了FHS。这样一来,你就能够在任何兼容FHS的Linux系统中轻而易举地查找文件

遍历目录

切换目录cd destination

没有参数的时候返回用户的主目录

绝对文件目录

从根目录开始

提示符中的~表示位于自己的主目录之中

切换出主目录以后会显示绝对路径

检查目录pwd

相对文件路径

直接以目录名开头

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

文件和目录列表

基本列表功能

ls按列以及字母顺序进行排列

ls -F在目录的后面加上斜杠, 用于区分目录, 可用于没有颜色区分的仿真器

ls -a显示隐藏文件, 通常以” . “开头

ls -R递归显示子目录中的文件

ls -d只列出目录本身的信息(在查找的时候使用名字显示文件内容)

ls -i查看文件的编号, 每一个文件都有唯一的编号

显示长列表

ls -l显示文件的附加信息 drwxrwxr-x 2 jiao jiao 4096 3月 18 20:04 01_Python

  • 文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b);

  • 文件的权限(参见第6章);

  • 文件的硬链接总数;

  • 文件属主的用户名;

  • 文件属组的组名;

  • 文件的大小(以字节为单位);

  • 文件的上次修改时间;

  • 文件名或目录名。

过滤输出列表

过滤器: 进行简单文本匹配的字符串

ls -l my_script匹配对应的文件名

文件扩展匹配, 使用元字符通配符

  • 问号(?)代表一个字符;
  • 星号(*)代表零个或多个字符
  • 中括号[eleect] 进行选择[a -i]区间, [! a]进行排除

处理文件

创建文件

touch创建空文件, 并使用你的用户名作为文件的属主

还可以用来改变文件的修改时间, 但是不修改文件的内容

也可以使用-a来改变访问时间ls -l --time=atime test查看文件的访问时间

复制文件

cp source destination

如果新文件的文件名已经存在可能不会提示, 最好加上-i, 显示提示

要是想要复制到一个目录要在最后加上/, 否则可能会创建一个文件和目录同名(测试的时候复制到文件中了)

-R 递归的复制一个文件夹

也可以在复制文件的时候使用通配符

制表键自动补全

按一下补全, 如果有多个满足的文件按两下显示所有

链接文件

如果需要维护一个文件的多个副本, 除了单独的物理副本, 还有虚拟副本, 有两种链接

  • 符号链接: 一个实实在在的文件, 指向存放在虚拟目录结构某一个地方的另一个文件
  • 硬链接: 创建单独的虚拟文件, 包含源文件的信息以及位置

符号链接: ln -s 原文件名 链接名, 创建的是一个指针, 但是属于另一个文件, 可以使用ls -i 查看文件编号

//源文件
811102 drwxrwxr-x 2 jiao jiao 4.0K  8月  2 14:36 abb
//链接
800794 lrwxrwxrwx 1 jiao jiao    3  8月  2 14:21 baa -> abb

文件的大小不同, 文件编号不同, 源文件的链接数是2

硬链接: ls 原文件名 链接名

//链接出来的文件
800795 -rw-rw-r-- 2 jiao jiao    4  8月  2 13:27 acc
//源文件
800795 -rw-rw-r-- 2 jiao jiao    4  8月  2 13:27 test

文件大小相同, 文件的编号相同, 显示的链接数都是2

**注: **对于硬链接只能处于一个存储媒体的文件

我的理解:硬链接是指向源文件的存储的另一个指针, 符号链接是指向源文件存储的二级指针

删除硬链接的源文件不会造成影响, 但是删除符号链接的源文件会造成影响

重命名

称为文件的移动

mv 源文件 目标地址

文件的编号时间戳都不变

可以使用-i来使得在覆盖文件的时候有提示

删除文件

rm 文件名

-i: 显示是否要删除的提示

bash shell没有回收站或垃圾桶

可以使用通配符

-f: 取消所有的提示

处理目录

创建目录

mkdir 文件夹的名字

-p: 创建多个文件目录和子目录

删除目录

redir 文件名

只能删除空目录, 没有-i选项

rm -r 文件名

删除整个文件, 可以和-i命令配合使用选择删除, 和-f配合使用直接删除

查看文件内容

查看文件类型

file 文件名

确定文件的信息以及编码, 可以返回二进制文件面向的平台以及需要的各种类型的库

查看整个文件

cat

cat 文件名   //查看文件

-n: 加上行号

-b: 只给有文本的行加上行号

-T: 禁止制表符出现, 把所有的制表符转换为^I

more

显示文本的内容, 但是每次只显示一页的内容

回车一次显示一行, 空额下一行, 和手册的使用一样

Ctrl+B往上翻

Ctrl+F往下翻

less

more的升级版

查看部分文件

tail

tail 文件名

显示文件的最后几行

tail -n 数字 文件名
tail -数字 文件名

显示文件最后n行

-f: 在其他进程添加信息的时候实时显示

head 文件名

显示文件的前几行

-n: 显示的行数