Linux(总)

基础

简介

开源免费操作系统
通常服务器使用
 LAMP(Linux + Apache + MySQL + PHP)或 
 LNMP(Linux + Nginx+ MySQL + PHP)组合

环境安装

centos 下载地址:可以去官网下载最新版本:https://www.centos.org/download/

1.安装虚拟机
2.安装Linux镜像
skip->ok->中英文->英文键盘->yes->上海->密码- >UserAnyWay->CreateCustomLayout分区
​			ext4	/boot	200M
​			Swap   			2048M
​			ext4	/			剩余所有
Next->Fromt->write写入磁盘->next
boot----->/dev/sda

Linux 系统启动过程

linux启动时我们会看到许多启动信息。
Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:
1.内核的引导。
2.运行 init。
3.系统初始化。
4.建立终端 。
5.用户登录系统。
  1. 内核的引导。
    当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
    操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
    在这里插入图片描述

  2. 运行 init。
    init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
    init 程序首先是需要读取配置文件 /etc/inittab。
    在这里插入图片描述
    运行级别
    许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
    init进程的一大任务,就是去运行这些开机启动的程序。
    但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
    Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
    在这里插入图片描述
    Linux系统有7个运行级别(runlevel):
    运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
    运行级别2:多用户状态(没有NFS)
    运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式
    运行级别4:系统未使用,保留
    运行级别5:X11控制台,登录后进入图形GUI模式
    运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

  3. 系统初始化。
    在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
    它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
    // l5:5:wait:/etc/rc.d/rc 5
    这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。
    而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。
    /etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以 S 开头的启动脚本,将以start参数来运行。
    而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。
    这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。
    至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。
    在这里插入图片描述

  4. 建立终端 。
    rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
    init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。
    同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。
    在这里插入图片描述

  5. 用户登录系统。
    一般来说,用户的登录方式有三种:
    (1)命令行登录
    (2)ssh登录
    (3)图形界面登录
    在这里插入图片描述
    对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。
    而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。
    Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。
    然后 login 会对用户名进行分析:如果用户名不是 root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出。
    这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。
    /etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

init程序的类型:
SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。

网络配置

ifup eth0 打开以太网
ifconfig    查看ip信息
vi /etc/sysconfig/network-script/ifcfg-eth0
service network restart ,重新启动network网络服务

设置BOOTPROTO为dhcp还是static,dhcp表示自动获取IP地址,static表示设置静态地址,
配置IPADDR、NETMASK、GATEWAY的值。
ip地址:IPADDR=192.168.XX.XX
子网掩码:NETMASK = 255.255.255.0
网关:GATEWAY=192.168.XX.2
DNS1=114.114.114.114
DNS2=8.8.8.8
:wq保存并退出
cd /etc/udev/rules.d   将下面的 70-persistent-net.rules删除
reboot 重启电脑
ping www.baidu.com 测试网络是否可用
还可以在:setup 修改电脑适配器(1.ip地址 2.子网掩码  3.网关 4.DNS)

文件类型

文件类型
-:普通文件(file)  d:目录文件   l:链接文件(symbolic link file)
 b:块设备文件(block) 可切割  c:字符设备文件(character) 
p:命令管行文件(pipe) s:套接字文件(socket)
文件权限:9位   3位一组   权限(UGO)   rwx(读写执行)
文件硬连接的次数
文件属主(owner)
文件属组(group)
文件大小(size) 单位字节
时间戳(timestamp)最近一次修改的时间

linux文件系统

 ls / 

在这里插入图片描述
在这里插入图片描述

目录描述
/ (root 文件系统)root 文件系统是文件系统的顶级目录。它必须包含在挂载其它文件系统前需要用来启动 Linux 系统的全部文件。它必须包含需要用来启动剩余文件系统的全部可执行文件和库。文件系统启动以后,所有其他文件系统作为 root 文件系统的子目录挂载到标准的、预定义好的挂载点上。
/bin目录包含用户的可执行文件 bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令
/boot包含启动 Linux 系统所需要的静态引导程序和内核可执行文件以及配置文件。这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件
/dev包含启动 Linux 系统所需要的静态引导程序和内核可执行文件以及配置文件。dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc包含主机计算机的本地系统配置文件。 etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home主目录存储用户文件,每一个用户都有一个位于/home目录中的子目录(作为其主目录)用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
/lib包含启动系统所需要的共享库文件。 lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media一个挂载外部可移动设备的地方,比如主机可能连接了一个 USB 驱动器。linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt一个普通文件系统的临时挂载点(如不可移动的介质),当管理员对一个文件系统进行修复或在其上工作时可以使用。系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了
/opt可选文件,比如供应商提供的应用程序应该安装在这儿。 opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root这不是 root(/)文件系统。它是 root 用户的主目录。 该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin系统二进制文件。这些是用于系统管理的可执行文件。 s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
/selinux:这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:该目录存放一些服务启动之后需要提取的数据。
/sys:这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp临时目录。被操作系统和许多程序用来存储临时文件。用户也可能临时在这儿存储文件。注意,存储在这儿的文件可能在任何时候在没有通知的情况下被删除。tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
/usr该目录里面包含可共享的、只读的文件,包括可执行二进制文件和库、man 文件以及其他类型的文档。 usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var可变数据文件存储在这儿。这些文件包括日志文件、MySQL 和其他数据库的文件、Web 服务器的数据文件、邮件以及更多。
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。
值得提出的是 /bin、/usr/bin 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。
文件系统的最顶层是由根目录开始的,系统使用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。
在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 .. 来表示。

 . :代表当前的目录,也可以使用 ./ 来表示;
 .. :代表上一层目录,也可以 ../ 来代表。
