Linux命令行学习

shell基础命令

1 使用shell提示符

默认的bash shell提示符是美元符号($),这个符号表明shell在等待用户输入命令,不同的linux发行版会采用不同的提示符。

2 与bash手册交互

man 命令可以访问linux系统的手册页。在 man 命令后加上命令名,即可显示相应的手册页。

许多命令采用的基本模式如下

COMMAND-NAME [OPTION] [ARGUMENT]

COMMAND-NAME是想要运行的命令名。

[OPTION] 是用于修改命令行的选项。可添加的OPTION通常不止一个。

[ARGUMENT]是传递给命令的参数,指明命令操作的对象。

除了按照惯例命名的各段,手册页中还有不同的节,例如,可通过 man 7 hostname来访问手册页中的第七节。另外,大多数命令接受-h 或者--help选项,可输入hostname -h来访问帮助信息。

3 浏览文件系统

层次目录结构

Linux文件系统采用树形目录结构,所有的文件和目录都从根目录(/)开始。根目录下可以有多个子目录,每个子目录下又可以包含文件和其他子目录。这种结构使得文件的组织和访问非常清晰。

文件类型

Linux中的文件类型包括常规文件(如文本文件、二进制文件)、目录、符号链接(软链接,指向其他文件或目录的引用,类似于Windows中的快捷方式)、设备文件(代表系统中的硬件设备,通常位于/dev目录中)、管道和套接字(用于进程间通信的特殊文件)。

挂载点

Linux文件系统通过挂载点将不同的文件系统(例如不同的磁盘分区、外部存储设备等)集成到单一的目录树下。挂载点是目录,通过它可以访问挂载的文件系统。

Linux文件系统会将所有的磁盘都并入单个虚拟目录。在使用新的存储设备之前,需要将其放在虚拟目录中,这项工作称为挂载

文件权限和所有权

每个文件和目录都有与之关联的权限和所有权,确定哪些用户和组可以读取、写入或执行文件。

元数据

文件系统不仅存储文件内容,还存储与文件相关的元数据,如文件大小、创建时间、修改时间、权限、所有者等。

3.1 遍历目录

在linux文件系统中,可以使用目录切换cd destination 命令将shell会话切换到另一个目录,如果没有指定目标路径,则会切换到你的主目录中。destination 参数可以用两种方式表示:相对路径和绝对路径。

绝对路径

绝对路径定义了在虚拟目录结构中,该目录从根目录开始的确切位置,相当于目录的全名。绝对路径总是以正斜线 / 开始,以指明虚拟文件系统的根目录。

相对路径

相对路径允许你指定一个基于当前位置的目标路径,相对路径以目录名或是特殊字符开始。

单点好 . 表示当前目录        双点号 .. 表示当前目录的父目录

4 列出文件和目录

本节将描述 ls 命令和可用来格式化其输出信息的选项

4.1 显示基本列表

ls 命令输出的列表是按照字母按列排序的,-F 选项会在目录名之后添加正斜线 / 以方便分辨,以 * 号结尾的文件为可执行文件。要查看隐藏文件,可使用 -a 选项,通常以 . 开头。-R 称作递归选项,可以列出当前目录所包含的子目录中的文件。

4.2 显示长列表

-l 选项会产生长列表格式的输出,提供目录中各文件的详细信息。

4.3 过滤输出列表

可直接使用文件名放在选项之后,ls 命令则会只显示该文件的信息。当你可能不知道你要寻找的文件的确切名称时,ls 命令也可使用通配符进行模式匹配。

? : 代表任意单个字符        * : 代表零个或者多个字符        [ ] : 用来指定一组字符中的任意一个。         ! : 排除不需要的内容

5 处理文件

5.1 创建文件

touch 命令可在你的工作目录创建一个空文件

5.2 复制文件

cp 命令最基本的用法需要两个参数,即源对象和目标对象

cp source destination

当参数source destination 都是文件名时,cp 命令会将源文件复制成一个新的目标文件,并以destination 命名。当被复制文件以存在时,-i 选项会询问是否覆盖已有文件。-R 选项可在单个命令中递归复制整个目录的内容。

5.3 链接文件

链接是指在目录中指向文件真实位置的占位符,linux系统中有两种类型的文件链接。

符号链接

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

要为一个文件创建符号链接,该文件必须事先存在,随后使用ln 命令以及-s 选项创建符号链接。

硬链接

