shell工具与服务管理

本文介绍了Shell工具的不同类型,如bash和zsh,并阐述了如何查看和切换不同的Shell。在macOS中,详细讲解了服务管理工具launchctl的使用方法,以及如何通过brew管理服务。此外,对比了Linux下的service和systemctl命令。最后提到了包管理工具Homebrew的安装和使用。
摘要由CSDN通过智能技术生成

shell工具与服务管理

1,shell工具

定义

shell 单词的本意是“壳子”,在计算机领域一样可以理解为机器外面的一层壳,目的是进行用于人机交互,本质上是命令解释器。只要是人与电脑之间交互的接口,就可以称为 shell。

需要说明的是,常见的概念包括shell脚本,其指的是采用shell语言编写的脚本,可以使用shell程序来进行执行,二者之间的关系可见下图:

shell程序分类

zsh

很多人的 mac 中会使用 zsh 而不是 bash,一大半是因为 oh-my-zsh 这个配置集,它兼容 bash,还有自动补全等好用的功能。

sh

sh的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 shell。

csh

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

tcsh

tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

ash

ash是一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

bash

bash是基于GUN架构开发的,开发者叫史蒂芬博恩,是BourneAgain Shell的缩写。保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。bash 兼容 sh 意味着,针对 sh 编写的 shell 代码可以不加修改地在 bash 中运行。尽管如此,bash 和 sh 还是有一些不同之处:一方面,bash 扩展了一些命令和参数;另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。

查看shell

在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接。如果你希望查看当前 Linux或MacOS的默认shell,那么可以输出 shell 环境变量:

$ echo $SHELL

如果想知道自己系统安装了哪些shell,使用如下命令可得到如下所示的信息。

cat /etc/shells

shell配置

如上所说,shell 在启动时都会去找配置文件,然后运行它。你安装的一些脚本,如果想让它能够全局运行,就需要在配置文件中设置路径。有过设置路径后还是不管用的经历吗?多半是因为把配置写在了错误的配置文件里。_ 应该在配置shell(最常见的是配置默认命令)之前,使用 echo $SHELL,确认自己现在用的是什么shell后,再去编辑对应的配置文件 _。

bash和zsh的区别

一句话,二者均是shell的一种,zsh能基本完美兼容bash的命令,并且使用起来更加优雅。由于bash或zsh本质上都是解释器,他们所共同服务的是shell语言,因此在命令语法上基本相同,部分兼容性差异可参考:zsh和bash的兼容性差异。

二者切换:

切换bash: chsh -s /bin/bash

切换zsh: chsh -s /bin/zsh

在终端app的系统偏好设置里手动设置。

在配置文件方面:

bash读取的配置文件:~/.bash_profile文件

zsh读取的配置文件:~/.zshrc文件

当从bash切换为zsh时,如果不想重新配置一遍.zshrc文件,可以__在.zshrc文件中加上source ~/.bash_profile,从而直接从.bash_profile文件读取配置。

shell切换事例

一、查看终端shell是zsh还是bash

命令:echo $0

二、切换成bash

命令: chsh -s /bin/bash

三、切换成zsh

命令: chsh -s /bin/zsh

四、切换过程中提示chsh: no changes made

输入以下两条命令即可完美解决

dscl . -read /Users/$USER/ UserShell

exec su - $USER

五、zsh 和 bash 的环境变量文件

bash 的环境变量文件是.bash_profile。

zsh 的环境变量文件是.zshrc。

六、注意事项

切换完终端模式后记得重启终端才会生效!

2,macOS服务管理

背景

在Mac下没有像Linux那样有很多的关于init方面的工具,从init的发展历史https://en.wikipedia.org/wiki/Init上可以知道,Mac使用的是Launchd作为init管理工具,对应的命令工具为launchctl。

如果在Linux下创建一个自启动服务可以使用Upstart、Systemd、Sysvinit,其中最简单和最古老的方式应该是Sysvinit,毕竟其支持Shell脚本,非常方便。而在Mac下,与Linux的做法不太一样,采用Launchd进行管理,其设置服务采用了plist文件进行对服务来描述,并通过配置好后放在/System/Library/LaunchDaemons或者/Library/LaunchDaemons,最后通过launchctl命令行使其生效,期间也可以直接通过launchctl来对服务进行操作,比如启动、停止等。

在 Linux 上有一个大家用惯的 systemd,在 MacOS 上有一个与之相对应的工具,launchd。

Linux 下,systemd 的 pid 是 1,系统启动后,它是第一个被拉起来的,其它进程都是它的子进程。所以在 Linux 下,用 systemd 来做 supervisor 是最稳妥的办法。因为如果 systemd 挂掉了,整个系统都 crash 了。

MacOS 下面也有一个这样的超级进程,所有的其它进程都是它产生的,挂为它的子进程、孙子进程…… 它就是 launchd。launchd 对应的管理工具就是 launchctl。