如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件。

系统启动必须:

/boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。
/etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。
/lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中
指令集合:

/bin:存放着最常用的程序和指令
/sbin:只有系统管理员能使用的程序和指令。
外部文件管理:

/dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。
/media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。
/mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
临时文件:

/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
/lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。
/tmp:这个目录是用来存放一些临时文件的。
账户:

/root:系统管理员的用户主目录。
/home:用户的主目录,以用户的账号命名的。
/usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:系统用户使用的应用程序与指令。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
运行过程中要用:

/var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
/proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。
扩展用的:

/opt:默认是空的,我们安装额外软件可以放在这个里面。
/srv:存放服务启动后需要提取的数据(不用服务器就是空)

文件系统类型:

btrfs/cramfs/ext2/ext3/ext4/fat/gfs2/hfsplus/minix/msdos/ntfs/reiserfs/vfat/xfs

基础命令

1、系统查看命令
	uname -a # 查看内核/操作系统/CPU信息
	head -n 1 /etc/issue # 查看操作系统版本
	cat /proc/cpuinfo # 查看CPU信息
	hostname # 查看计算机名
	lspci -tv # 列出所有PCI设备
	lsusb -tv # 列出所有USB设备
	lsmod # 列出加载的内核模块
	env # 查看环境变量

2、资源/硬盘占用情况
	free -m # 查看内存使用量和交换区使用量
	df -h # 查看各分区使用情况
	du -sh <目录名> # 查看指定目录的大小
	grep MemTotal /proc/meminfo # 查看内存总量
	grep MemFree /proc/meminfo # 查看空闲内存量
	uptime # 查看系统运行时间、用户数、负载
	cat /proc/loadavg # 查看系统负载

3、磁盘和分区情况
	mount | column -t # 查看挂接的分区状态
	disk -l # 查看所有分区
	swapon -s # 查看所有交换分区
	hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
	dmesg | grep IDE # 查看启动时IDE设备检测状况

4、网络查看
	ifconfig # 查看所有网络接口的属性
	iptables -L # 查看防火墙设置
	route -n # 查看路由表
	netstat -lntp # 查看所有监听端口
	netstat -antp # 查看所有已经建立的连接
	netstat -s # 查看网络统计信息

5、进程查看
	ps -ef # 查看所有进程
	top # 实时显示进程状态

6、用户查看
	w # 查看活动用户
	id <用户名> # 查看指定用户信息
	last # 查看用户登录日志
	cut -d: -f1 /etc/passwd # 查看系统所有用户
	cut -d: -f1 /etc/group # 查看系统所有组
	crontab -l # 查看当前用户的计划任务

7、系统服务情况
	chkconfig –list # 列出所有系统服务
	chkconfig –list | grep on # 列出所有启动的系统服务

8、程序查看
	rpm -qa # 查看所有安装的软件包
桌面 start  desktop
shoutdown -h(关机) -r(重启)  now(立即)
halt 关机
reboot 重启

type:查看是外部命令还是内部命令
   内部命令:xx is a shell buition         help(帮助手册)
   外部命令:	/xxx/xxx						man(帮助手册)
man 空格(页) b(返回) e(行) q(退出)
man utf8/ascii


关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service


1.ifup eth0 打开以太网
2.setup 修改电脑适配器(1.ip地址 2.子网掩码  3.网关 4.DNS)
3.cd 切换目录    ..上级目录     ./当前目录 
          绝对路径: /后跟的是绝对路径  例如:/home/software/demo/
          相对路径: 例如:software/demo
