1. 什么是Linux?

严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。详情参见:https://baike.baidu.com/item/linux/27050?fr=aladdin

2. Linux 内核及发行版

2.1 Linux 内核版本

  • 内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层(可以理解成媒介、接口)
  • Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环
    • 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序
    • 开发版:由于要试验各种解决方案,所以变化很快
  • 内核源码网址:http://www.kernel.org 所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中

2.2 Linux 发行版本

  • Linux 发行版(也被叫做 GNU/Linux 发行版)通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件
  • 常见的发行版本如下:

    • Ubuntu
    • Redhat
    • Fedora
    • openSUSE
    • Linux Mint
    • Debian
    • Manjaro
    • Mageia
    • CentOS
    • Arch
  • 十大 Linux 服务器发行版排行榜:http://os.51cto.com/art/201612/526126.htm

3. Linux的应用领域

3.1 服务器领域

  • Linux在服务器领域的应用是其重要分支
  • Linux 免费、稳定、高效等特点在这里得到了很好的体现
    • Linux早期因为维护、运行等原因同样受到了很大的限制
    • 近些年来Linux服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛

3.2 嵌入式领域

  • 近些年来Linux在嵌入式领域的应用也得到了飞速的提高
  • Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年来在嵌入式领域的应用得到非常大的提高

主要应用:机顶盒数字电视网络电话程控交换机手机PDA、等都是其应用领域,得到了 Google、三星、摩托罗拉、NEC 等公司的大力推广

3.3 个人桌面领域

  • 此领域是传统 Linux 应用最薄弱的环节
  • 传统 Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被Windows所压制
  • 近些年来随着UbuntuFedora等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,Linux 在个人桌面领域的占有率也在逐渐提高

4. 文件和目录

4.1 单用户操作系统和多用户操作系统(科普)

单用户操作系统:指一台计算机在同一时间只能由一个用户使用,一个用户独自享用系统的全部硬件和软件资源,Windows XP之前的版本都是单用户操作系统
多用户操作系统:指一台计算机在同一时间可以由多个用户使用,多个用户共同享用系统的全部硬件和软件资源
Unix 和 Linux 的设计初衷就是多用户操作系统

4.2 Windows 和 Linux 文件系统区别

4.2.1 Windows下的文件系统
在Windows下,打开“计算机”,我们看到的是一个个的驱动器盘符:

Linux基础------看这篇就够了

每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形,如图所示:

Linux基础------看这篇就够了

4.2.2 Linux 下的文件系统
在Linux下,我们是看不到这些驱动器盘符,我们看到的只有文件夹(目录):

Linux基础------看这篇就够了

Ubuntu没有盘符这个概念,只有一个根目录 /,所有文件都在它下面

Linux基础------看这篇就够了

4.3 用户目录

位于 /home/user,称之为用户工作目录或家目录,表示方式: /home/user/ ,如下图所示:

Linux基础------看这篇就够了

4.4 Linux主要目录速查表(用于速查,不用死记)

/:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始
当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录
/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 存放在该目录下

5. Linux 终端命令

5.1 学习Linux终端命令的原因

  • Linux刚面世时并没有图形界面,所有的操作全靠命令完成,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。在职场中,大量的服务器维护工作都是在远程通过SSH客户端来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成
  • 作为后端程序员,必须要或多或少的掌握一些Linux常用的终端命令
  • Linux发行版本的命令大概有 200 多个,但是常用的命令只有10左右而已

ps:不需要死记硬背,对于常用命令,用的多了,自然就记住了,切记不要尝试一次学会所有的命令,有些命令是非常不常用的,临时遇到,临时百度就可以。

5.2 终端命令格式 

command [-options] [parameter]
说明:
command:命令名,相应功能的英文单词或单词的缩写
[-options]:选项,可用来对命令进行控制,也可以省略
parameter:传给命令的参数,可以是零个、一个或者多个
[] 代表可选

5.3 查阅命令帮助信息

5.3.1 --help

command --help
说明:显示command命令的帮助信息

Linux基础------看这篇就够了

5.3.2 man

