Linux学习

Posted yfyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习相关的知识,希望对你有一定的参考价值。

Linux教程

Linux的应用领域
  • 个人桌面领域

    此领域是Linux应用最薄弱的环节,但是催着Deepin等,桌面占有率有所回升

  • 服务器领域

    此领域是服务器的应用是最强的,Linux免费、稳定、高效等特点在这里得到了很好的体现

  • 嵌入式领域

    Linux运行稳定、对网络良好支持性、低成本,内核最小可以几百kb等

Linux进阶之路
  1. linux环境下基本操作命令、文件操作命令、编辑工具使用、linux用户管理
  2. linux中各种配置
  3. linux下搭建开发环境
  4. shell脚本、对Linux服务器进行维护
  5. 进行安全设置、防止攻击,保障服务器正常运行,对系统调优
  6. 深入理解linux(对内核有研究),熟练掌握大型网站应用架构组成、熟悉各个环节的部署与维护

一、Linux入门

1.1 Linux介绍

  1. Linux是一款操作系统,免费,开源 ,安全,高效,稳定,处理高并发非常强悍

  2. Linux创始人 linus 林纳斯

  3. Linux吉祥物

    技术图片

  4. Linux发行版

    RedHat Ubuntu Suse opensuse

  5. 目前主要的操作系统

    windows android linux ios 车载系统

1.2 Linux与Unix的关系

贝尔实验室麻省理工学院,通用电气公司开发分时操作系统,后感觉太过庞大,故遗弃。

后来Ken tompson 肯?汤普森在此基础上,使用B语言开发了Unix系统

肯?汤普森当年开发 UNIX 的初衷是运行他编写的一款计算机游戏 Space Travel,这款游戏模拟太阳系天体运动,由玩家驾驶飞船,观赏景色并尝试在各种行星和月亮上登陆。他先后在多个系统上试验,但运行效果不甚理想,于是决定自己开发操作系统,就这样,UNIX 诞生了。

后期,使用c语言重写了Unix,在此基础上,IBM、Sun、hp等公司相继开发出属于自己的Unix系统,

它们开发出的Unix非常昂贵,并不开源,并且必须运行在配置很高的计算机上!

Richard Stallman认为在自由的时代,用户应该免费享有对软件源代码阅读、修改的权力。软件公司可以靠提供服务和训练获得盈利。故 Richard Stallman 提出了 GNU计划!

GNU计划

技术图片

Linux 内核最初是由李纳斯?托瓦兹(Linus Torvalds)在赫尔辛基大学读书时出于个人爱好而编写的,当时他觉得教学用的迷你版 UNIX 操作系统 Minix 太难用了,于是决定自己开发一个操作系统。第 1 版本于 1991 年 9 月发布,当时仅有 10 000 行代码。

李纳斯?托瓦兹没有保留 Linux 源代码的版权,公开了代码,并邀请他人一起完善 Linux。与 Windows 及其他有专利权的操作系统不同,Linux 开放源代码,任何人都可以免费使用它。

1.3 Linux与Windoes比较

比较 Window Linux
免费与收费 收费且贵 免费或很少费用
软件与支持 数量与质量的优势,大部分为收费软件,由微软提供支持和服务 开源自由软件,基本免费,没有资金支持,体现性较低,有全球的Linux开发者与自由软件社区提供支持
安全性 经常打补丁 比Windows略强
使用习惯 大多数依靠鼠标完成,纯图像界面,入门简单 图形界面+命令行,可以只使用键盘完成一切操作,入门较难,一旦入门,熟练后效率极高
可定制性 封闭 开源
应用场景 桌面操作系统 服务器

二、Linux的安装

2.1 VMware安装

2.2 Cenots安装

网络适配器

技术图片

虚拟机网络连接的三种形式说明

  • NAT模式(建议)

    不会造成ip冲突

    在window下又创建一个新的ip,虚拟机和这个新的ip为同一网下

  • 桥接模式(一般不用)

    虚拟机网段在同一ip下,属于共享

    容易ip冲突,ip不够用

  • 仅主机模式

    独立的ip,不会和外网产生关系

2.3 安装vmtools

目前自带,不用自己整

三、Linux的目录结构

Linux文件系统采用级层式的树状目录结构,在此结构的最上层是根目录"/",然后再此目录下再创建其他目录。

Linux世界里,一切皆是文件

技术图片

四、Linux远程登陆

一般情况,真实的Linux服务器,并不在本机上

远程登陆到Linux的工具:

  • Xshell

    Xshell是目前最好的远程登陆到Linux操作的软件,流畅的速度并且完美解决乱码问题。

    支持SSH1,SSH2,Microsoft Windows 平台的 TELNET协议

上传下载工具:

  • XFtp

    基于Windows平台的功能强大的SFTP、FTP文件传输文件。使用了Xftp以后,可以安全的传输文件

