题外话
听学长指示闻着味就过来了体验以后觉得不错,roadmap.sh非常适合入门学习,而且是交互式的,推荐用于某项技能的入门基础快速学习,但是要注意是 全英文 的,不想啃就开翻译插件吧
basics navigation
commands and basical knowledge
navigation basics
Basic commands:
cd
: change directoryls
: list files and direrctories in the current directorypwd
: view working directoryman
: view manual page for a command(查看某个指令的详解)
files and directories:
- 创建文件
touch
: 在linux中用touch命令创建空文件
touch newfile.txt
cat
:cat > newfile.txt
如果不存在newfile.txt则创建,存在则覆盖
- 移动文件
mv
:mv [options源文件] source destination
source表示要移动的文件或目录,而destination表示目标位置
- 删除文件
rm
:rm example.txt
永久性删除,如果想在删除前确认,可以使用-i
选项:rm -i example.txt
rmdir
:rmdir [directory]
删除目录
Understanding Directory Hierarchy
在Linux中,了解目录层次结构是非常重要的。
linux系统的目录结构也称为 文件系统层次结构标准,即 FHS,它是一种定义的树结构,有助于防止文件分散在整个系统中,并且易于导航和组织。
- /:根目录,文件系统的顶层
- /home:用户主目录
- /bin:二进制文件目录,包含常用的系统命令
- /sbin:系统二进制文件目录,包含系统管理员使用的命令
- /etc:系统配置文件目录
- /var:可变数据(日志、假脱机文件)
- /tmp: 临时文件目录
- /usr:用户应用程序和数据目录
- /lib:共享库
Editing Files
与其他操作系统一样,Linux允许出于多种目的编辑文件,无论您是需要配置某些系统功能还是编写脚本。Linux 默认提供多种文本编辑器,包括:
nano
vi/vim
emacs gedit
每个编辑器都有自己的学习曲线和命令集
例如,nano
是一个简单的文本编辑器,它易于使用,非常适合简单的文本编辑。vi/vim
则在另一方面,更为先进,提供广泛的功能和命令(老一辈的游刃有余) 要编辑文件首先要使用以下命令
|
|
Vim:编辑文件的基本工具
Vim(Vi Improved)是一款功能强大且灵活的文本编辑器,用于类 Unix 系统。它以原始 Vi 编辑器为基础,并添加了其他功能和改进,包括多级撤消、语法突出显示和大量用于文本操作的命令集。(虽然学起来很麻烦就是了)
Vim主要以三种模式运行:
- Normal(for navigation and manipulation).
- Insert(for editing text).
- Command(for running commands).
要插入新内容,使用i
进入插入模式,然后输入内容。
编辑完成后,按ESC键退出插入模式,然后输入:wq
保存并退出。
当然Vim的操作远不止这些
Nano:简单的文本编辑器
Nano相对来说是更为流行、对用户来说友好的文本编辑器,用于直接在 Linux命令行界面(CLI Linux Command Line Interface) 中编辑文件。是一个vi和emacs的替代品。对初学者来说更为简单实用,介绍一些针对流行的Linux发行版的安装方式(一般来说很多发行版是自带的)
|
|
Shell and Other Basics
Linux Shell是一个命令行界面,用于与操作系统进行交互。
shell 有助于简化系统命令,并充当用户和系统内核之间的中介界面。shell 可以高效快速地执行复杂任务。
Linux中有多种shell,包括:Bourne shell(sh)
、C shell(csh)
、Bourne-Again Shell(bash)
等。
Command Path in Shell Basics
Simply put, command path is a variable that is used by the shell to determine where to look for the executable files to run.
通常,shell需要知道命令的可执行文件的绝对路径才能运行它,而 command path 允许shell自动按正确顺序搜索指示的目录。这些路径存储在 $PATH环境变量中。
echo $PATH
将返回shell按顺序搜索的所有目录,以查找要运行的命令
Environment Variables
在Linux中,环境变量是 动态命名 的值,可以影响 shell 中正在运行的进程的行为。
它们存在于每个shell的进程当中,一个shell的进程的环境变量包括但不限于
user’s home directory, command search path, terminal type, and program preferences.
环境变量有助于实现 Unix 系统中灵活的自定义。它们提供了一种在 Linux 中的多个应用程序和进程之间共享配置设置的简单方法。
可以使用 env
命令列出shell会话中的所有环境变量,如果想查看某个特定的变量,则可以使用echo $PATH
命令
|
|
具体地学习以及 实验 可见Linux环境变量
Command Help
上文就有提到,在Linux中学会使用命令帮助非常重要,它能使用户轻松浏览Linux Shell命令。
例如:
man [command]
可以在任何命令钱调出其手册条目,其中解释了该命令的作用、语法、可用选项
help [command]
选项也可以显示命令的可用选项和用法。更适合shell内置函数,对每个函数进行简要描述。
可见获取Linux命令帮助
以及如何使用手册页
Redirects
Linux的shell为user提供了一种管理命令/程序的输入和输出流的强大方法,称为 重定向。
Linux是一个多用户和多任务操作系统,每个进程通常打开3个流:
- 标准输入(stdin):默认情况下,从键盘读取输入。
- 标准输出(stdout):默认情况下,将输出写入屏幕。
- 标准错误(stderr):默认情况下,将错误消息写入屏幕。
Linux的重定向功能便于我们操作流,从而提高运行命令/程序的灵活性。除了默认设备(键盘啦终端啦)外, I/O流可以重定向到其他文件/设备。
例如,如果想将命令输出存储到文件中而不是打印到控制台,可以使用">“运算符号
|
|
将"ls -al"的输出写入了txt中,如果已存在该文件就覆盖
experiment
&&运算符
该运算符用于将多个命令链接在一起,并仅在第一个命令成功执行时才执行第二个命令,对于有依赖的命令链接很有用
||运算符
当第一个命令失败时才执行第二个命令。这对于提供后备选项或错误消息很有用。
»追加输出重定向符号
如果我们想要附加信息的话,可以使用”»“运算符,它将命令的输出附加到文件中,而不是覆盖现有内容。
|
|
|管道运算符
管道运算符将一个命令的输出作为另一个命令的输入。这对于将一个命令的输出传递给另一个命令进行处理非常有用。
例如
|
|
- echo命令将字符串"apple banana cherry date elderberry"输出到标准输出
- tr命令将空格字符转换为换行符,每个水果名称都单独一行
- sort命令将输出按字母顺序排序 于是有这样的输出:
最后我们综合一下这些技术来创建一个文件,搜索特定单词,然后重定向输出:
|
|
结果会是什么样的?可以自己想一下
Superuser
超级用户,也称为“root 用户”,是 Linux 中拥有广泛权力、特权和功能的用户帐户。此用户可以完全控制系统并可以访问存储在系统上的任何数据。这包括修改系统配置、更改其他用户的密码、安装软件以及在 shell 环境中执行更多管理任务的能力。
用su
或sudo
命令切换到超级用户,sudo
允许我们以另一个用户身份运行命令,默认为root。还有一个关键区别:
sudo
会记录用户执行的命令,而su
不会。
Working with Files
处理文件是Linux的重要组成部分,就在上面,我们学习了Linux 终端中用于文件处理的一些基本命令包括touch
创建文件、mv
移动文件、cp
复制文件、rm
删除文件以及ls
列出文件和目录。
接下来我们还要具体学习一部分文件操作
File Permissions
三种用户: owners, groups, and others who can have a different set of permissions.
看一个例子:
|
|
第一个-
表示这是一个文件,如果是d
则表示这是一个目录。接下来的9个字符表示权限,每3个字符一组,分别代表owner, group, and others的权限。(懒得写了)
Archiving and Compressing
Linux提供了强大归档实用程序,用于将文件和目录打包到单个文件中,以便于传输或备份。
主要工具有tar
和gzip
以及bzip2
- tar:是一种多功能工具,可以管理和组织文件到一个文档中。
- gzip和bzip2
|
|
experiment
我们来实践一下,在~/Linux_study下
|
|
可以看到
|
|
让我们用tar打包:tar -cvf tar_archive.tar tar
-c
选项表示创建一个新归档文件,-v
选项表示详细模式(可选),-f
选项表示指定归档文件的名称。
要查看内容而不提取,可以使用:tar -tvf tar_archive.tar
:-t是详细列出,-f指定了文件,-v表示列出内容
要提取文件内容,我们可以这么做:
|
|
-x选项表示提取归档文件的内容,
-C
选项表示指定提取目录,告诉tar提取之前更改extracted_tar
为当前目录
|
|
接下来我们用命令gzip来压缩它:gzip tar_archive.tar
现在我们可以看到tar_archive.tar.gz
文件,用ls -lh tar_archive.tar.gz
可以看到它的大小234字节
打包和压缩的区别
- Packaging
- 目的:将多个文件和目录合并为一个文件。
- 功能:分组文件
- 工具:
tar
- 结果:档案的总大小通常略大于其中所有文件的大小总和。
- Compression
- 目的:减小文件的大小。
- 功能:应用算法消除数据中的冗余
- 工具:
gzip
和bzip2
- 结果:压缩后的文件通常比原始文件小,使用前需解压 如下:
|
|
Copy and Renaming
- cp:
cp /path/to/original/file /path/to/copied/file
指定文件和目标路径 - mv:
mv /path/to/original/file /path/to/moved/file
指定要重命名或移动的文件和要重命名或移动到的文件和路径 - 重命名:
如我们要将index.html
重命名为home.html
:
|
|
- 移动多个文件
|
|
实现了将所有js文件移动到scripts目录下
- 安全转移:使用
-i
选项enter后将会收到消息:1
mv -i *.js scripts/
输入n后就不会覆盖了1
mv: overwrite 'scripts/file1.js'? n
Soft links/Hard links
- 硬链接:指向文件系统中的同一物理位置,可以理解为 镜像,源文件删除后硬链接仍存在
- 软链接:指向文件系统中的另一个位置,可以理解为 快捷方式
- 创建硬链接:
ln /path/to/original/file /path/to/link
- 创建软链接:
ln -s /path/to/original/file /path/to/link
- 删除链接:
rm /path/to/link
Text Processing
文本处理是系统管理员和开发人员的一项基本任务。Linux 是一个强大的操作系统,它提供了强大的文本搜索、操作和处理工具。
用户可以使用awd
sed
grep
cut
等命令进行文本过滤、替换和处理正则表达式。shell脚本、python等编程语言都可以在Linux实现出色的文本处理功能
当然还有vim
nano
等文本编辑器
非常 非常关键
以下部分不做实验,只举少量例子
资源:Linux Filters
Linux Text Processing
stdin/stdout/stderr
Linux 中 stdout 和 stderr 的概念属于 Linux 文本处理的基础,在 Linux 中,程序执行时一般会开启三个通信通道,分别是 STDIN(标准输入)、STDOUT(标准输出)、STDERR(标准错误)。
通道(channels)都有特殊的功能 STDOUT会发送大多数shell命令输出的通道 STDERR专门用于发送错误信息
示例:
|
|
>
将stdout重定向到stdout.txt中
2>
则将stderr重定向到stderr.txt中,正确输出和错误信息将存储在不同文件中检查和处理
cut
剪切命令允许我们从文件或输出中剪切出每行的部分,并将其显示在标准输出(通常是终端)上。它通常用于scripts和pipe,尤其是用于文件操作和文本操作。 我们需要某个特殊部分的时候这个指令会很有用
|
|
示例
|
|
此命令以逗号分隔,输出第二个字段也就是
two
paste
|
|
在 Linux 中,paste 是一个功能强大的文本处理实用程序,主要用于合并来自多个文件的行。它允许用户按列而不是行合并数据,为文本数据处理增加了极大的灵活性。用户可以选择特定的分隔符来分隔列,从而提供多种方式输出。
示例
|
|
sort
Linux 提供了多种处理和操作文本文件的工具,其中之一就是 sort 命令。Linuxsort
中的该命令用于逐行对文本文件的内容进行排序。该命令使用 ASCII 值对文件进行排序。可以使用此命令以多种不同的方式对文件中的数据进行排序,例如按字母顺序、数字顺序、反向顺序甚至按月排序。sort 命令将文件作为输入,并在stdout上打印排序后的内容。
|
|
一般会用重定向
复杂一点的:
|
|
- -n 决定按Numeric排序 (-nr加上r就会逆向派)
- -t: 指定字符以冒号分隔
- -k2 使用第二个字段作为排序键 见sort命令
tr
用于翻译或替换字符,从标准输入读入并写入标准输出。虽然翻译多用,但是功能实际上很多,比如用于替换一组符号,删除或压缩重复字符 用法
示例
|
|
实现了将小写a-z替换为大写A-Z 见tr命令
head & tail
head
允许用户输出文件的头部,通常用于预览文件开头,这可以快速检查超大文件中的数据,通常将每个文件的前10行打印到标准输出
|
|
也可以自定义输出行数
|
|
tail
命令用于输出文件最后部分,将最后的N
字节、行、块、字符或单词打印到标准输出
join(我不怎么会用)
join允许我们在一个公告字段上合并文件的行,就类似SQL中的“join”,处理大量数据时特别管用,用于两个文件中的行来形成包含以有意义的方式关联的行对的行
注意!只有文件排序后,该命令才能正常工作 见join命令
Split
于将大文件拆分为小文件的命令,顾名思义。Linuxsplit
中的命令根据用户指定的行或字节将文件分成多个相等的部分。
由于其实用性,它是一个有用的命令。例如,如果您有一个大型数据文件,由于其大小而无法有效使用,则可以使用 split 命令将文件拆分为更易于管理的部分。
基本语法
|
|
默认情况下Split
会将文件分成几个较小的文件,每个文件1000行,如果没有提供输入文件,或输入文件为-
,它会从标准输入读取
例如有一个bigfile.txt
要拆分为一个个有500行的文件,命令如下:
|
|
pipe
没错,熟悉的管道命令,用于Linux中连接两个或多个命令的强大功能,允许将一个命令通过pipe
作为另外一个的输入。对于文本处理尤其有用,一个简单的例子
|
|
ls列出文件,grep获取目录下文件并过滤掉不以.txt
结尾的文件
nl
对于文本中要编号行数有用,number lines
,如果你需要概览某一部分也可以用到这个指令,nl
只会读到非空行,当然也可以根据命令进行修改
|
|
- -b a便会对所有行进行编号 如果没有指定文件,nl命令会等待用户的标准输入 见nl
wc
word count
用于计算数量,可以是字节数、符号数、词数、行数,当然不止可以读行数,还可以跟踪程序输出,计算代码行数等,是 用于大规模文本分析和精密分析的宝贵工具
|
|
行数 单词数 字符数 文件名 -l 行 -w 单词 -m 计算字符数 也可组合使用 见wc命令
expand/unexpand
是一个Unix和类Unix操作系统中的一个命令行实用程序,可将制表符转换为空格
emmm,有了这个命令可以减轻制表符所带来的扰乱格式,使用linux shell脚本时就很有用,制表符空格在不同系统或文本编辑器上可能有不同格式会不一致,这样使用大大提高代码可读性
该expand
命令默认将制表符转换为 8 个空格。以下是示例用法:
|
|
在此示例中,filename
是要将制表符转换为空格的文件的名称。运行该命令后,制表符转换后的内容将打印到标准输出。
要指定每个制表符的空格数,-t
可以使用以下选项:
|
|
在此示例中,每个制表符filename
将被替换为 4 个空格。然后输出将显示在控制台上。
unexpand就是相反的操作
uniq
用于过滤重复的行,来帮助检查和处理文本文件。无论处理的是数据列表还是大型文本文档,该uniq
命令都允许您查找和过滤重复的行,甚至可以提供文件中每个唯一行的计数。重要的是要记住,uniq
只会删除彼此相邻的重复项,因此为了充分利用此命令,通常sort
首先使用该命令对数据进行排序。
使用示例uniq
为:
|
|
在此示例中,names.txt
是一个包含名称列表的文件。该sort
命令对文件中的所有行进行排序,然后uniq
删除所有重复的行。结果输出将是 中的唯一名称列表names.txt
。
见uniq
grep💖
grep
全局正则表达式打印)被认为是类 Unix 操作系统(包括 Linux)文本处理领域的重要工具。它是一款功能强大的实用程序,可以搜索和过滤与给定模式匹配的文本,当它识别出与模式匹配的行时,会将该行打印到屏幕上
grep
是许多 shell 脚本、bash 命令和命令行操作的重要组成部分,它是一种多功能工具,每个 Linux 发行版都预装了它。它包含三个主要部分 - 格式、操作和正则表达式。
另一种选择——
ripgrep
,支持grep
所有功能并进行扩展
|
|
常用
-i
:忽略大小写进行匹配。-v
:反向查找,只打印不匹配的行。-n
:显示匹配行的行号。-r
:递归查找子目录中的文件。-l
:只打印匹配的文件名。-c
:只打印匹配的行数。 学习grep和正则表达式 见grep命令
正则表达式概述
.
(点)- 单个字符。?
前一个字符仅匹配 0 次或 1 次。-
前面的字符匹配 0 次或更多次。+
- 前面的字符匹配 1 次或多次。{n}
- 前一个字符恰好匹配 n 次。{n,m}
- 前一个字符匹配至少 n 次,但不超过 m 次。[agd]
- 该字符是方括号内的字符之一。[^agd]
- 该字符不是方括号内的字符之一。[cf]
- 方括号内的破折号表示范围。在这种情况下,它表示字母 c、d、e 或 f。()
- 允许我们将多个字符分组为一个字符。|
(管道符号)——逻辑或运算。^
- 匹配行的开头。$
- 匹配行尾。
awk
awk 是一种功能强大的文本处理语言,广泛用于类 Unix 操作系统,包括 Linux。awk 以其三位原始开发者 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的名字命名 该语言由脚本中的一组命令组成,本质上,awk 逐行读取输入文件,识别与脚本中指定的模式相匹配的模式,然后根据这些匹配执行动作。 下面是如何使用 awk 打印文件每行的前两个字段的示例:
|
|
这将显示“filename”中每一行的第一个和第二个字段(通常用空格分隔) 见awk命令
server review
在审查 Linux 服务器的过程中需要包括评估服务器的性能、安全性和配置,以确定需要改进的地方或任何潜在问题。审查范围可以包括检查安全增强功能、检查日志文件、查看用户帐户、分析服务器的网络配置以及检查其软件版本。 Linux以其稳定性和安全性闻名,已成为全球许多网络和服务器后端的必备软件。根据使用的发行版,Linux 提供了多种工具和命令来执行全面的服务器审查。
|
|
authentication logs
在处理 Linux 服务器及其维护时,需要定期检查的最重要组件之一是身份验证日志。这些日志通常位于 /var/log/auth.log(适用于基于 Debian 的发行版)或 /var/log/secure(适用于 Red Hat 和 CentOS),记录服务器上发生的所有与身份验证相关的事件和活动。其中包括系统登录、密码更改和发出的 sudo 命令等。
身份验证日志是监控和分析 Linux 服务器安全性的宝贵工具。它们可以指示暴力登录攻击、未经授权的访问尝试以及任何可疑行为。定期分析这些日志是确保服务器安全性和数据完整性的一项基本任务。
下面是如何使用tail
命令查看身份验证日志的最后几个条目的示例:
|
|
熟悉阅读和理解身份验证日志,因为这是确保服务器安全的重要方法之一。
system services
Linux 服务器因其稳定性和灵活性而广受欢迎,这些因素使其成为企业和组织在管理各种服务时的首选。在 Linux 服务器下运行的服务包括 Web 服务、数据库服务、DNS 服务器、邮件服务器等。
作为 Linux 系统管理员,定期检查这些正在运行的服务以管理资源、检查其状态和解决问题非常重要,从而确保服务器的健康和性能。
Linux 有多种工具可以实现这一点,例如:systemctl
service
netstat
ss
lsof
例如,该命令systemctl
在 Linux 系统上广泛用于列出所有正在运行的服务:
|
|
此命令将显示所有活动服务及其当前状态的列表。它是服务器管理的必需品,应该是任何 Linux 系统管理员工具箱的一部分。
process management
进程管理是任何操作系统不可或缺的一部分,Linux 也不例外。在 Linux 上运行的每个程序(无论是应用程序还是系统操作)都被视为进程。这些进程执行不同的任务,但协同工作以提供无缝的操作体验。
在 Linux 中,用户可以使用不同的命令来交互和管理这些进程,以执行各种进程管理任务,例如查看当前正在运行的进程、终止进程、更改进程的优先级等。了解这些命令以及如何有效地使用它们对于 Linux 进程管理至关重要。
例如,ps 命令提供有关当前正在运行的进程的信息:
|
|
这将列出所有当前正在运行的进程,其中包含进程 ID、运行该进程的用户、其消耗的 CPU 和内存、启动该进程的命令等信息。
top
是另一个常用命令。它提供系统当前状态的实时更新视图,包括进程:
|
|
另一个强大的工具是kill
,它可以向进程发送特定信号。例如,你可以使用SIGTERM
(15) 正常停止进程,或使用 (9) 强制停止进程SIGKILL
:
|
|