shell
shell 运行原理 --- 外壳程序
我们是如何访问操作系统的呢??? windows下是通过图形化界面 ,而Linux下则是通过命令行(指令操作) 。
那么图形化界面和指令操作又是什么呢??? 其实它们是操作系统提供的外壳程序!!!
那么外壳程序的意义是什么?
1.是用户和操作系统交互中间软件层。
2.可以在一定程度上起到保护操作系统的作用!!
人 |
shell外壳程序 |
操作系统 |
硬件驱动 |
硬件 |
shell (外壳程序)也可以定义为命令行解释器 :
1.将使用者的命令翻译给核心(kernel)处理。
2.同时,将核心的处理结果翻译给使用者。
如何查看自己的外壳程序??
[root@VM-4-14-centos ~]# echo $BASH /bin/bash [root@VM-4-14-centos ~]# ls /bin/bash /bin/bash [root@VM-4-14-centos ~]# ls /bin/bash -al -rwxr-xr-x 1 root root 964536 Apr 1 2020 /bin/bash
bash 是一个文件,执行起来死循环。会不断打印这个
[root@VM-4-14-centos ~]#
shell 和 bash 又是什么关系呢??
shell是外壳程序的统称,而bash 是一个具体的外壳程序。
权限
接下来进行对权限的分析。
Linux 是一个多用户操作系统!
用户: root 和普通用户
root 只有一个,具有Linux下的最高权限(一般不受权限约束);普通用户可以有多个,会受到权限的约束。
那我们在进行用户切换的过程中,也就是在切换我当前的权限。
注意:su 和 su- 存在区别。
su - 相当于重新登陆root,起始路径为默认路径,但是su 它的起始路径为原用户的当前路径。
[hang@VM-4-14-centos 1]$ pwd /home/hang/1 [hang@VM-4-14-centos 1]$ su Password: [root@VM-4-14-centos 1]# pwd /home/hang/1 [hang@VM-4-14-centos 4]$ pwd /home/hang/1/2/3/4 [hang@VM-4-14-centos 4]$ su - Password: Last login: Thu Aug 11 18:34:44 CST 2022 on pts/0 [root@VM-4-14-centos ~]# pwd /root
权限是针对人的。事物的基本属性(事物可以天然进行的动作)决定权限相关的概念。
权限的核心 = 人 + 事物属性( r w x)
[hang@VM-4-14-centos ~]$ ls -al total 36 drwx------ 5 hang hang 4096 Aug 11 18:33 . drwxr-xr-x. 4 root root 4096 Aug 11 18:12 .. drwxrwxr-x 3 hang hang 4096 Aug 11 18:34 1 -rw------- 1 hang hang 424 Aug 11 18:44 .bash_history -rw-r--r-- 1 hang hang 18 Apr 1 2020 .bash_logout -rw-r--r-- 1 hang hang 193 Apr 1 2020 .bash_profile -rw-r--r-- 1 hang hang 231 Apr 1 2020 .bashrc drwxrwxr-x 3 hang hang 4096 Aug 11 18:13 .cache drwxrwxr-x 3 hang hang 4096 Aug 11 18:13 .config
从左到右依次是 文件类型 (此跳过) 操作权限(拥有者 所属组) 文件大小 时间 文件名。
gcc是Linux 环境下的一个软件,但是 gcc == Linux????
[hang@VM-4-14-centos 4]$ gcc test.txt test.txt: file not recognized: File format not recognized collect2: error: ld returned 1 exit status
答案显然是不等于。
用户可以分为哪些类型呢???
owner 拥有者 : 文件属于谁
grop 所属组 :文件所属的哪一个组
other 其他 : 不属于上面的任何一个
注意权限只会认证一次。
r w x 的位置是绝对确定的 。
读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- 代表不具有该属性
更改拥有者 或者 所属组需要提升权限 chown(own) , chgrp (grop)
[root@VM-4-14-centos 1]# chown root test.txt [root@VM-4-14-centos 1]# chgrp root test.txt [root@VM-4-14-centos 1]# ls -al total 12 drwxrwxr-x 3 hang hang 4096 Aug 12 09:30 . drwx------ 5 hang hang 4096 Aug 11 18:33 .. drwxrwxr-x 3 hang hang 4096 Aug 11 18:34 2 --wx-w---- 1 root root 0 Aug 12 09:30 test.txt
更改属性有两种方法 第一种 ugo+- (如果是普遍性的 ,可以用 a- rwx )
第二种 八进制方案 rwx 《====》 111
hang@VM-4-14-centos 1]$ ls -al total 12 drwxrwxr-x 3 hang hang 4096 Aug 12 09:30 . drwx------ 5 hang hang 4096 Aug 11 18:33 .. drwxrwxr-x 3 hang hang 4096 Aug 11 18:34 2 -rw-rw-r-- 1 hang hang 0 Aug 12 09:30 test.txt [hang@VM-4-14-centos 1]$ chmod u+x,u-r test.txt [hang@VM-4-14-centos 1]$ ls -al total 12 drwxrwxr-x 3 hang hang 4096 Aug 12 09:30 . drwx------ 5 hang hang 4096 Aug 11 18:33 .. drwxrwxr-x 3 hang hang 4096 Aug 11 18:34 2 --wxrw-r-- 1 hang hang 0 Aug 12 09:30 test.txt
[hang@VM-4-14-centos 1]$ ls -al total 12 drwxrwxr-x 3 hang hang 4096 Aug 12 09:30 . drwx------ 5 hang hang 4096 Aug 11 18:33 .. drwxrwxr-x 3 hang hang 4096 Aug 11 18:34 2 --wxrw-r-- 1 hang hang 0 Aug 12 09:30 test.txt [hang@VM-4-14-centos 1]$ chmod u+r test.txt [hang@VM-4-14-centos 1]$ ls -al total 12 drwxrwxr-x 3 hang hang 4096 Aug 12 09:30 . drwx------ 5 hang hang 4096 Aug 11 18:33 .. drwxrwxr-x 3 hang hang 4096 Aug 11 18:34 2 -rwxrw-r-- 1 hang hang 0 Aug 12 09:30 test.txt [hang@VM-4-14-centos 1]$ ls a-r test.txt ls: cannot access a-r: No such file or directory test.txt [hang@VM-4-14-centos 1]$ chmod a-r test.txt [hang@VM-4-14-centos 1]$ ls -al total 12 drwxrwxr-x 3 hang hang 4096 Aug 12 09:30 . drwx------ 5 hang hang 4096 Aug 11 18:33 .. drwxrwxr-x 3 hang hang 4096 Aug 11 18:34 2 --wx-w---- 1 hang hang 0 Aug 12 09:30 test.txt [hang@VM-4-14-centos 1]$
常见面试问题
1.目录权限
进入一个目录,需要什么权限?x
查看目录下的文件列表?r
要在目录下创建文件或者目录?w
2.umask
linux默认:一个目录被创建,起始权限是从 :777
一个普通文件被创建,起始权限是从:666
起始权限并不等于最终权限
umask 权限掩码 凡是在umask中出出现的权限,都不应该在最终权限中出现。(注意,并不是通过减法来实现的,而是通过 起始权限 & ~ umask 实现的 )
3.粘滞位
当多个目录共享一个目录,需要在目录下进行读写,创建删除等动作。并且自己删除自己的,而不能删除别人的(w 可以互删的 ,但是不满足条件)
于是就引入了 粘滞位的概念 chmod +t 文件名
需要注意的是: 粘滞位只能给目录设置! 一般是谁设置。谁取消(root)
初步认识一下vim
vim编辑器 -》只负责写代码 -》 是一款多模式的编辑器
命令模式:
- yy :将当前光标所在的行,复制 支持nyy
- p :将复制进行粘贴 支持np
- dd :将当前光标所在的行,剪切(删除) 支持ndd
- u:撤销操作
- ctrl + r :反撤销
- shift + g :光标定位到文件的结尾
- gg :光标定位到文件的最开始
- n + shift + g : 将光标定位到文件的任意行
- w,b :以单词为单位进行光标的前后移动。
- h j k l :左 , 下 , 上 ,右
- shift + 6( ^ ) :将光标定位到当前行的最开始
- shift + 4( $ ) :将光标定位到当前行的最结尾
- shift + ~ :大小写替换
- r :替换所在的字符 支持nr
- shift + r :进入替换模式
- shift + x : 删除光标所在的字符,包括之前和之后 支持nx
- s/vivian/sky/ 替换当前行第一个 vivian 为 sky
- :s/vivian/sky/g 替换当前行所有 vivian 为 sky
- :s 表示substitute,也就是替换, 格式为以下
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行
{pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
{string} 表示要将匹配到的字符串替换为的新的string字符串
[flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
[count] 表示在一行中匹配多少次,很少会用到....
如果想要将文件中所有 nihao 替换为 hello 则命令为: %s/nihao/hello/g
:p 用于打印指定区间的行
:[range]p[rint] [flags]
:i 在指定行上方添加文本
:{range}i[nsert][!]
- 在vim下批量注释和删除
esc进入命令模式,ctrl v进入视图模式,hjkl移动选中,I 进入insert模式,输入//,然后esc
esc进入命令模式,ctrl v进入视图模式,hjkl移动选中,d,然后esc
底行模式:
- set nu/nonu :打开行号或者取消行号
- w :写入 w!
- q : 退出 q!
- !cmd : 不退出 vim 执行对应的命令 (执行命令行 , 编译,运行 ,查看man )等
- vs 文件名: 分屏操作(CTRL+ ww)
- 在末行模式下,键入:x! 保存并退出编辑,仅当文件有修改时会保存,并修改文件时间属性
配置vim
手动配置 在用户的默认路径下 创建一个 .vimrc 自行搜素进行配置
.vim 将插件添加进来
自动配置 gitee vimforcpp
sudo 权限设置
[root@VM-4-14-centos 1]# vim /etc/sudoers
程序翻译的过程
文本的C -> 计算机二进制
- 预处理(去注释,宏替换,头文件展开,条件编译...)
- 编译(c ->汇编)
- 汇编(汇编 ->可重定向二进制目标文件)
- 链接(链接多个 .o ,.obj ->合并形成一个可执行) .exe