美文网首页iOS逆向初探
初识Shell&Shell脚本&MacOS权限

初识Shell&Shell脚本&MacOS权限

作者: 有梦想的程序员 | 来源:发表于2019-10-21 11:33 被阅读0次

    我们在iOS开发的时候很少关注ShellMacOS的权限问题,但是说起来Shell我们也是经常使用的,比如我们终端输入ls,会列举出当前目录下的所有文件夹和文件,其实ls就是一条Shell指令。

    1、什么是Shell?

    对于图形界面,用户只需要点击图标即可启动某个软件;对于命令行,输入某个程序的名字(可以看做一个命令)启动某个程序。所以图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。

    然而,真正能够控制计算的硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。

    由于安全、复杂、繁琐的原因,不能让用户直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。

    为了既能简化用户的操作,又能保障内核的安全,就需要在用户和内核之间增加一层“代理”,而开发的用户界面和命令行程序就是这层“代理”。在Unix或Linux下,这个命令行程序就叫做 Shell

    2、Shell的种类有哪些?

    Shell的种类有很多种,在我们MacOS操作系统上默认的是bash

    我们可以查看一下当前MacOS有多少种Shell
    打开终端,进入 /private/etc,然后当前文件夹下有一个叫做ShellsShells里面存储了我们当前Mac电脑的操作系统里拥有的Shell种类。zsh是目前比较流行的且更友好的Shell,有兴趣的课可以装一装。

    Shells

    3、Shell的使用

    这里使用2个简单的例子

    • 新建一个文件夹
    • 在新建的文件夹里面新建一个文件

    新建一个文件夹,终端输入:mkdir 代码

    创建文件夹

    新建一个文件,终端输入:touch appShell.sh

    新建文件

    4、Shell脚本的介绍和使用

    Shell脚本也就是用各类命令预先放入到一个文本文件中,方便一次性执行的一个脚本文件。

    我们把刚才的指令放到Shell脚本中

    Shell脚本

    执行脚本bash appShell.sh

    执行脚本

    同理我们可以用其他的Shell执行,比如:

    • ksh appShell.sh
    • zsh appShell.sh(我电脑安装的zsh

    我们也可以使用source appShell.sh执行。注意:source 后路径变了

    source执行脚本

    我们平常最常用的就是./appShell.sh了,执行后发现没有权限,我们添加一个权限(权限下一条说)chmod 755 appShell.sh,然后再执行./appShell.sh

    添加权限,执行脚本
    脚本执行相关命令的区别
    • $source FileName

      • 意思:在当前shell环境中读取并执行FileName中的命令
      • 特点:
        • 命令可以强行让一个脚本去立即影响当前的环境(一般用于加载配置文件)。
        • 命令会强制执行脚本中的全部命令,而忽略文件的权限。
    • $bash FileName、zsh FileName

      • 意思:重新建立一个子shell,在子shell中执行脚本里面的句子。
    • $./FileName

      • 意思:读取并执行文件中的命令。但有一个前提,脚本文件需要有可执行权限。
    5、MacOS权限的介绍和文件权限的修改

    MacOS是基于Unix内核的图形化操作系统,而Unix是多用户、多任务的系统,所以这样的系统里面就拥有了用户、组的概念,那么同样文件的权限也就有相应的所属用户和所属组了。

    Windows上只要能进入系统硬盘上的所有东西都可以访问,由于Unix的多用户多任务优点,所以UnixLinux多被用于服务器。

    如下图中显示,明显的能看到Unix(Linux)的多用户和Windows的一个用户访问区别。

    Windows
    Unix(Lunix)

    稍微了解一下MacOS系统,上条中./appShell.sh的提示权限不足原来是我们当前登录的用户未拥有对appShell.sh执行的权限。

    好,我们查看一下文件权限,终端输入ls -l,显示如下

    tancheng@localhost ~/Documents/SecurityProducts/003-CodeSign应用重签名/代码/WeChatDemo : ls -l
    total 8
    drwxr-xr-x     3      tancheng     staff        96          10 17 11:07        APP
    drwxr-xr-x    13      tancheng     staff       416          10 19 10:21        WeChatDemo
    drwxr-xr-x     5      tancheng     staff       160          10 19 10:50        WeChatDemo.xcodeproj
    drwxr-xr-x     4      tancheng     staff       128          10 19 10:02        WeChatDemoTests
    drwxr-xr-x     4      tancheng     staff       128          10 19 10:02        WeChatDemoUITests
    -rw-r--r--     1      tancheng     staff      1979          10 19 10:40        appShell.sh
    [   权限    ]  [连接]  [所有者]      [所属组]  [文件大小]       [最后修改日期]        [文件名称]
    

    上方第一列就是权限,接下来依次是连接数,文件所有者、所属组,文件大小、最后修改时间和文件名称,下图说明了,文件类型和权限:

    权限说明.png

    那么我们上方使用的chmod 755 appShell.sh是怎么来的呢?

    我们在iOS开发的时候经常能看到类似于下方这种的枚举,代表二进制往前移动几位,这是为了我们能一次使用多个枚举,比如UIRectCornerTopLeftUIRectCornerTopRight同时使用。

    typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
        UIRectCornerTopLeft     = 1 << 0,
        UIRectCornerTopRight    = 1 << 1,
        UIRectCornerBottomLeft  = 1 << 2,
        UIRectCornerBottomRight = 1 << 3,
        UIRectCornerAllCorners  = ~0UL
    };
    

    其实权限也是一样的,那么755代表如下:

    • 7:第一组文件所有者权限 , 二进制为111,表示可读、可写、可执行(rwx
    • 5:第二组用户所在组其他用户权限,二进制为101 ,表示可读、不可写、可执行(r-x
    • 5:第三组非本组用户的权限,二进制为101 ,表示可读、不可写、可执行(r-x

    相应的我们也可以直接操作执行权限chmod a+x appShell.sh去执行,下方图明确的介绍了改变权限的方法。u所属用户,g用户所属组,o非本组用户的权限,a以上3种都添加。

    改变权限.png

    以上就是对Shell&Shell脚本&MacOS权限的一些简单介绍了,对于我的日常也是够用了。

    相关文章

      网友评论

        本文标题:初识Shell&Shell脚本&MacOS权限

        本文链接:https://www.haomeiwen.com/subject/kminmctx.html