man command
说明:查阅command命令的使用手册
man是 manual的缩写,是Linux提供的一个手册,包含了绝大部分的命令、函数的详细使用说明。

使用man时的操作键
操作键 功能
Enter 一次滚动手册页的一行
b 回滚一屏
f 前滚一屏
q 退出手册
/keyword 搜索keyword字符串
空格 显示手册页的下一屏,与f键功能一样

 

 

 

 

 

 


 

5.4 常用 Linux 命令的基本使用

命令 对应英文 作用
ls list 查看当前文件夹下的内容
pwd print work directory 查看当前所在文件夹
cd 目录名 change directory 切换文件夹
touch 文件名 touch 如果文件不存在,新建文件
mkdir 目录名 make directory 创建目录
rm 文件名 remove 删除指定文件名的文件
clear clear 清屏

ps:
1.ctrl+shift+"+" 可以放到终端字体显示;ctrl+"-" 缩小终端字体显示
2.在敲出“文件”/“目录”/“命令”的前几个字母之后,按下“tab”键,如果输入的没有歧义,系统会自动补全;如果还存在其他“文件”/“目录”/“命令”,再按一下“tab”键,系统会提示可能存在的命令

Linux基础------看这篇就够了

3.按“上”/“下”光标键可以在曾经使用过的命令之间来回切换,如果想要退出选择,并且不想执行当前选中的命令,可以按“ctrl“ + ”c”

5.4.1 ls命令说明
ls是英文单词"list"的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于DOS下的 "dir"命令 

1)ls常用选项:                                                                                                                                                                                                  
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合“-l”以人性化的方式显示文件大小     

小插曲: 计算机中文件大小的表现方式(了解即可)

Linux基础------看这篇就够了     

ps:Linux文件或者目录名称最长可以有256个字符;以"."开头的文件为隐藏文件,需要用"-a"参数才能显示;("."代表当前目录;".."代表上一级目录)
在Linux终端中,命令的选项可以分开输入,也可以合在一起输入

Linux基础------看这篇就够了

2)ls与通配符的使用 

Linux基础------看这篇就够了

案例1:找到以"1"开头的文件

Linux基础------看这篇就够了

案例2:找到以“1”结尾的文件,可以看到,我开始输入“*1”点击回车是没有反应的,输入“*1.txt”才可以

Linux基础------看这篇就够了   

其他通配符请各位老铁自行测试~ 

5.4.2 "cd"命令说明
cd是"change directory"的简写,其功能为更改当前的工作目录。
注意:Linux所有的目录和文件名都是大小写敏感的
Linux基础------看这篇就够了      
我们也要明白相对路径和绝对路径的概念:
相对路径:表示相对于当前目录所在的目录位置,在输入路径时,最前面不是"/"或者"~"。
绝对路径:表示从”根目录/家目录“开始的具体目录位置,在输入路径时,最前面是"/"或者"~"。
Linux基础------看这篇就够了 
5.4.3 创建和删除操作
1>touch 文件名:如果文件不存在,可以创建一个空白文件;如果文件已经存在,可以修改文件的末次修改日
2>mkdir -p 文件夹:可以递归创建目录
Linux基础------看这篇就够了
3>rm 文件名/文件夹:删除文件或目录
-f:强制删除,忽略不存在的文件,无需提示
-r:递归地删除目录下的内容,删除文件夹时必须加此参数
rm命令也可以与通配符结合使用:
Linux基础------看这篇就够了
使用"rm"命令一定要小心,因为文件删除后不能恢复
Linux基础------看这篇就够了

