大名鼎鼎的Linux之父就是Linus Benedict Torvalds,1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组
(comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另一个UNIX的小操作系统——Minix的启发,该系统是由一名叫Andrew S Tanenbaum的教师开发的。读者也许猜想所发布的这个系统应该是Linux的0.01版本,实际上不是这样。真正的Linux 0.01版本并没有被发布,原因是0.01版本不实用。Linus仅仅在第一个Linux的FTP站点(ftp://nic.funet.fifi)上提供过这个版本的的源代码。
Torvalds 于 10 月 5 日发布的这个 Linux 版本被称为 0.02 版,它能够运行 GNU Bourne Again Shell(bash) 和 GNU的C 编译程序( gcc )以及为数不多的其它语言。 Torvalds 绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生,这就是人们所称的Linux。
Linux 发布时的版本是 0.02 ,后来又有 0.03 版,然后又跳到 0.10 版。因为世界各地越来越多的程序员都开始开发Linux ,它已经达到 0.95 版。这就意味着正是公布 1.0 版本的时间已经为期不远了。正式的 1.0 版本是在 1994年公布的。
对比微软开发的Windows系统,还有苹果公司开发的ios系统,Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。
GNU 通用公共许可协议( GNU General Public License ,简称 GNU GPL 或 GPL ),是一个广泛被使用的自由软件许可协议条款,最初由理查德斯托曼为GNU 计划而撰写, GPL 给予了计算机程序自由软件的定义, 任何基于GPL 软件开发衍生的产品在发布时必须采用 GPL 许可证方式,且必须公开源代码。
**Linux 是自由软件和开放源代码软件发展中最著名的例子。只要遵循 GNU 通用公共许可证,任何个人和机构都可以自由地使用Linux 的所有底层源代码,也可以自由地修改和再发布。**随着 Linux 操作系统飞速发展,各种集成在Linux 上的开源软件和实用工具也得到了应用和普及,因此, Linux 也成为了开源软件的代名词。
Debian
Debian运行起来极其稳定,这使得它非常适合用于服务器。 debian这款操作系统无疑并不适合新手用户,而是适合系统管理员和高级用户。
Ubuntu
Ubuntu是Debian的一款衍生版,也是当今最受欢迎的免费操作系统。Ubuntu侧重于它在这个市场的应用,在服务器、云计算、甚至一些运行Ubuntu Linux的移动设备上很常见。Ubuntu是新手用户肯定爱不释手的一款操作系统。
红帽企业级Linux
这是第一款面向商业市场的Linux发行版。它有服务器版本,支持众多处理器架构,包括x86和x86_64。红帽公司通过课程红帽认证系统管理员/红帽认证工程师(RHCSA/RHCE),对系统管理员进行培训和认证。
CentOS
CentOS是一款企业级Linux发行版,它使用红帽企业级Linux中的免费源代码重新构建而成。这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。有些人不想支付一大笔钱,又能领略红帽企业级Linux;对他们来说,CentOS值得一试。此外,CentOS的外观和行为似乎与母发行版红帽企业级Linux如出一辙。 CentOS使用YUM来管理软件包。
Fedora
小巧的Fedora适合那些人:想尝试最先进的技术,等不及程序的稳定版出来。其实,Fedora就是红帽公司的一个测试平台;产品在成为企业级发行版之前,在该平台上进行开发和测试。Fedora是一款非常好的发行版,有庞大的用户论坛,软件库中还有为数不少的软件包。
Kali Linux
Kali Linux是Debian的一款衍生版。Kali旨在用于渗透测试。Kali的前身是Backtrack。用于Debian的所有Binary软件包都可以安装到Kali Linux上,而Kali的魅力或威力就来自于此。此外,支持Debian的用户论坛为Kali加分不少。Kali随带许多的渗透测试工具,无论是Wififi、数据库还是其他任何工具,都设计成立马可以使用。Kali使用APT来管理软件包
毫无疑问,Kali Linux是一款渗透测试工具,或者是文明黑客(我不想谈论恶意黑客)青睐的操作系统。
通过画图形象的简单认识一下操作系统
为什么有指令操作,是因为早期的操作系统中,是没有现在的图形化界面的,只有指令,而且是由打字机为雏形发展的。而我们为什么要学习指令操作呢, 因为对于我们学习OS原理、编程,指令操作非常有必要,因为指令操作更能贴近OS,便于我们更够更好的学习OS
那我们怎么创建自己的用户呢?
以下的指令可以完成——》
语法:adduser NAME
功能:添加用户
**常用选项:**无
语法:passwd NAME
功能:为添加的用户添加密码
**常用选项:**无
语法:userdel NAME
功能:删除用户
**常用选项:**userdel -r haha 递归删除,才能删干净
常用选项
man手册分为八章
语法 : ls [ 选项 ] [ 目录或文件 ]
功能 :对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用的 指令选项 :
当我们创建了一个空文件,即使里面没有数据,在磁盘中也是占据空间的。
因为文件的定义是 :文件=文件内容 + 文件属性
所以属性数据也需要保存起来,占据一定的空间。
而我们要掌握的文件操作根据文件的定义就分为两类:
当我们想看到文件的属性的时候就可以通过 ls -l 的选项进行查看
以 .开头的文件都称为隐藏文件
在任意目录下,都会存在两个隐藏文件 . (当前路径) … (上级路径)
不仅在Linux中 ,在windows系统也会有隐藏文件
所以我们可以借助 .开头,创建自己的隐藏文件
mkdir指令就是make director(创建目录)
语法 : mkdir [ 选项 ] dirname…
功能 :在当前目录下创建一个名为 “dirname” 的目录,即:创建目录
常用选项 :
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在 , 加上此选项后 , 系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录,即:在创建多层级目录的时候若上级目录不存在则创建
因为linux操作系统中路径分割符都是 /(斜杠),windows系统的路径分割符是 \ (反斜杠),所以可稍微看出来,企业的后端是Linux操作系统
语法 : pwd
功能 :显示用户当前所在的目录,即: 查看当前所处的路径
语法 :cd 目录名
功能 :改变工作目录。将当前工作目录改变到指定的目录下。
举例 :
cd … : 返回上级目录(这里的…就是上面所说的隐藏文件)
cd /home/litao/linux/ : 绝对路径
cd …/day02/ : 相对路径 举例:cd …/…/返回两层上级目录
cd ~:进入用户家目录
cd - :返回最近访问目录
Linux入口目录是 / 根目录
Linux的目录结构本质是一颗多叉树(windows目录也是多叉树)
- 1.每一个子节点,既可以是一个目录(再放目录或者普通文件,递归式的定义),也可以是一个普通文件
- 这颗多叉树的叶子节点, 一定是一个普通文件或者空目录
我们一般**”定位”,**是通过路径定位的方式,找到文件的!
因为任何一个节点,可以有多个子节点,但是任何一个子节点,都只有一个父节点
即:常规的路径定位是具有唯一性
【1】绝对路径
/home/test/test.c : 是Linux下的“ 绝对路径”:绝对路径是相对于根目录 / 的路径
【2】相对路径(目前比较常用,因为目前大部分仍是指令操作)
假设我们要找文件mytest. c,这个文件的绝对路径是: /home/poolblue/2022/test2/mytest. c
我们不仅可以用绝对路径找到他,我们还可以从test2开始通过相对路径找到他:
[yjl@bt-7274:~]$cd test1 //先进到test1
[yjl@bt-7274:~/test1]$ ls .. /test2/mytest. c //通过返回test1上级目录找test2 再找mytest.c
ls … /test2/mytest. c 就是相对路径:相对路径是相对当前所处的路径,这里就是相对test1文件的路径
建议:如果是日常使用,我们推荐相对路径——简单
如果是进行添加配置文件之类,推荐绝对路径——不会出错
语法 :touch [ 选项 ]… 文件 …
功能 : touch 命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
touch 常用选项 :
rmdir只能删除空目录, 不常用 例如:rmdir code
rm 删普通文件 例如:rm test.c
rm -r 目录 递归删除目录文件 例如:rm -r dir1
rm -rf (force)强制删除 (防止弹询问窗口) rm dir1 -rf
当dir1中包含dir2,dir2中包含dir3,dir3中包含dir4,dir4中包含dir5。删除dir1,只能用递归删除rm -r
我们创建了连续的目录 mkdir -p dir1/dir2/dir3/dir4/dir5
然后直接用 rm -r dir1 直接递归删除rm -r
m -rf * 相当于 rm -rf ./* 删除当前目录下的所有文件,*是通配符,和谁都能匹配,和哪个文件都能匹配,所以可以达到全部删除的目的
删除了 dir 当前目录下的mytest.c 、mytest2.c 的所有文件。
功能 : 复制文件或目录(类似于windows中的复制粘贴功能)
注意:
①如果在cp的时候,要拷贝的文件,是拷贝在当前路径下,两个文件的名称不能一样,如果拷贝到不同路径下,可以一样!
②默认情况,cp不允许拷贝目录的
如果需要,我们应该要携带选项-r(递归的意思)
禁止询问添加 - f: (force强制)
创建俩个目录 dir1 和dir2
dir2 下有mytest.c 文件
进入到dir2目录 将mytest.c 返回上级目录再到dir1目录进行复制
功能:把一个文件或目录移动到另一个目录中。
1.详细功能:
- 类似于剪切功能: a. 可以剪切普通文件b. 可以整体剪切目录(mv file. txt lesson3)
- 2.类似于win中的重命名,可以对普通文件,也可以对目录文件进行重命名(mv file-bak.txt file.txt-bak)
指令mv有两个功能,比如mv lesson1 lesson2,我怎么区分是剪切功能还是改名 功能?
答:就看lesson2存不存在,如果存在就是重命名,不存在则是剪切
2.常用选项:
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
将mytest1.c 剪切到 test目录
将test1 剪切到test
修改mytest1.c 为mytest2.c 修改test1目录为test2目录
cat(正序打印)
功能:打印文件内容(比较适合查看短文本,或者代码)
常用选项:*-n* *对输出的所有行编号* (主要)
-b 对非空输出行编号 (了解)
-s 不输出多行空行(了解)
tac 从文件最后一行倒着打印每一行内容,每一行内容不逆序
单独输入cat 输入什么,就返回什么
默认会从键盘(标准输入)
键盘当做文件
这样也会阻碍你命令行的操作,无法进行其他命令行操作,这样就需要热键来处理
[Ctrl]-c按键——终止失控程序
不能ctrl+z (ctrl+z是暂停任务)
如果误点ctrl+z,需要输入 fg 1,再ctrl+c 就可以退出
假如暂停了三次cat任务,用jobs显示暂停任务个数,再fg 1/2/3+ctrl c逐个终止
[Tab]按键——命令的自动补齐
[Ctrl]-c按键——终止失控程序
[Ctrl]-d按键——快速退出用户,通常代表着:『键盘输入结束(End Of File, EOF End Of Input)』的意思;另外,他也可以用来取代exit
[Ctrl]-r按键——搜索历史命令
功能:
类似cat指令,more是查看长文本;less是查看长文本并且可以上下翻(点击键盘的上下键可以上下翻,点回车可以下翻)
cnt=1; while [ $cnt -le 100000 ]; do echo “hello bit $cnt”; let cnt++; done >file.txt
此指令创建10000行代码,
代码:wc -l file.txt 用于查看文件内容的行数
进行打印内容:如果用cat打印就是刷屏,
用more打印就显示满整个屏幕就不显示了(差不多到30行),回车可以继续往下查看,再输入q退出more
输入 /1000可以直接跳到第1000行
less支持前后翻,推荐less,不推荐more。
less可以帮助我们进行查看文本,可以用它来进行日志查看!
echo “hello world” > hello. txt
> 叫:输出重定向
本来应该写入到显示器的内容,把它写入到文件中,会清空原始文件的内容,进行重新写入
功能:同上,不会清空原始内容,而是在原始文件的结尾进行新增式的写入。
echo “hello Linux” > hello. txt 会覆盖原来文件中的 “hello world”
同上,不会清空原始内容,而是在原始文件的结尾进行新增式的写入.
输入重定向,把本来应该从键盘文件中读取数据的方式,改成从指定的文件中读取
head file.txt 默认打印文件的前10行内容
head -20 file.txt 打印文件的前20行内容
tail file.txt 默认打印文件的后10行内容
tail -20 file.txt 打印文件的后20行内容
把前30020行存到一个临时文件temp.txt中(输出重定向),再打印这个文件内容的后20行(可行但麻烦)
head -30020 file.txt > temp.txt
tail -20 temp.txt
打印文本的[30000, 30020]
head -30020 file.txt | tail -20
管道相当于把 head -30020 file.txt 放进管道,再拿走管道中后20行数据
从前100行拿走后15行,再从这15行拿走前10行
head -100 file.txt | tail -15 | head -10
选项:
-i:忽略大小写(ignore)
v:凡是具有关键字的文本行,去掉,保留没有匹配关键字的行
grep '1234' file.txt
grep -i 'c++' hello.txt //显示所有包含c++或C++的整行内容,不区分大小写(默认是区分大小写的)
grep -v 'c++' hello.txt //去掉所有包含c++的一整行的内容grep -vi 'c++' hello.txt //去掉所有包含c++和C++的一整行内容(-vi / -iv 一样)
grep -niv 'c++' hello.txt
功能:更详细的说明文件类型
功能 :查找文件
比如查找头文件
功能:
压缩命令:zip——将文件打包并压缩进一个压缩包中(将目录或文件压缩成zip格式)
解压命令:unzip——将文件从压缩包中恢复出来
(zip,unzip把打包和压缩放在在一起执行)
安装:sudo yum install -y zip
zip -r test. zip tar_ package (zip 压缩文件.zip 目录或文件)
unzip test.zip (解压 test.zip ,默认到当前目录下)(默认情况下,几乎所有的解压工具
解压出来的原始数据,都会被放在当前路径下!)
-r 递归处理,将指定目录下的所有文件和子目录一起压缩
先创建一个tar_package
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yfpcsfgs-1679403842661)(…/…/AppData/Roaming/Typora/typora-user-images/image-20230103212411422.png)]
tar指令(重要):打包/解包,不打开它,直接看内容
tar -czf/- xzf -C(可选的)
使用:tar [-cxtzjvf] 文件与目录 …
bc命令可以很方便的进行浮点运算
语法: uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明: uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:
-a或–all :
详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
语法: shutdown [选项]
常见选项:
-h : 将系统的服务停掉后,立即关机。
-r : 在将系统的服务停掉之后就重新启动
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
温馨提示:使用云服务器,永远不要关机!因为云服务器关机,就会导致搭建在上面的网站或应用无法使用。如果用户无法访问,就会流失到这部分用户,对以后的公司业务营销产生影响。所以建议大家最好不要将服务器关机哈,若私人使用影响不大,但尽量不要关机。
◆ 安装和登录命令: login、 shutdown、 halt、 reboot、 install、 mount、 umount、 chsh、 exit、 last;
◆ 文件处理命令: file、 mkdir、 grep、 dd、 find、 mv、 ls、 diff、 cat、 ln;
◆ 系统管理相关命令: df、 top、 free、 quota、 at、 lp、 adduser、 groupadd、 kill、 crontab;
◆ 网络操作命令: ifconfig、 ip、 ping、 netstat、 telnet、 ftp、 route、 rlogin、 rcp、 finger、 mail、 nslookup;
◆ 系统安全相关命令: passwd、 su、 umask、 chgrp、 chmod、 chown、 chattr、 sudo ps、 who;
◆ 其它命令: tar、 unzip、 gunzip、 unarj、 mtools、 man、 unendcode、 uudecode。
Linux严格意义上说的是一个操作系统,我们称之为“内核(kernel) “ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
如何理解?为什么不能直接使用kernel?
从技术角度: Shell的最简单定义:**命令行解释器(command Interpreter)**主要包含:将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者,shell的本质就是一个死循环。
对比windows GUI(图形界面),我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
如果直接操作kernel,对用户的使用门槛高,且风险大,容易操作错误。