Linux学习笔记

A 概念


一 linux 终端

linux 终端也称为虚拟控制台,是 linux 从 UNIX 集成来的标准特性。显示器和键盘合称为终端,因为他们可以对系统进行控制所以又称为控制台。通常情况下, linux 默认开启6个虚拟终端。如果默认启动界面选择了图形界面,类似于 windows 桌面系统,那么X Window 在第1个虚拟终端上。


二 shell

shell 是一个命令解释器,它可以用来启动、挂起、停止程序,还允许用户编写由 shell 命令组成的程序。

1 shell 种类

shell 有多种不同的版本,在 linux 的 /etc 目录下的 shells 文件中列出了系统可以接受的 shell 以及他们的命令。

cat /etc/shells # 列举系统可以接受的 shell
chsh -l  

-w413
其中,“/bin/nologin“ 并不是一种 shell,它是作为被禁用用户 shell 的替代物(不用 shell 的用户所用的),用来显示账号不可用信息。

ls -al /bin/sh # 显示 shell 的详细信息

-w399
bash 是指 GUN 的 Bounre Again shell,是 GNU 操作系统上默认的 shell.
系统变量 $ SHELL 记录系统当前正在使用的 shell。

echo $ SHELL # 查看系统当前正在使用的 shell

-w355
linux 系统默认的 bash 是对 ksh 和 ash 的改进,增加和增强了许多特性,还包含了许多其他 shell 的特点,具有灵活和强大的编程接口,同时又有很好的用户界面

2 shell 命令的基本格式

shell 命令解释程序包含了一些内置命令,由 shell 自身执行。除了内置命令,还有一部分独立的程序实现的命令,用于对 linux 功能进行扩展,成为外置命令,由 shell 调用这些程序执行命令,例如命名 vi 是 vi 编辑器软件对应的命令,是外置命令。
bash 有40多个内置命令,最多可以有12个命令行参数,同时支持对命令行进行编辑。

命令名 [选项] <参数1> <参数2>... 

方括号代表可选。命令可能具有0个或多个参数。
[选项] 是对命令的特别定义,可以理解为更具体的告诉命令做什么。以 “-” 开始的选项通常只有一个字母,多个选项可以用一个 "-" 连接起来。比如 "ls -a-l" 和 "ls -al"是相同的。有的选项以 “--” 开头,这些选项通常是一个单词,比如 --number,很多 "--" 格式的选项都有用 “-” 加上第一个字母的简写形式。
在命令、选项和参数之间用空格或制表符(tab)隔开。连续的空格被 shell 解释为一个空格。

3 使用命令的基本方法

输入命令,然后回车执行命令。命令完成后会返回到提示符状态。如果没有此命令,会提示 "bash:....:command not found"
linux 命令是严格区分大小写的,同一个单词大写和小写作为不同的命令。
可以用 ";" 将两个命令隔开,从而可以在一行中输入多个命令,按回车后 shell 将依次执行这些命令。
shell 到达行位时会自动换行,可以使用反斜杠 "" 或者分号 ";"在多个命令行上输入很长的单个命令或者多个命令。

4 命令自动补齐与历史记录

命令、目录名或者文件名的一个或几个字母时,按下 tab 键,shell 会在相关的目录下自动查找匹配的项,自动补全命令、目录名或者文件名。如果一次 tab 出不来就按两次。用自动补全可以提高效率。

5 shell 提示符

"#" 符号结尾的命令提示符,表明该 shell 的用户是 root 用户。
"$" 符号结尾的命令提示符,表明是 root 以外的用户。
默认的其他提示符:[登录用户名 @ 主机名 当前目录]
"~" 表示当前目录是该用户的主目录。
可以定制 shell 的提示符,以显示系统信息或正在进行的工作。 可以参考文档 Bash Prompt HOWTO,或者 bash 自己的帮助文档。

6 输入输出重定向