需要Linux开启sshd服务22

Linux ip地址查询

ifconfig

远程登陆

技术图片

技术图片

远程上传下载

技术图片

技术图片

五、vi/vim编辑器

  • 所有的Linux系统都会内建vi文本编辑器
  • Vim具有程序编辑的能力,可以看作是Vi的增强版本,被广泛应用

5.1 Vim 的三种模式

  • 正常模式

    正常以vim打开文档,可以移动光标处理文档

  • 插入/编辑模式

    按下i,l,o,O,a,A,r,R进入编辑模式

  • 命令行模式

    可以提供指令

5.2 常用Vim 命令

删除一个字符              x
删除一行                 dd
删除换行                 J
撤销                    u
ctrl + R               取消撤销

复制                    y
....

技术图片

六、开机、重启、用户登陆与注销

6.1 关机,重启

shutdown -h now                 立即关机
shutdown -h 1                   一分钟后关机
shutdown -r now                 重启
halt                            关机
reboot                          重启
sync                            把内存的数据同步到磁盘

6.2 用户登陆和注销

logout                          注销用户

七、用户管理

7.1 用户家目录

/home目录下有各个创建的用户对应的家目录,当用户登陆时,会自动进入家目录

7.2 用户管理

useradd 用户名             添加用户

passwd 用户名              给用户指定密码

userdel 用户名             删除用户(保护家目录)

userdel -r 用户名          删除用户(删除用户主目录)

su - 用户名                切换用户名

exit                      返回原来用户

whoami                    查看当前用户

7.3 用户组管理

用户组:类似于角色,系统可以对有共性的多个用户进行统一的管理。

groundadd 组名                增加组

groupdel 组名                 删除组

useradd -g 用户组 用户名        增加用户时直接加上组

usermod -g 用户组 用户名        修改用户的组

7.4 用户和组的相关文件

  • /etc/passwd 文件

    用户的配置文件,记录用户各种信息

  • /etc/shadow 文件

    口令的配置文件

  • /etc/group 文件

    组的配置文件,记录Linux包含的组的信息

八、实用指令

8.1 指定运行级别

系统的运行级别配置文件 /etc/inittab

  1. 关机
  2. 单用户(root用户密码忘记可以找回)
  3. 多用户(无网络服务)
  4. 多用户(有网络服务)
  5. 保留
  6. 图形界面
  7. 重启

8.2 切换到指定运行级别的指令

命令:init[012356]

8.3 帮助指令

  • man 指令
  • help 指令

百度更直接

8.4 文件目录类

  • pwd 指令

    显示当前工作的绝对路径

  • ls 指令

    查看信息

    -a :显示当前目录所有的文件和目录(包括隐藏)

    -l :以列表的形式显示信息

  • cd 指令

    切换到指定目录

    ~ :回到家目录

    .. :回到上一级

  • mkdir 指令

    创建目录

    -p :创建多级目录

  • rmdir 指令

    删除空目录

  • rm -rf 指令

    删除非空目录

  • touch 指令

    创建空的文件

  • cp 指令

    拷贝文件到指定目录

    -r :递归复制整个文件夹

    cp -r test/ zl/ :有相同文件时,会提醒是否覆盖

    cp -r test/ zl/ :不会提醒,会直接覆盖

  • rm 指令

    移除文件或者目录

    -r :递归删除整个文件夹

    -f :强制删除不再提示

  • mv 指令

    移动文件或者重命名

  • cat 指令

    查看文件内容

    -n :显示行号

    一般带上管道命令 |more

    more:分页显示

  • more 指令

    基于vi编辑器的文本过滤器,以全屏幕的方式按页显示文本文件的内容

  • less 指令

    分屏查看文件内容,对于显示大型文件有较高的效率(日志文件)

  • > 指令 与 >> 指令

    > :输出重定向

    >> :追家

    ls -l > 文件 :列表的内容写到a.txt中

    ls -al >> 文件 :列表的内容追加到aa.txt中

    cat 文件1 > 文件2 :将文件1的内容覆盖到文件2

  • echo 指令

    输出内容到控制台

  • head 指令

    显示文件的开头部分(默认10行)

    -n :指定行数

  • tail 指令

    输出文件尾部内容(默认10行)

    -n :指定行数

    -f :实时追踪该文档的所有更新

  • ln 指令

    符号连接,类似于快捷方式

    -s :软连接

  • history 指令

    查看已经执行过历史命令,也称为历史指令

8.5 时间日期类

  • data 指令

    显示当前日期

    data + %Y :显示当前时间

    data + %m :显示当前年份

    data + %d :显示当前月份

    data ”+%Y-%m-%d %H:%M:%S“ :显示年月日时分秒

