最新Python学习教程_Python学习路线:玩转Linux操作系统

操作系统发展史

只有硬件没有软件的计算机系统被称之为“裸机”,我们很难用“裸机”来完成计算机日常的工作(如存储和运算),所以必须用特定的软件来控制硬件的工作。最靠近计算机硬件的软件是系统软件,其中最为重要的就是“操作系统”。“操作系统”是控制和管理整个计算机系统的硬件和软件资源,合理的分配资源和调配任务,为系统用户和其他软件提供接口和环境的程序的集合。

没有操作系统(手工操作)

在计算机诞生之初没有操作系统的年代,人们先把程序纸带(或卡片)装上计算机,然后启动输入机把程序和送入计算机,接着通过控制台开关启动程序运行。当程序执行完毕,打印机输出计算的结果,用户卸下并取走纸带(或卡片)。第二个用户上机,重复同样的步骤。在整个过程中用户独占机器,CPU等待手工操作,资源利用率极低。下图是IBM生产的书写Fortran程序的80栏打孔卡,当然这个已经是比较先进的打孔卡了。

批处理系统

首先启动计算机上的一个监督程序,在监督程序的控制下,计算机能够自动的、成批的处理一个或多个用户的作业。完成一批作业后,监督程度又从输入机读取作业存入磁带机。按照上面的步骤重复处理任务。监督程序不停的处理各个作业,实现了作业的自动转接,减少了作业的建立时间和手工操作时间,提高了计算机资源的利用率。批处理系统又可以分为单道批处理系统、多道批处理系统、联机批处理系统、脱机批处理系统。

分时系统和实时系统

分时系统是把处理器的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮调度时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的感觉是他独占了一台计算机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。为了解决分时系统不能及时响应用户指令的情况,又出现了能够在在严格的时间范围内完成事件处理,及时响应随机外部事件的实时系统。

通用操作系统

1960s:IBM的System/360系列的机器有了统一的操作系统OS/360。

1965年:ATT的贝尔实验室加入GE和MIT的合作计划开始开发MULTICS。

1969年:KenTompson为了玩“SpaceTravel”游戏用汇编语言在PDP-7上开发了Unics。

4.1970年~1971年:KenTompson和DennisRitchie用B语言在PDP-11上重写了Unics,并在BrianKernighan的建议下将其更名为Unix。

5.1972年~1973年:DennisRitchie发明了C语言来取代可移植性较差的B语言,并开启了用C语言重写Unix的工作。

6.1974年:Unix推出了里程碑意义的第5版,几乎完全用C语言来实现。

7.1979年:从Unix第7版开始,ATT发布新的使用条款,将Unix私有化。

8.1987年:教授为了能在课堂上教授学生操作系统运作的细节,决定在不使用任何ATT的源代码前提下,自行开发与Unix兼容的操作系统,以避免版权上的争议并将其命名为Minix。

9.1991年:LinusTorvalds就读于芬兰赫尔辛基大学期间,尝试在Minix上做一些开发工作,但因为Minix只是作为教学用途的操作系统,功能并不强大,为了方便在学校的主机的新闻组和邮件系统中读写和下载文件,Linus编写了磁盘驱动程序和文件系统,这些成为了Linux系统内核的雏形。

(ken)

(DMR)

(ast)

下图是Unix操作系统家族的图谱。

Linux概述

Linux是一个通用操作系统。一个操作系统要负责任务调度、内存分配、处理外围设备I/O等操作。操作系统通常由内核(运行其他程序,管理像磁盘、打印机等硬件设备的核心程序)和系统程序(设备驱动、底层库、shell、服务程序等)两部分组成。

Linux系统优点

通用操作系统,不跟特定的硬件绑定。

用C语言编写,有可移植性,有内核编程接口。

支持多用户和多任务,支持安全的分层文件系统。

大量的实用程序,完善的网络功能以及强大的支持文档。

可靠的安全性和良好的稳定性,对开发者更友好。

Linux系统发行版本