硬链接创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。但是两者本质是同一个文件。ln 命令可直接创建硬链接

5.4 文件重命名

mv 命令可将文件和目录移动到另一个位置或者是重新命名

5.5 删除文件

rm 命令可直接删除文件或者目录,-r 选项可以向下进入目录删除文件,然后再删除目录本身。

6 管理目录

6.1 创建目录

mkdir 命令可直接创建目录,-p 选项可批量创建目录,例如:

mkdir -p Newd_dir/sub_dir/under_dir
6.2 删除目录

基础命令是rmdir ,默认情况下,rmdir 只删除空目录。

7 查看文件内容

有几个命令可以直接查看文件的内容,不需要调用其他文本编辑器。

7.1 查看文件类型

file 命令可判断文件类型并查看内容。

7.2 查看整个文件

cat 命令是显示文本文件中所有数据的得力工具,-n 会给所有行加上行号,-b 会只给有文本的行加上行号。more 命令和less 命令是一个分页工具,可部分显示文本内容。

7.3 查看部分文件

tail 命令可显示文件的后10行,-n 选项可修改显示的行数,-f 选项允许其他进程使用此文件时添加到文件中的内容。head 命令则会显示文件开头若干行。

更多的bash shell命令

1 监测程序

1.1 探查进程

当程序在系统中运行的时候,它被称为进程(process)。要熟悉这些进程,必须熟悉ps 命令的用法。linux系统中使用GNU ps命令支持一下三种类型的命令行选项

Unix风格选项,选项前加单连字符

  • -a:显示与任何用户标识和终端相关的进程。
  • -e:显示所有进程(包括守护进程)。
  • -f:显示进程的完整和详细信息,包括进程启动时间、控制终端、用户、组等。
  • -H:显示进程的层级关系,即进程树。
  • -l:长格式展示进程信息。
  • -L:显示进程的线程信息。
  • -o format:自定义输出格式。
  • -p pid:显示与指定PID相关的进程。
  • -u userid:显示与指定用户标识userid相关的进程。

BSD风格选项,选项前不加连字符

  • a:与Unix风格选项的-a相同,显示与任何用户标识和终端相关的进程。
  • e:与Unix风格选项的-e相同,显示所有进程(包括守护进程)。
  • f:显示进程从属关系。
  • u:显示进程的用户信息。
  • x:显示没有控制终端的进程。

BSD风格选项还可以组合使用,例如ps aux显示所有用户的所有进程(包括其他用户的进程),并给出完整的输出信息。

GNU长选项,选项前加双连字符

  • --forest:以树状图显示进程信息,显示进程的层级关系。
  • --info:显示关于ps命令的详细信息。
  • --sort:根据指定的列对进程进行排序,例如--sort=-pmem按内存使用率降序排序。

1.2 实时检测进程

ps 命令虽然在手机系统中运行的进程信息时非常有用,但也存在不足之处:只能显示特定时间点的信息。如果想观察那些被频繁换入和换出内存的进程,ps 命令就不太方便了,这正是top 命令的用武之地。与ps 命令类似,top 命令可以显示进程信息,但采用的是实时方式。

1.3 结束进程

在linux中有两个命令可以向运行中的进程发出进程信号:killpkill

kill 命令默认情况下会向命令行中列出的所有PID发送TREM信号以结束进程。

pkill 命令可以使用程序名代替PID来终止进程,此外,pkill命令也允许使用通配符

pkill http*

以root身份使用pkill命令时要格外小心。命令中的通配符很容易意外地将系统的重要进程终止,这可能会导致文件系统损害

2 监测磁盘空间

2.1 挂载存储设备

用于挂载存储设备的命令叫做 mount 

移除可移动设备时,不能直接将设备拔下,应该先卸载,此命令为 umount

3 处理数据文件

3.1 数据排序