shell 命令是控制台命令,使用标准输入输出设备,即从键盘接受输入,将结果显示在显示器上。可以将 shell 命令的输入输出重定向到其他文件或设备。

 X # 某一个命令
 X < file # < 输入重定向符。 X 命令在执行过程中需要从控制台输入数据,该命令可从文件 file 中读取数据。
 x > file # > 输出重定向符。 X 命令的输出结果写入文件 file 中,如果file中原来有数据,则将原有数据清除。
 x >> file # >> 不清除 file 文件中的原有内容,而是将新数据附加在原数据之后。
 
 ls -l > lsresult # 控制台不显示目录信息。会将信息存储到 lsresult 中

7 管道

在 linux 系统中,管道是一种先进先出的单向数据通道。利用管道符号 "|",可以将多个命令组合到一起,把前一个命令的结果当做下一个命令的输入,最终得到多个命令依次处理的结果。
-w299
ls 查看当前文件目录
grep 检索数据中符合匹配条件的文本。


三 文件与目录的概念

1 文件

文件是 linux 系统用来存储信息的基本结构,它是被命名的存储在某种介质上的一组信息的集合。linux 文件均为无结构的字符流形式。文件名是文件的标识,它有字母、数字、下划线和句点组成的字符串构成。linux 要求文件名的长度不超多 255 个字符,用户应该选择具有意义的文件名以便于记忆。

linux 系统中有三种基本类型的文件:普通文件、目录文件和设备文件。

  1. 普通文件
    1. 文本文件。 以文本的 ASCII 码的形式存储在计算机中。它是以 “行” 为基本结构的一种信息和存储方式。
    2. 二进制文件。以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们,只有通过相应的软件才能将其显示出来。常见的可执行程序、图形、图像、声音等文件都是二进制文件。
  2. 目录文件
    1. 目录用于管理和组织系统中的大量文件。在 linux 系统中,目录以文件的形式存在,目录文件存储了一组相关文件的位置、大小等与文件有关的信息。简称为目录。
  3. 设备文件
    1. linux 把每一个 I/O 设备都堪称一个文件,与普通文件一样处理,这样可以使文件与设备的操作尽可能统一。

2 目录

linux 目录将所有文件的说明信息采用树形结构组织起来。整个文件系统有一个根,根上再分叉,叉上再分叉,叉上也可以长叶子。根和叉统称为目录或文件夹。而叶子则是一个个的文件。事件证明。此种结构的文件系统效率比较高。

以根目录 '/' 为起点,所有其他目录都由根目录派生而来。用户可以浏览整个系统,可以进入任何一个授权进入的目录。

linix系统

实际上,各个目录结构之下都会有一些文件和子目录。系统在建立每一个目录时,都会为它设定两个目录文件,一个是 '.',代表该目录自己。另一个是 '..',代表该目录的父目录。对于根目录,'.' 和 '..' 都代表其自己。
用户可以创建文件或目录,可以移动或复制文件或目录,可以和系统中的其他用户共享目录和文件。用户可以很方便地从一个目录切换到另一个目录,还可以设置目录和文件的权限。
根目录是 linux 系统的特殊目录,操作系统本身的驻留程序存放在以根目录开始的专用目录中,有时称为系统目录。上图根目录下的目录就是系统目录。

3 工作目录、用户主目录和路径

  1. 工作目录与用户主目录。
    1. 工作目录。用户登录 linux 系统后,所在的目录被为“工作目录”或“当前目录”。工作目录是可以随时改变的。工作目录用“.”表示,其父目录用“..”表示。
    2. 用户主目录。是系统管理员在增加该用户时为该用户建立起来的目录,每个用户都由自己的主目录。默认情况下用户主目录是/home目录下与用户名相同的目录。不同用户的主目录一般不会相同,也可以改变用户的主目录。用户刚登录系统时,默认是在用户主目录下。用户可以通过 "~" 字符来引用自己的主目录。
  2. 路径
    1. 路径指从树形结构中的某个目录到某个文件的一条道路。此路径的主要构成是目录名称,中间用“/”分开。路径分为绝对路径和相对路径。
      1. 绝对路径。从根目录开始的路径,也称为完全路径。
      2. 相对路径。从用户工作目录开始的路径。
  3. 通配符
    1. linux 允许使用特殊字符(通配符)来引用多个文件名。常用的有 "*"、"?"、"["、"]" 和 "-" 组成的字符组模式。
      1. 通配符 "*"。 匹配文件中的任意字符或字符串。但不是与句点开头的文件匹配。因为他们是隐藏文件。
      2. 通配符 "?"。匹配任意一个字符。
      3. 字符组模式 ”[]“。 匹配字符组中的任意一个。其中 "-" 用于表示范围。当 "-" 处于方括号外面或者 "*"、"?" 处于方括号内时,将失去通配符的作用。
      4. 转义字符。如果希望通配符失去其本身的作用,则需要使用转义字符 ”\“,让他们变成普通字符。

