linux bash相关基本概念

  • Bash只是linux众多的CLI(命令行界面区别于GUI-图形用户界面)的shell的一种。shell是一个介于用户和操作系统内核之间的负责沟通的工具。
  • shell从人机交互角度上看,可分为交互式和非交互式。从字面上很好理解,你可以在交互式shell上的提示符右边输入命令,查询结果。非交互式可以执行脚本,但没有命令提示符。下面是mac上的两种默认的交互shell。
使用对象确认方法实例
用户默认交互shellcat /etc/passwdbash
系统默认交互shellls /bin/shsh

shell从安全性上讲,分为登录shell和非登录shell。和交互非交互是两个维度的东西。

使用对象确认方法实例
登录shell可用exit和logout退出登录后打开的第一个bash
非登录shell只能用exit退出通过登录shell(bash)打开的其它shell

两个视角的shell(这里就当bash)也可看做bash可运行在两两组合的四种不同模式上,具体例子看下表,使用的环境文件是不同的,也就是说这四种不同模式下的环境变量是不同的。你如果想保存你的hash的环境变量,只和你自己有关的,可保存在$HOME/.bashrc中,和所有用户都相关的,保存在/etc/profile中source的那个profile.d目录中新建的脚本文件中,而不要直接修改profile(升级后会变)

使用对象交互非交互
登录shell登录后打开的第一个bash常见的shell脚本的运行方式
环境文件/etc/profile $HOME/.bash_profile $HOME/.bash_login $HOME/.profile $HOME/.bashrc/etc/profile
非登录shell通过登录shell(bash)打开的其它shell强制使用登录方式打开的shell脚本。可以改变脚本访问的全局文件,在不少情况下也需要使用(远程使用非登录shell调用脚本但需要登录的全局环境时适用)
环境文件$HOME/.bashrc/etc/profile
  • 终端(TTY:teletypewriter ,通过线缆和主机相连的哑(不发声,有/无屏幕)终端)和控制台(console)则是完全继承于UNIX诞生时小型机时代的概念,一般我们在涉及硬件相关描述的时候,才会用这两个词。控制台是一种特殊的终端,是固定在大型机上的那个终端。那个带键盘的东西就是(console),买机器的时候一般都需要买个这个。控制台是个完完全全的CLI,你如果想要这个,当前Linux通过ctrl+alt+F1,Fn提供给你。F1~Fn那是因为1个控制台不够,你可以同时启动多个会话。需要注意的是,好多类UNIX系统的GUI提供了一个图形化的仿真终端软件,名字就叫终端,我一般就是在这用,基本上和TTY没有什么区别,但在TTY中无法运行任何GUI程序。容易混淆,值得注意。**但不管是哪种终端,终端的作用就是运行shell。**图片为DEC的PDP-7,也就是那台UNIX的载体: Alt
  • 用户:linux系统安全的核心是用户账户。每个能进入linux系统的用户都会被分配唯一的用户用户账户。用户信息记录在/etc/passwd文件中。linux系统会为各种不同功能创建不同的用户账户,而这些用户并不是真正地用户。Ubuntu从1000开始为真正的用户分配用户ID。macos从500开始分。下面的ubuntu显示的部分数据我们可以看到我当前的用户ken的用户id为1000,设置的一个uftp服务用户id为1001。另外,系统还为提供的ftp服务设置了一个ftp用户。提供telnet服务的telnetd进程设置了一个telnetd服务。
用户名密码用户ID用户组ID用户备注字段用户主工作目录用户使用的shell种类
rootx00root/root/bin/bash
daemonx11daemon/usr/sbin/usr/sbin/nologin
binx22bin/bin/usr/sbin/nologin
sysx33sys/dev/usr/sbin/nologin
kenx10001000ken,/home/ken/bin/bash
ftpx122127ftp daemon,/srv/ftp/usr/sbin/nologin
uftpx10011001/home/uftp//bin/bash
telnetdx123128/nonexistent/usr/sbin/nologin

