Linux学习笔记
- 励志
- 第一章 linux操作系统
- 一、简介
- 二、安装vmware
- 三、安装linux
- CentOS 7 :
- 四、安装finalshell
- 五、linux目录结构
- 1.基本介绍:
- 2.目录结构具体介绍:
- 3.linux目录总结
- 第二章 linux命令
- 一、shell简介
- 1.1 shell版本
- 1.2 shell命令类型
- 1.3 shell变量类型
- 二、最常用命令
- 2.0 标准输入、输出设备:
- 2.0 重定向:
- 2.1 帮助命令
- 2.1.1 man命令
- 2.1.2 help命令
- 2.2 目录相关命令
- 2.2.1 pwd
- 2.2.2 ls
- 2.2.3 cd
- 2.2.4 mkdir
- 2.2.5 rmdir
- 2.2.6 cp
- 2.2.7 mv
- 2.2.8 rm
- 2.2.9 ln
- 2.2.10 rename
- 2.3 文件相关命令
- 2.3.0 linux文件描述符:
- 2.3.1 touch
- 2.3.2 cat
- 2.3.3 more
- 2.3.4 head
- 2.3.5 tail
- 2.3.6 wc
- 2.3.7 stat
- 2.3.8 file
- 2.3.9 wget
- 2.3.10 vim
- 2.4 查找命令
- 2.4.1 find
- 2.4.2 grep
- 2.4.3 which
- 2.5 压缩解压
- 2.5.1 tar
- 2.5.2 zip和unzip
- 2.5.3 gzip和gunzip
- 2.6 日期命令
- 2.6.1 date
- 2.7 进程线程命令
- 2.7.1 ps
- 2.7.2 top
- 2.7.3 pidof
- 2.7.4 pstree
- 2.7.5 kill 常用
- 2.7.6 killall
- 2.8 系统状态检测命令
- 2.8.1 ifconfig
- 2.8.2 netstat (重要)
- 2.8.3 uname
- 2.8.4 uptime
- 2.8.5 free
- 2.8.5 who
- 2.8.6 last
- 2.8.7 history
- 2.9 关机命令
- 2.9.1 reboot
- 2.9.2 poweroff
- 2.9.3 halt
- 2.9.4 shutdown
- 2.10 存储设备的挂载
- 第三章 权限管理
- 一、权限简介
- 二、创建用户和组
- usermod命令
- 三、基础权限
- 四、如何查询文件权限属性
- 五、文件属性解释
- 六、chmod以字符形式改变文件
- 七、chmod以数字形式改变文件
- 八、权限提升
励志
众里寻他千百度,蓦然回首,那人却在灯火阑珊处
第一章 linux操作系统
一、简介
Linux 是一套免费使用
和自由传播
的类 Unix 操作系统,是一个多用户、多任务、支持多线程和多 CPU的操作系统。
既然Linux也是一个操作系统,那大家肯定会下意识将它和Windows系统做比较,两者当然也是有优有劣。相对于Windows来说,Linux是完全免费的,开放源码
,为用户提供了最大限度的自由度。且Linux更加稳定更加安全,所以通常作为服务器的操作系统使用。
Linux是一个诞生于网络、成长于网络且成熟于网络的奇特的操作系统。1991年10月,由芬兰大学生Linus Torvalds带头编写而成,其后一大批知名的、不知名的电脑黑客、编程人员加入到开发过程中来,Linux逐渐成长起来
Linux的主要特点
- 完全免费:Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。
- 安全性:Linux采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。
- 多用户:操作系统资源可以被不同用户使用,每个用户对自己的资源有特定的权限,互不影响。多任务:计算机同时执行多个程序,而同时各个程序的运行互相独立。
- 独立性:Linux是具有设备独立性的操作系统,内核具有高度适应能力。
- 可移植性:Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。
Linux内核:kernel
Linux内核版本由三个数字组成: r.x.y
r:目前发布的kernel版本
x:偶数:稳定版本, 奇数:开发版本
y:错误修补次数
常见的操作系统
- Windows:由微软公司成功开发,是一个多任务的操作系统,它采用图形窗口界面,用户对计算机的各种复杂操作只需要通过点击鼠标就可以实现。
- UNIX:是一个强大的多用户、多任务的操作系统,支持多种处理器架构,按照操作系统的分类,属于分时系统。Linux的思想源于Unix。
- Mac OS:是一套运行于苹果Macintosh系列电脑上的操作系统。从本质上讲,Mac OS 也是UNIX的一个变体。
- Android:是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
- iOS:是苹果公司开发的移动端的操作系统。iOS与苹果的MacOS操作系统一样,属于类Unix的商业操作系统。
- HarmonyOS:华为鸿蒙系统是基于微内核的全场景分布式OS,可按需扩展,实现更广泛的系统安全,主要用于智能物联网,特点是低时延,甚至可到毫秒级乃至亚毫秒级,由华为技术有限公司开发。
二、安装vmware
https://pc.qq.com/search.html#!keyword=vmware普通下载
https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html官网下载
可根据需要安装到其他盘
三、安装linux
CentOS 7 :
介绍:
- CentOS 7根分区的文件系统类型:ext4
其他文件类型:
DOS:fat
Window:vfat、ntfs
安装:
下载地址1:
https://developer.aliyun.com/mirror/下载地址2:
http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
Step1:
Step2:
Step3:
Step4:
Step5:
Step6:建议不要超过本机的一半
Step7:
Step8:
Step9:
Step10:
Step11:
Step12:
Step13:
Step14:
Step15:
Step16:
Step17:
可能出现的问题 :Intel VT-x 处于禁用状态
解决方法:
https://jingyan.baidu.com/article/fc07f98976710e12ffe519de.html
四、安装finalshell
链接
http://www.hostbuf.com/
链接linux系统
我们需要IP地址和端口链接,本机的IP(127.0.0.1)localhost。
就必须使用虚拟机和主机建立一个局域网,能够互相连接上。
NAT协议,创建局域网
NAT协议 NAT(Network Address Translation,网络地址转换)
查看子网ip和子网掩码
IP地址主要是用来表示计算机的网络位置,他处于哪一个网络。IP地址和子网掩码共同帮助我们定位一个计算机在网络中的位置。
ip地址和子网掩码其实是个32位的二进制数字
这ip地址默认也可以
(win10 管理员权限打开)
查看ip范围
查看网关号
网络内传输,就有了网关这么一个概念,网关(Gateway)就是一个网络连接到另一个网络的“关口”。从一个房间走到另一个房间,必然要经过一扇门,这一扇门便是网关。
前三位与ip保持一致,后一位不同
点击i,进入编辑模式,左下角出现insert
先按 esc 退出编辑模式,再按 shfit+: 进入命令模式,再输入 wq ,点击回车保存并退出。
国内的DNS:
第一名
114DNS:★★★★★
114DNS开启DNS高可靠服务时代的大幕。114DNS开始同时为公众提供高速、稳定、可信的DNS递归解析服务;为网站提供强大抗攻击能力的权威智能DNS解析服务;为ISP提供可靠的DNS灾备及外包服务,作为国内用户量最大的老牌DNS,访问速度快,各地区设有节点,负载各运营商用户,DNS防劫持能力,自然也是名列前茅。
DNS 服务器 IP 地址:
首选:114.114.114.114备选:114.114.114.115
2017公共DNS服务器地址评估—DNS推荐
第二名
DNSPod DNS:★★★★★
DNSPod创始于2006年3月,是中国最大的第三方域名服务商,全球排名第四位。DNSPod是国内最早提供免费智能DNS产品的网站,致力于为各类网站提供高质量的电信、网通、教育网双线或者三线智能DNS免费解析,作为114DNS竞争对手之一,无论是访问速度,还是各地区节点覆盖率以及防劫持能力都是顶级的。
DNS 服务器 IP 地址:
首选:119.29.29.29
备选:182.254.116.116
2017公共DNS服务器地址评估—DNS推荐
第三名
阿里 DNS:★★★★★
阿里公共DNS是阿里巴巴集团推出的DNS递归解析系统,作为国内最大的互联网基础服务提供商,阿里巴巴在继承多年优秀技术的基础上,通过提供性能优异的公共DNS服务,为广大互联网用户提供最可靠的面向互联网用户提供“快速”、“稳定”、“智能”的免费DNS递归解析服务。
DNS 服务器 IP 地址:
首选:223.5.5.5
备选:223.6.6.6
2017公共DNS服务器地址评估—DNS推荐
打开本机cmd ping + ip地址
ping 命令通常用来作为网络可用性的检查。
原理:向指定的网络地址发送一定长度的数据包,按照约定,若指定网络地址存在的话,会返回同样大小的数据包,当然,若在特定时间内没有返回,就是“超时”,会被认为指定的网络地址不存在。
返回数据:
"字节=32"表示ICMP报文中有32个字节的测试数据;
"时间<1ms"是往返时间。
"已发送=4"发送多个秒包、"已接收=4"收到多个回应包、"丢失=0"丢弃了多少个;
TTL (time to live)生存时间 简单来说,描述经过了多少个设备。
TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64。
这个含义其实就指的是报文在网络中能够存活的限制。以前这个限制方式是设定一个时间(Time To Live中的daoTime就是这样来的),当报文在网络中转发时,时间超过这个限制,最后一个收到报文的路由点就会把它扔掉,而不继续转发。后来把时间限制改为了跳数限制,就是当报文在网络中转发时,每经过一个路由点,就把预先设定的这个TTL数值减1,直到最后TTL=1时报文就被扔掉,不向下转发。
打开安装好的FinalShell
五、linux目录结构
1.基本介绍:
- linux的文件系统是采用级层式的树状目录结构
- 在此结构中最上层是根目录“/”,然后在此目录下再创建其它的目录。
- 目录项是记录文件基本信息的数据结构。
- 文件目录是多个目录项的集合。
- 目录文件是目录项的集合组成的文件。
- Linux文件系统使用索引节点来记录文件除文件名之外的文件基本说明信息。
- 在linux世界里。一切皆文件
2.目录结构具体介绍:
- /,根目录
- root,存放root用户的相关文件home,存放普通用户的相关文件
- bin,存放常用命令的目录,如vi,su
- sbin,要具有一定权限才可以使用命令
- mnt,默认挂载光驱和软驱的目录
- etc,存放配置的相关文件
- var,存放经常变化的文件,如网络连接的sock文件、日志
- boot,存放引导系统启动的相关文件
- usr,安装一个软件的默认目录,相当于windows下的program
- filesproc,这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
- srv,service缩写。该目录存放一些服务启动之后需要提取的数据
- sys,这是linux2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统tmp,这个目录是用来存放一些临时文件的
- del,类似于windows的设备管理器,把所有的硬件用文件的形式存储
- media,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。
- opt,这是给主机额外安装软件所摆放,如安装oracle数据库就可放到该目录下默认为空。
- selinux,selinux是一种安全子系统,它能控制程序只能访问特定文件。
3.linux目录总结
- linux的目录中有且只有一个根目录/
- linux的各个目录存放的内容是规划好的,不用乱放文件,
- linux是以文件的形式管理我们的设备,因此linux系统,一切皆文件
- linux的各个文件目录下存放什么内容,大家必须有一个认识,
- 你的脑海里应该有一颗linux的目录树。
相对路径 : 相对于当前的路径:在小航跟前坐着的小樊
绝对路径 :一个绝对的路径:行知楼C座227倒数第五排第四个正在刷抖音的小樊
第二章 linux命令
我们操作通常有2种方式:第一种就是通过桌面图形化操作;另外一种则是通过终端输入命令。
针对服务器而言我们通常是采用远程连接工具连接到服务器,然后以 命令 的方式进行管理。我们输入命令后计算机怎么就知道该做什么呢?那就得靠命令行工具(也称终端)进行翻译解释,然后调用相应的接口服务完成特定的功能。
用户与linux系统的交互是通过 shell终端 ,下文讲先分析shell命令行工具,再讲解最基础的linux命令。
一、shell简介
计算机硬件是由 运算器、控制器、存储器、输入/输出
设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。
Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务。因此,系统内核对计算机的正常运行至关重要,一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机
,以满足日常工作的需要。而shell就是这样一个客户端命令行工具,充当用户与系统内核沟通的桥梁。
- Shell也称“终端”、“壳”,即一种用c语言写的命令行工具,充当人与内核(硬件)之间的
翻译官
,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。 - shell是系统的用户界面。
- shell提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。起着用户与系统之间进行交互的作用。
shell命令解释过程:
shell提示符:
登录提示符:
- 超级用户:#
- 普通用户:$
1.1 shell版本
列举几种常见的shell版本:
- sh(Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用 。在shell编程方面做的很优秀,但是在处理与用户的交互方面做得不如其他几种shell。
- bash(Bourne Again Shell):Linux默认,是Bourne Shell的扩展。完全兼容Bourne Shell,并在他基础上增加了很多特性如命令补全、命令历史等。它还包含了很多C Shell和KornShell中的优点,有灵活和强大的编辑接口,同时有很友好的用户界面。
- csh(C Shell):一种比Bourne Shell更适合的变种Shell,语法与C语言很相似。
- Tcsh:Linux提供的C Shell的一个扩展版本。 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 BashShell 更多的提示符参数 。
- ksh(Korn Shell): 集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
- pdksh: Linux 系统提供的 ksh 的扩展。 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。
现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器 。 主流 Linux 系统选择 Bash 解释器作为命令行终端主要有以下 4 项优势 :
- 通过
上下方向键来调取
过往执行过的 Linux 命令; - 命令或参数仅需输入前几位就可以用
Tab 键补全
; - 具有强大的
批处理
脚本; - 具有实用的
环境变量
功能。
我们装好的centos7默认也是采用的bash终端
,当采用远程连接工具连接到centos7,默认开启的终端就是bash,可以通过在终端中输入命令:echo $SHELL
进行查看,得到的结果为:/bin/bash。
如何判断当前终端的类型?
通过"echo $SHELL" 命令或通过"evn"终端命令
如何更改登录的终端类型?
通过终端命令chsh,如:chsh -s /bin/bash将登录终端改为bashPs:
echo:打印命令
通过echo命令来打印环境变量:echo $SHELL
env: 用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。
变量定义:定义在新的环境中变量,定义多个变量定义用空格隔开。格式为“变量名=值”;
1.2 shell命令类型
shell是一个程序,用于用户和操作系统进行交互,相当于是一个命令解析器。作为用户和内核交互的接口,既是一种命令语言又是一种程序设计语言。shell命令又分为内置命令和外部命令。
- 内置命令
内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中
。内部命令是写在bashy源码里面的,其执行速度比外部命令快
,因为解析内部命令shell不需要创建子进程
。比如:exit,history,cd,echo等 。 - 外置命令
外部命令是linux系统中的实用程序部分,因为实用
程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存
。通常外部命令的实体并不包含在shell
中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装
的,通常放在/bin,/usr/bin,/sbin,/usr/sbin…等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等。外部命令的代码则存放在一些二进制的可执行文件或者shell脚本中。
如何区分是内部命令还是外部命令?
- 通过type命令,如:type cd 可以看到是内部命令;type mkdir可以看到是外部命令。
- 通过man命令,如:man cd,会提示是bash的内置命令;man ls,会提示是外部命令。
内部命令和外部命令最大的区别之处就是性能。
内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。
1.3 shell变量类型
- 内部变量:由系统提供,用户只能使用,不能修改。
- 用户变量:由用户建立和修改,在shell脚本编写中会经常遇到。
- 环境变量:这些变量决定的用户的工作环境,它们不需要用户去定义,可以直接在shell中使用,其中某些变量用户可以修改。所有环境变量都是全局变量。
通常个人设置的环境变量都定义在 ~/.bashrc 文件里
shell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名。
常见的shell环境变量:
二、最常用命令
既然 Linux 系统中已经有了 Bash 这么好用的“翻译官”,那么接下来就有必要好好学习怎么跟它沟通了。要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根 据实际情况来灵活调整各种命令的参数 。
linux执行命令一般格式:*命令名称 [命令参数] [命令对象]*
命令名称、命令参数、命令对象之间用空格键分隔。命令对象一般是指要处理的文件、目录、用户等资源 ,命令参数则可以用长格式(–)或短格式(-)。
2.0 标准输入、输出设备:
2.0 重定向:
重定向:不使用系统的标准输入端口、标准输出端口或者标准错误端口,而进行重新的指定。在shell中,实现重定向主要依靠重定向符实现。(shell检查命令行有无重定向符来决定是否实施重定向)
- 输出重定向:>(覆盖式) , >>(追加式)
- 输入重定向:<
- 错误重定向:
空设备: /dev/null(经常利用输出重定向到空设备来屏蔽命令的输出或错误输出)
2.1 帮助命令
帮助命令主要有2个:man、help。平时遇到不清楚的命令就用帮助命令查看,无须死记硬背,熟能生巧。
2.1.1 man命令
语法:man [命令或配置文件]
作用:获取帮助信息
示例:man date
Ps:由于帮助信息比较多,需要翻页才能看完,因此先说明一下本界面可能需要用到按键及用途。
按键 | 用途 |
空格键 | 向下翻页 |
PgDn (page down) | 向下翻页 |
PgUp (page up) | 向上翻页 |
home | 前往首页 |
end | 前往页尾 |
/ | 从上至下搜索关键字,如“/linux” |
? | 从下至上搜索关键字,如“?linux” |
n | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
q | 退出帮助文档 |
我们来梳理一下帮助信息的结构:
结构名称 | 说明 |
NAME | 命令的名称 |
SYNOPSIS | 命令的基本语法格式 |
DESCRIPTION | 详细说明语法格式对应的选项和参数的用法 |
EXAMPLES | 如何使用命令的示例 |
OVERVIEW | 概述 |
DEFAULTS | 默认功能 |
OPTIONS | 具体的可用选项 |
ENVIRONMENT | 环境变量 |
SEE ALSO | 相关的资料,通常是手册页 |
2.1.2 help命令
语法:help 命令
作用:获取shell内置命令的帮助信息在正式进入命令学习之前,再介绍几个linux常用的快捷键
快捷键 | 作用 |
Ctrl+l | 清屏(clear) |
Ctrl+q | 退出(quit) |
Ctrl+c | 停止进程(cut) |
上下键 | 查找曾今执行过的命令 |
Tab | 命令补全,多用不仅提高效率还能防止敲错 |
2.2 目录相关命令
目录可以对文件进行分类管理
2.2.1 pwd
语法:pwd
功能描述:显示当前工作目录的绝对路径
2.2.2 ls
语法:ls [选项] [目录或文件]
功能描述:列出目录下的文件
选项:
-a(–all):显示全部文件,包括隐藏文件(以.开头的文件)
-d:directory,列出目录本身
-l:long长数据串列出,包含文件的属性和权限等。每行列出的信息依次为:文件类型与权限、链接数、文件属性、文件属组、文件大小(byte)、创建或最近修改时间、名字
eg.
第 1 列:文件属性
文件类型
- – : 普通文件(一般文件)
- b : 块设备文件(Block)(磁盘设备文件)
- d : 目录文件(Dir)(文件夹)
- c :字符设备文件(Char)(和磁盘设备文件,主要是和周边硬件连接,作为系统和硬件之间的接口)
- I :符号链接(Link)(类似windows下的快捷方式一样的东西)
- p :命名管道(Pipe),也叫连接文件(是一种内部进程通信的机制,一个进程把数据写入Pipe中,另一个进程则由Pipe读 取数据,数据采用先进先出(FIFO)的次序,称为管道)
- s:套接字
文件的访问权限(r 读权限,w 写权限,x 可执行权限
)
- 2-4 字符:
文件所有者
对文件的访问权限 - 5-7 字符:
同组用户
对文件的访问权限 - 8-10 字符:
其它用户
对文件的访问权限
此例文件类型为普通文件
,文件所有者对文件的访问权限是可读可写
,同组用户对文件的访问权限是可读
,其它用户对文件的访问权限是可读
。
第 2 列:文件link数或目录子目录数
此例文件link数为 1
第 3 列,第 4 列:文件主的名字和组名
此例文件主的名字为 root,组名为 root
第 5 列 文件大小
- 普通磁盘文件:列出文件大小(字节数)
- 目录:列出目录表大小
- 符号连接文件:列出符号连接文件自身的长度
- 字符设备和块设备文件:列出主设备号和次设备号
- 管道文件:列出管道内的数据长度
此例为普通磁盘文件,文件大小26字节
第 6 列:文件最后一次被修改的日期和时间
此例文件最后一次被修改的时间是 11月23日 20:40
第 7 列:文件名
对于符号连接文件,附带列出符号连接文件的内容
此例文件名为 test1.txt
2.2.3 cd
语法: cd [选项][目录名称]
功能描述:切换到指定目录
案例:
cd 绝对路径或相对路径 (跳转到指定目录)
cd 或cd ~ (返回当前用户家目录)
cd - (返回上一次所在的目录)
cd . ./ (返回当前目录的上一级目录). ./ 上一级目录
./ 当前目录
~ 用户的的home家目录
2.2.4 mkdir
语法:mkdir [选项] 目录名称
功能描述:创建指定目录
选项:
-p :parents,创建多层目录
2.2.5 rmdir
语法: rmdir [选项] 目录名称
功能描述:删除空目录
选项:
-p:删除多级目录
2.2.6 cp
语法:cp 源目录或文件 目标目录或文件
功能描述:复制目录或文件
选项:
-r:recursive,递归复制整个文件夹
2.2.7 mv
语法:mv [选项] 源 目标
功能描述:移动文件或重命名文件
2.2.8 rm
语法:rm [选项] 文件
功能描述:删除文件及目录
选项:
-f:force强制执行
-r:recursive递归执行
通配符
*
rm -f *
2.2.9 ln
语法:ln [选项] 源文件 目标文件
功能描述:创建软(符号)或硬链接,实现文件的共享
选项:
-s 创建软链接(如果不带 -s 参数,默认创建硬链接)
-f 强制创建文件或目录的链接
-i 覆盖前先询问
-v 显示创建链接的过程
硬链接:
- 链接文件和被链接文件必须位于同一个文件系统内(不可跨越文件系统)
- 普通用户不能建立指向目录的硬链接
- 创建目录项,在文件系统中允许不止一个目录项指向同一个文件
- 几乎不占用空间
软链接:
- 链接文件和被链接文件可以位于不同的文件系统内(可跨越文件系统)
- 可以建立指向目录的硬链接
- 将一个文件指向另外一个文件的文件名
- 占用少量的空间存放索引节点和路径信息
- 如果链接指向的文件被移走,则无法通过软链接进行访问
2.2.10 rename
查看自己的name版本
C版本:
语法:rename from to file
功能描述:修改、重命名、批量重命名文件
选项:
from : 修改什么名字
to:改成什么名字,
file 需要修改的文件是哪些
Perl版本(支持正则处理):
语法:rename [选项] perlexpr [filenames]
功能描述:修改、重命名、批量重命名文件
选项:
-v(verbose)打印被成功重命名的文件
-n(no-act)只显示将被重命名的文件,而非实际进行重命名操作
-f(force)覆盖已经存在的文件
rename支持通配符
?
可替代单个字符
*
可替代多个字符
常用正则:
2.3 文件相关命令
2.3.0 linux文件描述符:
文件描述符是一个非负的索引值(一般从3开始,0、1、2已经被使用),指向内核中的 “文件记录表”,内核为进程中要打开的文件维护者一个“文件记录表;
- 当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符(内核记录表某一栏的索引);
- 当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。
- Linux 下所有对设备和文件的操作都使用文件描述符来进行。
0:表示标准输入
1:表示标准输出
2:表示标准出错处理
linux文件系统中,文件在外存的物理地址放在索引节点中。
CD-ROM标准的文件系统类型是iso9660
2.3.1 touch
语法:touch [选项] 文件名
功能描述:创建文件、将已存在的文件的时间标签修改为系统当前的时间
Ps:
echo
语法:echo 字符串或变量
功能描述:输出字符串或变量值,还可以搭配从定向符将内容存储到文件
2.3.2 cat
语法:cat [选项] 文件名
功能描述:查看文件内容,从第一行开始显示
选项:
-A:列出特殊字符而非空白
-b:列出行号,空白行不算行号
-n:列出行号,空白行也会有行号
-v:列出一些看不出来的特殊字符
cat命令可以把f1.txt复制为f2.txt
2.3.3 more
语法:more [选项] 文件
功能描述:查看文件内容,一页一页的显示
使用说明:
空格键(space):向下翻一页
enter:向下翻一行
q:退出more,不在显示文件内容
ctrl+f:向下滚动一屏
ctrl+b:返回上一屏
=:输出当前行的行号
:f:输出文件名和当前行号
2.3.4 head
语法:head [选项] 文件
功能描述:查看文件内容,只看头几行
选项:
-n:查看头n行
2.3.5 tail
语法:tail [选项] 文件
功能描述:查看文件内容,只查看文件末尾几行
选项:
-n:末尾几行
-f:follow输出文件修改的内容,用于追踪文件修改
2.3.6 wc
语法:wc [选项] 文本
功能描述:统计指定文本的行数、字数、字节数
选项:
-l:lines显示行数
-w:显示单词数
-c:显示字节数
2.3.7 stat
语法:stat [选项] 文件
功能描述:查看文件的具体存储信息和时间等信息
2.3.8 file
语法:file 文件名
功能描述:查看文件类型
2.3.9 wget
语法:wget [参数] [url地址]
功能:下载网络文件
参数:
-b:background后台下载
-P:directory-prefix下载到指定目录
-t:tries 最大尝试次数
-c:continue断点续传clear
-p:page-requisites下载页面所有内容,包括图片、视频等
-r:recursive递归下载
2.3.10 vim
Vim 文本编辑器
常用总结:
模式:
- 正常模式(普通模式):可以使用快捷键命令,或按:输入命令行。
- 命令模式(命令行模式):正常模式下,按R进入。
- 插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。
- 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式,总是整行整行的选中。ctrl+v进入可视块模式。
2.4 查找命令
有时候需要从大量文件中找出需要的文件或者从指定文件中查找特定内容,这就需要用到查找相关的命令。
2.4.1 find
语法:find [搜索范围] [匹配条件]
功能描述:查找文件或目录
参数说明
-name:按文件名称查找
-user:按文件拥有者查找
-size:根按文件大小查找文件(+n大于,-n小于,n等于)
2.4.2 grep
语法:grep [参数] 查找内容 源文件
功能描述:在文件内搜索字符串匹配的行并输出
参数:
-c:count只输出匹配行的计数
-n:line-number
2.4.3 which
语法:which [选项] 命令
功能描述:搜索命令所在目录及别名信息
2.5 压缩解压
为了便于传输或节省存储空间有时候文件是以压缩包的形式存在,因此就需要了解压缩与解压相关命令。
2.5.1 tar
语法:tar [参数] 包名.tar.gz 待打包的内容
功能描述:打包目录,压缩后的文件格式为.tar.gz
参数:
-c:create生成.tar打包文件
-x:extract解包.tar文件
-v:verbose显示tar处理的详细信息
-f:file指定压缩后的文件名,f后必须跟文件名,也就是说你不能写成这样 tar -zxfv xh.tar.gz
-z:打包同时压缩 变成.gzip文件
-j:用bzip2来压缩/解压文件
-C:解压到指定目录
-t:列出打包文件的内容,查看已经打包了哪些文件
tar.gz是一个压缩包,.tar只是打包而没有压缩
注意:-f 文件名是一个整体
2.5.2 zip和unzip
语法:
压缩:zip [参数] 包名.zip 待压缩内容
解压:uzip 包名.zip
功能描述:压缩文件和目录,windows和linux通用且可以压缩目录并保留源文件
参数:
-r:recurse-paths递归压缩目录
2.5.3 gzip和gunzip
语法:
压缩:gzip [参数] 文件
解压:gunzip [参数] 文件.gz
功能描述:
压缩:压缩文件,只能将文件压缩为.gz文件。只能压缩文件不能压缩目录,压缩解压后不保留原来的文件。对单个文件压缩
解压:解压文件
2.6 日期命令
日期相关命令用于设置或获取系统日期。
2.6.1 date
语法:date [选项] [格式]
功能描述:显示或设置时间
参数:
-s:set 以字符串格式设置时间格式:(注意区分大小写)
+%Y:显示当前年份
+%m:显示当前月份
+%d:显示当前是哪一天
+%H:显示当前小时
+%M:显示当前分钟
+%S:显示当前秒数
+%Y%m%d:显示当前年月日
“+%Y-%m-%d %H:%M:%S”:显示当前年月日时分秒 (用引号括起来)
2.7 进程线程命令
任务都以进程或线程的形式存在,因此需要随时关注系统的进程,查看是否有异常进程以及各进程占用
系统资源的情况并使用不同的进程管理命令对进程管理和控制。
进程启动方式:
2.7.1 ps
语法:ps [选项]
功能描述:查看系统中所有进程
参数:
-a:all 显示现行终端机下的所有程序,包括其他用户的程序(比如多克隆几个会话执行不同命令,也会列出来)
-u:userlist 以用户为主的格式来显示程序状况
-x: 显示所有程序,不以终端机来区分
项 | 含义 |
USER | 进程是由哪个用户产生的 |
PID | 进程ID |
%CPU | 该进程占用CPU的百分比,占用越高,进程越耗费资源 |
%MEM | 该进程占用内存的百分比,占用越高,进程越耗费资源 |
VSZ | 占用虚拟内存的大小,单位KB |
RSS | 占用实际物理内存的大小,单位KB |
TTY | 表示该进程在哪个终端中运行,tty1-tty7代表本地控制台终端(tty1-tty6是本地的字符界面终端,tty7是图形终端),pts/0-255代表虚拟终端 |
STAT | 进程状态,常用状态有:R(运行)、S(睡眠)、T(停止状态)、s(包含子进程)、+(位于后台) |
START | 进程启动时间 |
TIME | 进程执行时间,即占用cpu的运算时间,不是系统时间 |
COMMAND | 产生此进程的命令名 |
2.7.2 top
语法:top [选项]
功能描述:查看系统健康状态
参数:
-d 秒数:Delay-time,指定top命令每隔几秒更新,默认是3秒。
-i:Idle-process,使top命令不显示任何闲置或者僵死进程
-p:Monitor-PIDs ,通过指定监控进程ID来仅仅监控某个进程的状态
-s:Secure-mode,使top在安全模式运行,去除交互命令所带来的潜在危险
在此界面可以通过如下相应按键进行排序操作
操作键 | 说明 |
shift+n | 以PID排序 |
shift+m | 以内存排序 |
shift+p | 以cpu使用率排序,默认选项 |
q | 退出top |
命令结果解释
第一行:任务队列信息
内容 | 说明 |
12:20:42 | 当前系统时间 |
up 1 day, 14:12 | 系统运行时间 |
3 users | 当前登录用户数 |
load average:0.08,0.01, 0.05 | 系统在之前1分钟、5分钟、15分钟的平均负载,一般认为小于1时,负载较小,如果大于1说明系统已经超出负载 |
第二行:进程信息
内容 | 说明 |
Tasks: 395 total | 系统中的总进程数 |
1 running | 正在运行的进程数 |
391 sleeping | 睡眠的进程 |
3 stopped | 正在停止的进程 |
0 zombie | 僵尸进程,如果不是0,需要手工检查僵尸进程 |
第三行:cpu信息
内容 | 说明 |
%Cpu(s): 0.0us | 用户模式占用的cpu百分比 |
1.0 sy | 系统模式占用的cpu百分比 |
0.0 ni | 改变过优先级的用户进程占用的cpu百分比 |
99.0 id | 空闲cpu的百分比 |
0.0 wa | 等待输入、输出的进程占用cpu的百分比 |
0.0 hi | 硬中断请求服务占用的cpu百分比 |
0.0 si | 软中断请求服务占用的cpu百分比 |
0.0 st | steal time虚拟世界百分比,当有虚拟机时,虚拟cpu等待时机cpu的时间百分比 |
ps:如果服务器有多个cpu,将显示多行
第四行:物理内存信息
内容 | 说明 |
KiB Mem: 1870784 total | 物理内存的总量,单位KB |
720520 used | 已使用的物理内存数量 |
1150264 free | 空闲的物理内存数量 |
880 buffers | 作为缓冲的内存数量 |
第五行:交换分区信息
内存 | 说明 |
KiB Swap: 2097148 total | 交换分区(虚拟内存)的总大小 |
0 used | 已经使用的交换分区的大小 |
2097148 free | 空闲交换分区的大小 |
238616 cached Mem | 作为缓存的交换分区的大小 |
第六行:空行
第七行:表头信息
内容 | 说明 |
PID | 进程id |
USER | 进程所有者 |
PR | 进程优先级 |
NI | 负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 进程名称(命令名/命令行) |
2.7.3 pidof
语法:pidof [参数] 服务名称
功能描述:查询某个指定服务进程的pid值
2.7.4 pstree
语法:pstree [选项]
功能描述:查看进程树
选项:
-p:显示进程的PID
2.7.5 kill 常用
语法:kill [选项] 进程id
功能描述:终止某个指定pid的服务进程
选项:
-9:强迫进程立即停止
2.7.6 killall
语法:killall [选项] 服务名
功能描述:终止某个指定名称的服务对应的所有进程
2.8 系统状态检测命令
通过相关命令检查系统状态以及资源耗用情况,保证系统健康稳定运行。
2.8.1 ifconfig
语法:ifconfig [网络设备] [参数]
功能描述:获取网卡配置和网络状态信息主要查看内容:网卡名称(eno16777736 )、ip地址(inet之后)物理网卡地址即mac地址
(ether)、TX和TX接收和发送数据包的个数和累计流量
2.8.2 netstat (重要)
语法:netstat [参数]
功能描述:显示整个系统目前网络情况,比如目前的链接、数据包传递数据、路由表内容等
2.8.3 uname
语法:uname [选项]
功能描述:查看系统内核和系统版本等信息
参数:
-a:all显示系统完整信息
-s:kernel-name系统内核名称
-n:nodename节点名称
-r:kernel-release内核发行版
-v:kernel-version内核版本
-m:machine硬件名称
-i:hardware-platform硬件平台
-p:processor处理器类型
-o:operating-system操作系统名称
显示信息依次为:内核名称(Linux)、主机名(heimatengyun)、内核发行版(3.10.0-123.el7.x86_64)、内核版本(#1 SMP Mon Jun 30 12:09:22 UTC 2014)、硬件名称(x86_64)、硬
件平台(x86_64)、处理器类型(x86_64)及操作系统名称(GNU/Linux)。
2.8.4 uptime
语法:uptime [选项]
功能描述:查看系统的负载信息,可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指系统在最近1分钟、5分钟、15分钟内的压力情况,负载值越低越好,尽量不要长期超过1,生产环境不要超过5.
2.8.5 free
语法:free [选项]
功能描述:显示当前系统中内存的使用信息
选项:
-m:megabytes以兆字节显示
-h:human带单位输出
字段说明:total(内存总量)、used(已用量)、free(可用量)、shared(进程共享的内存量)、buffers(磁盘缓存的内存量)、cached(缓存的内存量)
2.8.5 who
语法:who [参数]
功能描述:查看当前登入主机的用户终端信息
2.8.6 last
语法:last [参数]
功能描述:查看所有的系统登录记录。但是要注意,这些信息是以日志文件保存的,因此黑客可以很容易进行修改,所以不能单纯以该命令来判断是否有黑客入侵。
2.8.7 history
语法:history [参数]
功能描述:显示历史执行过的命令
选项:
-c:清除所有历史记录,但是.bash_history文件内容不会删除可以用“!编号”执行某一次曾经执行过的命令
默认可以查看1000条历史记录,但可以在/etc/profile中修改HISTSIZE的值
历史命令保存在~/目录的.bash_history文件中(.开头为隐藏文件通过ls或ll -a列出),可以用cat命令查看
2.9 关机命令
linux一般用在服务器上,很少遇到关机的情况,毕竟关机服务就会中断,除非特殊情况不得已才会关闭。
正确的关机流程:sync>shutdown或reboot或halt
无论重启还是关机,都需要先sync将内存数据同步到硬盘中,避免数据丢失
2.9.1 reboot
语法:reboot [ 选项]
功能描述:重启系统,等同于shutdown -r now
2.9.2 poweroff
语法:poweroff [选项]
功能描述:关闭系统
2.9.3 halt
语法:halt [选项]
功能描述:关闭系统,等同于shutdown -h now和poweroff
2.9.4 shutdown
语法:shutdown [选项] [关机时间] [提示内容]
功能描述:关机
选项:
-h:关机
-r:重启
关机时间:
hh:mm:指定24小时制的小时和分钟后关机
+m:m分钟后关机(+1:默认值,1分钟后关机; +0:now,立刻关机)
2.10 存储设备的挂载
Linux支持的文件系统(Linux划分完分区后,还要在分区上创建文件系统):
fat----FAT(MS-DOS文件系统)
vfat----FAT32(win98文件系统)
ntfs----NTFS(NTFS文件系统)
ext (minix文件系统)
ext2、ext3、ext4(Linux文件系统)
HPFS(OS/2文件系统)
UFS (UNIX文件系统)
iso9660 (CD-ROM文件系统)
- Windows常用文件系统:FAT32,NTFS
- Linux常用文件系统:ext2/3/4, XFS, JFS, ReiserFS
常用设备名称:
/dev/sd:SCSI/SAS/SATA/USB接口硬盘(USB盘)
/dev/hd:IDE磁盘(硬盘)
/dev/cdrom:(光盘)
/dev/fd:软驱
/dev/console:系统控制台
/dev/tty:虚拟控制台
/dev/ttyS:串口
数字编号1-4留给主分区或拓展分区使用,逻辑分区编号从5开始
第三章 权限管理
一、权限简介
- Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。
- Linux下文件的权限类型一般包括
读,写,执行
。对应字母为 r、w、x。 - Linux下权限的粒度有
拥有者 、群组 、其它组
三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组
,如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组
。 - Linux上通常使用chmod命令对文件的权限进行设置和更改。
- Linux系统唯一标识每一个用户的是UID和用户名。
- 用户名和UID被保存在 /etc/passwd 文件中
- 经过保护的账户密码和相关设置信息保存在/etc/shadow文件里。该问件只对root可读。默认使用sha512哈希算法存储用户的口令。
用户验证信息文件:
二、创建用户和组
添加用户,Centos 没有任何交互动作!创建用户完毕后,必须修改密码否则无法登陆
usermod命令
Linux usermod命令用于修改用户帐号。
usermod可用来修改用户帐号的各项设定。语法
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s ][-u ][用户帐号]
参数说明:
-c<备注> 修改用户帐号的备注文字。
-d<登入目录> 修改用户登入时的目录。
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组。
-l<帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s 修改用户登入后所使用的shell。
-u 修改用户ID。
-U 解除密码锁定。
三、基础权限
Linux文件一共有三种身份:
u:文件的拥有者(user)
g:文件所属的群组(group)
o:其他用户(other)对于每个身份,又有四种权限:
r:读取文件的权限(read)
w:写入文件的权限(write)
x:执行的权限(execute)
s:特殊权限(special)
四、如何查询文件权限属性
五、文件属性解释
在Linux系统中,文件的属性由10个字符来表示。
第一个字符表示文件的类型,其余9个字符分为三组,每组三个,分别表示文件的拥有者、群组以及其他人对该文件的访问权限。
每组依次表示读取、写入、和执行的权限,如果没有该权限,则以-显示。
目录相关命令2.2.1pwd详细讲过,这不再详细概述。
六、chmod以字符形式改变文件
chmod 身份 +/- 权限 文件名
(change modify)
七、chmod以数字形式改变文件
读取权限:r 或者4
写入权限:w或者2
执行权限:x或者1
可读写可执行:rwx = 4 + 2 + 1 = 7
可读写不可执行:rw- = 4 + 2 = 6
可读不可写可执行:r-x = 4 +1 = 5
常见权限形式
-rw------- (600) 只有拥有者有读写权限。
-rw-r–r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx–x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。
八、权限提升
比如在xh用户下新增用户不被允许:
使用sudo命令
需要修稿sudoers
sudo 命令的配置文件为 /etc/sudoers
。(注意,/etc/sudoers 的配置内容十分丰富,我们仅做简单的介绍。要了解更多信息,请参考 man sudoers。)
编辑这个文件是有单独的命令的 visudo
(这个文件我们最好不要使用 vim 命令来打开),是因为一旦你的语法写错会造成严重的后果,这个工具会替你检查你写的语法,这个文件的语法遵循以下格式:
who where whom command
说白了就是哪个用户在哪个主机以谁的身份执行那些命令
,那么这个 where, 是指允许在那台主机 ssh连接进来才能执行后面的命令,文件里面默认给 root 用户定义了一条规则:
root 表示 root 用户。
ALL 表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24。
(ALL:ALL) 是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。
ALL 表示任何命令。
那么整条规则就是 root 用户可以在任何主机以任何人的身份来执行所有的命令。
sudo 组中的所有用户都具有通过 root 权限执行命令的能力!
再看个例子:
上面的配置只允许 nick 在 192.168.10.0/24 网段上连接主机并且以 root 权限执行 useradd 命令
设置 sudo 时不需要输入密码
执行 sudo 命令时总是需要输入密码事件很不爽的事情(抛开安全性)。有些应用场景也需要在执行 sudo时避开输入密码的交互过程。
那么需要如何设置呢?其实很简单,只需要在配置行中添加 NOPASSWD: 就可以了: