Shell命令系统是用于系统通信的最古老的语言之一。 从电子计算的早期开始,甚至在完全开发操作系统之前,计算机就能够访问命令行提示符。 现在,在2011年中期,我们可以看到发展的速度。
对于技术爱好者和博主来说,了解一些基本的Shell命令可以为您节省大量时间。 理解如何与终端交互以及编写命令行语句以执行任务是一个巨大的话题。 您绝对不应在首次尝试时完全理解此处的讨论。 但是,如果可能,请花一些时间来研究和汇总使用命令行界面的知识。
我将在下面为世界各地的博客分享一些很棒的技巧。 请记住,您将用来访问计算机文件的任何GUI都可能具有某种形式的命令行。 这是所有计算,输入命令和接收直接输出的基础。 建议您在进入命令和语法之前先清除一些历史记录。
Linux Shell命令–简而言之
这里使用了太多术语,可能有助于澄清一些术语。 下面,我为一些有争议的词汇提供了一些描述符。
- Shell –一个接受用户输入并执行命令的基本程序。 shell通常是一个通用术语,指的是任何命令行界面。
- 终端 –最终用户与计算机系统之间的连接。
- Bash –一种Shell脚本,在Linux环境中最常用。
- 命令 –输入带有设定任务或指令列表的输入到计算机。
- 内核 –写入大多数操作系统核心的内部软件。 可以通过任何外壳窗口为内核提供命令以处理物理计算机进程。 即。 内存分配,硬件,外部设备,CPU功能等
重要的是请注意,此系统已经存在很长时间了。 实际上,Linux和Mac OSX之间的命令行功能大部分是相同的。 这是因为Linux是作为基于Unix操作系统的免费开源操作系统构建的。 同时,Apple最初是从BSD(一种Unix系统)构建OS X的。
Windows是用经典的DOS(磁盘操作系统)编写的奇怪的家伙。 一些命令是相似的,但是在大多数情况下,与Windows OS的任何命令行交互都将与Linux / Unix系统有很大不同。
开设新码头
终端窗口是一个黑色框,带有闪烁的光标,等待着您的输入。 这可以通过任何GUI菜单或分配快捷方式命令来调出。 在Linux GUI中,您将寻找名为terminal或konsole的应用程序。 在线查询Linux发行文档以获取详细信息,例如Ubuntu或Debian 。
如果您在Mac环境中,打开终端窗口的最快方法是通过Spotlight。 Command + Option +空格键将打开一个全新的Spotlight搜索,或者您也可以单击放大镜以显示下拉面板。 在“ terminal”类型中,结果列表应快速填充。
入门
现在您已经打开了终端窗口,我们可以开始了! 首先,您需要了解如何浏览目录。 pwd
是列出命令,用于输出您的活动目录。 与ls
耦合,您可以解析当前目录并返回文件列表。 前一个命令代表“打印工作目录”,后一个命令代表“列表文件/目录”。 两者都很有趣,不会损坏或编辑任何文件。
当您处理返回的文件列表时,您应该注意一些事项。 首先,列表将包括单个文件和目录。 任何没有文档扩展名(.jpg,.gz,.rpm)的列表均被视为目录。 您可以使用cd
命令在这些之间上下移动。 这代表变更目录,应该可以按预期工作。
向上操作一个目录的快捷方式是使用cd ../
–此技巧的妙处在于,您可以多么快速地在目录之间导航并找到所需的内容。 每次上级时,请致电pwd
以查看您的位置。 如果您要查找特定的文件夹,也请致电ls
以便您了解下一步要移动的位置。
要在根目录中导航,只需在URL后面加上正斜杠即可。 例如,如果您当前位于主目录中,则无需在到达主目录之前向上移动目录。 只需调用cd /home
并按Enter键即可进入根主目录。
处理文件和文件夹
现在可以遍历文件系统的内部工作原理,我们应该开始构建文件。 如果您不喜欢使用图形用户界面来制作目录路径,那将比我们简单的命令行看起来更多。 mkdir
代表Make Directory,是构建可靠文件结构的最快方法。
如果您以root用户身份登录,那么您将不会遇到麻烦。 但是,请保持警惕,因为有时文件权限可能过于严格,并限制了您创建新目录的访问权限。 请查看mkdir文档页面以获取参数示例。
为了进一步说明这一点,每个命令都带有一组可能的参数。 可以在键入命令以应用其他设置后传递这些参数。 一个通用示例是--help
,它始终显示当前命令的功能和支持主题列表。 尝试输入mkdir --help
,看看您会得到什么。
cp
和mv
命令分别用于复制和移动文件。 您需要已经将两个目录都写出,并指向文件将要到达的位置。 每个命令需要两个参数,第一个是选择的文件,第二个是要复制或移入的新目标。 同样, rm filename
可以用于删除(删除)文件, rm -rf directory_name/
可以删除目录。 但请注意此处,因为 Shell中没有撤消功能 !
匹配通配符模式
能够移动文件和复制文件夹确实提供了便利。 但是最终要充分利用这些知识需要更多技巧。 最初,您将使用Shell脚本来自动化大型任务,而这些任务是您不愿自己处理的。
使用通配符命令,您将能够定位多个文件而不是单个名称。 输入目标网址时,还有两个其他符号可以使用。 星号(*)表示任意数量的通配符,而问号(?)表示任意单个字符。
括号也可以用来表示图案。 在一组括号内,您可以定义字符限制或可能的通配符匹配。 通过在括号前后加上一组冒号[::],您可以从少数几个前体中进行选择。 其中包括[:alnum:]
(仅字母数字)和[:alpha:]
(仅字母字符)。 如果您只希望目标数字[:digit:]
同样有效。
整个系统似乎很抽象,没有示例,因此我在下面提供了一些示例。
- a * –匹配所有以字母“ a”开头的文件名
- foo * .txt –匹配所有以字母“ foo”开头的文本文件。 请注意,即使您还有其他以foo开头的文件夹,也只能返回文本文件
- 照片?? –匹配所有以单词photo开头的文件和文件夹,并再加上2个字符
- [xyz]? –匹配以x,y或z开头且后跟正好1个字符的任何文件名
我想你明白了。 通配符系统非常复杂,当然不是出于胆小。 在终端中呆了一天后,不要指望自己完全了解这里的容量。 精通Shell脚本和通配符标注需要大量的练习和重复。 查看Tux文件信息页面,以获取更多示例和信息。
文件压缩与存储
构建和创建存档文件只是现代计算机体验的一部分。 我经常每天通过电子邮件发送和下载新的.zip存档。 这些包含图形,图标,库代码,字体,Photoshop样机等。 归档目录的行为不仅减小了文件大小,而且使传输变得更加容易。
在Linux / Unix中工作时,可以使用一些命令来存档数据。 经常涉及的两个是zip和gzip 。 差异不是非常极端,当然也值得注意,以至于彼此之间并不需要。 它们只是压缩,数据存储和文件模式的不同机制。
这些命令中的每一个都具有许多可能的参数。 您可以在zip命令的“关于”的Linux信息页面中查看完整列表 。 zip -r可能是最广为人知的shell语句,它代表递归拉起所有文件并将它们压缩在一起。 这意味着,如果指定诸如zip -r myfolder newarchive
类的命令,您将把所有文件从myfolder中拉出并将它们添加到名为newarchive.zip的新档案中。 如果没有-r,则需要以方括号列表格式[file1.jpg file2.jpg等]指定每个文件名。 谈论节省时间!
现在, 用于gzip的命令的工作原理非常相似,并且共享许多相同的参数。 选择使用gzip而不是zip确实是一种个人选择,不会干扰您的任何文件结构。 如果您要在不同的操作系统之间移动文件,我建议您坚持使用.zip,因为Windows社区更喜欢它。 但是,我们生活在一个拥有丰富软件和开放源代码项目的时代,所以说Windows无法处理.gz档案并不是一个不诚实的事实。 但是存档文件格式并不那么流行。
接收压缩存档时,您还可以仅从命令行将其解压缩到新目录中。 unzip和gunzip都是其原始存档命令的对应内容。 同样,参数列表也一样长,甚至更长。 但是,基本的unzip命令只需要一个文件位置即可执行操作。 如果您喜欢使用存档软件,则此方法在任何Mac OS X环境中都应该完全相同。
以超级用户身份工作
如果您经常使用终端,那么超级用户访问将很方便。 特别是作为Web开发人员或博客作者,您会发现在第三次或第四次访问之后,权限错误变得非常烦人。
当然,可以直接登录到根帐户并从那里运行终端命令。 但是,这在Linux领域中被认为是不好的做法,因为仅在紧急情况下才使用root用户来修复或纠正系统故障。 或者,如果您只是忘记了您的主要登录密码!
现在以超级用户身份进入系统,您将需要root密码。 在终端窗口中,只需键入su,然后按Enter键。 这代表替代用户,并且无需任何其他参数就可以假设您要访问root。 输入密码并按回车键,您将被引导到在root@yourcomputer
下运行的新行。 要恢复为您的帐户,请使用exit
命令。
现在,这对于大多数Linux / Unix系统都非常有效。 但是,当您在运行Ubuntu或类似操作系统的Linux机器上工作时,您会注意到超级用户界面的更改。 取而代之的是,Ubuntu用户将使用命令sudo
来代替单个命令来替换超级用户访问权限。
这意味着您将不会以超级用户身份登录到终端,但是可以通过添加前缀sudo
以超级用户身份运行任何命令。 请注意,Ubuntu是使用sudo
命令的选择操作系统。 苹果公司的OS X终端是另一个利用sudo超级用户命令的系统。 按下回车键后,将再次要求您输入root密码,此后命令将执行,如果成功,将返回到新行。
拥有文件所有权
权限的另一个问题来自文件访问。 我无法想象我进行了多少次文件更改,但是由于权限不足而无法应用它们。 如果可能,您将希望在root用户下执行所有所有权更改。
Change Owner的命令chown
非常简单,并且可以在大多数Linux和Unix环境中使用。 对于Ubuntu用户,除非您以root用户身份登录,否则您需要在任何chown
命令之前运行sudo
。
成功执行仅需要两个单独的参数。 首先,您需要输入将授予文件所有权的用户名,然后是空格和文件目录。 系统将在当前工作目录之外工作以选择文件。 但是,如果您想绕开整个层次结构,则可以从URL的根开始以反斜杠开头。
文件所有权系统在服务器维护中的应用更加丰富。 如果您具有对服务器的外壳访问权限,则肯定需要了解文件操作和接管文件权限。 例如,许多常见的Web脚本的安装需要对数据库信息进行编辑。 如果黑客进入服务器控制台,则拥有这些文件的所有权将使您免受伤害。
全部放在一起
现在,使用所有这些新命令,您应该在所选的控制台中简要地开始实验。 一个开始建立知识的好地方是通配符并从您的OS中选择文件。 作为DOS和Linux用户,我建议一开始使用较简单的命令,以免损坏文件和目录。
rm
命令和一些错误的通配符匹配可能会发生不好的事情。 如果您打算删除任何内容,请尝试首先在ls
下运行通配符选择器。 这将返回您要删除的文件列表,如果一切看起来都很好,那么您始终可以在此之后立即运行该命令! 在任何终端窗口中,只需按向上箭头键即可返回上一个命令输入。 删除ls并替换为rm,就可以了!
您可以在命令行中执行很多操作。 但是,还有很多您无法做到的事情。 保持谦虚的使用习惯,不要仅仅为了成为技术之王而落伍。 当然,您可以开始使用CLI(命令行界面)来完成大多数性能任务。 但老实说,从GUI的角度来看,您可以做很多事情,而且可以更快地完成。 如果您研究并使用一些命令,您将快速了解哪些任务在终端中执行良好,哪些最好保存为鼠标和键盘。
所有Blogger都应知道的12个Shell命令
1.删除嵌套文件夹
使用rm命令,您可以从硬盘驱动器中删除(取消链接)文件和文件夹。 但是,还有很多嵌套文件夹呢? 特别是如果每个文件夹集都包含后续文件和不匹配的数据。 选项-r将递归地翻阅所有后续文件和文件夹,以删除数据和目录。
如果您添加-f选项,这将强制提示停留在命令内,而不提示您进行任何对话框。 没有返回输出,将绕过所有子目录中不存在的文件。 整个操作中的命令可能如下所示:
rmdir -r -f /home/you/documents/mydir1/2009
2.连接到数据库
当您频繁访问网站后端系统时,您需要确保已建立安全的连接。 对于存储网站和用户信息的数据库连接,这是原来的两倍。 但是,如果您正在使用本地数据库安装,则可能会获得更少的安全性要求。
根据您使用的系统,将有不同的语法需要调整。 连接数据库的基本调用仍然大致相同。 您将需要访问的数据库的名称,用户名,密码以及可能的数据库主机名(通常是localhost )。 我添加了两个要连接的shell命令,一个用于MySQL,另一个用于Sybase。
mysql -u myusername -h localhost -p
在这里,您只需按Enter键即可,无需提供密码。 然后,如果shell命令成功访问该数据库并进行托管,它将提示您输入密码。 在新行中输入此内容,然后再次按Enter键。 MySQL成功将欢迎您。
isql -U myusername -P <<EOF
use gdb_1
EOF
Sybase是数据库软件的另一个很好的例子。 您可以使用类似于上面的mysql的isql命令访问这些类型的数据库。 在这里,您仅提供用户名和密码,然后调用use命令选择您的数据库。
3.备份数据库
现在,您已连接到数据库,可以运行许多命令。 理想情况下,您将希望坚持使用简单SQL过程,而不要直接添加新用户或文章。 但是是否考虑过备份整个数据库结构? 这些命令相当复杂,但是经过15-30分钟的研究,您可能可以弄清楚它们。
Sybase更加复杂,需要一些繁琐的Shell命令。 如果您签出Ed Barlow的数据库备份脚本,我很肯定您将可以毫无问题地使用他的软件包。 他概述了一些用于转储所有数据库表,转储错误日志,数据库统计信息,运行日志等的基本解决方案。它相当健壮,并且几乎可以满足您的所有需求。
MySQL数据库的方式与此类似,并且需要相当长的Shell脚本。 内容需要选择一个本地目录来保存每个备份,并在BASH中调用for循环。 这将循环遍历每个数据库,并使用$MYSQLDUMP
和$GZIP
$MYSQLDUMP
所有表作为.gz存档文件导出。 完整的代码可以在nixCraft针对MySQL转储的Shell脚本文章中下载。 只需编辑您的数据库/登录信息并将其另存为mysqlbackup.sh即可。 您可以手动运行此程序,也可以为每天,每周,每月等安排cron作业 。
4.还原数据库
现在我们来恢复数据库文件的备份。 尽管您可以从前面的代码中了解到原因,但是这并不像您想的那样复杂。 但是请考虑,上传以前的文件比从远程服务器连接和提取数据要容易得多。
在Sybase中,您将在Shell中做更多的工作。 但是基本命令是load database dbname
。 您可以使用其他选项来进行后续操作,当然,您需要先将其连接到数据库,然后才能起作用。 如果遇到问题,请尝试使用Sybase文档文件作为参考点。
使用MySQL,如果您已经登录,则只需要一个命令。即使不是,也可以同时连接并调用恢复。 这是因为任何MySQL数据库文件的备份基本上都是SQL代码,可以从头开始重建数据库。 这就是某些备份非常大且通常太大而无法通过phpMyAdmin之类的Web界面上传的原因。
您可以单行调用mysql命令。 与之前一样,输入-u和-p,但仅填写用户名,因为随后会提示您输入密码。 下面的代码应该可以正常工作:
mysql -u username -p database < /path/to/dump_file.sh
您要替换的唯一变量是用户名,数据库和备份路径。 连接时,用户名和数据库主机与以前相同。 因此,您只需要查找数据库备份的存储位置即可更新它。
5.直接Shell下载
wget
命令非常有趣,并提供了许多选项。 GNU wget是一种非交互式实用程序,用于从Internet下载文件。 其中包括标准的HTTP,HTTPS和FTP协议。
要下载基本文件,您将键入wget filename ,其中filename是文件的位置。 这可以是任何在线内容,例如针对Hongkiat .gif徽标文件的https://assets.hongkiat.com/uploads/v4s/n_logo.gif 。 如果创建包含许多变量的Shell脚本文件,则可以在工作时在后台下载大批视频,图像,音乐或其他内容。 请记住,您可以在此处使用*和?之类的通配符。 拉文件的大目录。
现在,您可能还希望通过FTP下载内容。 但是,大多数时候您将不会使用公共ftp服务器,并且需要用户名/密码。 登录语法有点混乱,但是我在下面添加了一个小示例。
wget ftp://username:password@ftp.mywebsite.com/files/folder/*.jpg
6.压缩文件夹
我们早些时候已经进行了压缩,但是仅仅是为了描述。 有一些非常基本的原始文件压缩示例,您可以在任何地方的命令行中调用它们。 如果您是Shell的新手,我建议使用zip命令,这仅是因为Linux系统会造成混乱。 但是,如果您想使用gzip或其他替代方法,请随时进行。
每当您调用完整的zip命令时,您都希望将所有文件包含在新档案中。 zip命令中的第二个参数是您想要的文件夹,或者是要压缩的文件的简短列表。 添加-r选项以递归方式遍历您的目录结构以包含每个文件。 以下是小型文件夹压缩的完美示例。
zip -r newfile_name.zip /path/to/content/folder
7.批量查找和替换
每当您拥有大量文件时,通常都会以类似的方式对文件进行标记或编号。 例如,在大量的网站横幅广告中,它们都可能包含“横幅”前缀或后缀。 可以使用shell sed命令将其替换为所有文件。
sed是一种流编辑器,用于执行基本的文本转换和文件编辑。 它被称为最有效的命令,因为它将几乎立即扫描单个目录。 以下是使用该命令的一些示例代码。
sed -i 's/abc/xyz/g' *.jpg
因此,在上面我们将匹配不存在的文件,但是在我们的示例中,我们正在寻找替换一组图像。 我们在目录中查找并计划替换所有包含abc的 .jpg图像并替换xyz 。 使用-i选项,我们可以自动编辑文件,而无需备份。 快速浏览sed文档以获取更多信息。
8.创建新文件
一次就创建相同文件的整个堆可能很麻烦。 如果您想在不使用软件的情况下创建大量文档或文本文件,则命令行是一个很好的工具。 直接从Shell考虑使用一些编辑器。
vi/vim
可能是Linux CLI最好和最有用的编辑器。 还有其他诸如JOE文本编辑器。 您还可以通过cat命令创建文件,尽管仅限于查看文件内容而不编辑任何内容。
使用vi,您只需要调用一行代码即可。 我在下面添加了代码,该代码只是vi命令,后跟您的新文件名。 使用vi编辑器后,键入“ i”以编辑和插入新文本。 要保存并退出文件,请按Esc键,然后按冒号+ x(:+ x),然后按Enter键。 这是一个奇怪的组合,但是它绝对安全,一旦掌握了所有东西,就再也不想回头了!
vi /home/you/myfile.doc
9. Shell网络工具
Shell命令行提供了许多用于联网的工具。 可以使用ping命令,后跟IP或网址来检查网站的状态。 数据包请求被发送到服务器,如果您收到响应,shell将输出时间和服务器详细信息。 这对于检查网站是否关闭或互联网连接是否关闭很有用。
如果要检查当前设置,请调用ifconfig命令。 这与Windows DOS中的ipconfig命令非常相似。 但是使用shell ifconfig可以为您提供更多配置和部署自定义DNS设置的选项。 一个非常相似的命令netstat对于显示当前打开的端口和网络同样有用。
10.包裹管理
通过Shell安装软件时,您将主要在2个不同版本的Unix中工作。 RPM软件包管理器(RPM)和Debian Manager(DEB)是最广为人知的版本。 这些与最新的软件包保持同步,您可以从最近的镜像站点下载这些软件包。
这些命令在两个版本上都非常相似。 yum和rpm是为前一个程序包管理器保留的两个命令。 他们的代码遵循yum command package-name
。 因此,例如:
yum install package-name
对于Debian / Ubuntu用户,您将使用Debian软件包管理器。 同样,语法遵循类似的格式,在此格式中,您将调用程序包管理器ID,命令,并在其后加上程序包名称。 下面的两个示例分别格式化为安装和升级。
apt-get install package-name
apt-get upgrade mypackage1
11.生成最大文件列表
组织使您在工作期间的所有时间保持运转。 当您开始失去对文件的跟踪,并注意到目录太大时,就该进行一些Spring清理了。 ls
命令在shell中非常有用,因为它使您可以更深入地了解某些目录。
这包括对文件的特定类型和文件格式进行排序。 如果您想在硬盘上的任何目录中找到最大的文件,只需应用以下命令。
ls -lSrh
此命令有4个单独的选项。 -l用于列出完整的输出数据。 -S将按文件大小对整个列表进行排序,从最初的大小到最小。 通过应用-r,我们可以颠倒排序顺序,因此输出中最大的文件将最终位于底部。 这样做很好,因为无论如何Shell窗口都会使您始终位于输出命令的最底部,因此更容易通过列表进行清除。 -h仅表示人类可读的输出数据,因此您将看到以兆字节(MB)而不是字节为单位的文件大小。
12.即时创建电子邮件
如果您的电子邮件帐户使用任何软件,此命令将节省大量时间。 通常,您知道您要发送的某人的电子邮件地址,但又不想花费时间来打开邮件客户端。 mailto:
命令在命令行上的工作原理与在任何浏览器或网站上的完全相同。
即使您不知道要发送的地址,也只需添加任何内容即可。 noreply@nothing.com很棒! 或通过自己的填充物内容发挥创意。 键入击中内容后,无论哪种方式,回车都会弹出一个带有您发件人地址的全新电子邮件窗口。 您可以快速修改主题/身体和CC以满足自己的需求。
mailto:noreply@hongkiat.com
外部资源
要继续使用Shell脚本,需要大量的耐心和奉献精神。 有数百种命令需要理解,因此涉及许多子类别。 花一些时间在控制台窗口中弄乱,看看您如何喜欢快速的工作流程。 希望下面的链接可以提供更多信息,以使您继续在Linux和Mac OS X中进行Shell脚本编写。
- 我的十大Shell命令
- Linux命令–实用参考指南
- 处理命令行参数
- 40个有用的Mac OS X Shell脚本和终端命令
- Linux命令和Shell命令
- Linux / Unix备忘单–终极收藏
- 175 Mac OS X终端命令列表
- 从Mac OS X切换到Ubuntu
结论
我花了所有三个主要操作系统的时间,就他们自己而言,它们都很棒。 但是,如果您正在使用Linux操作系统,则该终端将变得与任何GUI一样重要。 我觉得即使识别最基本的命令并尝试在命令行界面中进行练习也非常重要。
那些刚接触系统的人一定会遇到障碍。 这是学习过程的正常部分,但请保持智慧,永不放弃! 建立自己,以期期望有切实可行的目标。 学习shell脚本起初将需要大量工作。 但是在一两周之内,您应该已经掌握了一些基础知识,并且可以毫无瑕疵地开始使用终端了(嗯,主要是)。 如果您有在Linux / Unix CLI中工作的秘密或超赞技巧,请在下面的讨论区域中分享它们。
翻译自: https://www.hongkiat.com/blog/basic-shell-commands-for-bloggers/