4 文件与目录的基本操作。

4.1 显示文件的命令

1 文件查看和连续命令 cat

cat [选项] <file1> ...
# 把文件串接后显示在标准输出上

主要选项的含义

  • -n 或 --number: 由1开始对所有输出的行数进行编号。
  • -b 或 --number-nonblank:和 -n 相似。只不过对空白行不编号。
  • -s 或 --squeeze-blank:当遇到有两行以上的空白行时,就替换为一行的空白行。
  • -v 或 --show-nonprinting:? 显示不可打印的字符。

2 分屏显示命令 more

more [选项] <file> ...
# 类似于 cat,可将文件显示在屏幕上,但是它每次只显示以页,一页即为当前虚拟终端的一屏大小。显示文件时,按空格键可以显示下一页,按 q 可退出。h 给出帮助信息。还具有搜索字符串的功能。

主要选项的含义

  • -<num>: 指定屏幕显示的行数为 num 行
  • -f:计算行数时。计算的时实际的行数而非自动换行后的行数
  • -s:遇到连续两行以上的空白,合并成一行
  • +/<string>:在文件中搜寻字符串 string。然后显示字符串所在页的内容
  • +<num> 从第 num 行开始

3 按页显示命令 less

less [选项] <file> ...
# 类似于 more。不同的是 less 允许使用者往回卷动以浏览看过的地方,同时 less 并不是一开始就读入整个文件,因此在遇见大型文件时,会比较快。

主要选项的含义

  • -i: 在查找时忽略大小写
  • -p<string>:查找指定的字符串,并从符合条件的地方开始显示。
4.2 复制、删除和移动命令

1. 复制命令 cp

cp [选项] <source> <dest>
或者 cp [选项] <source> ... <directory>
# 将一个文件拷贝至另一个文件,或一个或多个文件拷贝至另一个目录。

主要选项的含义

  • -r:若 source 中含有目录,则递归地将目录下的文件也依序拷贝至另一个目录。深拷贝。
  • -f:若目的地存在同名的文件,则在复制前先将其删除再进行复制。
  • -a:尽可能将文件模式、所有者、时间标签、链接等信息按照原状予以复制,并且递归地复制子目录中的文件。

2. 删除命令 rm

rm [选项] <name> ...
# 逐个删除指定的文件或目录。默认情况下,<name> 为文件名,rm 命令不删除目录,只有指定 -d 选项才能删除指定的目录。

主要选项的含义:

  • -i: 删除前逐一询问确认
  • -f: 强制删除,即使原文件属性为只读,也直接删除而无需确认
  • -r: 递归地删除目录下的内容。深度删除。

3. 移动或重命名命令 mv

mv [选项] <source> <dest> 
或 mv [选项] <source> ... <directory>
# 将一个文件重命名为另一个文件,或将数个文件移至另一个目录。

主要选项含义如下

  • -i : 若目的地已有同名文件,则先询问是否覆盖原文件。
  • -f : 强制移动,如果目的地有同名文件,则覆盖原文件
4.3 创建和删除目录命令

1 创建目录命令 mkdir

mkdir [-p] <dirName> ...
# 如果指定目录不存在,则建立之。
# -p 表示,若要建立的目录的上层目录尚未建立,则一并建立上层目录。

-w662
在 aaa 文件夹下创建 bbb。-p 表示如果没有 aaa,则先创建 aaa,再建立 bbb。

2 删除目录命令 rmdir

rmdir [-p] <dirName>
# 删除空目录 dirName,如果目录 dirName 非空,则会出现报错信息。
# -p 表示,删除底层目录后,如果他的上层目录也变成空目录,则将其一并删除。
4.4 切换工作目录和显示目录命令

1 切换工作目录命令 cd