Redhat

Ubuntu

CentOS

Fedora

Debian

openSUSE

基础命令

命令名称[命名参数][命令对象]

获取登录信息-w/who/last。

[root@izwz97tbgo9lkabnat2lo8z~]whorootpts/02018-04-1223:03(182.139.66.250)jackfruedpts/12018-04-1223:26(182.139.66.250)[root@izwz97tbgo9lkabnat2lo8z~]psPIDTTYTIMECMD3531pts/000:00:00bash3553pts/000:00:00ps

3.查看命令的说明-whatis。

[root@izwz97tbgo9lkabnat2lo8z~]whatispythonpython(1)-aninterpreted,interactive,object-orientedprogramminglanguage

4.查看命令的位置-which/whereis。

[root@izwz97tbgo9lkabnat2lo8z~]whereispythonpython:/usr/bin/python/usr/bin//usr/lib//usr/lib64//etc/python/usr/include//usr/share/man/man1/[root@izwz97tbgo9lkabnat2lo8z~]whichpython/usr/bin/python

5.查看帮助文档-man/info/apropos。

[root@izwz97tbgo9lkabnat2lo8z~]manpsPS(1)UserCommandsPS(1)[options]DESCRIPTION[root@izwz97tbgo9lkabnat2lo8z~]suhellokitty[hellokitty@izwz97tbgo9lkabnat2lo8zroot]$

7.以管理员身份执行命令-sudo。

[jackfrued@izwz97tbgo9lkabnat2lo8z~]$ls/rootls:cannotopirectory/root:Permissiondenied[jackfrued@izwz97tbgo9lkabnat2lo8z~]$sudols/root[sudo]passwordforjackfrued:

8.登入登出相关-logout/exit/adduser/userdel/passwd/ssh。

[root@izwz97tbgo9lkabnat2lo8z~]:Retypenewpassword:passwd:allauthenticationtokensupdatedsuccessfully.[root@izwz97tbgo9lkabnat2lo8z~]

9.查看系统和主机名-uname/hostname。

[root@izwz97tbgo9lkabnat2lo8z~]hostnameizwz97tbgo9lkabnat2lo8z[root@iZwz97tbgo9lkabnat2lo8Z~]/454clear455history[root@iZwz97tbgo9lkabnat2lo8Z~]mkdirabc[root@iZwz97tbgo9lkabnat2lo8Z~]rmdirabc

2.创建/删除文件-touch/rm。

[root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]rm-rfxyz

touch命令用于创建空白文件或修改文件时间。在Linux系统中一个文件有三种时间:更改内容的时间-mtime。更改权限的时间-ctime。最后访问时间-atime。

rm的几个重要参数:-i:交互式删除,每个删除项都会进行询问。-r:删除目录并递归的删除目录中的文件和目录。-f:强制删除,忽略不存在的文件,没有任何提示。

3.切换和查看当前工作目录-cd/pwd。

4.查看目录内容-ls。

-l:以长格式查看文件和目录。-a:显示以点开头的文件和目录(隐藏文件)。-R:遇到目录要进行递归展开(继续列出目录下面的文件和目录)。-d:只列出目录,不列出其他内容。-S/-t:按大小/时间排序。

5.查看文件内容-cat/head/tail/more/less。

[root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]/body/html[root@iZwz97tbgo9lkabnat2lo8Z~]|more

6.拷贝/移动文件-cp/mv。

[root@iZwz97tbgo9lkabnat2lo8Z~]/[root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Zbackup]lssohu_

7.查找文件和查找内容-find/grep。

[root@iZwz97tbgo9lkabnat2lo8Z~]find.-atime7-typef-print[root@izwz97tbgo9lkabnat2lo8z~]find.-typef-name"*.swp"-delete[root@iZwz97tbgo9lkabnat2lo8Z~]grep-E\\/?script.*\:script22:/script24:scriptsrc="///web/v3/static/js/"/script25:scriptsrc="///web/v3/static/js/"/script26:scriptsrc="///web/v3/static/js/"/script29:scripttype="text/javascript"52:/script