5.4.4 拷贝和移动文件
Linux基础------看这篇就够了
1>tree -d:只显示目录。
2>"cp"命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的"copy"命令。
Linux基础------看这篇就够了   
相关选项:
-i: 覆盖文件前提示
-r: 若给出的源文件是目录文件,则 cp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名
Linux基础------看这篇就够了 
如上图所示,复制目录必须加“-r”
3>"mv"命令可以用来移动文件或目录,也可以给文件或目录重命名
Linux基础------看这篇就够了 
相关选项:-i: 覆盖文件前提示 
Linux基础------看这篇就够了
5.4.5 查看文件内容
Linux基础------看这篇就够了
1>cat会一次显示所有的内容,适合查看内容较少的文本文件,相关选项:
-b: 对非空输出行编号
-n: 对输出的所有行编号
ps:Linux 中还有一个"nl"的命令和"cat -b"的效果等价
Linux基础------看这篇就够了
2>more命令可以用于分屏显示文件内容,每次只显示一页内容,适合于查看内容较多的文本文件,操作键与“man”命令一样,比如按enter键往下滚动一行
3>Linux系统中"grep"命令是一种强大的文本搜索工具,"grep"允许对文本文件进行模式查找,所谓模式查找,又被称为正则表达式查找
-n: 显示匹配及行号
-v: 显示不包含匹配文本的所有行(相当于求反)
-i: 忽略大小写
Linux基础------看这篇就够了
常用的两种模式查找:
^a: 行首,搜寻以"a"开头的行
key$: 行尾,搜寻以"key"结束的行
Linux基础------看这篇就够了
5.4.6 重定向">"和">>"
1>"echo"会在终端中显示参数指定的文字,通常会和重定向联合使用
Linux基础------看这篇就够了
2>Linux允许将命令执行结果重定向到一个文件
Linux基础------看这篇就够了
从如上示例可以看出,">" 表示输出,会覆盖文件原有的内容; ">>"表示追加,会将内容追加到已有文件的末尾
5.4.7 管道"|"
Linux允许将一个命令的输出可以通过管道做为另一个命令的输入,可以理解现实生活中的水管,水管一头进水,另一头出水,这里"|"分为左右两端,左端进水(写),右端出水(读)
常用的管道命令有:
more:分屏显示内容
grep:在命令执行结果的基础上查询指定的文本
Linux基础------看这篇就够了
5.4.8 关机/重启
shutdown:关机/重新启动
"shutdown"命令可以”安全关闭“或者”重新启动系统“
-r:重新启动
温馨提示:
不指定选项和参数,默认表示1分钟之后关闭电脑;
远程维护服务器时,最好不要关闭系统,而应该重新启动系统
常用命令:
1>重新启动操作系统,其中now表示现在,即重启动作会马上执行
shutdown -r now
2>立刻关机
shutdown now
3>系统在今天的20:25关机
shutdown 20:25
4>系统再过十分钟后自动关机
shutdown +10
5>取消之前指定的关机计划
shutdown -c
5.4.9 查看或配置网卡信息
网卡是一个专门负责网络通讯的硬件设备,IP地址是设置在网卡上的地址信息,我们可以把电脑比作电话,网卡相当于SIM卡,IP地址相当于电话号码。
IP地址:每台联网的电脑上都有IP地址,是保证电脑之间正常通讯的重要设置。
注意:每台电脑的IP地址不能相同,否则会出现IP地址冲突,并且没有办法正常通讯。
1>ifconfig: 对应英文configure a network interface,可以查看/配置计算机当前的网卡配置信息。
Linux基础------看这篇就够了
Linux基础------看这篇就够了
ps:一台计算机中有可能会有一个物理网卡多个虚拟网卡,在Linux中物理网卡的名字通常以"ensXX"表示;"127.0.0.1"被称为本地回环/环回地址,一般用来测试本机网卡是否正常
2>ping ip地址: ping检测到目标ip地址的连接是否正常
"ping"一般用于检测当前计算机到目标计算机之间的网络是否通畅,时间数值越大,速度越慢。
原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个数据包,根据返回的数据包以及时间,我们可以确定目标主机的存在和网络是否流畅。
Linux基础------看这篇就够了
Linux基础------看这篇就够了
ps: "ping"的工作原理与潜水艇的声纳相似,"ping"这个命令就是取自声纳的声音网络管理员之间也常将"ping"用作动词————ping一下计算机X,看他是否开着。

5.5 远程管理命令

在Linux中,SSH是非常常用的工具,通过SSH客户端我们可以连接到运行了SSH服务器的远程机器上。SSH 客户端是一种使用"Secure Shell(SSH)"协议连接到远程计算机的软件程序,它是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
Linux基础------看这篇就够了