cd <dirName>
# dirName 可以用绝对路径或者相对路径来表示
cd || cd ~ 
# 切换至当前用户的主目录
cd ../..
# 切换到当前目录的上上层目录
cd /
# 切换到根目录

2 显示当前路径命令 pwd

pwd
# 显示用户当前所在的目录

3 查看目录命令 ls

ls [选项] [<name>...]
# 列出文件或者目录的信息。 name 是文件或者目录名,默认情况下列出当前工作目录的信息。如果给定文件或者目录名则列出指定文件或者目录。

主要选项的含义:

  • -a: 显示所有文件及目录。ls 默认将 " . " 开头的文件和目录进行隐藏,不会显示。
  • -d: ,如果 name 参数是一个目录。不加 -d 默认是展示该目录下的文件。加上之后仅显示目录的名字。-d 和 -l 选项一起使用,可以列出目录的属性信息。
  • -l:使用长格式、除文件名外,还显示文件的类型、权限、硬链接的个数、所有者名、群组名、文件大小(字节为单位)、修改时间等详细信息;如果列表是目录,则在最前面给出 "总用量..." 表示该目录占用的总块数(1块 = 1034字节)
  • -r: 将文件以相反顺序显示,默认情况下按文件或目录名的英文字母顺序显示。
  • -t: 将文件依修改时间排序,新的排在前面。
  • -A : 同 -a,但不列出 “ . ” 以及 " .. "文件。
  • -F : 在列出的文件名后以符号表示文件的类型。
    • 一般文件之后不加符号
    • 可执行文件加 " + "
    • 目录加 " / "
    • 符号链接加 " @ "
    • 管道加 " | "
    • 套接字加 " = "
  • -R : 若目录下有文件,则递归地列出目录下的文件。

概念补充

1 关于 linux 文件权限中的属主、与属主同一组的用户、其他用户的概念

  • 属主。我买了一台电脑,我是电脑所有者。我就是属主。
  • 组用户。我可以把的电脑中的文档进行共享。将我的读者加入一个用户组。
  • 其他用户。路人甲。既不是我,也不是组用户的人。

linux权限
举例说明:

  • 某文件权限为7,则代表可读、可写、可执行(4+2+1)
  • 某文件权限为6,则代表可读、可写(4+2)
  • 某文件权限为5,则代表可读、可执行(4+1)
  • 某文件权限为3,则代表可写、可执行(2+1)
  • 某文件权限为2,则代表可写(2)
  • 某文件权限为1,则代表可执行(1)

-l 选项详解:

-w339

ls -l my-exercise/
drwxr-xr-x 4 root root 4096 11月 13 00:17 node-app

第一段权限相关解释

  • d: 第 1 位。表示文件类型。
    • d 目录文件
    • l 链接文件
    • - 普通文件
    • p 管道。具体概念?
  • rwx: 第 2-4 位。表示文件的属主拥有的权限。r 是读,w 是写,x 是执行。这里表示属主同时拥有读写和执行的权限。
  • r-x: 第 5-7 位。表示文件属主所在同一个组的用户所具有的权限。
  • r-x: 第 9-10 位。表示其他用户所具有的权限。

所有字段的解释

  • 第一段 : 相关文件的类型和权限相关展示
  • 第二段 : 文件硬链接数或目录子目录数
  • 第三段 : 文件拥有者
  • 第四段 : 文件拥有者所在的组
  • 第五段 : 文件大小(以字节为单位)
  • 第六段 : 文件创建的月份
  • 第七段 : 文件创建的日期
  • 第八段 : 文件创建的时间
  • 第九段 : 文件名 (如果是一个符号链接,那么会有一个 “->”箭头符号,后面根一个它指向的文件)

常用shell

ls -ld a # 显示 a 文件的具体信息
ls -lt s* # 列出当前目录下以 s 开头的文件的详细信息。新的在前面
ls -lR /bin # 将 bin 目录下的所有目录以及文件的详细信息列出
ls -AF # 列出当前目录下所有文件及目录。并在文件末尾展示文件的类型。

5 查找与定位命令

5.1 查找文件或者目录命令 find