8.链接-ln。

[root@iZwz97tbgo9lkabnat2lo8Z~]ln/root//root/backup/sohu_backup[root@iZwz97tbgo9lkabnat2lo8Z~]ln/root//root/backup/sohu_backup2[root@iZwz97tbgo9lkabnat2lo8Z~]ln-s/etc/centos-releasesysinfo[root@iZwz97tbgo9lkabnat2lo8Z~](Core)[root@iZwz97tbgo9lkabnat2lo8Z~]wget()109.74.203.151()|109.74.203.151|:80,awaitingresponse200OKLength:1738465(1.7M)[application/x-gzip]Savingto:‘’100%[==================================================]1,738,46570.1KB/sin74s2018-06-2019:31:14(22.9KB/s)-‘’saved[1738465/1738465][root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]//./00-////////deps//deps//deps/[root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]wget()220.181.111.188,220.181.112.244()|220.181.111.188|:443,awaitingresponse200OKLength:7877(7.7K)[image/png]Savingto:‘bd_’100%[==================================================]7,877--.-K/sin0s2018-06-2018:46:53(118MB/s)-‘bd_’saved[7877/7877][root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]find./|wc-l6152

例子:列出当前路径下的文件和文件夹,给每一项加一个编号。

[root@iZwz97tbgo9lkabnat2lo8Z~]|grepAAA|grep-vBBB|wc-l

2.输出重定向和错误重定向-//2。

[root@iZwz97tbgo9lkabnat2lo8Z~]|sort|[root@iZwz97tbgo9lkabnat2lo8Z~]echo'hello,world!'[root@iZwz97tbgo9lkabnat2lo8Z~]Broadcastmessagefromroot@iZwz97tbgo9lkabnat2lo8Z(WedJun2019:43:052018):hello,world![root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]aliasll='ls-l'[root@iZwz97tbgo9lkabnat2lo8Z~]lldrwxr-xr-x2rootroot4096Jun2012:52abc[root@iZwz97tbgo9lkabnat2lo8Z~]unaliasfrm[root@iZwz97tbgo9lkabnat2lo8Z~]dateWedJun2012:53:19CST2018[root@iZwz97tbgo9lkabnat2lo8Z~]cal52017May2017SuMoTuWeThFrSa123456789101112819202122232425262728293031

2.录制操作脚本-script。

3.给用户发送消息-mesg/write/wall/mail。

文件系统

文件和路径

命名规则:文件名的最大长度与文件系统类型有关,一般情况下,文件名不应该超过255个字符,虽然绝大多数的字符都可以用于文件名,但是最好使用英文大小写字母、数字、下划线、点这样的符号。文件名中虽然可以使用空格,但应该尽可能避免使用空格,否则在输入文件名时需要用将文件名放在双引号中或者通过\对空格进行转义。扩展名:在Linux系统下文件的扩展名是可选的,但是使用扩展名有助于对文件内容的理解。有些应用程序要通过扩展名来识别文件,但是更多的应用程序并不依赖文件的扩展名,就像file命令在识别文件时并不是依据扩展名来判定文件的类型。隐藏文件:以点开头的文件在Linux系统中是隐藏文件(不可见文件)。

目录结构

/bin-基本命令的二进制文件。

/boot-引导加载程序的静态文件。

/dev-设备文件。/etc-配置文件。

/home-普通用户主目录的父目录。

/lib-共享库文件

/lib64-共享64位库文件。

/lost+found-存放未链接文件。

/media-自动识别设备的挂载目录。

/mnt-临时挂载文件系统的挂载点。

/opt-可选插件软件包安装位置。

/proc-内核和进程信息。

/root-超级管理员用户主目录。

/run-存放系统运行时需要的东西。

/sbin-超级用户的二进制文件。

/sys-设备的伪文件系统。

/tmp-临时文件夹。

/usr-用户应用目录。

/var-变量数据目录。