优点:
1)利用SSH协议可以有效防止远程管理过程中的信息泄露;
2)通过SSH协议可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗;
3)SSH的另一项优点是传输的数据可以是经过压缩的,所以可以加快传输的速度。
1>域名和端口
域名由一串用点分隔的名字组成,是IP地址的别名,主要是为了方便用户记忆,例如:www.baidu.com。
端口包括物理端口和逻辑端口。物理端口是用于连接物理设备之间的接口,逻辑端口是逻辑上用于区分服务的端口。TCP/IP协议中的端口就是逻辑端口,通过不同的逻辑端口来区分不同的服务。一个IP地址的端口通过16bit进行编号,最多可以有65536个端口。端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。
IP地址:通过IP地址找到网络上的计算机
端口号:通过端口号可以找到计算机上运行的应用程序
SSH服务器的默认端口号是22,如果是默认端口号,在连接的时候,可以省略。

常见服务端口号列表
序号 服务 端口号
01 SSH 服务器 22
02 Web 服务器 80
03 HTTPS 443
04 FTP 服务器 21

案例:我们先通过ping www.baidu.com可以看到百度的服务器IP是119.75.217.26,然后打开浏览器输入此IP,回车后便可以访问百度,web默认端口号是80,所以我们输入119.75.217.26:80也是可以访问到百度的。 

Linux基础------看这篇就够了

Linux基础------看这篇就够了
如果把端口号改成81就出问题了
Linux基础------看这篇就够了

2>SSH客户端的简单使用
ssh [-p port] [email protected] 此命令用于访问远程SSH服务器
1)user是在远程机器上的用户名,如果不指定的话默认为当前用户
2)remote是远程机器的地址,可以是IP/域名,或者别名
3)port是SSH Server监听的端口,如果不指定,就为默认值22
温馨提示:使用exit退出当前用户的登录
注意:ssh这个终端命令只能在Linux或者UNIX系统下使用,如果在Windows系统中,可以安装PuTTY或者XShell客户端软件:
Putty http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html(需要科学上网)
XShell http://xshellcn.com
温馨提示:在工作中,SSH 服务器的端口号很有可能不是 22,如果遇到这种情况就需要使用 -p 选项,指定正确的端口号,否则无法正常连接到服务器
下面我来演示用XShell6连接Ubuntu
Linux基础------看这篇就够了

设置完之后点连接,我在连接的时候出问题了,如下图所示:
Linux基础------看这篇就够了
连接失败之后,我用ssh命令重新连接还是失败,这是怎么回事?难道SSH服务没开?
Linux基础------看这篇就够了
我在尝试用sudo service ssh start开启SSH时,提示没有找到SSH服务,这么说是我的Ubuntu上压根就没这玩意,我还以为SSH是Ubuntu自带的。那咱就sudo apt-get install ssh安装一下这玩意,安装完成之后重启服务。然后在XShell6中重新建立会话窗口连接Ubuntu,出现如下提示点击“授权并保存”即可,之后输入密码点确定就可以了。
Linux基础------看这篇就够了

