Terminal
可以认为terminal和tty是同义词
作用是提供一个命令的输入输出环境
SHELL:
就是人机交互的接口(interface),提供使用者使用界面,包裹在操作系统外面
本质是命令解释器(可以自己写),比如zsh和bash都是shell
windows的cmd实际就是一种shell
用户在shell中提交命令,然后shell接受命令并对其进行解释:
比如:king@study ~%howareu
:shell先对它进行解析,然后返回结果
执行命令的流程:
shell接受命令---->判断是否内置------>是则直接执行(系统调用);否则在系统中调入内存进行执行
以which为例子
which ls:将会输出???
which cd:将会输出shell built-in command,即指linux内部命令
which pwd:也是内置
PATH
:环境变量,所有可执行程序的路径,echo $PATH
可以查看,得到的结果
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
因为ls在bin下面,当在PATH中删掉bin路径之后:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/s
bin:/usr/games:/usr/local/games
再输入ls
,就会得到
zsh: command not found: ls
此时根目录里面所有都无法执行了
系统跑起来都是把软件放在内存中,bash或者zsh实际上是进程。比如path实际上就是进程。进程结束,那么进程中的东西就丢失了(因为是存在内存中的,不写到磁盘里面的话就会因为结束进程而丢失)
***问题来了,如何结束进程呢?快捷键是什么?***
如果想把变化写到磁盘里,应该在.zshrc
资源文件中修改(数据固化)
命令无法使用的恢复:
重装
或者在原途径加上/bin
不写到磁盘就关掉即可
可执行程序不在PATH中则无法直接执行
假设设计了一个程序,需要直接打开程序,不添加到PATH中就无法直接执行。
touch qq.c
vim qq.c
cat qq.c :
#include<stdio.h>
int main(){
printf("this is qq!\n");
return 0;
}
gcc qq.c -o qq
ls :
.... qq qq.c ....
qq :
zsh: command not found: qq
但实际如果你位于同一个目录下是可以执行的,参见平时的./a.out
.需要告诉系统你要执行的文件的路径。如果需要任意位置都可以执行则需要
1.加在环境变量PATH中。
pwd(查看当前目录)
PATH=(path中添加路径)
2.或者把文件拷到path里的某个目录下,如在/usr/bin/下复制文件
sudo cp qq /usr/bin/
之后就可以直接使用qq命令,无论你在哪。
如果上面两个方法都使用了,那么此时哪个是有效的呢?which qq
查看当前起作用的是在哪(优先级是根据PATH中的顺序决定)。whereis qq
则可以得到你一共有几个qq
linux中目录分隔符的数量///和和/效果都是一样的
命令sudo获得管理员权限,sudo -i
切换为管理员(不要密码)su -king切换用户
sudo -i
可以从当前用户切回管理员,只需要当前用户的密码(***那岂不是不安全?***),su - root需要管理员密码
root退到个人用户:logout或者exit(***存疑,为什么我每次就是直接断开联系***)
relationship
当你打开terminal的时候,系统会自动将shell和terminal进行关联。因此在terminal中输入命令,shell能获得命令继而进行解析。(echo $SHELL
可以对所关联的shell进行查看)
命令
人机交互的基本单位,包含命令名、分隔符、选项、操作对象
命令的语法:
cp(谓动) a(宾) b(宾)
cp(谓动) -ar(方式状语) a(宾) b(宾)
害,反正就是按照一般语法和正常逻辑需要能够理解命令
cp 1.cpp 2.cpp 3(那么3应该要是个目录,不然没办法实现cp)
cp 1.cpp 2.cpp .(.是当前目录,可以)
cp -r(递归,就是如果dir1是个目录,那就把dir1里面的所有拷贝到dir2) dir1 dir2(将直接新建一个目录)
-和--
的区别
-a即简写,–all写全称。cp - a b
和cp -- a b
没有区别。
二级命令
比如apt install
分隔符
如
管道 |:将前面的标准输出作为标准输入
重定向 <,>,<<,>>:一个定向是覆盖,两个是追加(不明白)
注意su usrname
和su - usrname
(更推荐)的区别,前者不会改变当前的环境变量,后者相当于重新登陆,因此环境变量不会进行保存。
选项
ls [ald] ([]表示可以选择的选项)
程序和进程
程序:磁盘上的文件,写好的可执行程序之类的
进程:程序在内存中的镜像,磁盘文件调到内存中实例化
路径
绝对路径
可以用坐标来理解以根目录/开始
相对路径
相对与现在的位置
远程路径
访问网络上的某个位置,不能用cd,只能用相关协议进行操作,比如
协议://用户名:密码@位置/路径:端口
http://baidu.com
ftp://user:passwd@ftp.moumou.com(下载)(不明白)
软件安装
linux安装软件是把各个文件单独拷贝到同级别的bin、lib、share、/etc目录下
bin:放置程序的可执行文件。在环境变量PATH中直接加入即可直接执行程序
lib:存放库文件
share:存放其他资源,比如man
/etc:存放配置文件(根目录,全局配置信息)
比如hosts配置静态的ip和主机的映射,hostname是主机名字
配置
配置网络:/etc/network/interface修改网络配置,重启网络即可实现配置(注意云主机配置的话小心出问题);也可以直接用
ifconfig eth0 12.34.56.78(此时只在内存,无法实现固化)
GUI界面可以用图形化方式进行配置。
隐藏文件
以.
开头的文件会被自动隐藏(mac也是这样)。显示这样的文件命令是
ls -a