整理自Linux 学习笔记(借鉴黑马程序员Linux课程)_itheima linuxpdf文档-CSDN博客
Linux教程
由Linux系统内核和系统级应用程序两部分组成。
内核提供系统最核心的功能,如:调度CPU、调度内存、调度文件系统、调度网络通讯、调度IO
系统级应用程序,可供用户快速上手操作系统,如:文件管理器、任务管理器
由于内核无法被用户直接使用,需要配合应用程序,所以在内核之上,封装系统级应用程序,组合在一起就称之为Linux发行版。
目录结构
是一个树型结构,只有一个根目录 “ / ”,所有文件都在它下面
- /bin:
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 - /boot:
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 - /dev :
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。 - /etc:
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。 - /home:
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。 - /lib:
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。 - /lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 - /media:
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:
该目录为系统管理员,也称作超级权限者的用户主目录。 - /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:
usr 是 unix system resources(unix 系统资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。 - /usr/bin:
系统用户使用的应用程序。 - /usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。 - /usr/src:
内核源代码默认的放置目录。 - /var:
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 - /run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
Linux命令
命令行:即Linux终端(Terminal),是一种命令提示符页面。以纯“字符”的形式操作系统,可以使用各种字符化命令对系统发出操作指令。
命令:即Linux程序。一个命令就是一个Linux的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈。
基础格式
command [-options] [parameter]
- command:命令本身
- -options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节
- parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等
ls命令
列出目录下的内容 ls [-a -l -h] [Linux路径]
-a 选项,表示:all的意思,即列出全部文件(包含隐藏的文件/文件夹)
只要以" . "开头,就能自动隐藏
-l 选项,表示:以列表(竖向排列)的形式展示内容,并展示更多信息
-h 表示以易于阅读的形式,列出文件大小,如 K、M、G
必须搭配 -l 使用
HOME目录和工作目录
Linux系统的命令行终端,在启动的时候,默认会加载:
- 当前登录用户的HOME目录作为当前工作目录,所以ls命令列出的是HOME目录的内容
- HOME目录:每个Linux操作用户在Linux系统的个人账户目录,路径在:/home/用户名
目录切换相关命令(cd/pwd)Change Directory
- cd命令无需选项,只有参数,表示要切换到哪个目录下
- cd命令直接执行,不写参数,表示回到用户的HOME目录
pwd 查看当前工作目录
绝对路径:以根目录为起点,路径描述以/开头
相对路径:以当前目录为起点,路径描述无需以/开头
特殊路径符:
" . " 表示当前目录,比如: cd ./Desktop 表示切换到当前目录下的Desktop目录内,和 cd Desktop效果一致
" .. " 表示上一级目录,比如:cd.. 即可切换到上一级目录,cd../.. 切换到上二级的目录
" ~ " 表示HOME目录,比如:cd~ 即可切换到HOME目录cd~/Desktop,切换到HOME内的Desktop目录
创建目录命令(mkdir)
语法:mkdir [-p] Linux路径
- -p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录
文件操作命令
touch创建文件
touch Linux路径 无选项,参数必填
cat命令查看文件内容
cat Linux路径
more命令查看文件内容
- cat是直接将内容全部显示出来
- more支持翻页,如果文件内容过多,可以一页页的展示
空格翻页,通过 q 退出查看
cp命令复制文件\文件夹
cp [-r] 参数1 参数2
- -r选项,可选,用于复制文件夹使用,表示递归
- 参数1,Linux路径,表示被复制的文件或文件夹
- 参数2,Linux路径,表示要复制去的地方
mv移动文件\文件夹
mv 参数1 参数2
参数1,Linux路径,表示被移动的文件或文件夹
参数2,Linux路径,表示要移动去的地方,如果目录不存在,则进行改名
rm删除文件\文件夹
rm [-r -f] 参数1 参数2 ...... 参数N
-r选项用于删除文件夹
-f表示force,强制删除 root管理员用户删除内容会有提示
- 参数1、参数2、......、参数N 表示要删除的文件或文件夹路径,按照空格隔开
支持通配符 *,用来做模糊匹配 *test*,表示匹配任何包含test的内容
grep命令
从文件或其他信息中通过关键词查找其所在文件行。
grep [-n] 关键字 文件路径
-n,可选,表示在结果中显示匹配的行的行号
关键字,必填,表示过滤的关键字,带有空格或其他特殊符号,建议使用 " " 将关键字包围起来
文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口
wc命令做数量统计
统计文件的行数、单词数量等
wc [-c -m -l -w] 文件路径
- 选项,-c,统计bytes数量
- 选项,-m,统计字符数量
- 选项,-l,统计行数
- 选项,-w,统计单词数量
- 参数,文件路径,被统计的文件,可作为内容输入端口
管道符: |
将管道符左边命令的结果,作为右边命令的输入
which命令
查看所使用的一系列命令的程序文件存放在哪里
find命令 - 按文件名查找文件
find 起始路径 -name "被查找文件名"
find 起始路径 -size +\- n[kMG]
- 查找小于10KB的文件:find / -size -10k
echo命令
在命令行内输出指定内容
无需选项,只有一个参数,表示要输出的内容,复杂内容可以用 " " 包围(因为不包围的话,空格后很容易被识别为参数2,尽管echo不受影响
反引号 `
被 ` 包围的内容,会被作为命令执行,而非普通字符 echo `pwd`(tab上面的
重定向符
>,将左侧命令的结果,覆盖写入到符号右侧指定的文件中
>>,将左侧命令的结果,追加写入到符号右侧指定的文件中
tail命令
查看文件尾部内容,跟踪文件的最新更改
tail [-f -num] Linux路径
- 选项,-f,表示持续跟踪
- 选项,-num,表示,查看尾部多少行,不填默认10行
vi编辑器
vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能
三种工作模式
命令模式:所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能 此模式下,不能自由进行文本编辑
输入模式:编辑模式,插入模式。此模式下,可以对文件内容进行自由编辑。
底线命令模式:以:开始,通常用于文件的保存、退出
vim 文件路径
- 如果文件路径表示的文件不存在,那么此命令会用于编辑新文件
会打开一个新的窗口,此时这个窗口就是:命令模式窗口
命令模式是 vi编辑器 的入口和出口
- 进入 vi编辑器会进入命令模式
- 通过命令模式输入键盘指令,可以进入输入模式
- 输入模式需要通过esc退回到命令模式。
- 然后通过命令输入:可以进入底线命令模式
Linux用户和权限
root用户(超级管理员)
su和exit命令
su [-] [用户名]
- 符号表示是否在切换用户后加载环境变量
参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root
切换用户后,可以通过exit命令退回上一个用户,也可以使用快捷键:ctrl + d
使用root用户切换到其它用户,无需密码
sudo命令
sudo 其他命令
用户、用户组管理
- 针对用户的权限控制
- 针对用户组的权限控制
用户组管理
需root用户执行
- 创建用户组
groupadd用户组名
- 删除用户组
groupdel用户组名
用户管理
以下命令需root用户执行
- 创建用户
useradd [-g -d] 用户名
选项:-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g
选项:-d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名
删除用户
userdel [-r] 用户名
选项:-r,删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
查看用户所属组
id [用户名]
参数:用户名,被查看的用户,如果不提供则查看自身
修改用户所属组
usermod -aG 用户组 用户名,将指定用户加入指定用户组
getent
使用getent命令,可以查看当前系统中有哪些用户
语法:getent passwd
显示共有7份信息,分别是:
用户名:密码(x):用户ID:组ID:描述信息(无用):HOME目录:执行终端(默认bash)
查看权限控制
认知权限信息
ls -l 可以以列表形式查看内容,并显示权限细节
- 序号1,表示文件、文件夹的权限控制信息
- 序号2,表示文件、文件夹所属用户
- 序号3,表示文件、文件夹所属用户组
- 序号1:如drwxr-xr-x
- r表示读权限 针对文件可以查看文件内容,针对文件夹,可以查看文件夹内容,如ls命令
- w表示写权限 针对文件表示可以修改此文件,针对文件夹,可以在文件夹内:创建、删除、改名等操作
- x表示执行权限 针对文件表示可以将文件作为程序执行,针对文件夹,表示可以更改工作目录到此文件夹,即cd进入
chmod命令
修改文件、文件夹的权限信息,只有文件、文件夹的所属用户或root用户可以修改。
chmod [-R] 权限 文件或文件夹
-R,对文件夹内的全部内容应用同样的操作
chmod u=rwx,g=rx,o=x hello.txt
权限修改为:rwxr-x--x u表示user所属用户权限,g表示group组权限,o表示other其它用户权限
权限的数字序号 0~7即二进制000到111表示
第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限。
chown命令
修改文件、文件夹所属用户和用户组,只适用于root用户执行
chown [-R] [用户][ : ][用户组] 文件或文件夹
Linux 实用操作
ctrl + c 强制停止
ctrl + d 退出或登出(不能用于退出 vi/vim
历史命令搜索
- 可以通过history命令,查看历史输入过的命令
- 可以通过:!命令前缀,自动执行上一次匹配前缀的命令
- 可以通过快捷键:ctrl + r,输入内容去匹配历史命令
- 回车键可以直接执行
- 键盘左右键,可以得到此命令(不执行)
光标移动快捷键
- ctrl + a,跳到命令开头
- ctrl + e,跳到命令结尾
- ctrl + 键盘左键,向左跳一个单词
- ctrl + 键盘右键,向右跳一个单词
清屏
ctrl + l/clear
软件安装
yum 命令(CentOS
yum [-y] [install | remove | search] 软件名称
-y,自动确认,无需手动确认安装或卸载过程
需要root权限,可以su切换到root,或使用sudo提权。yum命令需要联网。
apt命令(Ubuntu
apt [-y] [install | remove | search] 软件名称
systemctl
systemctl start | stop | status | enable | disable 服务名
- enable 开启开机自启
- disable 关闭开机自启
- NetworkManager,主网络服务
- network,副网络服务
- firewalld,防火墙服务
- sshd,ssh服务
软连接
ln命令创建软连接(类似快捷方式
ln -s 参数1 参数2
-s选项,创建软连接
参数1:被链接的文件或文件夹
参数2:要链接去的目的地
日期、时期
date命令
date [-d] [+格式化字符串]
-d 按照给定的字符串显示日期,一般用于日期计算
格式化字符串:通过特定的字符串标记,来控制显示的日期格式
IP地址
ifconfig,查看本机的ip地址
127.0.0.1,这个IP地址用于指代本机
0.0.0.0,特殊IP地址
- 可以用于指代本机
- 可以在端口绑定中用来确定绑定关系
- 在一些IP地址限制中,表示所有IP的意思,如放行规则设置0.0.0.0,表示允许任意IP访问
主机名
hostname查看主机名
hostnamectl set-hostname 主机名,修改主机名(需root)
域名解析
- 先查看本机的记录(本地地址本)
- 再联网去DNS服务器(如114.114.114.114,8.8.8.8等)询问
配置主机名映射
在Windows系统的:C:\Windows\System32\drivers\etc\hosts文件中配置记录 即可通过域名(主机名)连接
虚拟机的Linux操作系统,其IP地址是通过DHCP服务获取的;
DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更
网络传输
ping命令
检查指定的网络服务器是否是可联通状态
语法:ping [-c num] ip或主机名
- -c,检查的次数,不使用-c选项,将无限次数持续检查
wget命令
非交互式的文件下载器,可以在命令行内下载网络文件
wget [-b] url
-b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件
curl命令
发送http网络请求,可用于:下载文件、获取信息等
curl [-O] url
-O,用于下载文件,当url是下载链接时,可以使用此选项保存文件
端口
- 物理端口:又可称之为接口,是可见的端口,如USB接口,RJ45网口,HDMI端口等
- 虚拟端口:是指计算机内部的端口,是不可见的,是用来操作系统和外部进行交互使用的
公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口
注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。
netstat命令,查看指定端口的占用情况
进程管理
为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个:进程
并会为每一个进程都分配一个独有的:进程ID(进程号)
ps命令查看Linux系统中的进程信息
ps [-e -f]
- -e,显示出全部的进程
- -f,以完全格式化的形式展示全部信息
UID:进程所属的用户ID
PID:进程的进程号ID
PPID:进程的父ID(启动此进程的其它进程)
C:此进程的CPU占用率(百分比)
STIME:进程的启动时间
TTY:启动此进程的终端序号,如显示?,表示非终端启动
TIME:进程占用CPU的时间
CMD:进程对应的名称或启动路径或启动命令
关闭进程
kill [-9] 进程ID
-9,表示强制关闭进程。不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制
主机状态
查看系统资源占用
top命令查看CPU、内存使用情况
每5秒刷新一次,语法:直接输入top,按q或ctrl+c退出
-p 只显示某个进程的信息
-d 设置刷新时间,默认是5s
-c 显示产生进程的完整命令,默认是进程名
-n 指定刷新次数,比如 top -n 3,刷新输出3次后退出
-b 以非交互非全屏模式运行,以批次的方式执行top,一般配合-n指定输出几次统计信息,将输出重定向到指定文件,比如 top -b -n 3 > /tmp/top.tmp
-i 不显示任何闲置(idle)或无用(zombie)的进程
-u 查找特点用户启动的进程
top交互式选项
磁盘信息监控
df[-h] 查看硬盘的使用情况
iostat[-x][num1][num2] 查看CPU、磁盘的相关信息
- 选项:-x,显示更多信息
- num1:数字,刷新间隔,num2:数字,刷新几次
tps:该设备每秒的传输次数。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”,“一次传输”请求的大小是未知的
网络状态监控
sar命令查看网络的相关统计
sar -n DEV num1 num2
- -n,查看网络,DEV表示查看网络接口
- num1:刷新间隔(不填就查看一次结束),num2:查看次数(不填无限次数)
环境变量
env命令即可查看当前系统中记录的环境变量,是一种KeyValue型结构,即名称和值
环境变量:PATH
记录了系统执行任何命令的搜索路径
当执行任何命令,都会按照顺序,从上述路径中搜索要执行的程序的本体
$符号被用于取“变量”的值 $环境变量名
自行设置环境变量
临时设置,语法:export 变量名 = 变量值
永久生效
- 针对当前用户生效,配置在当前用户的:~/.bashrc 文件中
- 针对所有用户生效,配置在系统的:/etc/profile 文件中
- 并通过语法:source 配置文件,进行立刻生效,或重新登录FinalShell生效
压缩、解压
- .tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装
- .gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积
tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N
- -c 创建压缩文件,用于压缩模式
- -v 显示压缩、解压过程,用于查看进度
- -x 解压模式
- -f 要创建的文件,或要解压的文件,-f选项必须在所有选项中位置处于最后一个
- -z gzip模式,不使用-z就是普通的tarball格式
- -C 选择解压的目的地,用于解压模式
- tar -zcvf test.tar.gz 1.txt 2.txt 3.txt
- tar -xvf test.tar tar -xvf test.tar -C/home/itheima
- -C 选项单独使用,和解压所需的其它参数分开
zip [-r] 参数1 参数2 ... 参数N 包含文件夹的时候,需要使用-r
unzip [-d] 参数 -d 指定要解压去的位置,同tar的-C选项
Shell教程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
扩展名并不影响脚本执行
实例:#!/bin/bash
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
运行 Shell 脚本
1、作为可执行程序
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
2、作为解释器参数
直接运行解释器,其参数就是 shell 脚本的文件名
/bin/sh test.sh
/bin/php test.php
1.source FileName:在当前 bash 环境下读取并执行 FileName 中的命令,该 filename 文件可以无 "执行权限"
2.sh FileName:打开一个子 shell 来读取并执行 FileName 中命令。该 filename 文件可以无 "执行权限"。
3. ./FileName:打开一个子 shell 来读取并执行 FileName 中命令,该 filename 文件需要 "执行权限"。