注意,上面这个表格是通过sed命令直接生成的符合编辑器要求的格式。

 for line in $(cat /etc/passwd); do echo "|$line|" | sed 's/:/|/g'; done
  • 用户组:linux为了解决共享资源所采用的另外一个安全概念group。组的权限允许多个用户对系统中的对象(文件,目录,设备)共享一组共用的权限。不同的系统对group的使用思路有差异,Ubuntu会为每个用户创建一个单独的与用户账号同名的组。GID的分配方式和UID类似。

  • BASH上可以运行的命令分为两种,内建命令和外部命令。可以通过type -a命令进行查询。区别是执行效率的区别,BASH上执行外部命令要fork(衍生)一个子进程,效率显然要低一点。内部命令是和BASH编译在一起的。就像你随身带个工具箱,总比工具箱放别人那,每次用还要走申请,批准流程啥的。因而效率高。但有个叫ZSH的shell挺牛,貌似能把外部命令转换成内部命令。

  • 文件系统和文件格式,linux中一切皆文件,这两个概念一定要明确。文件格式是决定了软件如何使用该文件,比如mp4是视频的一种文件格式,使用它的是视频播放软件(VLC)或硬件。mp3是音频的一种文件格式。ELF是一种可执行文件的格式,使用它的是操作系统。 文件系统是一套管理办法(协议),如何组织,添加,删除,查找…文件的方法.比如EXT文件系统。规定了文件名命名方法,文件名长度,文件大小限制,目录的组织方法等等。linux和windows文件系统的处理上有个显著区别就是目录和分区的关系。windows的目录在分区中,而linux的分区挂载在目录上。那你可能要问,我连分区都没有,linux的目录在那哪呢?分区挂哪里呢?linux的目录结构大的框架是内定的,是虚拟的,也就说文件系统直遵循了这个协议。比如’/'是根目录,根目录上还有一些约定俗成的目录。/mnt目录就是用来挂载的。
    Alt
    /bin二进制可执行命令
    /dev设备特殊文件
    /etc系统管理和配置文件
    /etc/rc.d启动的配置文件和脚本
    /home用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
    /lib标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
    /sbin超级管理命令,这里存放的是系统管理员使用的管理程序
    /tmp公共的临时文件存储点
    /root系统管理员的主目录
    /mnt系统提供这个目录是让用户临时挂载其他的文件系统
    /lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
    /proc虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
    /var某些大文件的溢出区,比方说各种服务的日志文件
    /usr最庞大的目录,要用到的应用程序和文件几乎都在这个目录,其中包含:
    /usr/x11R6存放xwindow的目录
    /usr/bin众多的应用程序
    /usr/sbin超级用户的一些管理程序
    /usr/doclinux文档
    /usr/includelinux下开发和编译应用程序所需要的头文件
    /usr/lib常用的动态链接库和软件包的配置文件
    /usr/man帮助文档
    /usr/src源代码,linux内核的源代码就放在/usr/src/linux里
    /usr/local/bin本地增加的命令
    /usr/local/lib本地增加的库根文件系统

  • api是不是内核,不是,操作系统的内核通过对外提供系统调用提供服务,API是输入第三方(不是操作系统内核提供方)提供的。比如linux的Glibc库,就是一个用封装了系统调用(system call,这玩意是属于内核的)对外提供的C语言接口API。即便都是C语言,还有不同作用的API,有的关注兼容性,有的关注GUI。不同语言还有不同语言的API,比如python也可进行系统编程。所以api是应用层的东西。我理解这也是为啥当初GNU在没有Linux内核的情况下,也能开发GNU工具的原因,GNU如果基于C语言开发,那么Glibc(linux上的C语言Runtime库)的api只要实现的预期功能,就可以达成该目标。

  • 驱动是内核,驱动是系统调用和硬件的中间层。,驱动允许应用和物理设备之间交换数据。驱动程序有两种方法生效,编译进操作系统或插入操作系统(安装驱动程序)。
    在这里插入图片描述
    linux命令行与shell脚本编程

  • shell上也可以编程,跑脚本,shell中的那些命令是API么?shell实际上是人机交互的命令行界面工具,shell上的命令就是操作系统提供的系统命令,比如ls,pwd…这些命令大部分是用C编写的,这我们就明白了,shell中的那些命令不是API,是一个一个高级的小工具。而shell就是一个高效使用这些工具的平台。
    经常看到有这样的图阐述shell:我理解这里面有的概念是对的,左边这个用户是对的,右边这三个同心圆的概念是错误的,shell搞的好像和API的位置相同,而且完全包住了系统内核。其实不然,shell只是上图中应用程序那一层的一部分。运用到了很多其它工具。说shell(使用的命令)比API高至少2个层次一点都不过分。BASH和gcc,gdb,glibc, ls,pwd,sed,awk,grep等工具相互成全,混杂在一起,都放到上面的GNU系统工具链里。
    错误的shell理解
    建议这个图改成这样,用户通过shell或GUI和电脑操作,就这么简单。
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值