访问权限

chmod-改变文件模式比特。

[root@iZwz97tbgo9lkabnat2lo8Z~]chmodg+w,o+[root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]ls-l-rw-r--r--1rootroot54Jun2010:06[root@iZwz97tbgo9lkabnat2lo8Z~]ls-l-rw-r--r--1hellokittyroot54Jun2010:06

磁盘管理

列出文件系统的磁盘使用状况-df。

[root@iZwz97tbgo9lkabnat2lo8Z~]fdisk-lDisk/dev/vda:42.9GB,42949672960bytes,83886080sectorsUnits=sectorsof1*512=512bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytesDisklabeltype:dosDiskidentifier:0x000a42f4DeviceBootStartBlocksIdSystem/dev/vda1*20488388403LinuxDisk/dev/vdb:21.5GB,21474836480bytes,41943040sectorsUnits=sectorsof1*512=512bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytes

3.格式化文件系统-mkfs。

4.文件系统检查-fsck。

5.挂载/卸载-mount/umount。

编辑器-vim

启动vim。可以通过vi或vim命令来启动vim,启动时可以指定文件名来打开一个文件,如果没有指定文件名,也可以在保存的时候指定文件名。

[root@iZwz97tbgo9lkabnat2lo8Z~]

打开多个文件。

[root@iZwz97tbgo9lkabnat2lo8Z~]yum-yinstallnginxInstalled:_641:1.12.2-2.el7DepencyInstalled::1.12.2-2._641:1.12.2-2._641:1.12.2-2._641:1.12.2-2._641:1.12.2-2._641:1.12.2-2._641:1.12.2-2.el7Complete![root@iZwz97tbgo9lkabnat2lo8Z~]nginx-vnginxversion:nginx/1.12.2

移除Nginx。

[root@iZwz97tbgo9lkabnat2lo8Z~]yum-yremovenginx

下面以MySQL为例,演示如何使用rpm安装软件。要安装MySQL需要先到MySQL官方网站下载对应的RPM文件,当然要选择和你使用的Linux系统对应的版本。MySQL现在是Oracle公司旗下的产品,在MySQL被收购后,MySQL的作者重新制作了一个MySQL的分支MariaDB,可以通过yum进行安装。如果要安装MySQL需要先通过yum删除mariadb-libs这个可能会跟MySQL底层库冲突的库,然后还需要安装一个名为libaio的依赖库。

[root@iZwz97tbgo9lkabnat2lo8Zmysql]yum-yremovemariadb-libs[root@iZwz97tbgo9lkabnat2lo8Zmysql]ls|xargsrpm-ivhwarning:_64.rpm:HeaderV3DSA/SHA1Signature,keyID5072e1f5:NOKEYPreparingrpm-qa|grepmysql|xargsrpm-e

下载解压配置环境变量

下面以安装MongoDB为例,演示这类软件应该如何安装。