Linux基础------看这篇就够了
当出现用户名@ubuntu即表示连接成功
Linux基础------看这篇就够了
终于可以快乐地玩耍了,我先试试远程重启:
Linux基础------看这篇就够了
愚人节可以恶搞同事,再胆子大点可以恶搞领导
Linux基础------看这篇就够了
3>SCP
scp就是secure copy,是一个在Linux下用来进行远程拷贝文件的命令,它的地址格式与ssh基本相同,需要注意的是,在指定端口时用的是大写的-P而不是小写的。
注意:scp这个终端命令只能在Linux或者UNIX系统(mac os也可以,因为它是基于unix内核的图形化操作系统)下使用,如果在Windows系统中,可以安装PuTTY,使用pscp命令行工具或者安装FileZilla使用FTP进行文件传输。
Linux基础------看这篇就够了
"scp -P port helloworld.py [email protected]:Desktop/helloworld.py"此命令可以实现把本地当前目录下的helloworld.py文件复制到远程家目录下的Desktop/helloworld.py
注意:后面的路径如果不是绝对路径,则以用户的家目录作为参照路径
"scp -P port [email protected]:Desktop/01.py 01.py"此命令可以实现把远程家目录下的Desktop/01.py文件复制到本地当前目录下的01.py
加上 -r 选项可以传送文件夹,比如把当前目录下的demo文件夹复制到远程家目录下的Desktop,可以用如下命令实现:
scp -r demo [email protected]:Desktop
Linux基础------看这篇就够了
相信大多数人用的都是Windows系统,那我们就用FileZilla来一顿操作,点击这里下载最新版本FileZilla,我用的是目前最新的3.41.2,下载完成后进行傻瓜式安装,打开软件后按照下图所示填写相关信息,点击快速连接。
Linux基础------看这篇就够了
不知道你们这样操作有问题没,我是出问题了,提示无法连接到服务器,可是我的信息填写完全正确,why?
Linux基础------看这篇就够了
我的解决方案是这样的:
1.把端口号改成22,FileZilla会自动把主机切成SFTP传输
Linux基础------看这篇就够了
2.在FileZilla客户端点击文件>>站点管理器中新建站点,然后选择SFTP协议即可
Linux基础------看这篇就够了
大家有其他解决方案可以在评论区留言与我交流~
下图是FileZilla实现拷贝文件及目录的方法,是不是so easy~
Linux基础------看这篇就够了
4>SSH高级使用(下面的内容知道就行,工作中很少用)
1)免密码登录

  • 第一步:配置公钥

    执行"ssh-******"即可生成SSH钥匙,一路回车即可

  • 第二步:上传公钥到服务器

    执行"ssh-copy-id -p port [email protected]",可以让远程服务器记住我们的公钥
温馨提示:有关SSH的配置信息都保存在用户家目录下的".ssh"目录下
我用的是Windows系统(不是因为我穷,是我觉得苹果系统不好用,而且是美国货,我这么爱国,才不会用,你们应该会相信的吧),就用Ubuntu终端服务器登录终端服务器自己的方法来给大家演示吧~

首先我们查看家目录下的所有文件,没有发现.ssh文件夹。
Linux基础------看这篇就够了
这是因为.ssh文件夹需要在终端登录ssh后才会生成,我这里自己登录自己。
Linux基础------看这篇就够了
再次查看家目录下的所有文件,可以看到已经生成了.ssh文件夹,并且在.ssh中有一个叫known_hosts的文件,这个文件其实就是我们刚才输入yes时保存的授权信息,当我们下次再登录这个服务器的时候,就不会再提示授权了。
Linux基础------看这篇就够了
接下来我们执行"ssh-******"命令,一路回车即可。之后我们可以看到在.ssh下有多了两个文件,分别是id_rsa(私钥)、id_rsa.pub(公钥)。
Linux基础------看这篇就够了
我们再执行“ssh-copy-id -p port [email protected]”把公钥上传到远程服务器。
Linux基础------看这篇就够了
我们再次查看.ssh文件,发现又多了个authorized_keys文件,而且内容跟id_rsa.pub一模一样,其实这个就是我们上传到服务器的公钥。
Linux基础------看这篇就够了
免密登录原理(非对称加密算法)图解
Linux基础------看这篇就够了
2)配置别名
我们在终端使用ssh的频率还是很高的,那么每次都输入ssh -p port [email protected],时间久了会觉得很麻烦,特别是当user,remote和port都得输入时就更头疼了,而且还不好记忆,而配置别名可以让我们偷懒,譬如用:ssh myserver来替代这么一长串,那么就在 ~/.ssh下创建config文件, 里面追加以下内容:
Host xxx
HostName ip地址
User xxx
Port 22
保存之后,即可用 ssh mac 实现远程登录了,scp 同样可以使用。

Linux基础------看这篇就够了
温馨提示:大家可能在终端使用“gedit filename”打开文件会报错,点击这里可能会帮到你哟~
未完待续。。。

相关文章: