【基础干货】Linux Shell基础教程

shell,也称为“命令行界面”或“CLI”,是与远程Linux服务器交互的主要方法。shell是一个丰富的界面,用于处理文件,管理系统和编写常见任务脚本。如果您在本地计算机上使用Linux,您可能已经熟悉终端; Mac OS X用户可能熟悉Terminal.app的命令行。

本文档概述了终端环境中的常见操作和操作,并提供了一些有用的提示,使您的终端体验更加成功和有益。当您在本地或通过SSH打开终端时,您将收到一条消息并显示提示。根据系统的配置,提示将以常规用户的美元符号($)和ROOT的(#)结束。

本教程需要一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

命令结构

大多数shell命令都遵循类似的格式。它们以命令的名称开头(我们可以将其看作一个动词),然后有一系列可选的修饰符或标记,这些修饰符或标记用于特定的函数和具有命令要影响的某种对象。如果您需要帮助了解命令的工作方式,通常使用--help标志发送命令将提供关于如何使用命令的信息。

文件系统导航

shell的主要功能之一是为文件系统提供接口。这些命令允许我们在系统上移动,重命名和复制文件。

列出目录

要列出目录,请使用ls命令。如果目录为空,则ls将在没有任何输出的情况下关闭。ls(与所有命令一样)假定对象(目录)是当前目录。要获取/etc/init.d/目录列表,您可以使用以下命令:

ls /etc/init.d/

要列出当前目录中的所有文件,包括隐藏文件(例如以.开头的文件),请添加-a标志。

要生成包含有关文件的更多信息的列表,可以使用-l标志。这提供了有关文件大小,权限和上次修改时间的信息(使用-a或标准输出)。您可以使用-h标志进一步修改长输出,以将文件大小信息从原始字节转换为人类可读的数字(KB,MB,GB等),以便于理解。此命令可能如下所示:

ls -lha

转至目录

您可能注意到了ls -als -lha目录的输出。你可能会看到,这些“目录”表示当前(.)位置和父(..)目录。您可以使用这些快捷方式指定相对路径,无论是在ls之类的命令中,还是在我们尚未讨论的其他命令中。要将当前位置移动到另一个目录,我们使用cd命令。要转至/etc/目录,请使用以下命令::

cd /etc/

您还可以使用各种快捷方式来导航文件系统树。如果您在主目录(作为普通用户~/)切换到/home目录(存储所有用户目录),请使用以下命令:

cd ../

/home目录中,使用cd ../可以进入系统的根目录。同样,如果您~/目录中使用cd ../jack/,则会转到/home/jack目录中。

但是,cd ./jack/home目录中使用也会转到/home/jack目录中,因为它.指示工作目录或当前目录(用于pwd在终端中打印工作目录)。

相对路径用于指定所有命令的文件和目录。

创建和删除目录

要创建新的空目录,请使用mkdir(make directory)命令,如以下示例所示,在当前用户的主目录(~/)下面创建website/

mkdir ~/website/

如果需要创建新的目录层次结构(另一个新目录中的新目录),请使用-p标志根据需要创建父目录。例如:

mkdir -p ~/website/litchfield/public_www/

这将创建public_www/目录,位于litchfield/目录内,位于当前用户主目录下的网站/目录内,即使这些目录在发出命令之前并不存在。

要删除目录,使用rmdir命令。请注意,这只在指定的目录为空时才有效。

创建和删除文件

如果您想创建一个文件而不向其写入任何内容,您可以使用touch命令。您还可以安全地对现有文件使用touch,它将touch文件的“最后编辑”值重置为发出命令时的值。

要删除文件,请使用rm命令。请注意,rm命令是永久性删除,无法撤消。如果要删除非空目录,请使用rm -r命令。

复制文件

要复制文件,请使用cp命令,然后是原始文件以及要将文件复制到的位置。要将文件etc.hosts.backup复制到名为/etc/hosts的文件中的主目录,请使用以下命令:

cp /etc/hosts ~/etc.hosts.backup

注意:当前用户的主目录缩写为系统~/

默认情况下,cp不会复制目录的目录和内容,如果需要将目录的内容复制到另一个目录,则需要使用-R标志(区分大小写,用于递归)。要将内容复制~/website-files/~/website-backups/

cp -R ~/website-files/* ~/website-backups/

重命名和移动文件和目录

mv命令处理文件和目录上的所有移动和重命名操作。它和cp语法是相同的(尽管目录移动本质上是递归的)。因此,移动~/etc.hosts.backup~/backups/etc.hosts使用下面的命令:

mv ~/etc.hosts.backup ~/backup/etc.hosts

文本操作

与所有UNIX派生系统一样,Linux使用文本文件来管理配置和内容。因此,终端提供了许多用于编辑和操作文本和文本文件的工具。

Nano文本编辑器

如果您只需要一个基本的文本编辑器,可以试试nano,nano编辑器几乎在每个Linux发行版上都默认安装。运行nano命令,打开空白文件进行编辑,或者直接在当前指定文件名,如:

nano my-new-file-in-nano.txt

您可以在另一个目录中指定文件,编辑/var/www/index.html使用以下命令:

nano /var/www/index.html

一旦打开文件,使用nano就相当简单了。可用命令列在终端窗口的底部。^X(例如,Control-X)退出nano。

重定向

当您在终端上运行命令时,它的输出通常会在新提示符之前为您打印出来。虽然这通常是首选的行为,但有时候目录列表太长,或者默认情况下没有正确排序。shell允许我们将输出从一个命令定向到另一个命令,直到输出对我们有用为止。我们将采用一个复杂的命令,然后将其分解为更有用的部分:

ls /usr/bin/ | grep ^py.* > ~/python-bins.txt

这个命令:

  1. 生成/usr/bin/中的文件列表(使用ls /usr/bin/命令)。
  2. ls的输出发送给grep命令(使用|命令)。
  3. 使用grep搜索ls的输出,它查找所有以字母py (Python编程语言编写的程序的通用前缀)开头的文件。
  4. grep的输出发送到当前用户的主目录(~/)中名为python-bins的文件。txt(使用>操作符)

如果在>运算符末尾指定的文件具有内容,>则将覆盖内容。要将命令的输出附加到现有文件的末尾,请使用append运算符,即>>

搜索文本

在上面的例子中,我们使用grep工具搜索了一个流,它提供了一个非常强大的功能,用于搜索和过滤文本流和文件的内容。例如,用“grep”搜索 /etc/hosts文件的“127.0.0.1”,请使用以下命令:

grep "127.0.0.1" /etc/hosts

请注意,grep期望搜索“模式”是基本正则表达式(模式匹配语法)。grep非常强大,它的全部内容超出了本文档的范围。有关更多信息,请参阅手册页(输入man grep。)

Echo 命令

echo命令对于直接重复声明的内容很有用。这并不是一个简单的命令,但是在脚本和与流相结合时非常有用。例如:

echo "Get Milk and Yogurt" >> shopping-list.txt

该命令将字符串“Get Milk and Yogurt”追加到shopping-list的末尾。

您还可以在echo语句中嵌入命令,如下面的命令所示

echo "I received a call on `date`" >> phone-log.txt

这将附加I received a call on Fri Jan 22 12:04:23 EST 2018phone-log.txt文件的末尾。date将输出当前日期和时间,此命令的输出格式由系统的区域设置控制。

在Pager查看文本

您可能会发现许多“Pager”应用程序很有用。Pager从文件中获取输入,并提供滚动,搜索和查看内容的机制,而不会使终端充满输出。最常见的Pager是moreless。例如,您可以使用less命令打开~/.bashrc文件:

less ~/.bashrc

还有一个cat命令可以将文件内容读取到行的标准输出行。它还可以用于将文件的内容发送到不提供直接从文件读取的选项的命令。此外,命令tac将文件的内容反向发送到标准输出(默认情况下是您的屏幕)。

系统监控

终端还可用于监视服务器的当前状态,并且有许多默认和可选应用程序可以帮助您监视系统负载。

命令ps按进程ID(PID)编号列出活动进程。您可以使用ps -A命令列出所有当前正在运行的进程,包括非活动进程。

top命令默认安装在所有系统上,提供定期刷新的进程列表和资源利用率信息。您可能还希望考虑安装htop应用程序,从而提供更一致的输出。

df命令是所有系统的本机命令,它提供当前磁盘使用情况的标准,包括空闲和未使用的空间。您可以使用df -h命令列出当前空间(以兆字节和千兆字节为单位)。您还可以使用命令df -i查看磁盘已使用并保持可用的iNode数。iNode是文件系统跟踪文件的方式,与可以创建的文件数量直接相关。

du命令也是所有系统的原生命令,用于检查哪些目录占用的空间最多。du -h命令将显示当前目录中每个文件的磁盘使用情况,以及整数(兆字节)。另一个特别有用的标志“-max-depth”允许您指定命令应迭代的目录深度。例如,要获取文件系统中包含的最大目录列表,可以使用命令du -h --max-depth 1 /

终端环境

我们觉得习惯终端环境的最好方法就是经常使用终端。随着您对终端的熟悉和熟悉,您将发现其他命令和功能。

如果您不记得某个特定命令的选项或标记,那么可以在该命令后面添加--help查询如何使用。本节介绍shell环境的一些基本功能,这些功能在大多数现代UNIX系统上都很常见。

自动补全

默认情况下,bash提供命令和文件路径自动补全的功能,输入命令的前几个字母或者路径的前几个字母,然后按下tab,bash就会自动补全,有些命令和文件的前缀可能会相同,多按几次,就提示有哪些相同的,然后根据你的需要再进行选择。

GNU Screen

这个程序在默认情况下可能无法安装。它是一个“终端多路复用器”,有时被描述为终端的“窗口管理器”。简单来说,它可以让你的软件在后台运行。

现在,如果您发出control -a control -c(通常标记为c -a c -c;,您不需要在按下ac键之间释放控件),那么您将在屏幕内部运行两个终端会话。您可以使用C-a -a在当前屏幕会话和上次访问的屏幕会话之间切换。屏幕终端在创建时被分配一个数字,您可以使用C-a #访问一个特定的数字。访问常用屏幕键绑定列表发送C-a ?

然而,关于屏幕会话最好的部分是,它们在单个控制台会话之外是持久的。这意味着您可以连接到远程服务器,启动一个屏幕会话,发出一个需要执行一段时间的命令,即使您失去了与远程服务器的连接,该命令也将在屏幕上完成。您可以使用screen -r重新连接到屏幕会话。

如果运行多个屏幕会话,可以使用screen -ls生成当前屏幕会话的列表。如果希望连接到已连接的屏幕会话,请使用screen -x命令,这对于屏幕共享和远程协作非常有用。如果要连接到附加到另一个会话的屏幕,请使用screen -DRR命令。

Screen非常强大,如果您在连接方面有问题,我们鼓励您使用它来保持会话不中断。

任务管理

shell能够一次接受多个命令。如果您在命令末尾添加了一个&,任务将被发送到后台,并且您将立即得到一个提示。因此,在您工作时,您可以使用&号将要发出的命令集合串在一起。注意,后台任务仍然会生成输出,这在一开始可能会令人困惑。

如果在命令末尾添加双&&),shell将一直等到前一个命令成功完成后才执行下一个命令。您可以使用此功能将一系列依赖于前面命令的成功的命令串在一起。

命令历史

bash将最近发布的命令的历史记录保存在~/.history/文件中。如果需要返回并使用或重用过去的命令,可以使用箭头键或使用C-pC-n(Ctrl - )访问这些命令。

Emacs键绑定

通常,bash终端提供类似emacs的键绑定以用于导航。除了C-nC-p访问历史记录中的下一个和上一个命令之外,以下键绑定使得更容易在bash-terminal中导航文本(C表示ctrlM-表示alt):

  • C-a将光标移动到行的开头
  • C-e将光标移动到行尾
  • C-f 将光标向前移动一个字符
  • C-b 将光标移回一个字符
  • M-f 将光标向前移动一个单词
  • M-b 将光标移回一个单词

更多信息

怎么样,学会了吗?快尝试购买一台服务器进行测试吧!或者直接在开发者实验室参加Linux 基础入门课程,学习更快哦!更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《Using the Terminal》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯云TStack专栏

一个集技术与才华于一身的95后小鲜肉,为你分享rabbitmq集群操作手法

关于作者 ? ? 在rabbitmq集群操作或者搭建的时候,常常会因为对于集群的不熟练而导致各种异常错误,常见的有绑定了浮动ip没有绑定实体ip导致,页面...

1161
来自专栏腾讯移动品质中心TMQ的专栏

Jest基本使用方法以及mock技巧介绍

Jest是由Facebook开发并维护的一套js的单元测试框架,之前在后台的nodejs项目里面第一次尝试使用,感觉还是非常容易上手的,功能也比较强大。

1.1K5
来自专栏积累沉淀

linux目录结构介绍

linux目录结构介绍 ? "/" :Linux文件系统的入口.也是最高一级的目录. "/bin":基本系统所需要的命令,功能和"/usr/bin...

2199
来自专栏梦魇小栈

NPM 学习笔记整理

npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ruby , composer 之于 PHP 。

710
来自专栏青青天空树

tomcat远程调试javaweb

  当把一个本地项目部署到远程服务器后有可能出现意想不到错误,这个时候通过远程调试能够更清楚的找到bug所在位置。

6551
来自专栏电光石火

使用Maven创建web项目

使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 ? 我们勾选上Create a simple ...

32610
来自专栏北京马哥教育

linux下用tar进行数据备份

豌豆贴心提醒,本文阅读时间7分钟 本机上数据的手工备份 Linux系统上配有功能强大的tar命令,可以灵活地备份数据。 tar最初是为了制作磁带备份而设计的把...

3308
来自专栏人工智能头条

数据科学家必知的21个命令

981
来自专栏xiaoheike

Elasticsearch Network Settings

Elasticsearch 缺省情况下是绑定 localhost。对于本地开发服务是足够的(如果你在相同机子上启动多个节点,它还可以形成一个集群),但是你需要配...

1702
来自专栏散尽浮华

nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能。 废话不多说,下面对测试环境下的nginx反向代理+缓存...

8479

扫码关注云+社区

领取腾讯云代金券