处理大量数据时的一个常用命令是 sort,这是用来对数据进行排序的命令。默认情况下,sort 命令会依据默认语言的排序规则来对文本中的数值进行排序。

  1. -r/--reverse:反转排序顺序,即从大到小进行降序排序。默认情况下,sort命令会按照升序进行排序。
  2. -n/--numeric-sort:按数字顺序进行排序。默认情况下,sort命令会将每行当做文本进行排序,而不是按照数字大小。使用此选项后,sort命令会按照数值大小对行进行排序。
  3. -u/--unique:在排序之后移除重复的行。此选项可以帮助用户快速去除文件中的重复内容。
  4. -t/--field-separator:定义字段的分隔符。默认情况下,sort命令使用空格作为字段的分隔符。使用此选项,用户可以指定其他字符作为分隔符,以便对特定字段进行排序。
  5. -k/--key:指定排序的字段。此选项通常与-t选项一起使用,用于指定基于哪个字段进行排序。字段的编号从1开始,表示第一个字段。
  6. -b/--ignore-leading-blanks:忽略每行开头的空格字符。此选项可以帮助用户去除行首的空白部分,以便更准确地进行排序。
  7. -f/--ignore-case:忽略大小写进行排序。默认情况下,sort命令会区分大小写进行排序。使用此选项后,sort命令会忽略大小写差异,将所有字母视为相同大小写进行排序。
  8. -M/--month-sort:以月份进行排序。此选项允许用户按照月份的顺序(如JAN小于FEB)对包含月份的文本进行排序。
  9. -c/--check:检查文件是否已经排序。如果文件已经按照指定的排序规则排好序,则sort命令不会输出任何内容;如果文件未排序,则sort命令会输出第一个乱序的行的相关信息,并返回1。
  10. -C/--check=quiet:与-c选项类似,但不会在发现乱序时输出乱序行的信息,仅返回1。
  11. -o/--output:指定输出文件的名称。默认情况下,sort命令会将排序结果输出到标准输出(通常是屏幕)。使用此选项,用户可以将排序结果保存到指定的文件中。

3.2 数据搜索

与其手动翻找整个文件,不如使用grep 命令来帮助查找。grep 命令的格式如下:

grep [options] pattern [file]

grep 命令会在输入或指定文件中逐行搜索匹配指定模式的文本。该命令输出指定模式的行。

3.3 数据压缩

gzip软件包是GNU项目的产物,旨在编写一个能够替代原先Unix中compress的免费版本,其包括以下文件:

gzip 用于压缩文件

gzcat 用于查看压缩过的文本内容

gunzip 用于解压文件

3.4 数据归档

tar 命令的格式如下

tar function [options] object1 object2

理解shell

shell的类型

shell的父子关系

理解外部命令和内部命令

Linux环境变量

什么是环境变量

bash shell使用环境变量来存储shell会话和工作环境的相关信息,环境变量允许在内存中存储数据。

全局变量

全局环境变量对于shell会话和所有生成的子shell都是可见的。局部环境变量则只对创建它的shell可见。

可以使用env 命令或者printenv 命令查看全局变量

局部环境变量

用户自定义的变量为局部环境变量

set 可显示特定进程的所有环境变量,包括局部变量、全局变量

设置用户自定义变量

设置局部用户自定义变量

可以使用等号为变量赋值,值可以是数值或字符串,如果用于赋值的字符串包含空格,则必须用单双引号界定字符串的起止。

my_variable='Hello world'
echo $my_variable

记住,在变量名、等号和值之间没有空格,这一点非常重要。如果在子进程中设置了一个局部变量,那么一旦退出子进程,该局部变量就不能用了,反之亦然。

设置全局环境变量

创建全局环境变量的方法是先创建局部变量,然后再将其导出到全局环境中。这可以提供export 命令以及要导出的变量名实现。

my_variable='I m Global now'
export my_variable

子shell无法使用export 命令改变父shell中全局环境变量的值,如果子shell重新定义并导出了全局变量,父shell中的变量任然保留着原先的值

删除环境变量

unset 命令可以完成这个操作

my_variable='I m going to removed'
unset my_variable

在涉及环境变量名时,什么时候用$需要记住一点;如果要用到(doing anything with)变量,则使用$;如果要操作(doing anything to)变量,则不用$

默认的shell环境变量

HOME当前用户的主目录路径/home/username
PATH定义Shell搜索可执行文件的目录列表/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL当前用户正在使用的Shell程序的路径/bin/bash
USER当前登录用户的用户名username
LOGNAMEUSER变量类似,也表示当前登录用户的用户名username
HOSTNAME当前主机(计算机)的名称mycomputer
TERM定义当前终端的类型xterm-256color
PWD当前工作目录的路径/home/username/Documents
LANG 或 LC_* 系列定义程序的语言和区域设置en_US.UTF-8
PS1Shell命令行界面的主提示符\u@\h:\w\$
PS2Shell命令行界面的次提示符(用于多行命令续行)>

设置PATH环境变量