https://www.jianshu.com/p/d6f09bc4142e

launchctl服务管理

launchctl`类似于Linux的`systemd

使用launchctl 添加启动服务

#添加启动服务
sudo launchctl load /Library/LaunchDaemons/com.zerotier.one.plist

#卸载启动服务
sudo launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist


# 查看所有的 plist 服务
launchctl list

# 禁用服务
launchctl disable /Library/LaunchDaemons/com.simonkuang.macos.coredns.plist

# 启用服务
launchctl disable /Library/LaunchDaemons/com.simonkuang.macos.coredns.plist

# 杀死进程(不优雅地杀,直接杀进程)并重启服务。对一些停止响应的服务有效。
launchctl kickstart -k /Library/LaunchDaemons/com.simonkuang.macos.coredns.plist

# 在不修改 Disabled 配置的前提下启动服务
launchctl start /Library/LaunchDaemons/com.simonkuang.macos.coredns.plist

# 在不修改 Disabled 配置的前提下停止服务
launchctl stop /Library/LaunchDaemons/com.simonkuang.macos.coredns.plist

使用brew管理服务

# 启动服务

brew services start zerotier # 启动zerotier服务

# 停止服务

brew services stop zerotier

3,linux服务管理

service和systemctl的区别

在CentOS 7中,service和systemctl都是用于管理系统服务的命令。但它们有一些区别:

配置文件位置不同:service命令使用/etc/init.d/目录下的脚本文件,而systemctl命令使用/lib/systemd/system/目录下的unit文件。

状态信息不同:service命令通过执行脚本来获取服务状态信息,而systemctl命令通过systemd的状态管理功能来获取状态信息。因此,systemctl命令提供了更详细和准确的状态信息。

命令选项不同:service命令只有start、stop、restart、reload等简单选项,而systemctl命令提供了更多的选项,比如enable、disable、status、is-active、is-enabled等。

兼容性不同:一些较老的服务可能只能通过service命令启动或停止,而systemctl命令并不支持。

综上所述,虽然两者都可以用于管理系统服务,但systemctl命令更加强大和灵活,更适合在CentOS 7中使用。

关于service的指令

service <服务名> start – 启动指定的服务

service <服务名> stop – 停止指定的服务

service <服务名> restart – 重启指定的服务

service <服务名> reload – 重新加载指定的服务

service <服务名> status – 查看指定服务的运行状态

service <服务名> enable – 开机启动指定的服务

service <服务名> disable – 禁止开机启动指定的服务

service <服务名> --full-restart – 重启指定的服务,会满足所有配置文件的改动

service --status-all – 列出所有系统中的服务及其状态

service <服务名> configtest – 检查指定的服务的配置文件是否正确

service <服务名> condrestart – 重新启动指定的服务,但只有在该服务已经启动过时才执行

service <服务名> try-restart – 重新启动指定的服务,但在服务没有启动前不执行

service <服务名> reload-or-restart – 尝试通过卸载和重新加载服务来重新启动指定服务

关于systemctl的指令

systemctl start <服务名> – 启动指定的服务

systemctl stop <服务名> – 停止指定的服务

systemctl restart <服务名> – 重启指定的服务

systemctl reload <服务名> – 重新加载指定的服务

systemctl status <服务名> – 查看指定服务的运行状态

systemctl enable <服务名> – 开机启动指定的服务

systemctl disable <服务名> – 禁止开机启动指定的服务

systemctl is-active <服务名> – 判断指定的服务是否正在运行

systemctl is-enabled <服务名> – 判断指定服务是否开启了开机自启

systemctl is-failed <服务名> – 判断指定服务是否启动失败

systemctl mask <服务名> – 锁定指定的服务,禁止所有对它的操作

systemctl unmask <服务名> – 解锁指定的服务

systemctl daemon-reload – 重载 systemctl 守护进程,读取最新的服务配置

systemctl list-units – 查看所有正在运行的服务

systemctl list-unit-files – 查看所有已安装的服务文件

systemctl show <服务名> – 显示指定服务的属性信息

systemctl set-property <服务名> <属性名>=<属性值> – 设置指定服务的属性

systemctl edit <服务名> – 编辑指定服务的配置文件(如果没有则新建一个)

systemctl cat <服务名> – 查看指定服务的配置文件

systemctl kill <服务名> – 关闭指定的服务

systemctl poweroff – 立即关闭系统

systemctl reboot – 立即重启系统

systemctl suspend – 让系统进入睡眠状态

systemctl hibernate – 让系统进入休眠状态

4,包管理工具

Linux系统分为两种

1.RedHat系列:Redhat、Centos、Fedora等

2.Debian系列:Debian、Ubuntu等

RedHat系列的包管理工具是yum

