Linux学习总结
Linux笔记
Linux目录结构
1. /bin目录
/ bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些命令都是二进制文件的可执行程序( bin是binary - -二进制的简称),多是系统中重要的系统文件。
2. /sbin目录
/ sbin目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。
3. /etc目录
/ etc目录存放着各种系统配置文件。l i n u x正是这些文件才得以正常地运行。
4. /root目录
/root 目录是超级用户的目录。
5. /lib目录
/ lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。
6. /lib/modules 目录
/lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引导系统所需的模块(例如网络和文件系统驱动)。
7. /dev目录
/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用户可以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。
8. /tmp目录
/tmp 目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用/var /tmp来代替/tmp ,因为前者可能拥有一个更大的磁盘空间。
9. /boot目录
/boot目录存放引导加载器(bootstrap loader)使用的文件,如l i lo,核心映像也经常放在这里,而不是放在根目录中。但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的文件系统会更好一些。还有一点要注意的是,要确保核心映像必须在i d e硬盘的前1 0 2 4柱面内。
10. /mnt目录
/ mnt目录是系统管理员临时安装( mount )文件系统的安装点。程序并不自动支持安装到/mnt 。/mnt 下面可以分为许多子目录,例如/mnt/dosa 可能是使用m s d o s文件系统的软驱,而/mnt/exta 可能是使用e x t 2文件系统的软驱,/mnt/cdrom 光驱等等。
11./proc目录
/proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
12./run目录
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
13./srv目录
该目录存放一些服务启动之后需要提取的数据。
14./var目录
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
15./home目录
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
16./media目录
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
17./opt目录
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
18./sys目录
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
19./usr目录
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
Vim
- 命令行 -> 一般模式 vim xxx
- 一般模式 -> 编辑模式 i
- 一般模式 -> 命令模式 :或者 /
- 编辑模式 -> 一般模式 ESC
- 命令模式 -> 一般模式 ESC
- 在命令行下 :wq 保存退出; :q 退出; :q! 强制退出,不保存
常用快捷键
- 拷贝当前行 yy
- 拷贝当前行向下5行 5yy
- 删除当前行 dd
- 删除当前行向下5行 5dd
- 查找关键字 /关键字 n 找下一个
- 开启/关闭行号 :set nu/:set nonu
- 跳转到首行 gg
- 跳转到尾行 G
- 撤销 u
- 跳转到指定行 行号+shift+g
关机/重启
- 把内存的数据同步到磁盘 sync
- 立刻关机 shutdown -h now
- 一分钟后关机 shutdown -h 1
- 立刻重启 shutdown -r now
- 立刻关机 halt
- 立刻重启 reboot
用户管理
- 添加一个用户: useradd 用户名【每个用户有自己的文件夹,默认为 /home/用户名】
- 可以通过 useradd 用户名 -d 目录 【不使用默认生成的家目录,自己指定用户的家目录】
- 更改用户密码: password 用户名
- 显示当前用户所在目录: pwd
- 删除用户
- 删除用户,但保留家目录 userdel 用户名
- 删除用户以及家目录 userdel -r 用户名
- 一般情况建议保留家目录
用户登录/注销
- 切换用户 su - 用户名
- 注销用户 logout
查询用户信息
- 查询用户信息: id 用户名
- whoami 只显示用户名,且su后将显示切换后的用户名
- who am i 则显示用户名、登陆时间和ip,且su后仍显示首次登陆的用户
用户组
- 类似于角色,系统可以对同一组(同一权限)的用户统一操作
-
新增组: groupadd 组名
-
删除组: groupdel 组名
-
添加用户到指定组: useradd -g 用户组 用户名
【不指定组会直接生成 以用户名为组名的组,并将该用户加入到组中】
-
修改用户组: usermod -g 用户组 用户名
-
/etc/passwd文件 用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
-
/etc/shadow文件 口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
-
/etc/group文件 组(group)的配置文件,记录Linux包含的组的信息
每行含义:组名:口令:组标识号组内用户列表
实用指令
运行级别说明:
0:关机
1: 单用户【找回丢失密码】
2: 多用户状态没有网络服务
3: 多用户状态有网络服务
4: 系统未使用保留给用户
5: 图形界面
6: 系统重启
常用运行级别是 3和5 ,也可以指定默认运行级别
切换运行级别
通过指令设置运行级别: init 级别数字
查看当前的运行级别: systemctl get-default
设置默认的运行级别: systemctl set-default multi-user.target
帮助指令
man指令
- 获取帮助信息: man [命令或配置文件] 【例如 man ls 查看ls指令的说明】
- ls -a 查看所有文件【包括隐藏文件】
- ls -l 单列输出查看文件
- 可以组合 ls -al 单列输出查看所有文件【包括隐藏文件】
- 指定查看某个目录所有文件:
help指令
- 获取shell内置命令的信息帮助: help cd
文件目录类
cd指令
- 显示当前工作目录的绝对路径: pwd
- 跳转到指定目录: cd 目录
- 回到当前目录的上一级目录: cd ..
- 回到自己的家目录: cd ~ 或者 cd :
mkdir指令
- 创建目录: mkdir 要创建的目录
- 创建多级目录: mkdir -p 要创建的目录
- 删除目录: rmdir 要删除的空目录
- 删除非空目录: rm -rf 要删除的目录 【强制删除,慎用!】
touch指令
- 创建空文件: touch 文件名
cp指令
- 拷贝文件到指定目录: cp source dest
- 递归拷贝整个文件到指定目录: cp -r source dest
- 【强制覆盖,不提示】递归拷贝整个文件到指定目录: \cp -r source dest
rm指令
- 删除文件或目录: rm 要删除的文件
- 递归删除文件或目录: rm -r 要删除的文件或目录
- 【强制覆盖,不提示】递归删除整个文件或目录: rm -rf 要删除的文件或目录
mv指令
- 重命名文件: mv 旧文件路径 新文件路径 【同一个路径】
- 移动文件: mv 旧文件路径 新文件路径
- 移动并且重命名文件: mv 旧文件路径 新文件路径【不在同一个路径】
- 移动整个目录: mv 旧文件路径/ 新文件路径
cat指令
- 查看文件内容: cat 要查看的文件
- 查看文件内容并显示行号: cat -n 要查看的文件
- 为了方便浏览,可以带上 管道命令 |more 【意思就是把前一个命令交给 more处理,例如 cat -n /etc/profile | more】
more指令
more指令是基于VI编辑器的文本过滤器,以全屏幕的方式按页展示文本文件内容,有许多快捷键
- 向下翻一页: space
- 向下翻一行: Enter
- 离开: q
- 向下滚动一屏: Ctrl + F
- 返回上一屏: Ctrl + B
- 输出当前行的行号: =
- 输出文件名和当前行的行号: :f
less指令
- less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。
- less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
操作 | 功能说明 |
---|---|
空白键 | 向下翻动一页; |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页; |
/字串 | 开启向下搜寻『字串』的功能; |
n | 向下查找 |
N | 向上查找 |
?字串 | 开启向上搜寻『字串』的功能; |
n | 向上查找 |
N | 向下查找 |
q | 离开less这个程序 |
echo指令
- 输出内容到控制台【例如:echo $HOSTNAME 】: echo 输出内容
- 输出字符串【例如:echo hello,world 】: echo 字符串
head指令
- 显示文件的开头部分,默认显示前10行内容: head 文件
- 指定显示前15行内容: head -n 15 文件
tail指令
- 显示文件的尾部分,默认显示最后10行内容: tail 文件
- 指定显示后15行内容: tail -n 15 文件
- 实时监控文档的所有更新: tail -f 文件
覆盖文件内容: >指令
追加文件内容: >>指令
- ls -l > 文件 【将显示的文件列表 ,覆盖到指定文件】
- ls -al >> 文件 【将显示的所有文件列表 ,追加到指定文件】
- cat 文件1 > 文件2 【将显示的文件1覆盖文件2内容】
- echo "内容" >> 文件 【将显示的 "内容" 追加到指定文件】
ln指令
软连接,也称符号链接,类似于快捷方式,主要存放了链接其他文件的路径
- 给源文件创建一个软链接 ln -s 源文件或目录 软链接名
- 删除软连接 rm 软链接路径
history指令
- 查看已经执行过的历史命令: history
- 查看已经执行过的历史命令 10条: history 10
- 执行指定编号的历史命令: !编号
时间日期类
date指令
- 显示当前时间: date
- 显示当前年份: date +%Y
- 显示当前月份: date +%m
- 显示当前是哪一天: date +%d
- 显示当前年月日时分秒: date "%Y-%m-%d %H:%M:%S"
- 设置系统当前时间: date -s 字符串时间
cal指令
- 显示当前日历: cal
- 显示指定年的日历: cal 年份
搜索查找类
find指令
- 从指定目录向下递归的变量各个子目录,讲满足条件的文件或目录显示在终端 【搜索方式有三种: -size -name -user】
- 语法: find 搜索目录 搜索方式 文件名
- 按照指定的文件名查找文件: find 搜索目录 -name 文件名
- 按照指定的用户名查找属于用户名的所有文件: find 搜索目录 -user 用户名
- 按照指定的文件大【+表示大于,-表示小于,n表示等于,200K,200M,200G】: find 搜索目录 -size +文件大小
locate指令
- locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件
- Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
- 第一次运行必须使用 updatedb指令 创建 locate数据库
which指令
可以查看某个指令在哪个目录下: which 指令名
grep指令 和 管道符号 |
- grep 过滤查找, 管道 | 表示将前一个命令的结果交给后面的命令处理
- 显示匹配行和行号: grep -n 查找内容 源文件
- 忽略字母大小写: grop -i 查找内容 源文件
压缩和解压类
gzip指令
压缩单个文件【只能将文件压缩为 *.gz文件】: gzip 文件
gunzip指令
解压缩单个文件: gunzip 文件.gz
zip指令
压缩整个目录: zip -r 生成的压缩包的名字 将要压缩的目录
unzip
- 解压缩目录: unzip 将要解压缩的内容.zip
- 解压缩到指定目录: unzip -d 解压后的目录 将要解压缩的内容.zip
tar指令
-
打包指令,最后打包的文件是 .tar.gz 的文件
-
tar [选项] XXX.tar.gz 打包的内容
-
选项 功能 -C 产生.tar打包文件 -V 显示详细信息 -f 指定压缩后的文件名 -Z 打包同时压缩 -X 解包.tar文件 -
示例:压缩 tar -zcvf XXX.tar.gz /home/
-
示例:解压 tar -zxvf XXX.tar.gz
-
示例:解压 tar -zxvf XXX.tar.gz -C /opt/tmp/ 【-C 固定格式,-C后面指定解压后的位置】
组管理
- Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中的每个文件有所有者、所在组、其他组的概念
文件/目录所有者
- 文件/目录所有者,一般为文件的创建者,也可以修改
- 查看文件的所有者: ls -ahl
- 修改文件的所有者: chown 用户名 文件名
组的创建
- 创建组: groupadd 组名
- 创建用户到指定组: useradd -g 用户 组名
所在组
- 当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组
- 查看文件/目录的所在组: ls -ahl
- 修改文件/目录的所在组: chgrp 组名 文件名
其他组
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
改变用户的所在组
- 添加用户是可以指定该用户添加在哪个组: useradd -g 用户 组名
- root用户可以改变某个用户的组
- 改变用户所在组: usermod -g 新组名 用户名
- 改变用户登录的初始目录【用户需要有进入新目录的权限】: usermod -d 目录名 用户名
权限
查看权限 :ls -l
-rwxr-xr-x. 1 root root 8440 6月 1 13:55 myhello
第0位:-
其余每三个一组
- rwx;
- r-x;
- r-x
- 0-9位说明
- 第0位确定文件类型(d,-,I,c,b)
-是普通文件
I是链接,相当于windows的快捷方式
d是目录,相当于windows的文件夹
c是字符设备文件,鼠标,键盘
b是块设备,比如硬盘
2.第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 ---User
3.第4-6位确定所属组(同用户组的)拥有该文件的权限,---Group
4.第7-9位确定其他用户拥有该文件的权限---Other
-
1 :如果是文件,表示硬连接数;如果是目录,表示子目录数
-
root root :前一个是文件所有者,后一个是文件所在组
-
8440 :表示文件的大小
-
6月 1 13:55 :表示最后修改时间
-
myhello :文件名
rwx权限详解
- rwx数字表示 r=4,w=2,x=1
rwx作用到文件
- 【r】代表可读(read):可以读取,查看
- 【w】代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
- 【x】代表可执行(execute):可以被执行
rwx作用到目录
- 【r】代表可读(read):可以读取,查看目录内容
- 【w】代表可写(write):可以修改,对目录内创建+删除+重命名目录
- 【x】代表可执行(execute):可以进入该目录
修改权限-chmod
- 通过chmod指令,可以修改文件或目录的权限
方式一: + - = 变更权限
u: 所有者
g: 所在组
o: 其他人
a:所有人【u、g、o的总和】
- 给文件的所有者赋予读写执行权限,给所在组的用户赋予读和执行的权限,给其他组赋予执行的权限: chmod u=rwx,g=rx,o=x 文件/目录
- 给文件的其他用户赋予写的权限: chmod o+w 文件/目录
- 给所有人去掉 执行权限 : chmod a-x 文件/目录
方式二: 数字 变更权限
- rwx数字表示 r=4,w=2,x=1
u: 所有者
g: 所在组
o: 其他人
a:所有人【u、g、o的总和】
- 给文件的所有者赋予读写执行权限,给所在组的用户赋予读和执行的权限,给其他组赋予执行的权限: chmod 751 文件/目录
- 给文件的其他用户赋予写的权限: chmod o+w 文件/目录
- 给所有人去掉 执行权限 : chmod a-x 文件/目录
修改文件所有者-chown
- 改变所有者: chown 所有者 文件/目录
- 改变所有者和所在组: chown 新所有者:新组 文件/目录
- 递归改变所有者, -R 如果是目录,对其下所有的子文件或目录递归生效 chown -R 新所有者 文件/目录
- 递归改变所有者和所在组, -R 如果是目录,对其下所有的子文件或目录递归生效 chown -R 新所有者:新组 文件/目录
修改文件/目录所在组-chgrp
- 改变所在组: chgrp 新组 文件/目录
- 改变目录下所有的文件的所在组: chgrp -R 新组 文件/目录
crond - 定时循环任务调度
crontab 进行 定时任务的设置
任务调度:指定系统在某个时间执行的特定的命令或程序
任务调度分类:
-
系统工作:希望重要的工作必须反复执行
-
个别用户工作:执行某些程序,比如mysql备份
-
编辑crontab定时任务: crontab -e
-
查询crontab任务: crontab -l
-
删除当前用户所有的crontab任务: crontab -r
*/1**** ls -l /etc/ > /tmp/to.txt
项目 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“**” | 一天当中的第几小时 | 0-23 |
第三个“**” | 一个月当中的第几天 | 1-31 |
第四个“**” | 一年当中的第几月 | 1-12 |
第五个“**” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
特殊符号:
符号 | 含义 | 示例 | 解释 |
---|---|---|---|
* |
代表任何时间 | * |
每小时的每分钟都执行一次 |
, |
代表不连续的时间 | 08,12,16*** |
每天的8点0分,12点0分,16点0分都执行一次 |
- |
代表连续的时间范围 | 05**1-6 |
周一到周六的凌晨5点0分执行命令 |
/ |
代表每隔多久执行一次 | */10*** |
每隔10分钟执行一次 |
/n |
每隔n个单位时间执行一次 | */n |
每隔n分钟、小时等执行一次 |
案例
时间表达式 | 执行时间 |
---|---|
45 22 * * * |
每天22点45分 |
0 17 * * 1 |
每周1的17点0分 |
0 5 1,15 * * |
每月1号和15号的凌晨5点0分 |
40 4 * * 1-5 |
每周一到周五的凌晨4点40分 |
*/10 4 * * * |
每天凌晨4点开始,每隔10分钟 |
0 0 1,15 * 1 |
每月1号和15号,每周1的0点0分 |
其他指令
- 终止任务调度: crontab -r
- 列出当前有哪些任务调度: crontab -l
- 重启任务调度: service crond restart
at定时任务 - 一次性定时计划任务
基本介绍
-
at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
-
默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
-
at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了。
-
在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看。
-
可以通过 ps -ef | grep atd 查看当前atd是否启动在运行了
-
向job队列添加一个作业: at [选项] [时间]
-
Ctrl + D 结束at命令输入
-
选项 含义 -m
当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 -1
atq的别名 -d
atrm的别名 -v
显示任务将被执行的时间 -C
打印任务的内容到标准输出 -V
显示版本信息(注意:这里可能存在重复,应为 -v
或其他选项)-q <队列>
使用指定的队列 -f <文件>
从指定文件读入任务而不是从标准输入读入 -t<时间参数>
以时间参数的形式提交要运行的任务 -
指定时间的方法:
-
接受在当天的hh:mm(小时:分钟)式的时间指定:如果指定的时间已过去,任务将在第二天执行。例如,
04:00
。 -
使用midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
-
采用12小时计时制:在时间后面加上
AM
(上午)或PM
(下午)来说明是上午还是下午。例如,12pm
。 -
指定命令执行的具体日期:指定格式为
monthday
(月日)、mm/dd/yy
(月/日/年)或dd.mm.yy
(日.月.年),指定的日期必须跟在指定时间的后面。例如,04:00 2021-03-15
。 -
使用相对计时法:指定格式为
now + count time-units
,其中now
就是当前时间,time-units
是时间单位,可以是minutes
(分钟)、hours
(小时)、days
(天)、weeks
(星期)。count
是时间的数量,例如几天,几小时。例如,now + 5 minutes
。 -
直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
-
-
删除指定的任务: atrm 编号
-
查看任务列表: atq
Linux分区
基本介绍
- Linux来说无论有几个分区,分给哪一录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
- Linux采用了一种叫”载入“的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
硬盘说明
- Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
- 对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd"表明分区所在设备的类型,这里是指IDE硬盘了。"x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~"代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例如,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。【了解即可】
- 对于SCSI硬盘则标识为"sdx~",SCSI硬盘是用"sd"来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
查看所有设备挂载情况
查看所有设备挂载情况: lsblk 或者 lsblk -f【信息更全】
添加一块硬盘
分区命令: fdisk /dev/sdb
格式化指令: mkfs -t ext4 /dev/sdb1
挂载指令【挂载:将一个分区和一个目录联系起来】: mount 设备目录 目录
卸载硬盘: umount 设备目录 或者 umount 目录
- 值得注意的是:用命令行挂载的关系是临时的,当系统重启之后,挂载的关系会自动消失!!!
永久挂载/自动挂载
- 通过修改/etc/fstab实现挂载
- 添加完成后 执行mount -a 立刻生效
查看磁盘使用情况
- 查看系统整体磁盘使用情况: df -h
- 查询指定目录的磁盘占用情况【默认当前目录】: du -h 目录
- -s 指定目录占用大小汇总
- -h 带计量单位
- -a 含文件
- --max-depth=1 子目录深度
- -c 列出明细的同时,增加汇总值
磁盘情况实用指令
- 统计文件夹下的文件个数: ls -l /文件夹 | grep "^-" |wc -l
- 统计文件夹下的目录个数: ls -l /文件夹 | grep "^d" |wc -l
- 统计文件夹下的文件个数,包括子文件夹里的: ls -lR /文件夹 | grep "^-" |wc -l
- 统计文件夹下的目录个数,包括子文件夹里的: ls -lR /文件夹 | grep "^d" |wc -l
- 以树状显示目录结合 tree 目录【先 yum install tree 安装一下 】
网络配置
-
windows 下查看网络配置: ipconfig
-
Linux下查看网络配置: ifconfig
-
测试主机之间网络连通性: ping 目的主机的ip地址
-
网络环境配置的具体配置方式:
-
自动获取: 登录后,通过界面的来设置自动获取ip
特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样
-
指定ip: 直接修改配置文件来指定ip,并可以连接到外网
编辑 vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="23626adf-3676-45b2-938b-e6b9864816d8" DEVICE="ens33" ONBOOT="yes" #IP地址 IPADDR=192.168.200.130 #网关 GATEWAY=192.168.200.2 #域名解析器 DNS1=192.168.200.2
-
-
重启网络服务: service network restart
设置主机名
- 为了方便记忆,设置主机名
- 查看当前主机名: hostname
- 修改主机名在文件: /etc/hostname 指定
- 重启生效
如何设置主机名和hosts映射?
- windows下 过某个主机名找到对应windows系统: C:\Windows\System32\drivers\etc\hosts 文件指定
- Linux系统下 通过某个主机名找到对应Linux系统: 在/etc/hosts 文件中指定
Hosts是什么?
Hosts 是一个文本文件,用于记录IP和Hostname【主机名】之间的映射关系
DNS
- DNS是 域名系统
- 是互联网上作为域名和IP地址相互映射的一个分布式数据库
示例:
- 当用户在浏览器输入了www.baidu.com
- 浏览器先检查浏览器缓存中有没有该域名解析IP地址,
- 有就先调用这个IP完成解析;
- 如果没有检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。
- 这两个缓存,可以理解为本地解析器缓存
- 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录)。
- 如在cmd窗口中输入:
- ipconfig/displaydns //DNS域名解析缓存
- ipconfig/flushdns //手动清理DNS缓存
- 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
- 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP则到域名服务DNS进行解析域
- 用户输入 → 浏览器缓存 → DNS缓存【操作系统中】 → hosts文件 → DNS【公网上】
进程管理
- 在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
- 每个进程都可能以两种方式存在的。前台与后台。
- 所谓前台进程就是用户目前的屏幕上可以进行操作的。
- 后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
- 一 般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
显示系统执行的进程
- 显示系统执行的进程,以及执行状况: ps
- 显示当前终端的所有进程信息: ps -a
- 以用户的格式显示信息: ps -u
- 显示后台进程运行的参数: ps -x
- 通常组合使用: ps -aux | more
ps指令详解
1. ps命令使用示例
- 命令格式:
ps -aux | grep xxx
- 示例:查看系统中是否存在sshd服务
2. 指令说明(System V展示风格)
- USER:用户名称
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEM:进程占用物理内存的百分比
- VSZ:进程占用的虚拟内存大小(单位:KB)
- RSS:进程占用的物理内存大小(单位:KB)
- TT:终端名称,一般显示为缩写
- STAT:进程状态
- S:睡眠状态
- s:会话的先导进程
- N:拥有比普通优先级更低的优先级
- R:正在运行
- D:短期等待
- Z:僵死进程
- T:被跟踪或被停止
- STARTED:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
这个命令和说明对于了解Linux系统中进程的状态和性能非常有帮助,可以帮助用户监控和管理正在运行的进程。
全格式显示当前所有的进程,查看进程的父进程
- 全格式显示当前所有的进程: ps -ef 【-e显示所有进程,-f全格式】
- 可以带上grep 过滤: ps -ef | grep 进程 【例如 sshd 远程连接进程】
终止进程
- 通过进程号终止进程: kill 进程号
- 通过进程名称终止进程【子进程也会终止】: killall 进程名称
- 通过进程号终止进程【强制终止】: kill -9 进程号
查看进程树
- 查看进程树: pstree
- 显示进程的PID: pstree -p
- 显示进程的所属用户: pstree -u
服务管理
- 服务本质就是进程,但是运行在后台,通常会监听某个端口,等待其他程序的请求,比如mysql等,因此又称为守护进程。
service管理指令
- service 服务名 [start | stop | restart | reload | status]
- CentOS7.0很多服务用 systemctl来管理
- service 指令管理的服务 可以在 /etc/init.d/ 查看【ls -l /etc/init.d/】
- 查看所有的系统服务: setup
服务的运行级别
Linux系统有7种运行级别(runlevel):
常用的是级别3和5
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS),不支持网络 运行级别
- 3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别
- 4:系统未使用,保留 运行级别
- 5:X11控制台,登陆后进入图形GUI模式 运行级别
- 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
Linux开机流程
开机 → BIOS → /boot → systemd → 运行级别 → 运行级对应的服务
设置各个运行级别的自启动/关闭
- 查看服务 chkconfig --list | grep xxx
- chkconfig 服务名 --list
- chkconfig --level 5 服务名 on/off
- chkconfig 重新设置服务后,需要重启后生效
systemctl管理指令
- 基本语法: systemctl [start | stop | restart | status] 服务名
- systemctl 指令管理的服务在 /usr/lib/systemd/system 查看
- 关闭或启动了服务后,立即生效,但是只是临时生效,重启系统后,还是会回去以前的服务的设置
- 希望设置某个服务的自启动或关闭永久生效,还是要使用systemctl enable 服务名;或 systemctl disable 服务名 ;
systemctl设置服务的自启动状态
- 查看服务的自启动状态: systemctl list-unit-files
- 针对某项服务查看: systemctl list-unit-files | grep 服务名
- 设置服务开机启动: systemctl enable 服务名
- 关闭服务开机启动: systemctl disable 服务名
- 查询某个服务是否是自启动: systemctl is-enabled 服务名
打开或关闭指定端口
- 打开端口: filewall-cmd --permanent --add-port=端口号/协议
- 查看 端口/协议: netstat -anp | more
- 关闭端口: filewall-cmd --permanent --remove-port=端口号/协议
- 重新载入,才能生效: filewall-cmd --reload
- 查询端口是否开放: filewall-cmd --query-port=端口号/协议
动态监控进程
- top 也是用来显示正在执行的进程。但top和ps最大的不同在于,top 可以在执行一段时间更新正在运行的进程
- 指定top命令每隔几秒更新。默认3秒: top -d 秒数
- top命令不显示任何闲置或僵死进程: top -i
- 通过指定监控进程ID来针对监控某个进程的状态: top -p
交互操作
-
以CPU使用率排序,默认就是此项: P
-
以内存的使用率排序: M
-
以PID排序: N
-
退出top q
查看网络状况-netstat
- 按一定顺序排列输出: netstat -an
- 显示哪个进程在调用: netstat -p
软件包管理
- rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。
- RPM是RedHatPackageManager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
- Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了。
查询rpm包相关信息
- 查询已安装的rpm列表: rpm -qa
- 指定查询已安装的rpm列表: rpm -qa | grep 软件包名
- 查询软件包是否安装: rpm -q 软件包名
- 查询软件包信息: rpm -qi 软件包名
- 查询软件包中的文件: rpm -ql 软件包名
- 查询文件所属的软件包: rpm -qf 文件全路径
卸载rpm包
- 卸载删除指定rpm包: rpm -e RPM包的名称
- 强制卸载删除指定rpm包【不推荐】: rpm -e --nodeps RPM包的名称
安装rpm包
- 安装指令: rpm -ivh RPM包的全路径名称 【i=install安装;v=verbose提示;h=hash进度条】
yum
- Yum是一个shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
- 查询yum服务器是否有需要安装的软件: yum list | grep 软件列表
- 安装指定的yum包 :yum install 软件包
Shell编程
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell执行的方式
- 创建时,约定俗成 .sh结尾
- 脚本以 #!/bin/hash开头
- 脚本需要有可执行权限
- 如果要运行,需要赋予权限 可以 chmod u+x 脚本名
- 也可不赋予权限 ,但是需要用 sh 脚本名 来运行
Shell脚本的多行注释
:<<!
内容
!
Shell变量
- Linux中 Shell中的变量分为,系统变量和用户自定义变量
- 系统变量: $HOME、$PWD、$SHELL、$USER等等,比如echo $HOME
- 显示当前shell中的所有变量: set
Shell变量的自定义
- 定义变量:变量名=值
- 撤销变量: unset变量
- 声明静态变量: readonly变量,注意不能unset
Shell变量规则
-
变量名称可以由字母、数字、下划线组成,但是不能以数字开头
-
等号两侧不能有空格
-
变量名称一般习惯为大写,【规范】
-
将命令的返回值赋给变量,用 反引号``
-
A=`date` date命令的返回值赋给变量A A=$(date)等价于反引号
设置环境变量
- 将Shell变量输出为环境变量/全局变量: export 变量名=变量值
- 让修改后的配置信息立即生效:: source 配置文件
- 查询环境变量的值: export $变量名
位置参数变量
-
执行Shell脚本时,可以通过位置参数变量来获取到命令行的参数信息
-
比如在命令行输入: ./myshell.sh 200 100
-
变量符号 功能描述 $n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如$ $* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 $@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 $# 这个变量代表命令行中所有参数的个数
预定义变量
- 预定义变量就是Shell设计者事先定义好的变量,可以直接在shell脚本中使用
- 当前进程的进程号【PID】 $$
- 后台运行的最后一个进程的进程【PID】 $!
- 最后一次执行的命令的返回状态。 $?
- $? 如果这个变量值为0,证明上个命令正确执行;
- $? 如果这个变量的值为非0,则证明上个命令执行不正确
运算符
-
$[运算式] 或者 $((运算式)) 或者 expr m + n【expr 间要有空格,结果如果要赋给变量用反引号】
-
expr \*乘 /除 %取余
条件判断
- if [ condition ] 非空为true,可以使用$?验证 (0为true , >1为false)
- 字符串比较 =
- 两个整数比较 小于lt 小于等于le 等于eq 大于gt 大于等于ge 不等于ne
- 按文件权限判断 有读的权限-r 有写的权限-w 有执行的权限-x
- 按照文件类型判断 文件存在并且是常规文件-f 文件存在-e 文件存在并且是个目录-d
流程控制
单分支
if [ 条件判断式 ]
then
代码
fi
多分支
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi
case语句
case $变量名 in
"值1")
代码
;;
"值2")
代码
;;
*)
代码
;;
esac
循环控制
for循环
方式1
for 变量 in 值1 值2 值3
do
代码
done
方式2
for ((初始值;循环控制条件;变量变化))
do
代码
done
While循环
while[ 条件判断式 ]
do
代码
done
读取控制台输入-read
- 指定读取值的提示信息: read -p "提示信息" 变量名
- 指定读取值时等待的时间 秒,如果没有在知道时间内输入,不在等待: read -t 时间 -p "提示信息" 变量名
函数
shell编程有系统函数也可以自定义函数。
系统函数
basename
- 返回完整路径最后 / 的部分,常用与获取文件名: basename [ pathname ]
- 带上 suffix后缀,basename 会将前缀和后缀都去掉: basename [ pathname ] [ suffix ]
- [pathname] 也可以是 string
dirname
- 返回完整路径最后 / 的前面部分,常用于返回路径部分
- 用法和basename 相反
自定义函数
定义
function funname(){
代码
return int
}
调用
funname [值]