find 命令按照用户指定的条件,从指定的目录开始检索,找到所有满足匹配准则的文件。指定的条件可以是文件名、文件大小或者文件修改日期等。

find [path...] [expression]
# 从 path 开始查找文件,将符合 expression 规定的文件列出来。
dd在 " - " 、 "("、")"、"," 或者 "!" 开始的参数作为 expression 参数,在这之前的参数都被认为是要搜索的路径。
# 如果不给路径,则使用当前工作目录
# 如果不给出 expression。则使用 "-print" 作为默认的 expression

expression 常用选项说明

  • -cmin : 早过去 n 分钟被修改过
  • -empty : 内容为空的文件
  • -name : 文件名称符合 name 的文件
  • -iname : 忽略大小写查找
  • -size <n 单位> : 文件大小是 n 个单位。
    • b: 512 位的区块
    • k: kilobytes
    • w: 两个字节组成的字
  • -type : 文件类型。d、c、b、p、f、l、s 之一。
# 查找当前目录下名为 1.txt 的文件
find . -name 1.txt
# 查找当前目录下 20 分钟之内被改过的文件
find . -cmin -20
# 查找当前目录下的目录文件
find . -type d
# 查找当前目录下大小不超过 2KB 的文件
find . -size -2k
5.2 文件定位命令 locate
locate [选项] <search string>

locate 可以快速地搜寻系统内是否有满足查询条件的文件。其工作原理是:先建立一个包括系统内所有文件名称以及路径的数据库,之后当寻找文件时就只需查询这个数据库,而不必实际深入文件系统了。它还存储文件的访问权限以及所有者信息,从而保证用户不能看到他们无权访问的文件。
数据库的创建可以在 crotab 中自动执行。
todo 具体命令暂不研究。

5.3 文件内容检索命令 grep

find 和 locate 都是根据文件名或者文件属性查找文件,而 grep 命令则可以检索文件的内容,找到文件中满足匹配模式的文本行。

grep [选项] <string> <file> ...
# string 是准备检索的字符串或者正则表达式。file 是准备从中检索的文件。

主要选项的含义:

  • -i : 表示进行比较时忽略大小写。
  • -n : 在所显示的结果中给出文本行在文件中的行号。
  • -v : 取反。表示检索不包含给定字符或者模式的所有文本行。

-w572

6 链接命令 ln

链接分为两种,硬链接和软连接。硬链接必须在同一个文件系统中,软链接可以跨越不同的文件系统,并且可以对目录创建链接。不论是硬链接还是软链接都不会将原本的文件复制一份,因而只会占用非常少量的磁盘空间。

  • 硬链接:一个文件是另一个文件的别名,他们不可区分。可以理解为指针,两个不同的指针指向的是同一处内存空间。即硬链接指向的是系统中的同一份文件,同一个区块。
  • 软链接(符号链接): 是一个特殊的文件,内容不是真正的数据,而是指向另一个文件的路径名,存的是所指向文件的绝对路径。访问软链接文件时,实际访问的文件会被系统替换为软链接所代表的绝对路径。类似于 winodws 的快捷方式或 osx 系统的替身的概念。
ln [选项] <source> <dest>
# 该命令产生一个从 dest 到 source 的链接。

主要选项的含义:

  • -f : 链接时先将与 dest 同名的文件删除
  • -i : 在删除与 dest 同名的文件时先进行询问
  • -s : 创建软链接。默认创建硬链接

7 创建文件、改变文件或目录时间的命令 touch

touch [选项] <file1> [file2 ...]
# 修改指定文件的访问时间和修改时间记录,默认修改为当前时间。如果指定文件不存在则创建该文件。

主要选项的含义

  • -a : 只改变文件的访问时间记录
  • -m : 只改变文件的修改时间记录
  • -c : 如果指定的文件不存在,不会建立新的文件。与 --no-create 的效果一样。
  • --no-create: 与 -c 含义一致
  • -t : 设定文件的时间记录
# 将 file 文件的时间记录改为现在的时间。若文件不存在,则新建一个文件
touch file

# 修改 file 文件的时间记录
touch -t 1505061803 file
posted @ 2020-03-14 22:40  大芒果哇  阅读(261)  评论(0编辑  收藏  举报