4.pwd 查看当前工作路径(查看当前在哪个目录下)
5.ls 查看目录内容
  格式: ls [选项]
           -a = all 显示所有目录
           -l 以长行文件显示
           -lh  h显示的是文件大小
6.mkdir 创建目录   -p(多级目录)
  格式: mkdir 目录名称     例如: mkdir software(创建software目录)
7.touoch 创建文本文件  (文件不存在)创建文本文件 或(文件存在)刷新文件时间
  格式: touch 文本文件名   例如: touch ont.txt(创建one的文本文件)
8.mv 移动/修改名称
     移动命令格式:mv 文件名称 目的地址   例如: mv jdk-tar.gz /home/software
     修改名称格式:mv 旧名称   新名称     例如: mv jdk-tar.gz jdk
9.cp 拷贝命令
     cp  文件名   拷贝地址
10. rm  删除命令
    格式: rm [选项] 文件/目录名称   
           [-r] 递归删除
           [-f] 强制删除
                rm -rf 慎用
11.find查找 -name(名称查找) -size(大小) -user(属性) -type(类型)                
12.cat查看文件内容 -n(行号)  cat/prot/cpuinto 查看cpu信息    > 意思是创建,>>是追加。千万不要弄混了。
13.wc -l(行号) -w(单词数) -c(字符数)
14.ps 进程列表  常用: ps -ef
 ipmcset -t maintenance -d imtool 日志文件会到/tmp目录里,在从tmp目录把日志导出来
日志文件是xxxx日期.tar.gz   /tmp目录下的
date日期
hash -r 清除缓存
whereis:定位命令位置
file:查看文件属性/类型(ELF二进制文件)   bash/ksh/csh
umount卸载 mount挂载 ./运行

文件系统命令
df:显示磁盘使用情况    df -h
du:显示文件使用情况    du -h 文件夹  du -sh 查看文件大小

ln:链接:链接文件 ln -s /home/software  /dasktop  类似于快捷方式

stat:元数据
​	change ;元数据修改时间
​	modify:表示文件修改时间

解压命令
tar       tar -xvf 或者tar -zxvf
gzip       -d释放压缩     -9高压缩
bzip2      -d释放压缩     -9高压缩




useradd 创建用户               用户 /etc/passwd
    格式: useradd [选项] 用户名
              [-c]  "commen"注释
              [-d]  指定用户目录一般与-m一起使用  -m创建目录
              [-g]  主组
              [-G]  附加组
              [-u]  UID跟id差不多
              [-s]  指定shell目录
              [-l]  修改用户名称
usermod 修改用户
    格式: usermod [选项] 用户名
              [-c]  "commen"注释
              [-d]  指定用户目录一般与-m一起使用  -m创建目录
              [-g]  主组
              [-G]  附加组
              [-u]  UID跟id差不多
              [-s]  指定shell目录
userdel 删除用户
    格式: userdel -r 用户名   可以连目录也删除
passwd 密码信息               密码 /etc/shadown
    格式: passwd [选项] 用户名
              [-l]  锁定用户
              [-u]  解除锁定
              [-o]  
    格式: groupadd [选项] 用户组名     /etc/group
              [-g]  UID
              [-G]  附加组
              [-u]  
groupmod 修改用户
    格式: usermod [选项] 用户名
              [-c]  "commen"注释
              [-d]  指定用户目录一般与-m一起>使用  -m创建目录
              [-g]  主组
              [-G]  附加组
              [-u]  UID跟id差不多
              [-s]  指定shell目录
groupdel 删除用户组

远程登陆ssh

SSH是一种网络协议,用于计算机之间的加密登录。 默认端口:22
密文登录,较为安全 (最早的,互联网通信都是明文通信,一旦被截获,内容就暴露无疑)
有商业也有开源OpenSSH

安装ssh:yum install -y ssh
启动ssh:systemctl start ssh
登录方式:
1.ssh  user@hostIP 
2.ssh hostIP
3.ssh -p 端口 user@hostIP 
回车输入密码即可登录
中间人攻击
SSH之所以能够保证安全,原因在于它采用了公钥加密。

整个过程是这样的:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。
口令登录
如果你是第一次登录对方主机,系统会出现下面的提示:
  $ ssh user@host
  The authenticity of host 'host (12.18.429.21)' can't be established.
  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
  Are you sure you want to continue connecting (yes/no)?
这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
  Are you sure you want to continue connecting (yes/no)? yes
系统会出现一句提示,表示host主机已经得到认可。
  Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
然后,会要求输入密码。
  Password: (enter password)
如果密码正确,就可以登录了。
当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。


五、公钥登录
使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
  $ ssh-keygen