[root@iZwz97tbgo9lkabnat2lo8Z~]gunzipmongodb-linux-x86_64-[root@iZwz97tbgo9lkabnat2lo8Z~]_profilePATH=$PATH:$HOME/bin:$HOME/mongodb-linux-x86_64-/binexportPATH[root@iZwz97tbgo9lkabnat2lo8Z~]:a20ecd3e3a174162052ff99913bc2ca9a839d618OpenSSLversion::tcmallocmodules:nonebuildenvironment:distmod:rhel70distarch:x86_64target_arch:x86_64[root@iZwz97tbgo9lkabnat2lo8Z~]yuminstallgcc[root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel[root@iZwz97tbgo9lkabnat2lo8Z~]ln-s/usr/local/python36/bin//usr/bin/python3[root@iZwz97tbgo9lkabnat2lo8Z~]python3-mpipinstall-Upip[root@iZwz97tbgo9lkabnat2lo8Z~]wget[root@iZwz97tbgo9lkabnat2lo8Z~][root@iZwz97tbgo9lkabnat2lo8Z~]makemakeinstall[root@iZwz97tbgo9lkabnat2lo8Z~]
配置服务

启动服务。

[root@iZwz97tbgo9lkabnat2lo8Z~]systemctlstopfirewalld

3.重启服务。

[root@iZwz97tbgo9lkabnat2lo8Z~]systemctlstatusfirewalld

5.设置是否开机自启。

[root@iZwz97tbgo9lkabnat2lo8Z~]systemctldisablefirewalldRemovedsymlink/etc/systemd/system///etc/systemd/system/
计划任务

crontab命令。

[root@iZwz97tbgo9lkabnat2lo8Z~]cd/etc[root@iZwz97tbgo9lkabnat2lo8Zetc]vimcrontab1SHELL=/bin/bash2PATH=/sbin:/bin:/usr/sbin:/usr/bin3MAILTO=root45Exampleofjobdefinition:8|.-------------hour(0-23)10|||.-------month(1-12)ORjan,feb,mar,apr12|||||14ifconfigeth0eth0:flags=4163UP,BROADCAST,RUNNING,:16:3e:02:b6:46txqueuelen1000(Ethernet)RXpackets1067841bytes1296732947(1.2GiB)RXerrors0dropped0overruns0frame0TXpackets409912bytes43569163(41.5MiB)TXerrors0dropped0overruns0carrier0collisions

3.显示/操作网络配置(新)-ip。

[root@iZwz97tbgo9lkabnat2lo8Z~](220.181.111.188)56(84)(220.181.111.188):icmp_seq=1ttl=51time=36.3(220.181.111.188):icmp_seq=2ttl=51time=36.4(220.181.111.188):icmp_seq=3ttl=51time=36.4,3received,0%packetloss,time2002msrttmin/avg/max/mdev=36.392/36.406/36.427/0.156ms

5.查看网络服务和端口-netstat。

[root@iZwz97tbgo9lkabnat2lo8Z~]scproot@1.2.3.4:/root/@4.3.2.1:/home/hellokitty/

7.安全文件传输-sftp。

[root@iZwz97tbgo9lkabnat2lo8Z~]ps-efUIDPIDPPIDCSTIMETTYTIMECMDroot100Jun23?00:00:05/usr/lib/systemd/systemd--switched-root--system--deserialize21root200Jun23?00:00:00[kthreadd][root@iZwz97tbgo9lkabnat2lo8Z~]kill1234[root@iZwz97tbgo9lkabnat2lo8Z~]mongod[root@iZwz97tbgo9lkabnat2lo8Z~]jobs[2]Runningmongod[3]-Stoppedcat[4]+Stoppedredis-server

5.bg-让进程在后台继续运行。

[root@iZwz97tbgo9lkabnat2lo8Z~]jobs[2]Runningmongod[3]+Stoppedcat[4]-Runningredis-server

6.fg-将后台进程置于前台。

[root@iZwz97tbgo9lkabnat2lo8Z~]Userrequestedshutdown5554:M26Jun23:01:21.413*:M26Jun23:01:21.415*DBsavedondisk5554:M26Jun23:01:21.415toptop-23:04:23up3days,14:10,1user,loadaverage:0.00,0.01,0.05Tasks:65total,1running,64sleeping,0stopped,0zombie%Cpu(s):0.3us,0.3sy,0.0ni,99.3id,0.0wa,0.0hi,0.0si,0.0stKiBMem:1016168total,191060free,324700used,500408buff/cacheKiBSwap:0total,0free,0
系统性能

查看系统活动信息-sar。

2.查看内存使用情况-free。

[root@iZwz97tbgo9lkabnat2lo8Z~]psPIDTTYTIMECMD4581pts/000:00:00bash5664pts/000:00:00ps[root@iZwz97tbgo9lkabnat2lo8Z~]_64(iZwz97tbgo9lkabnat2lo8Z)06/26/2018_x86_64_(1CPU)avg-cpu:%user%nice%system%iowait%steal%:tpskB_read/skB_wrtn/skB_readkB_