8.6 搜索查找类

  • find 指令

    从指定目录向下递归地遍历其各个子目录,将满足的文件或者目录显示在终端

    find [搜索范围] [选项]

    选项 -name -user -size

  • locate 指令

    快速定位文件路径

  • grep 指令和管道符号 |

    -n :显示行号

    -i :忽略字母大小写

8.7 压缩和解压类

  • gzip/gunzip 指令

    gzip用于压缩、

    gunzip用于解压

    gzip 文件 (压缩文件)

    gunzip 文件.gz (解压缩文件)

  • tar 指令

    打包指令,打包的是.tar.gz文件

    tar [选项] XXX.tar.gz

    -c :产生打包

    -v :显示详细信息

    -f :指定压缩后的文件名

    -z :打包的同时压缩

    -x :解包.tar文件

九、组管理和权限管理

9.1 Linux组基本介绍

在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有组、所在组、其他组的概念。

  • 文件/目录所有者:谁创建就是所有者

    查看: ls -ahl

    修改: chown 用户名 文件名

  • 组的创建:

    基本指令: groupadd 组名

  • 文件/目录所在组

    修改: chgrp 组名 文件名

  • 其他组

    除了文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

  • 改变用户所在组

    usermod -g 组名 用户名

    usermod -d 目录名 用户名 改变该用户登陆的初始目录

9.2 权限的基本介绍

ls -l 中显示内容如下

-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

0-9位说明

  1. 第0位确定文件类型(d目录,-普通文件,c字符设备,b块文件)

    -普通文件

    b块文件

  2. 第1-3位确定所有者(该文件的所有者)拥有该文件的权限

    r:可读(文件)可读(目录)

    w:可写(文件)可修改(目录)

    x:可以被执行(文件)可以进入目录(目录)

  3. 第4-6位确定所属组(同用户组的)拥有该文件的权限

  4. 第7-9位确定其他用户拥有该文件的权限

技术图片

  • 修改权限 -chmod

    通过chmod指令,可以修改文件或者目录的权限

    第一种方式:+、-、=变更权限

    u:所有者 g:所有者 o:其他人 a:所有人

    1. chmod u = rwx,g = rx,o = x 文件目录名
    2. chmod o + w 文件目录名
    3. chmod a-x 文件目录名

    第二种方式:通过数字变更权限

    规则:r = 4 w = 2 x = 1 ,rwx = 4 + 2 + 1 = 7

    chmod u = rwx,g = rx,o = x 文件目录名

    相当于 chmod 751 文件目录名

  • 修改文件所有者-chown

    chown newowner file 改变文件的所有者

    chown newowner:nowgroup file 改变用户的所有者和所有组

    -R 如果是目录 则使其下所有子文件或目录递归生效

  • 修改文件所在组-chgrp

    chgrp newgroup file 改变文件的所有组

十、定时任务调度

  • crond 任务调度

    任务调度:指系统在某个时间执行的特定的命令或程序

    任务调度分类:1.系统工作 2.个别用户工作

    crontab [选项]

    -e :编辑crontab定时任务

    -l :查询crontab任务

    -r :删除当前用户所有的crontab任务

十一、Linux磁盘分区、挂载

11.1 分区基础知识

分区的方式
  • mbr分区
    • 最多支持四个分区
    • 系统只能安装到主分区
    • 扩展分区要占一个主分区
    • MBR最大只支持2TB,但拥有最好的兼容性
  • gtp分区
    • 支持无限多个主分区(但是操作系统有限制)
    • 最大支持18EB的容量(1EB = 1024PB 1PB = 1024TB)
    • win7 64位以后支持gtp
Linux分区
  1. Linux无论有多少分区,只有一个根目录
  2. Linux采用“载入”处理。它的整个文件系统中包含了一整套的文件和目录

Linux磁盘分为IDE硬盘和SCSI硬盘,目前基本是SCSI硬盘

11.2 磁盘情况查询

语法:

df -h /目录 (查询指定目录的磁盘占用情况,默认为当前目录)

-s 指定目录占用大小汇总

-a 含文件

-max-depth=1 子目录深度

-c 列出明细的同时,增加汇总量

11.3 工作实用指令

  1. 统计/home 文件夹下文件的个数

    ls -l /home | grep "^-" | wc -l
  2. 统计/home 文件夹下目录的个数

    ls -l /home | grep "^d" | wc -l
  3. 统计/home 文件夹下文件的个数,包括子文件夹里的

    ls -lR /home | grep "^-" | wc -l
  4. 统计文件夹下文件的个数,包括子文件夹里的

    ls -lR /home | grep "^d" | wc -l
  5. 以树状显示目录结构

    yum install tree
    tree

十二、网络配置

12.1 Linux网络配置原理图(含虚拟机)

目前我们的网络配置采用的是NAT

技术图片