当在shell CLI中输入一个外部命令时,shell必须搜索系统,从中找到对应的程序。PATH环境变量定义了用于查找命令和程序的目录。如果命令或者程序所在的位置没有包括在PATH变量中,那么在不使用绝对路径的情况下,shell是无法找到的。

PATH=$PATH:/home/pepsi/scripts

 将目录添加到PATH环境中后,可以在虚拟目录结构下的任意位置执行这个程序。

定位系统环境变量

接下来的问题是如何让环境变量的作用持久化

1 登录shell

在登录Linux系统时,bash shell会作为登录shell启动,登录shell会从5个不同的启动文件中读取。这些启动文件的读取顺序通常是:/etc/profile -> ($HOME/.bash_profile |$HOME/.bash_login | $HOME/.profile) -> $HOME/.bashrc。这些文件均以点号开头,说明属于隐藏文件。.bashrc通常被其他文件允行。

1.1 /etc/profile

这是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。

1.2 $HOME目录下的启动文件

其余的启动文件都用于一个目的:提供用户专属的启动文件来定义该用户所用到的环境变量。大多数Linux发行版只用这四个中的一两个。

2 交互式shell进程

如果不是登录系统时启动的bash shell,那么这时的shell称为交互式shell

3 非交互式shell

非交互式shell是一种不等待用户输入命令,而是自动执行脚本文件中的命令的shell环境

4 环境变量持久化

在大多数发行版中,保存个人用户永久性bash shell变量的最最佳地点是$HOME/.bashrc

数组变量

环境变量的一个很酷的特性是可以作为数组使用,数组是能够存储多个值的变量,这些值既可以单独引用也可以作为整体引用

mytest=(0 1 2 3 4)

将值放在中括号内,值与值以空格分隔。

要想引用单个元素,必须使用位置索引,显示整个数组变量,可以使用通配符*作为索引。

echo ${mytest[2]}
echo ${mytest[*]}

索引从0开始,这一点与python一致

理解Linux文件权限

Linux文件权限通常通过以下几种方式表示:

符号表示法(Symbolic Notation)

  • r 表示可读(read)
  • w 表示可写(write)
  • x 表示可执行(execute)
  • - 表示没有相应的权限