Debian系列的包管理工具是apt-get

查看系统版本:

cat /proc/version

Macos包管理工具

Homebrew

Homebrew的安装

1.打开终端(terminal)

2.安装命令:

  命令1:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"(这个命令不好使会报错,如果报错尝试使用命令2)
  命令2:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"(这是一个脚本,同样可以安装Homebrew)

3.卸载命令:

  $ cd `brew --prefix`
  $ rm -rf Cellar
  $ brew prune
  $ rm `git ls-files`
  $ rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions
  $ rm -rf .git
  $ rm -rf ~/Library/Caches/Homebrew
Homebrew的使用

1.查看Homebrew命令:brew help

2.安装任意包:brew install ,eg:brew install node

3.卸载任意包:brew uninstall ,eg:brew uninstall git

4.查询可用包:brew search

5.查询已安装包列表:brew list

6.查看任意包信息:brew info

7.更新Homebrew:brew update

8.Homebrew帮助信息:brew -h

8.查看brew版本:brew -v

10.更新brew版本:brew update

11.整理重复语句:open ~/.zshrc -e、open ~/.bash_profile -e

5,命令行工具

定义

什么是命令行工具,其实每一台电脑当中都有命令行工具。命令行工具就是一个操作程序,和其它的电脑应用程序一样。程序的尾部是exe为标志的普通车功能需,并且是32位的程序,比如系统自带的cmd程序就是一个最常用的命令行工具。用户可以通过启动这个程序,在里面输入相关的命令行字符,然后来打开自己想要的程序或者启动一些程序命令。

哪些系统可以使用命令行

知道了什么是命令行,再来看一看哪些电脑系统可以使用命令行工具。其实在任何的操作系统里面,都是可以使用命令行的,无论是Windows、linux、Mac 系统当中,都有相应的命令行工具可以来启动电脑程序和指示,并且每个系统都可以安装适用于这个系统的其它命令行软件,让系统用起来更加方便,而且各种工具正在不断升级和完善当中。

6,xcode

Xcode 是运行在操作系统[Mac OS X](https://baike.baidu.com/item/Mac OS X/470629?fromModule=lemma_inlink)上的集成开发工具IDE),由Apple Inc开发。Xcode是开发 macOS 和 iOS 应用程序的最快捷的方式。Xcode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。

Xcode内置的常见Command Lines Tool。

Command Line Tool本质是一个命令行工具包,内部有很多有用的工具,如Apple LLVM compiler、Make等等。并且并不是只有开发 Apple 应用程序才需要用到这些工具包,当我们使用Homebrew在安装一些python库或者js库时,都会提示需要Command Line Tool。

下文会对Command Line Tool直接缩写成 CLI,XXX 一般情况是指对应路径地址。

我们在开发者官网 Command Line Tool 对其单独下载,当然每个版本的 Xcode 安装包内也会包含这套工具包。

前置工具

在我来介绍这套工具包其他工具之前,我先来介绍两个工具,我称它们为前置工具,因为有了这两个工具,我们才能更好的使用其他的工具。

xcode-select

这个工具可以帮助我们下载及安装 CLI,比手动下载更便捷。并且还能解决另外问题,就是如果我们装有多个 Xcode,我们在使用 CLI 相关工具时,系统就会不知道该去使用哪个版本或者哪个位置的 CLI,使用这个工具可以帮助我们设置及切换当前默认使用的 CLI。

介绍该工具常见的命令:

xcode-select --install: 安装 CLI,会安装到/Library/Developer/CommandLineTools/

xcode-select -p: 显示当前指定的工具包所在 Xcode 路径

xcode-select -s : 切换默认工具包所在 Xcode 路径

xcode-select -r: 重置工具包所在 Xcode 路径

xcode-select提供了一个环境变量,让你能临时使用其他环境来执行xcode command,env DEVELOPER_DIR=“/Applications/Xcode-beta.app” /usr/bin/xcodebuild

xcode-select 选择路径不是直接选择的 CLI 路径,而是选择所在 Xcode 的路径,继而使用该 Xcode 对应的 CLI,默认情况会选择到该 Xcode 包内包含的 CLI,但是如果我们通过 Xcode Preferences 调整过该 Xcode 对应的 CLI,就会使用调整后的 CLI。

这个工具应该是 Mac 自带的工具,位于/usr/bin/xcode-select,并不是跟随 CLI 工具包一块下载下来的。

xcrun

回想我们过去在使用一些 CLI 命令的时候,会直接在终端上执行xcodebuild …这样的方式,没有指定具体的 CLI 路径,并且我们执行which xcodebuild得到的结果是/usr/bin/xcodebuild。那这个命令是怎么执行到我们通过xcode-select设置的默认 CLI 路径下呢?那就得提到我们马上要介绍的这个工具了 – xcrun。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值