12.2 查看网络IP和网关

  • 查看虚拟网络编辑器

    Vmware 编辑 -- 网络编辑器

  • 修改ip地址(虚拟网卡)

    网络编辑器中修改

  • 查看网关

    虚拟网络编辑器 -- NAT设置

  • 查看windows环境下中Vmnet8网络配置

    属性中查看

    或者ipconfig查看

12.3 Ping的使用

  • 语法

    ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)

  • 应用

    ping www.baidu.com

12.3 Linux网络环境配置

  • 方式一、自动获取

    缺点:Linux每次获取的Ip不同,不适用于做服务器

  • 方式二、指定固定ip

    推荐,直接修改配置文件

    /etc/sysconfig/network-scripts/ifcfg-eth0

    192.168.186.129

重启网络服务

service network restart

十三、进程管理

13.1 基本介绍

  1. Linux中,每个执行的程序(代码)都称之为一个进程。每个进程都分配一个id号
  2. 每一个进程,都会对应一个父进程,父进程可以复制多个子进程
  3. 每个进程都可能以两种方式存在。前台与后台。
  4. 一般系统的服务都是以后台进程的方式存在,而且会常驻在系统中。知道关机

13.2 显示系统执行的进程

ps命令

-a :显示当前终端所有进程信息

-u :以用户的格式显示进程信息

-x :显示后台进程运行的参数

字段 说明
PID 进程识别号
TTY 终端机号
TIME 此进程所消CPU时间
CMD 正在执行的命令或进程名
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令

13.3 终止进程Kill和Killall

Kill [选项] 进程号 :杀死进程

killall 进程名称 :支持通配符

13.4 查看进程树

pstree [选项]

-p :显示PID

-u :显示所属用户

13.5 服务管理

服务本质就是进程,但是是运行在后台的,通常都会监听某个接口,等待其他程序的请求,因此我们称之为守护进程

service管理指令

service 服务名 start | stop | restart | reload | status

chkconfig指令

给每个服务的各个运行级别设置自启动/关闭

查看服务 chkconfig -list|grep xxx

chkconfig 服务名 --list

chkconfig -level 5 服务名 on/off

13.6 动态监控进程

top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,处于top在执行一段时间可以更新正在运行的进程

top[选项]

-d 秒数 :top命令 每隔几秒更新

-i :使top不显示任何闲置或者僵死进程

-p :通过指定监控进程ID来仅仅监控某个进程的状态

交互操作说明

p :以cpu使用率排序,默认就是此项

m :以内存的使用率排序

n :以pid排序

q :退出top

十四、RPM 与 YUM

14.1 rpm包的管理

一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。他生成具有.RPM扩展名的文件。RPM是RedHat Package Manager 的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。

rpm -qa :查询所安装的所有rpm软件包

rpm -q 软件包名 :查询软件包是否安装

rpm -qi 软件包名 :查询软件包信息

rpm -e 包名称 :卸载RPM软件包

rpm -e --nodeps 包名称 :强制卸载(不建议使用)

14.2 Yum包的管理

Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

yum list|grep xx软件列表 :查询yum服务器是否有需要安装的软件

yum install xxx :下载安装

十五、APT与SSH

15.1 APT

apt是Advanced packaging Tool 的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令安装软件包、删除软件包、清理软件包等。类似于windows的软件管理工具。

1.搜索软件
sudo  apt-cache  search  package_name
其中还可以使用正则表达式 sudo apt-cache search sof* 这样就可以搜索到源上面所有以sof开头的软件包。

2.查看软件包信息
sudo apt-cache show package_name

3.查看软件包依赖关系
sudo apt-cache show depends package_name

4.查看每个软件包的简要信息
sudo apt-cache dump

5.安装软件
sudo apt-get install  package_name

6.更新已安装的软件包
sudo apt-get  upgrade

7.更新软件包列表
sudo apt-get update

8.卸载一个软件包但是保留相关的配置文件
sudo apt-get remove package_name

9.卸载一个软件包同时删除配置文件
apt-get -purge remove package_name

10.删除软件包的备份
apt-get clean

15.2 SSH

SSH为Secure Shell 的缩写,由IETE的网络工作小组所制定;SSH为建立在应用层和传输层基础上的安全协议。

SSH是目前较可靠,转为远程登陆会话和其他网络服务提供安全性的协议。常用于远程登陆,以及用户之间进行资料拷贝。

使用SSH服务需要安装相应的服务端和客户端,Ubuntu和Centos不同的是,没有默认安装SSHD服务!

sudo apt-get install openssh-server
Linux安装SSH服务端和客户端

service sshd restart
启动sshd服务。会监听端口22

技术图片

以上是关于Linux学习的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段01

[linux][c/c++]代码片段02

IOS开发-OC学习-常用功能代码片段整理

java SpringRetry学习的代码片段

python 机器学习有用的代码片段

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?