初章Linux
操作系统(Operation System,简称OS)
操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。裸机没有安装操作系统的计算机被称为裸机
1.个人计算机 PC( personal computer ) 操作系统
Windows 系列
MacOS
Linux
2.服务器操作系统
Linux
Windows
3.嵌入式以及移动设备操作系统
Linux (嵌入式)
iOS (基于 Unix)
Android (基于 Linux)
操作系统发展史
几个改变世界的人
Unix的诞生
大事件:
1965年 ,人类为了研发一个多用途,多用户的操作系统。有三个著名的公司联合起来进行研发。贝尔实验室、通用电器公司(General Electrics;G.E.)及麻省理工学院(Massachusetts Institute of Technology;MIT)。
1969年 由于项目渐渐迷失了方向(估计是 进度缓慢 然后 资金短缺) 最终 贝尔实验室(Bell Labs)退出了这个项目。
1969年 肯.汤姆逊 为了他的游戏(Space Travel)星际旅游能够跑起来 找到了一台被淘汰的电脑 pdp-7 花了一个月的时间,写出了一个伟大的操作系统 Unix 的原型 肯的另一个同事丹尼斯.里奇对Unix有着很大兴趣,他就在当时的一门高级语言 BCPL 的基础上开发了一种新的高级语言将Unix重新写了一遍.这个语言也就是后来大名鼎鼎的C语言
1969年8月 芬兰一个叫做林纳斯 Linus.Torvalds的婴儿来到了这个世界。
尽管是为了一款游戏 . 但是事实就是如此 Unix和C诞生了,C与Unix很快成为全世界的主导开启了操作系统的新历史
由于Unix是开源的,这使得Unxi的功能和特性很快的被丰富. 贝尔实验室隶属于 AT&T公司(美国电话及电报公司).公司很快看到了商机.将Unix私有化,并注册Unix商标.这时的Unix价格非常的昂贵. 此时很多公司也都分分投靠 AT&T 并开发自己的Unxi版本.其中有著名的IBM公司.
Windows 和 MacOS 的恩恩怨怨
毫无疑问,Unix的诞生,对与计算机的发展起到了至关重要的作用。 时光来到了1975年,IBM的一个市场总监做了一个大胆的预测.他预测大概在20世纪末世界上个人计算机的数量将会普及 那么这个预测就促使IBM开始进军个人电脑市场!那么就是因为这个大胆的假设和IBM的决定!!成就了世界两个巨无霸企业 由于当时Unix价格昂贵,IBM一台个人电脑造价2w美元,操作系统都要花4w。所以IBM不得不放弃Unix. 但是操作系统与CPU又有着直接的关系,不同的cpu运行的操作系统是不一样的。而当时的主流CPU都是兼容Unix操作系统的.所以IBM只能选择一家小公司来生产cpu.这家公司就是Inter!!(没错,当时他还只是一个小公司)
当IBM拥有了CPU之后.微软的创始人 比尔盖茨 花了5W美金 买下了他同学利用一个月的时间写的操作系统.对方欣喜若狂,简直快要疯了!! 比尔盖茨得到之后,将这个操作系统 命名为DOS .并且带上操作系统.找到了他妈妈 .当时是IBM董事会的成员.然后与IBM签订了合约!! 那么他的同学这时候就真的疯了!! 由于IBM需要廉价的计算机。微软可以提供廉价的DOS系统.所以顺水推舟 .但是聪明 的比尔盖茨 不是卖操作系统,而是卖操作系统的许可。每台IBM兼容机都捆绑一个DOS。比尔盖茨的招数就是捆绑,从dos到IE都是如出一辙,当然特别奏效。IBM认为硬件才是赚钱的根本,所以才会和年轻比尔盖茨合作.结果电脑进入市场,反响非常好,比尔盖茨也就成为了千万富豪!!
在市场的另一边 另外一小伙子在一个车库成立了一家公司! 他也在卖 电脑 .这个人就是 乔布斯 当时乔布斯的苹果公司 采用的是unix 操作系统 后期发展为MacOS .由于 乔布斯 对产品的卓越追求,让他不断的改进Apple的电脑,震撼了整个个人电脑市场,因此乔布斯身价过亿 Apple蒸蒸日上,比尔盖茨 不爽了! 不可否认乔布斯 和 比尔盖茨 他们都很伟大 但是不同的是 比尔盖茨 更 狡猾!! 有一天比尔盖茨 找到了乔布斯,大加赞赏了他的伟大,然后卑微的祈求一份Apple的产品原型,并承诺微软的一切成果都是苹果的。不可一世的乔布斯答应了,比尔盖茨得到了产品原型机,马上组织团队研发, 并在1990年5月份推出Windows3.0!!!从而开始了微软在操作系统上的垄断地位。 也是从这一刻开始,微软 和 苹果的 血海深仇 就此结下
Linux的传奇
那么在 微软的Windows 和 苹果的 MacOS 大战的时候.. Unix在干嘛呢?? Unix正忙着打官司,然后一直卖着它 昂贵的操作系统 也正是这些时间,错过了个人计算机 操作系统发展的黄金时间!
Minix
那么时间 来到了 1991年 !! 还记得22年前在 芬兰出生的那个男孩吗?林纳斯 他现在正在读大学.学校有一门课程叫做<操作系统>,但是由于 Unix的闭源 林纳斯的大学教授就没法讲课了. 但是那个年代的大牛 就是这么牛逼 .这个教授一狠心 就自己写了一个操作系统,用来上课. 这个操作系统具备了Unix的基本功能, 由于比较小巧 所以叫做 Minix
Linux诞生
但是Minix 和一开始的 Unix 一样.不具备移植性 在其他的机器上面 没法安装. 而 林纳斯 有一台自己的电脑,却不能将Minix运行在自己的电脑上,所以 林纳斯 也不得不走上了他无数前辈的道路,自己写一个操作系统! 仅仅两个月后 林纳斯 就完成了第一个版本的操作系统.并通过自己的名字命名.叫做Linux . 随后他将源码上传到网络.让大家一起来完善其功能.可是那时的Linux一直只流行在在大学的校园. 那么Linux是如何推广到全球,最终 成为 操作系统 的 王者的呢? 这里就不得不提到一个人!! ESR 埃里克·雷蒙德(Eric Raymond)
GNU和Linux的结合
雷蒙德 是何许人也? 著名的黑客
有一部纪录片Revolution OS(操作系统革命) 这样描述的
在一次开发者大会上,雷蒙德 遇到一个微软工程师,他看到对方衣服上的标志 就问他是不是在微软工作.
那位工程师 略带一点 嘲讽和鄙视 就反问 雷蒙德 你是干什么的
雷蒙德 微微一笑 留下了一句很牛逼的话:我 是你们可怕的恶梦。。。
当然雷蒙德 是微软的恶梦吗?不 他 不仅仅是 微软的噩梦 ,他 是一切收费软件公司的恶梦。
微软靠卖软件大发特发。这让雷蒙德很不满
他认为所有软件都应该*的让人们使用。
所以 1983年,雷蒙德 发起了“GNU(GNU’s Not Unix的递归缩写)”计划
GNU激发了软件界极大的热情,世界各地的软件奇才全部加入进来。
开发出很多优秀的软件 比如 C语言编译器,gcc 等等
而且 很多免费软件的水平甚至都已经超过了相应的付费版本。
可是还有一个问题没有解决
GNU编写了很多*免费的软件,可是这些免费软件却运行在收费 的Unix上
所以雷蒙德 这个时候就很郁闷.. 然后承诺大家两年内重新写一个操作系统,但是 黑客是不愿意按部就班做事的
就这样 五年时间 过去了,操作系统还没出来!!
当然 历史总是如此的巧合!!雷蒙德 懊恼没有操作系统
而 芬兰那边,林纳斯 只有一个操作系统内核 Linux 而没有相应的应用软件。
他们在各自的领域奋斗多年之后,命运终于安排他们走到了一起 最终 Linux 加入了 GNU 计划!!
然后,整个世界都变了!!
今天在全球前500台超级计算机中,有413台选用Linux。这些计算机遍布世界各地的多个行业,大到航天科技,小到IC卡芯片,全都由Linux所主宰。
在移动领域,Android 就是 Linux 内核.
服务器也是Linux独领风骚!
Linux就像病毒一样,在一群黑客手中,席卷全球!
我,是你们可怕的噩梦! Linux已然完成对微软的复仇!
它是一个标志! 是一群黑客追求*,共享所开启的一个新的时代!!接下来让我们踏上 Linux 的学习之旅...
001-Linux简介
Linux 内核以及发行版
Linux内核(kernel)
操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。 Linux 内核版本又分为 稳定版 和 开发版,两种版本是相互关联,相互循环
稳定版:具有工业级强度,可以广泛地应用和部署。
开发版:由于要试验各种解决方案,所以变化很快
内核源码网址:http://www.kernel.org
Linux发行版
Linux 发行版:我们常说的Linux操作系统,也是由Linux内核与各种常用软件的集合产品. 类似Windows包含了桌面环境.全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和目标人群.
Ubuntu(乌班图)
Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,主要依赖Canonical有限公司的支持,同时也有很多来自Linux社区的热心人士提供协助。 作为Linux发行版之一.Canonical 的Ubuntu 胜过其他所有的 Linux 服务器发行版 ,它简单易用同时又相当稳定,而且具有庞大的社区力量,用户可以方便地从社区获得帮助.Ubuntu在服务器领域是妥妥的赢家.
Ubuntu的目录结构
Ubuntu的目录结构
Ubuntu的主要目录
/:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始
/bin、/usr/bin:可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等
/boot:放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub
/dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt
/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有
/etc/inittab
/etc/fstab
/etc/init.d
/etc/X11
/etc/sysconfig
/etc/xinetd.d
/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
~ 表示当前用户的家目录
~edu 表示用户 edu 的家目录
/lib、/usr/lib、/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助
/lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下
/mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载
/opt:给主机额外安装软件所摆放的目录
/proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的文件有:/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等
/root:系统管理员root的家目录
/sbin、/usr/sbin、/usr/local/sbin:放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用
/tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内
/usr:应用程序存放目录
/usr/bin:存放应用程序
/usr/share:存放共享数据
/usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
/usr/local:存放软件升级包
/usr/share/doc:系统说明文件存放目录
/usr/share/man:程序说明文件存放目录
/var:放置系统执行过程中经常变化的文件
/var/log:随时更改的日志文件
/var/spool/mail:邮件存放的目录
/var/run:程序或服务启动后,其 PID 存放在该目录下
Ubuntu的常见快捷键
可以在System Setting -> Keyboard -> Shortcuts中查看各种快捷键.
终端: Ctrl+Alt+T
终端新建标签页: Ctrl+Shift+T
终端复制粘贴: Ctrl+Shift+C, Ctrl+Shift+V
显示常用快捷键: 按住Super(Win)不动
截活动窗口图: Alt+Print
区域截图: Shift+Print
源切换: Super(Win)+Space
安装: sudo apt-get install
卸载: sudo apt-get remove
移除没用的包: sudo apt-get autoremove
Ubuntu的常见设置
首先语言设置
通过右上角的 设置按钮 找到System Settings...
然后选中Language Support 项
注意Ubuntu的语言选项有多种语言.将第一语言设置为中文(因为如果中文显示不了的,会使用英文显示)
拖动成为第一语言
设置完成后.选择Apply System-wide(应用到整个系统)这时,输入管理员密码以确认.最后点击 Close 按钮关闭对话框,重启电脑。
注意:重启成功后,会让你选择文件夹名称显示.如果是为了学习.我建议大家保持原来的文件夹名称,这样便于后期在学习中熟悉Linux目录结构. 选择Keep Old Names
选择目录显示
Launcher(菜单栏)设置
在系统设置中,找不到菜单栏的位置设置.所以只能通过终端命令进行设置
菜单栏靠左(注意参数首字母大写)
$ gsettings set com.canonical.Unity.Launcher launcher-position Left
菜单栏靠下
$ gsettings set com.canonical.Unity.Launcher launcher-position Bottom
Ubuntu常用软件
设置软件源: 默认的软件源是官方的, 速度慢的令人发指, 所以需要先设置一个速度较快的软件源, System Settings -> Software & Updates -> Ubuntu Software -> Download from选择Others, 然后自动选择一个网速比较快的服务器(多半是某个大学的)即可:
apt(Advanced Packaging Tool) 安装/卸载软件 (Ctrl+Alt+T 调出终端)
安装软件
$ sudo apt install 软件包
卸载软件
$ sudo apt remove 软件名
更新已安装的包
$ sudo apt upgrade 或者 sudo apt-get upgrade
升级
sudo apt-get update.
那么由于有些Ubuntu中没有自带vim 而是 vi 这个古老的编辑器.所以我们需要安装vim
sudo apt-get install vim
在安装过程中有可能出现下列错误 vim : 依赖: vim-common (= 2:7.4.826-1ubuntu1) 但是 2:7.4.1689-3ubuntu1.1 正要被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
解决方案:
sudo apt-get remove vim-common
sudo apt-get install vim
002--Linux终端命令简介
终端命令格式
在我们开始学习一些常见的终端命令之前,我们先对Linux终端命令的格式有个了解。
command [-options] [parameter]
command |
[-options] |
[parameter] |
命令名称 |
选项 |
传递给命令的参数 |
[ ] 代表内容可选填
那么这些命令的选项和参数在哪里找到呢?接下来我们介绍两个非常有用的命令。
help&&man
--help
command --help 显示command 命令的帮助信息
man
man command 查询command 命令的使用手册
man 是manual的缩写,是Linux提供的手册。
手册中的操作按键
操作按键 |
功能 |
空格键 |
显示下一页 |
回车键 |
显示下一行 |
b |
back,显示上一页 |
f |
forward,向前和空格效果一样 |
q |
quit,退出 |
最常用的Linux命令
有了上面的基本常识之后,我们终于可以开始尝试Linux的命令了!接下来给大家介绍几个简单的命令。
命令 |
功能 |
ls |
list,列表显示当前目录下的内容 |
pwd |
print wrok directory ,查看当前所在路径 |
cd+空格+路径名称 |
change directory,跳转到指定路径 |
touch+空格+文件名称 |
创建这个文件 |
mkdir+空格+文件夹名称 |
make directory, 创建这个文件夹 |
rm+空格+文件名 |
remove,删除指定的文件 |
clear |
清屏 |
终端常用快捷键速查表
快捷键 |
功能 |
Tab |
自动补全 |
ctrl + shift + + |
放大字体 |
ctrl + - |
缩小字体 |
Ctrl + Alt + t |
打开终端窗口 |
Ctrl + a |
光标移动到开始位置 |
Ctrl + e |
光标移动到最末尾 |
Ctrl + k |
删除此处至末尾的所有内容 |
Ctrl + u |
删除此处至开始的所有内容 |
Ctrl + d |
删除当前字符 |
Ctrl + h |
删除当前字符前一个字符 |
Ctrl + w |
删除此处到左边的单词 |
Ctrl + y |
粘贴由Ctrl+u, Ctrl+d, Ctrl+w删除的单词 |
Ctrl + l |
相当于clear,即清屏 |
Ctrl + r |
查找历史命令 |
Ctrl + b |
向回移动光标 |
Ctrl + f |
向前移动光标 |
Ctrl + t |
将光标位置的字符和前一个字符进行位置交换 |
Ctrl + & |
恢复 ctrl+h 或者 ctrl+d 或者 ctrl+w 删除的内容 |
Ctrl + S |
暂停屏幕输出 |
Ctrl + Q |
继续屏幕输出 |
Ctrl + ← |
光标移动到上一个单词的词首 |
Ctrl + → |
光标移动到下一个单词的词尾 |
Ctrl + p |
向上显示缓存命令 |
Ctrl + n |
向下显示缓存命令 |
Ctrl + d |
关闭终端 |
Ctrl + c |
终止进程/命令 |
Shift + 上或下 |
终端上下滚动 |
Shift + PgUp/PgDn |
终端上下翻页滚动 |
Ctrl + Shift + n |
新终端 |
alt + F2 |
输入gnome-terminal打开终端 |
Shift + Ctrl + T |
打开新的标签页 |
Shift + Ctrl + W |
关闭标签页 |
Shift + Ctrl + C |
复制 |
Shift + Ctrl + V |
粘贴 |
Alt + 数字 |
切换至对应的标签页 |
Shift + Ctrl + N |
打开新的终端窗口 |
Shift + Ctrl + Q |
管壁终端窗口 |
Shift + Ctrl + PgUp/PgDn |
左移右移标签页 |
Ctrl + PgUp/PgDn |
切换标签页 |
F1 |
打开帮助指南 |
F10 |
激活菜单栏 |
F11 |
全屏切换 |
Alt + F |
打开 “文件” 菜单(file) |
Alt + E |
打开 “编辑” 菜单(edit) |
Alt + V |
打开 “查看” 菜单(view) |
Alt + S |
打开 “搜索” 菜单(search) |
Alt + T |
打开 “终端” 菜单(terminal) |
Alt + H |
打开 “帮助” 菜单(help) |
003--Linux常用命令的常见选项
接下来对于几个上一章所讲解的常用命令的选项和参数进行一个简单的扩展。其实后期大家在学习和工作中用到其他的命令,我们完全可以自己在互联网上查询资料。那么前期,我带着大家入门。
ls命令
ls是英文单词list的缩写,他的功能是列出当前目录下的文件列表,是非常常见的Linux命令之一。
Linux下目录特点
以 . 开头的文件是隐藏文件,使用ls查看时,需要加上 -a(all)参数才能显示。
.代表当前目录 ..代表上一级目录(可以理解为隐藏的两个文件路径)。我们常用cd..跳到上一级目录。
ls常用选项
选项 |
功能 |
[-a] |
all,显示所有内容,包含隐藏文件 |
[-l](字母L小写) |
显示文件详细信息 |
[-h] |
human-readable,需要配合-l(字母L小写)选项,所谓的人性化显示 |
ls配合通配符
通配符 |
功能 |
* |
代表任意多个任意字符,可以没有字符 |
? |
代表就是一个任意字符,至少一个字符 |
[ ] |
代表一个字符,取值范围在[ ]中 |
[1234 ] |
匹配1,2,3,4中的任意一个 |
[a-g] |
匹配从a到g范围内的任意一个 |
cd命令
cd是英文单词 change directory 的缩写,其功能就是跳转目录。 它与之前的几个命令不同的是,cd是BASH内置命令,没有帮助文档与相关手册。 所以在使用$which cd的时候是看不到它的二进制路径的。因为系统中不存在 cd 命令的二进制文件。
注意:Linux下 目录名称 以及 文件名称 大小写是有区别的!
命令 |
功能 |
cd |
切换到当前用户的家目录(home/用户名) |
cd ~ |
和 cd 效果一样 |
cd .. |
跳转到上一级目录 |
cd - |
在最近两个目录来回切换,有点像图形界面的 Alt + Tab切换窗口的感觉 |
cd后面的路径可以是两种 相对路径 和 绝对路径
相对路径是指相对当前目录的路径
绝对路径是指全路径。可以从 /(根目录)开始,或者是~(家目录)开始。
mkdir命令
创建一个新的目录
选项 |
功能 |
[-p] |
可以递归创建目录 |
新建的目录名称不能重名
rm命令
删除文件或目录
选项 |
功能 |
[-f] |
强制删除,忽略不存在的文件,无需提示 |
[-r] |
递归删除目录下的内容,删除文件夹就用这个选项 |
cp命令
拷贝文件或者目录,类似DOS中的copy
$cp 源文件 目标文件
选项 |
功能 |
[-i] |
interactive互动,说白了就是覆盖文件时有提示 |
[-r] |
如果cp跟上的时目录,那么将会递归拷贝目录下的所有子目录和文件 |
mv命令
mv是move的缩写 用来 移动文件/目录
小技巧:如果需要重命名,也可以使用mv命令覆盖当前文件/目录 达到效果
选项 |
功能 |
[-i] |
interactive,覆盖文件时有提示 |
tree命令
tree命令可以将目录结构显示出来(树状显示)
选项 |
功能 |
[-d] |
directory,只显示目录 |
有的同学系统中默认没有此命令。所以会提示:
提示
你看写得多清楚,在Ubuntu下使用apt安装。
$ sudo apt-get install tree
查看文件内容相关命令
命令 |
功能 |
cat 文件名 |
concatenate,查看文件内容、创建文件、文件合并、追加文件内容等 |
more 文件名 |
more,分屏显示文件内容(内容多一般用more) |
grep 搜索内容 文件名 |
grep,搜索文件内容 |
cat
查看文件内容、创建文件、文件合并、追加文件内容等
命令会一次性显示所有内容,所以适合查看内容较少的文件
选项 |
功能 |
[-b] |
显示每一行的行号 |
[-n] |
只显示有内容的行号,空行不算一行 |
more
此命令可以分屏显示文件内容,每次只显示一页内容。所以适合查看内容多的文件。 使用more的操作按键
操作按键 |
功能 |
空格键 |
显示下一页 |
回车键 Enter |
显示下一行 |
b |
back,显示上一页 |
f |
forward,向前和空格效果一样 |
q |
quit,退出 |
/ 搜索文字 |
搜索文本中的内容 |
grep
(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
选项 |
功能 |
[-n] |
line-number,显示匹配行及行号 |
[-v] |
invert-match,选中不匹配的行 |
[-i] |
ignore-case,忽略大小写 |
grep常用查找方式
在file_name中 搜索Hello_world这个单词
$grep Hello_world file_name
$grep "Hello_world" file_name
在多个文件中查找
grep "Hello_world" file_1 file_2 file_3 ...
常用两种模式查找
参数 |
功能 |
^hello |
行首,搜索以hello开头的行 |
world$ |
行尾,搜索以world结束的行 |
几个常用符号
重定向符号
Linux中允许将命令执行结果 重定向到一个文件
将本应该显示在终端上的内容 输出/追加 到指定文件中
符号 |
功能 |
> |
输出重定向到一个文件或设备 覆盖原来的文件 |
>> |
输出重定向到一个文件或设备 追加原来的文件 |
echo会在终端中显示参数指定的文字,通常会和 重定向 联合使用
管道符号 |
Linux 允许将 一个命令的输出 可以 通过管道 做为 另外一个命令的输入
command 1 | command 2 | command 3 … …
004--远程操作命令
关机重/启命令
shutdown命令可以安全关闭 或者 重新启动系统,直接使用 shotdown命令,默认表示1分钟后关机. 命令格式:
$shutdown [选项] <参数>
选项 |
功能 |
[-r] |
重新启动 |
[-c] |
取消之前的关机计划 |
参数
[时间]:设置多久时间后执行shutdown指令;
[警告信息]:要传送给所有登入用户的信息。
示例
一分钟以后关机
$shutdown
立刻关机
$shutdown now
在今天的21:30关机
$shutdown 21:30
10分钟以后关机
$shutdown +10
10分钟以后关机,同时发出警告信息
$shutdown +10 "System will shutdown after 10 minutes"
取消关机计划
$shutdown -c
reboot命令也可以用来重新启动正在运行的Linux操作系统。 和 shutdown -r now一样
网络配置命令
命令 |
功能 |
ifconfig |
configure a network interface,查看/配置计算机当前的网卡信息 |
ping |
测试目标ip地址的连接是否正常 |
ifconfig命令
ifconfig命令被用于配置和显示Linux中网卡信息。 查看网卡信息
$ifconfig
快速定位IP地址
$ifconfig | grep inet
一台计算机中可能会有一个 物理网卡 和 多个虚拟网卡,在Linux中物理网卡名字一般是 ensXX
127.0.0.1这个地址是一个比较特殊的地址,称之为本地回环地址,可以用来测试本机网卡是否正常工作。
ping命令
ping命令用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息。一般用于检测计算机之间的网络通讯是否正常。
由于ping命令的工作原理,服务器人员给往往将ping用作动词。经常说:“ping一下某某计算机”
示例:
“ping”目标主机
$ping IP地址
检测本地网卡是否正常
$ping 127.0.0.1
结束ping的执行使用Ctrl+C。在Linux中终止一个终端程序绝大多数都可以使用Ctrl+C
SSH(Secure Shell)
简单说,SSH是一种网络协议,用于计算机之间的加密登录。 最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
OpenSSH
SSH只是一种协议,存在多种实现OpenSSH就是其中一种,它是一款软件,应用非常广泛在Mac以及Ubuntu中都自带OpenSSH。
SSH的登录过程
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
SSH客户端命令
ssh [-p port] user@remote
user 是远程端上的用户名,默认是当前用户
remote是远程端的地址,可以是IP/域名
port是远程端的端口,默认是22
Ubuntu下开启SSH
Ubuntu下SSH分
openssh-client(客户端)
openssh-server (服务端)
检测是否有开启ssh服务
hank@ubuntu:~$ ps -e | grep ssh
4910 ? 00:00:00 sshd
其中sshd 为server端的守护进程,如果没有出现sshd,那么很有可能你的系统中没有安装server端。或者ssh服务没有启动。
开启ssh服务
hank@ubuntu:~$ sudo /etc/init.d/ssh start
[ ok ] Starting ssh (via systemctl): ssh.service.
安装openssh-server
如果显示上述命令找不到。那么是因为我们的Ubuntu系统默认没有服务端,所以可以通过下面命令安装。 $ sudo apt-get install openssh-server
可能出现错误
$ sudo apt-get install openssh-server
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
openssh-server : 依赖: openssh-client (= 1:7.1p1-4)
依赖: openssh-sftp-server 但是它将不会被安装
推荐: ssh-import-id 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
因为openssh-server 需要依赖openssh-client,但是很明显,我们系统自带的版本和目前要安装的server版本不同。所以我们重新安装一下client版本。
hank@ubuntu:~$ sudo apt-get install openssh-client=1:7.1p1-4
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
建议安装:
ssh-askpass libpam-ssh keychain monkeysphere
下列软件包将被【降级】:
openssh-client
升级了 0 个软件包,新安装了 0 个软件包,降级了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 581 kB 的归档。
解压缩后将会空出 36.9 kB 的空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirror.neu.edu.cn/ubuntu xenial/main amd64 openssh-client amd64 1:7.1p1-4 [581 kB]
已下载 581 kB,耗时 33秒 (17.6 kB/s)
dpkg:警告:即将把 openssh-client 从 1:7.2p2-4 降级到 1:7.1p1-4
正在将 openssh-client (1:7.1p1-4) 解包到 (1:7.2p2-4) 上 ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在设置 openssh-client (1:7.1p1-4) ...
正在安装新版本配置文件 /etc/ssh/ssh_config ...
这样可以看到降级成功。然后我们再次安装openssh-server就OK了!
hank@ubuntu:~$ sudo apt-get install openssh-server
SCP(Secure copy)
scp scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。
命令格式
scp -P port 源文件路径 目标文件路径
# 将本地目录下的123.txt拷贝到远程桌面目录下
$scp -P port 123.txt user@remote:Desktop/123.txt
# 把远程桌面目录下的123.txt文件 复制到 本地当前目录下
scp -P port user@remote:Desktop/123.txt 123.txt
# 加上 -r 选项可以传送文件夹
# 把当前目录下的 demo 文件夹 复制到 远程 家目录下的 Desktop
scp -r demo user@remote:Desktop
# 把远程 家目录下的 Desktop 复制到 当前目录下的 demo 文件夹
scp -r user@remote:Desktop demo
选项 |
功能 |
-r |
若给出的源文件是目录文件,则 scp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名 |
-P |
若远程 SSH 服务器的端口不是 22,需要使用大写字母 -P 选项指定端口 |
SSH常用配置
免密登陆
配置公钥 执行 ssh-keygen 即可生成 SSH 钥匙,一路回车即可
上传公钥到服务器 执行 ssh-copy-id -p port user@remote,可以让远程服务器记住我们的公钥
配置别名
每次都输入ssh -p port user@remote,非常不方便,而且还不好记忆
而 配置别名 可以让我们进一步偷懒,譬如用:ssh mac 来替代上面这么一长串,那么就在 ~/.ssh/config 里面追加以下内容:
Host mac
HostName ip地址
User H
Port 22
保存之后,即可用 ssh mac 实现远程登录了,scp 同样可以使用。
作者:请叫我Hank 链接:https://www.jianshu.com/p/9b31892a572f 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。