运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
这时再输入下面的命令,将公钥传送到远程主机host上面:
  $ ssh-copy-id user@host
好了,从此你再登录,就不需要输入密码了。
如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。
  RSAAuthentication yes
  PubkeyAuthentication yes
  AuthorizedKeysFile .ssh/authorized_keys
然后,重启远程主机的ssh服务。
  // ubuntu系统
  service ssh restart
  // debian系统
  /etc/init.d/ssh restart


**authorized_keys文件**
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:
  $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
这条命令由多个语句组成,依次分解开来看:(1)"$ ssh user@host",表示登录远程主机;(2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:(3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;(4)'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。
写入authorized_keys文件后,公钥登录的设置就完成了。

Linux忘记密码

忘记Linux系统的root密码,重新安装系统吗 进入单用户模式更改一下root密码即可。
步骤如下:

  1. 重启linux系统

  2. 3 秒之内要按一下回车,出现如下界面

  3. 然后输入e

  4. 在 第二行最后边输入 single,有一个空格。具体方法为按向下尖头移动到第二行,按"e"进入编辑模式

  5. 在后边加上single 回车

  6. 最后按"b"启动,启动后就进入了单用户模式了

  7. 此时已经进入到单用户模式了,你可以更改root密码了。更密码的命令为 passwd

使用系统安装光盘的救援模式

救援模式即rescue ,这个模式主要是应用于,系统无法进入的情况。如,grub损坏或者某一个配置文件修改出错。如何使用rescue模式呢?

光盘启动,按F5 进入rescue模式

输入linux rescue 回车

选择语言,笔者建议你选择英语

选择us 键盘

这里问你是否启动网络,有时候可能会联网调试。我们选no

这里告诉我们,接下来会把系统挂载在/mnt/sysimage 中。

其中有三个选项:

  • Continue 就是挂载后继续下一步。
  • Read-Only 挂载成只读,这样更安全,有时文件系统损坏时,只读模式会防止文件系统进一步损坏。
  • Skip就是不挂载,进入一个命令窗口模式。

这里我们选择Continue。

至此,系统已经挂载到了/mnt/sysimage中。接下来回车,输入chroot /mnt/sysimage 进入管理员环境。

提示: 其实也可以到rescue模式下更改root的密码的。这个rescue模式和windows PE系统很相近。

当运行了chroot /mnt/sysimage/ 后,再ls 看到目录结构和原来系统中的目录结构是一样的。

没错!现在的环境和原来系统的环境是一模一样的。你可以输入exit 或者按Ctrl + D退出这个环境。然后你再ls 看一下

这个目录其实就是rescue模式下的目录结构,而我们的系统文件全部在 /mnt/sysimage目录下。

克隆多个虚拟机

克隆->创建链接克隆->name(起名)
​	修改名称 修改ip
vi /etc/sysconfig/network      ---修改名称
vi /etc/sysconfig/network-script/ifcfg-eth0 ---IP

日志

1.tail
命令格式: tail[必要参数][选择参数][文件]
	-f 循环读取
	-q 不显示处理信息
	-v 显示详细的处理信息
	-c<数目> 显示的字节数
	-n<行数> 显示行数
	-q, --quiet, --silent 从不输出给出文件名的首部
	-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
用法如下:
	tail  -n  10   test.log   查询日志尾部最后10行的日志;
	tail  -n +10   test.log   查询10行之后的所有日志;
	tail  -fn 10   test.log   循环实时查看最后1000行记录(最常用的)
一般还会配合着grep用,例如 :
 	tail -fn 1000 test.log | grep '关键字'
如果一次性查询的数据量太大,可以进行翻页查看,例如:
	tail -n 4700  aa.log |more -1000 可以进行多屏显示(ctrl + f 或者 空格键可以快捷键)

head
跟tail是相反的head是看前多少行日志

head -n  10  test.log   查询日志文件中的头10行日志;
head -n -10  test.log   查询日志文件除了最后10行的其他所有日志;


一般本人查日志配合应用的其他命令
history // 所有的历史记录
history | grep XXX  // 历史记录中包含某些指令的记
history | more // 分页查看记录
history -c // 清空所有的历史记录
!! 重复执行上一个命令
查询出来记录后选中 : !323




linux日志文件说明
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
/var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件



 ipmcset -t maintenance -d imtool 日志文件会到/tmp目录里,在从tmp目录把日志导出来  
 日志文件是xxxx日期.tar.gz   /tmp目录下的

换源

网易
阿里

换源 /etc/yum.repos.d/

1.备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

CentOS 6

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo

CentOS 7

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

CentOS 8

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

3.运行yum clean all 运行 yum makecache 生成缓存
4.其他非阿里云ECS用户会出现 Couldn’t resolve host ‘mirrors.cloud.aliyuncs.com’ 信息,不影响使用。用户也可自行修改相关配置: eg:

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/Cent

Vi编辑器(全屏文本编辑器)

1.打开文件
​		vim +N :打开文件,并定位于第N行      set nu(行数)nonu(关闭行数)
​		vim +:打开文件,定位至最后一行
​		vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首
​	2关闭文件-----末行模式:
​		:q 退出 没有动过文件
​		:wq 保存并退出  动过了,不后悔
​		:q! 不保存并退出 动过了,后悔了
​		:w 保存
​		:w! 强行保存
​		:wq --> :x
​		Shift+ZZ: 保存并退出  不需要冒号,编辑模式
​	三种模式:
​		1.编辑模式:按键具有编辑文本功能:默认打开进入编辑模式
​		2.输入模式:按键本身意义
​		3.末行模式:接受用户命令输入
​	三种模式切换:
​		1.编辑-->输入:
​			i: 在当前光标所在字符的前面,转为输入模式;
​			a: 在当前光标所在字符的后面,转为输入模式;
​			o: 在当前光标所在行的下方,新建一行,并转为输入模式;
​			O:在当前光标所在行的上方,新建一行,并转为输入模式; 
​			I:在当前光标所在行的行首,转换为输入模式
​			A:在当前光标所在行的行尾,转换为输入模式
​		2.输入-->编辑:ESC
​		3.编辑-->末行:用冒号:
​		4.末行-->编辑:
​			ESC, ESC(两下Esc)
​		编辑模式
​			移动光标
​			删除&替换单个字符
​			删除命令
​			复制粘贴
​			撤销&重做
​	移动光标
​		字符h: 左;j: 下;k: 上;l: 右
​		单词
​			w: 移至下一个单词的词首
​			e: 跳至当前或下一个单词的词尾
​			b: 跳至当前或前一个单词的词首
​		行内
​			0: 绝对行首
​			^: 行首的第一个非空白字符
​			$: 绝对行尾
​		行间
​			G:文章末尾
​			nG:第n行
​			gg:文章开头
​		翻屏
​			ctrl:f(后)b(前)
​		删除&替换单个字符
​			x:删除光标位置字符
​			3x:删除光标开始3个字符
​			r:替换光标位置字符
​		删除命令 : d 
​			dw删除一个单词(多个文件前面加数字)
​			dd删除一行(多个文件前面加数字)
​		复制粘贴&剪切 
​			yy:复制一整行
​			yw:复制某个单词
​			dd:剪贴
​			p:粘贴
​		撤销&重做
​			u  撤销
​			ctrl+r 重做 撤销的操作
​			.(点)重复上一步的操作
末行模式  **shift +** :
​	set:设置
​		set nu 添加/显示行数(number)
​		set nonu 删除/关闭行数(nonumber)
​		set readonly 只读  noreadonly(可以修改)
​	/:查找
​		/xxx:找xxx
​		n(向下翻)N(向上翻)
​		?向上查找
​	!:执行命令
​		:!ls -l /
​	s查找并替换
​		s/查找的字符串/要替换的字符串/gi
​			/:临近s命令的第一个字符为边界字符:/,@,#
​			g:一行内全部替换
​			i:忽略大小写
​	范围   
​		n:行号
​		.:当前光标行
​		+n:偏移n行
​		$:末尾行,$-3(留下最后三行)
​		%:全文
​		.,$从当前到末行

用户/用户组

用户:/etc/passwd

密码:/etc/shadow

id 用户名 查看id

useradd 创建用户 用户 /etc/passwd
格式: useradd [选项] 用户名
[-c] "commen"注释
[-d] 指定用户目录一般与-m一起使用 -m创建目录
[-g] 主组
[-G] 附加组
[-u] UID跟id差不多
[-s] 指定shell目录
[-l] 修改用户名称
usermod 修改用户
格式: usermod [选项] 用户名
[-c] "co mmen"注释
[-d] 指定用户目录一般与-m一起使用 -m创建目录
[-g] 主组
[-G] 附加组
[-u] UID跟id差不多
[-s] 指定shell目录
userdel 删除用户
格式: userdel 用户名
passwd 密码信息 密码 /etc/shadown
格式: passwd [选项] 用户名
[-l] 锁定用户
[-u] 解除锁定
[-o]

格式: groupadd [选项] 用户组名 /etc/group
[-g] UID
[-G] 附加组
[-u]
groupmod 修改用户
格式: usermod [选项] 用户名
[-c] "commen"注释
[-d] 指定用户目录一般与-m一起>使用 -m创建目录
[-g] 主组
[-G] 附加组
[-u] UID跟id差不多
[-s] 指定shell目录
groupdel 删除用户组

​ 密码

​ passwd

​ passwd 用户名

​ 切换用户 su/sudo

​ su 用户名

​ su - 用户名(直达)

用户权限/组

权限:
​ chmod rwx(读写执行) 421 ugo
​ 分三组 用户权限 (u) 用户组权限(g) 其他人权限(o)
修改组:
​ chown :改变属于者 命令用于设置文件所有者和文件关联组的命令
​ chown 属主:属组 目录

安装JDK

1.从Oracle官网上下载Java8版本。

2.上传Java包到Linux系统
使用rz命令将Java tar包上传到Linux系统。
3.解压Java安装包

tar -zxvf jdk1.8

4.进入linux操作系统配置环境变量

vim /etc/profile
方向下键,直至最后
JAVA_HOME=/home/software/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
配置完后输入“:wq”保存并退出
source /etc/profile //此命令作用是让配置文件重新加载
java -version //验证jdk环境是否撇嘴成功
export JAVA_HOME=/home/software/jdk1.8
export JAVA_BIN=/home/software/jdk1.8/bin  
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
 使配置文件生效: 
 . /etc/profile  或  source /etc/profile

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

正则(grep)

grep:显示匹配行
​ v:反显示
​ e:使用扩展正则表达式
​ 匹配操作符
​ \ 转义字符
​ . 匹配任意单个字符
​ [1249a],[^12],[a-k] 字符序列单字符占位
​ ^行首 $ 行尾
​ <,>:<abc 单词首尾边界
​ |连接操作符
​ (,)选择操作符
​ \n反向引用
​ 重复操作符:
​ ?匹配0到1次。
​ *匹配0到多次。
​ +匹配1到多次。
​ {n}匹配n次。
​ {n,}匹配n到多次。
​ {n,m}匹配n到m次。
​ 与扩展正则表达式的区别:grep basic
​ ?, +, {, |, (, and )
​ 匹配任意字符
​ . *

文本分析

​ cat 显示查看

​ -n:行数

​ fand查找

​ -name:名称

​ -size:大小

​ -user:文件属主文件

​ -type:文件类型

##1.cut:显示切割的行数据(切割文件生成指定的列)

​ -f:选择显示的列

​ -s:不显示没有分隔符的行

​ -d:自定义分隔符‘’

2.sort:排序文件的行------两种排序;1.字典序2.数值序

​ -n:数值顺序

​ -r:倒序

​ -t:自定义分隔符

​ -k:选择排序列

​ -u:合并相同行

​ -f:忽略大小写

3.wc 统计文件行数单词数字符数

​ 1.行数 2.单词数 3.字符数

​ -L:统计的行数

​ -w:统计的单词数

​ -c:统计字符数

4.sed :行编辑器

​ sed [参数] Address Command 文件

​ 参数:

​ -n: 静默模式,不再默认显示模式空间中的内容

​ -i: 直接修改原文件

​ -e SCRIPT -e SCRIPT:可以同时执行多个脚本

​ -f /PATH/TO/SED_SCRIPT

​ -r: 表示使用扩展正则表达式

​ Command

​ d: 删除符合条件的行;

​ p: 显示符合条件的行;

​ a \string: 在指定的行后面追加新行,内容为string

​ \n:可以用于换行

​ i \string: 在指定的行前面添加新行,内容为string

​ r FILE: 将指定的文件的内容添加至符合条件的行处

​ w FILE: 将地址指定的范围内的行另存至指定的文件中;

​ s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串

​ g: 行内全局替换

​ i: 忽略字符大小写

​ s///: s###, s@@@

​ (), \1, \2

​ 行编辑器Address

​ 可以没有

​ 给定范围

​ 查找指定行/str/

5.awk是一个强大的文本分析工具

​ 相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

​ 简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

​ awk -F ‘{pattern + action}’ {filenames} f:指定分隔符

​ 支持自定义分隔符 支持正则表达式匹配 支持自定义变量,数组 a[1] a[tom] map(key)

​ 支持内置变量

​ ARGC 命令行参数个数

​ ARGV 命令行参数排列

​ ENVIRON 支持队列中系统环境变量的使用

​ FILENAME awk浏览的文件名

​ FNR 浏览文件的记录数

​ FS 设置输入域分隔符,等价于命令行 -F选项

​ NF 浏览记录的域的个数

​ NR 已读的记录数

​ OFS 输出域分隔符

​ ORS 输出记录分隔符

​ RS 控制记录分隔符

​ 支持函数

​ print、split、substr、sub、gsub

​ 支持流程控制语句,类C语言

​ if、while、do/while、for、break、continue

软件安装

yum

Linux yum 命令
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
语法
yum [options] [command] [package ...]
选项:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 “yes”),-q(不显示安装的过程)等等。
命令:要进行的操作。
package:安装的包名。
yum常用命令
1. 列出所有可更新的软件清单命令:yum check-update
2. 更新所有软件命令:yum update
3. 仅安装指定的软件命令:yum install <package_name>
4. 仅更新指定的软件命令:yum update <package_name>
5. 列出所有可安裝的软件清单命令:yum list
6. 删除软件包命令:yum remove <package_name>
7. 查找软件包命令:yum search <关键字>
8. 清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :
清除缓存目录下的软件包及旧的 headers
EC
install [包名]安装
remove [包名]删除
info [包名]查看软件详情
deplist [包名]显示软件包依赖关系
list installed列出所有已经安装的包
update [包名]更新包
search [包名]查找,搜索包
list列出所有可安装和可更新的包
list extras列出所有已安装且不在资源库的包(外部资源安装,源码安装等)
provides [关键词]搜索特定包文件名[特定情形常用,比如已知so文件含有这些so的软件包]
repolist显示资源库的配置
reubstall [包名]重新安装软件包
其他选项
-e静默执行安装常用
-R[分钟]设置等待时间
-t忽略错误
-y自动应答,默认yes
check-update检查可更新的包
–nogpgcheck忽略GPG验证
–skip-broken忽略依赖问题,yum默认安装所有依赖,如果忽略,将只安装当前包

rpm安装

1.安装一个包

rpm -ivh

2.升级一个包

rpm -Uvh

3.移走一个包

rpm -e

4.安装参数
  –force 即使覆盖属于其它包的文件也强迫安装
  –nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
5.查询一个包是否被安装

rpm -q < rpm package name>

6.得到被安装的包的信息

rpm -qi < rpm package name>

7.列出该包中有哪些文件

rpm -ql < rpm package name>

8.列出服务器上的一个文件属于哪一个RPM包
  #rpm -qf
9.可综合好几个参数一起用

rpm -qil < rpm package name>

10.列出所有被安装的rpm package

rpm -qa

11.列出一个未被安装进系统的RPM包文件中包含有哪些文件?

rpm -qilp < rpm package name>

二、rpm包的卸载:
rpm -qa | grep 包名
这个命令是为了把包名相关的包都列出来
rpm -e 文件名
这个命令就是你想卸载的软件,后面是包名称,最后的版本号是不用打的
例如:

rpm -qa | grep mysql

mod_auth_mysql-2.6.1-2.2
php-mysql-5.3.9-3.15
mysql-devel-5.1.77-1.CenOS 5.2
mysql-5.0.77-1.CenOS 5.2
mysqlclient10-5.0.77-1.CentOS 5.2
libdbi-dbd-mysql-0.6.5-10.CentOS 5.2

rpm -e mysqlclient

apt

apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
apt 语法
  apt [options] [command] [package ...]
options:可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
command:要进行的操作。
package:安装的包名。
apt 常用命令
列出所有可更新的软件清单命令:sudo apt update
升级软件包:sudo apt upgrade
列出可更新的软件包及版本信息:apt list --upgradeable
升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade
安装指定的软件命令:sudo apt install <package_name>
安装多个软件包:sudo apt install <package_1> <package_2> <package_3>
更新指定的软件命令:sudo apt update <package_name>
显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>
删除软件包命令:sudo apt remove <package_name>
清理不再使用的依赖和库文件: sudo apt autoremove 
移除软件包及配置文件: sudo apt purge <package_name>
查找软件包命令: sudo apt search <keyword>
列出所有已安装的包:apt list --installed
列出所有已安装的包的版本信息:apt list --all-versions

git

1. git的安装
sudo apt-get install git
git --version    //查看git版本
2. git的使用
先解释一些概念,git分四层管理代码。
  1.你目录中的文件是第一层
  2.缓存区,每次add之后,当前目录中要追踪的文件会作为一个版本会存放在缓存区。注意不是所有的文件。一般一个文件生成之后,会标记为“未追踪”,但是否对其做版本管理还是要选择的。例如一些编译文件就没有必要追踪。对需要做版本管理的问件,用add添加,不需要的用clean删除。
  3.本地仓库,每次commit之后,缓存区最新的版本就会存放在本地仓库。这里要提及一个HEAD的概念。HEAD是当前的版本指向,每次更新或者回退都会修改HEAD的指向,但对仓库中每一个版本并不会删除。所以即使回退到过去还是有机会回到现在的版本的。
  4.远程仓库,每次push之后,会将本地仓库中HEAD所指向的版本存放到远程仓库
命令功能
git init在本地的当前目录里初始化git仓库
git status查看当前仓库的状态
git add -A增加目录中所有的文件到缓存区
git add file增加相应文件到缓存区
git commit -m “信息”将缓存区中更改提交到本地仓库
git log查看当前版本之前的提交记录
git reflog查看HEAD的变更记录,包括回退
git branch -b branch_name建立一个新的分支
git diff查看当前文件与缓存区文件的差异
git checkout – file取消更改,将缓存区的文件提取覆盖当前文件
git reset --hard 版本号回退到相应版本号,同样也可以回退到未来的版本号
git clean -xf删除当前目录中所有未追踪的文件
git config --global core.quotepath false处理中文文件名
git与github的链接
首先我们认为你已经有一个github的账户。
然后我们要建立SSH链接。这是一种通讯的加密协议。我先在我的笔记本上计算一对公钥和私钥,将公钥存储在github中,这样本地就可以通过SSH与github展开加密通讯。
建立方法,输入命令
ssh-keygen -t rsa -C "your_email@youremail.com" //双引号里面是你的常用邮箱
输入之后要输入口令,可以不用输入直接按“enter”一路确认就可以了。然后在账户的根目录(/或者/home/你的账户名,具体取决于你执行上述命令时所采用的账户)查找隐藏目录.ssh/id_rsa.pub文件,将当中内容添加到github中。
这样你就可以通过SSH链接到github中了。但是github作为一个远程仓库,你可以链接这个仓库,并保持同步。但是你不能把本地仓库直接上传到github中去。所以你应该先在github中建立一个对应的仓库,然后再在本地建立一个仓库,将两者进行链接,再去写入文件执行版本管理。所用到的命令有

git remote add origin git@github.com:<用户名>/<仓库名>.git
git pull origin master //因为github建立仓库时会有readme.md文件,先要拷贝一份
git push -u origin master //将本地仓库链接到master分支上,你当然可以链接到其他分支
git push//上传你的本地仓库

还有一种方法不用分两地建库再去链接。你可以只在github上建库,然后clone到本地目录中。

git clone git@github.com:<用户名>/<仓库名>.git

shell脚本

简介

Shell 教程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

Shell 环境
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的
脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
	Bourne Shell(/usr/bin/sh或/bin/sh)
	Bourne Again Shell(/bin/bash)
	C Shell(/usr/bin/csh)
	K Shell(/usr/bin/ksh)
	Shell for Root(/sbin/sh)

第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell)

#!/bin/bash
echo "Hello World !"

echo 命令用于向窗口输出文本。

运行shell方式

1.作为可执行程序
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

2.作为解释器参数
/bin/sh test.sh

echo

echo 命令用于向窗口输出文本
语法:echo string

1.显示普通字符串:
echo "It is a test"
echo It is a test

2.显示转义字符
echo "\"It is a test\""
结果将是:
"It is a test"

3.显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

#!/bin/sh
read name 
echo "$name It is a test"
以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:

[root@www ~]# sh test.sh
OK                     #标准输入
OK It is a test        #输出
4.显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
输出结果:

OK!

It is a test
5.显示不换行
#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
输出结果:

OK! It is a test
6.显示结果定向至文件
echo "It is a test" > myfile
7.原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'
输出结果:

$name\"
8.显示命令执行结果
echo `date`
注意: 这里使用的是反引号 `, 而不是单引号 '。

结果将显示当前日期

shell文件包含

Shell 文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。

Shell 文件包含的语法格式如下:

. filename   # 注意点号(.)和文件名中间有一空格

或

source filename
实例
创建两个 shell 脚本文件。

test1.sh 代码如下:

#!/bin/bash
url="http://www.runoob.com"
test2.sh 代码如下:

#!/bin/bash
# url:www.runoob.com

#使用 . 号来引用test1.sh 文件
. ./test1.sh

# 或者使用以下包含文件代码
# source ./test1.sh

echo "菜鸟教程官网地址:$url"
接下来,我们为 test2.sh 添加可执行权限并执行:

$ chmod +x test2.sh 
$ ./test2.sh 
菜鸟教程官网地址:http://www.runoob.com
注:被包含的文件 test1.sh 不需要可执行权限。

Linux内核源码下载地址

官网链接:

https://www.kernel.org/

HTTPhttps://www.kernel.org/pub/
GIThttps://git.kernel.org/

官网下载经常速度太慢,无法下载,提供另一个链接:

http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

可以根据需要,下载对应内核版本

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翱远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值