小技巧:查看当前命令的参数,
1、 ls ----help
2、help ls
3、man ls
一、多用户操作系统:
贝尔实验室发明的Linux操作系统:为了使多个用户使用。
允许多个用户,同时向该计算提交计算任务,并且他们相互之间不干扰。
怎么实现呢?
1、物理终端
接入多个显示器和键盘。(1套显示器和键盘,就叫做终端)( 物理终端 )
2、虚拟终端
使用一个显示器和键盘,但是 Linux 的 mingetty 会模拟出其余终端。(这些是 虚拟终端)
并且使用 Ctrl + Alt + F(n) (1——6)
从而来切换 6 个终端。
输入 tty
,可以看出我们当前在哪个终端。
3、模拟终端
通过网络 , 使用 ssh (Secure Shell) 的缩写远程登陆到 linux。
Ubuntu:
(1)先使用 ifconfig 来查看当前的 IP 地址。(确保和我们的主机在一个网段。)
(2)使用 SSH 连接报错:修改配置文件
解决:
1、先在管理员模式下运行
apt-get install openssh-server openssh-client
2、然后我们打开配置文件进行编辑:vi /etc/ssh/ssh_config
3、如下图操作:去掉前面的注释符,使用22端口
4、然后我们打开配置文件进行编辑:vi /etc/ssh/sshd_config
5、重启 ssh 服务:service sshd restart
Windows:
1、先在cmd 当中,ping 一下,试试能不能联通。
2、使用Secure CRT 来建立会话:
二、Linux 的shell
shell:提供用户和计算机的接口的程序。
GUI:
cmd:
在 windows 下提供 GUI 界面的应用程序为:(使用任务管理器,关闭这个进程,则没有GUI界面了)
在 Linux 下提供 GUI 界面的应用程序为
1、Gnome :C语言开发
2、KDE :C++ 开发
3、Xface :轻量级图形界面
在 Linux 下提供 cmd 界面的应用程序为
1、bsh:unix 提供的shell 功能弱
2、sh : 安全稳定
3、csh:Bill joy 研发的 Csh语法,接进于 C 语言
4、ksh:
5、bash: GNU 组织融合 ksh 和 csh 和 sh 特性的重新开发,能够操作 unix 和 linux
6、nologin :没有shell
5、dash:
怎么查看当前使用的shell 使什么程序:(默认 bash)
怎么查看当前 linux 支持几种 shell?
三、bash 的功能
1、命令行编辑
在bash里面,编辑命令。有很多快捷键可以操作
1、可以使用光标来切换
2、ctrl + a 到行首, ctrl + e 到行尾。
3、ctrl + c :退出当前步骤
4、ctrl + l :清屏
2、内部命令和外部命令(PATH)
内部命令: 是 bash 自带的命令。 比如说: cd 、pwd 、
外部命令:一般放在/bin
or/sbin
,(当然也可以放在其他目录下)(系统某个路径下的可执行程序)
但是我们在使用这些命令的时候,基本没有区别。 (我们也区分不出什么是内部命令,什么是外部命令)
有两种情况:
1、PATH 环境变量(告诉操作系统去哪里找这个环境变量)
2、当前目录下面,有这个应用程序。就可以直接运行。
每次当我们启动操作系统的时候, PATH 就会告诉操作系统,我们的命令在哪个目录下面。
echo $PATH # 打印当前path 环境变量,包含哪些目录
type ping # 查看当前命令的目录
怎么修改 PATH 的值呢?
使用export 命令,导出一个新的环境变量。
root@ubuntu:/ export PATH=$PATH:/dxd
root@ubuntu:/ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/dxd
但是这样每次在终端重启的时候就会失效。
所以我们可以将他放到,系统启动就加载的配置文件当中。
profile类:为交互式登陆用户提供配置
/etc/profile:全局
/etc/profile.d/*.sh:全局
~/.bash_profile: 个人配置,仅对当前用户有效
功能:
设定环境变量
运行命令或脚本
bashrc类:非交互式登陆用户提供配置
/etc/bashrc:全局
~/.bashrc:个人配置
功能:
设定本地变量
定义命令别名
补充windows 的命令在哪?
windows 的命令和 linux 一样很多命令,也是外部命令。(例如 ping 这个命令就在下面这个目录里面)
查看windows 的变量
3、命令补全功能
当我们使用 Table 键的时候,bash 会帮助我们自动进行补齐。
当我们连按两个 table 命令的时候,列出符合的命令
注:我们使用过的命令,被存放在 hash 表里面。
一些参数的用法
4、history 历史命令 OK
应用场景: 我们连接云端的服务器的时候,我们只要登录用户,我们使用的命令就会保存下来。
当我们每次退出终端的时候,会将我们的历史命令存到,历史文件当中。 历史文件在用户重新登陆的时候被读取。
1、两个用户执行的命令:是追加的关系,并不是覆盖的关系。(谁先退出,谁被保存)
2、缓存文件的大小:我们历史文件可以存多少条命令。 echo $HISTSIZE
3、找到我们的历史文件在哪里:echo $HISTFILE
5、命令别名
如果我们经常使用一个很长的命令。 那我们可以起一个别名,来代替这个长的命令。
注:
1、我们的别名只在当前的 shell 周期里面起作用。
2、想要永远保存,或者为某个用户保存。( 修改配置文件即可 )
在用户目录下面,有一个 .bashrc
文件。
用户目录:
1、使用 cd 直接跳转到当前用户目录。
2、root 用户就在 /root。
3、cyber 用户就在 /cyber 。
原来定义好的 别名。
3、想要修改全局的变量,所有用户都会修改。
该配置文件在: /etc/bashrc
4、举例使用:快速切换目录
alias 的常用参数:
6、命令替换
格式: $(命令)
‘命令‘ ,反引号
应用举例:
注:
1、双引号: 弱引用,里面的内容 会被替换
2、单引号: 强引用,里面的内容 不会被替换,会将里面的内容当作字符来处理
7、路径展开功能
路径多项式:
8、重定向
重定向,标准输入 和 标准输出。
原来:标准输入为 键盘, 标准输出为 屏幕。
重定向:标准输入为 文件, 标准输出为 文件。
展示:
我们在 bash 里面运行一个命令,运行一个函数。 在操作系统里面就会产生一个进程。
1、操作系统会给这个进程,分配一个编号。比如说是 1788
2、然后在 / proc
当中创建一个 1788
的文件夹, / proc / 1788
3、这个进程想要操作的文件,都放到了: / proc / 1788 / fd
文件里面。
4、在 fd 文件当中,会有很多个数字,称为文件描述符。(0、1、2、3、依次类推)
在Linux 当中一切皆文件, 我们的标准输入输出设备,键盘、显示器都是一个文件。
通常
0: 标准输入文件(键盘)
1:标准输出文件 (显示器)
2:标准错误输出文件 (显示器)
演示:
如何在bash 当中,当前所运行的进程? ps
命令
以及如何查看,当前进程所涉及的文件?(在 /proc/3878/fd
,,目录下会显示对应的文件描述符)
示例:
1:代表文件描述符 1 ,标准输出 (这个1也可以省略)
123 :代表重定向的制定文件。
2 : 代表标准错误输出,(不可以省略)
有的时候,一条命令执行,有的是正确的,有的是错误的。
9、管道
举例:
head : 显示一个文件的前几行。 head -5 ,显示前 5 行
tail : 显示一个文件的后几行。
注意事项:
1、一个管道当中的命令,只能有一个文件名。
2、在管道中,只有 标准输出才传递给下一个命令,标准错误输出 直接输出到终端。
find -name "*.conf" 2>/dev/null | grep rc
此时可以把标准错误输出重定向到空文件当中。 2 >dev /null
3、有些命令,不支持管道输出。
解决办法:xargs