例如,rwxr-xr-- 表示:

  • 所有者(user)有读、写和执行权限(rwx
  • 所属组(group)有读和执行权限(r-x
  • 其他用户(others)只有读权限(r--

八进制表示法(Octal Notation)

  • 每个权限位可以转换为一个八进制数:
    • 读权限(r) = 4
    • 写权限(w) = 2
    • 执行权限(x) = 1
    • 无权限 = 0
例如, rwxr-xr-- 可以转换为  755
  • 所有者权限:rwx = 4+2+1 = 7
  • 所属组权限:r-x = 4+1 = 5
  • 其他用户权限:r-- = 4 = 4(但通常表示为0,因为这里没有写和执行权限,所以合并后为0)

基于Debian的软件安装

vim编辑器

vim编辑器在内存缓冲区域中处理数据,只要输入vim 命令和文件名就可以启动vim编辑器

vim编辑器有三种模式:

命令模式

刚打开要编辑(或新建文件)时,vim编辑器会进入命令模式,此模式下将你的按键解释成命令。

光标移动:
  • “h”:向左移动光标。
  • “j”:向下移动光标。
  • “k”:向上移动光标。
  • “l”:向右移动光标。
  • “gg”:移动到文件首行。
  • “G”:移动到文件尾行。
  • “0”(数字零):移动到当前行的行首。
  • “$”:移动到当前行的行尾。
  • “w”:移动到下一个单词的开头。
  • “b”:移动到上一个单词的开头。
  • “Ctrl+b”:屏幕往后移动一页。
  • “Ctrl+f”:屏幕往前移动一页。
  • “Ctrl+u”:屏幕往后移动半页。
  • “Ctrl+d”:屏幕往前移动半页。
  • “#l”:光标移到该行的第#个位置,如5l表示光标移到当前行的第五个位置。

文本操作: 

  • “x”:删除光标所在字符。
  • “dd”:删除当前行(剪切)。
  • “yy”:复制当前行。
  • “p”:在光标后粘贴内容。
  • “u”:撤销上一个操作。
  • “Ctrl+r”:重做被撤销的操作。
  • “yy”:复制游标所在的整行(3yy表示复制3行)。
  • “P”:粘贴至光标前(上)。
  • “ddp”:交换上下行。
  • “cc”:替换整行,即删除游标所在行并进入插入模式。
  • “nx”:连续删除n个字符。
  • “dw”或“daw”:删除一个单词。
  • “d$”或“D”:删除至行尾。
  • “d^”:删除至行首。
  • “dG”:删除至文档尾部。
  • “d1G”:删除至文档首部。
  • “ndd”:删除n行。
  • “nx”:删除n个连续字符。
  • “~”:将光标所在位置字母变成大写或小写。

光标快速移动:

  • “nG”:到文件第n行。
  • “:n”:移动到第n行。
  • “H”:把光标移到屏幕最顶端一行。
  • “M”:把光标移到屏幕中间一行。
  • “L”:把光标移到屏幕最底端一行。
  • “zz”:将当前行移动到屏幕中央。
  • “zt”:将当前行移动到屏幕顶端。
  • “n%”:到文件n%的位置。
  • “Ctrl+o”:快速回到上一次光标所在位置。
  • 屏幕翻页:

    • “Ctrl+f”:下翻一屏。
    • “Ctrl+b”:上翻一屏。
    • “Ctrl+d”:下翻半屏。
    • “Ctrl+e”:向下滚动一行。
    • “Ctrl+y”:向上滚动一行。
  • 文本缩进:

    • “>>”:当前行右移一个缩进。
    • “<<”:当前行左移一个缩进。
  • 标记与跳转:

    • “m{A-Z}”:标记光标所在位置,全局标记。标记之后,退出Vim,重新启动,标记仍然有效。
    • `{a-z}”:移动到标记位置。
    • “`{0-9}”:回到上[2-10]次关闭vim时最后离开的位置。
    • “Ctrl+o”:跳转到更老的位置。
    • “Ctrl+i”:跳转到更新的位置。
    • “`” ”:移动到上次离开的地方。
    • “`.”:移动到最后改动的地方。

复制与粘贴 

剪切和粘贴:可以先用dd 命令删除一行文本,然后把光标移动到想要操作的位置,输入p 命令,p 命令会将数据从数据从寄存器中取回。

复制与粘贴:vim的复制命令时y (yank),yw 表示复制一个单词,y$表示复制到行尾,复制之后使用p 命令复制的文本就会出现在想要的位置。

查找和替换:如果要查找一个字符串,则可以在输入/ 后接上想要查找的字符。

EX模式中的替换命令:

s/old/new/g  ###替换当前行内的所有old为new
n,ms/old/new/g  ###替换n到m行内的所有old
:%s/old/new/g  ###替换整个文本中的old
:%s/old/new/gc  ###替换整个文本中的ol并作出提示

EX模式

在命令模式中输入:  

  • 文件操作命令

    • :w:保存文件。
    • :q:退出Vim编辑器。
    • :wq:保存文件并退出编辑器。
    • :saveas filename:将文件另存为指定的文件名。
  • 文本查找和替换命令

    • :%s/old/new/g:在整个文件中替换所有出现的“old”为“new”。
    • :10,20s/old/new/g:仅在文件的第10行到第20行之间替换“old”为“new”。
    • :%s/\cold/new/g:使用正则表达式进行替换,\c表示忽略大小写。
  • 行操作和移动命令

    • d:删除行。例如,:3,18d删除第3行到第18行。
    • m:移动行。例如,:11,15m23将第11行到第15行移动到第23行下面。
    • cot:复制行。例如,:23,29co100将第23行到第29行复制到第100行下面。
  • 外部命令执行和文本插入

    • :!ls:执行外部命令ls并显示结果。
    • :r!cat filename:读取外部文件filename的内容并插入到当前光标位置。
  • 多文件操作命令

    • :arg file1.txt file2.txt:设置参数列表,包含file1.txtfile2.txt
    • :argadd anotherfile.txt:向参数列表添加文件anotherfile.txt
    • :argdelete file1.txt:从参数列表删除文件file1.txt
    • :next:编辑参数列表中的下一个文件。
  • 其他高级命令

    • 宏录制:Ex命令可以录制宏,以便在多个地方重复使用。例如,使用:'<,'>normal @a选中可视区域内的文本,并执行寄存器a中的宏。
    • 条件执行:Ex命令可以根据条件执行不同的命令。例如,:if &filetype == 'python' | set expandtab | endif如果文件类型为python,则设置expandtab
    • 函数定义:Ex命令允许定义函数,以封装复杂的操作。例如,定义一个函数UpperCase()将所有单词的首字母大写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值