# 一、Linux目录结构
树状目录结构:
使用 Linux 时,通过命令行输入 ls -l /
可以看到。
在 Linux 根目录(/)下包含很多的子目录(称为一级目录),例如 bin、boot、dev 等。
同时,各一级目录下还含有很多子目录(称为二级目录),比如 /bin/bash、/bin/ed 等。
Linux 文件系统目录总体呈现树形结构,/ 根目录就相当于树根。
# 一级目录
一级目录 | 功能(作用) |
---|---|
/bin/ | 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行 |
/boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
/dev/ | 设备文件保存位置 |
/etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
/home/ | 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming |
/lib/ | 系统调用的函数库保存位置 |
/media/ | 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 |
/mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
/misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的 |
/opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 |
/root/ | root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 |
/sbin/ | 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 |
/srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
/tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 |
/usr/ | 用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录 |
/var/ | 用于存放运行时需要改变数据的文件 |
/lost+found/ | 当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录 |
/proc/ | 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的...... |
/sys/ | 虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息 |
# usr目录
usr(注意不是 user),全称为 Unix Software Resource,此目录用于存储系统软件资源。
FHS 建议所有开发者,应把软件产品的数据合理的放置在 /usr 目录下的各子目录中,而不是为他们的产品创建单独的目录。
Linux 系统中,所有系统默认的软件都存储在 /usr 目录下,/usr 目录类似 Windows 系统中 C:\Windows\ + C:\Program files\ 两个目录的综合体。
FHS 建议,/usr 目录应具备下表所示的子目录。
子目录 | 功能(作用) |
---|---|
/usr/bin/ | 存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行 |
/usr/sbin/ | 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。 |
/usr/lib/ | 应用程序调用的函数库保存位置 |
/usr/XllR6/ | 图形界面系统保存位置 |
/usr/local/ | 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置 |
/usr/share/ | 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录 |
/usr/src/ | 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中 |
/usr/include | C/C++ 等编程语言头文件的放置目录 |
# var 目录
/var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。
通常,此目录下建议包含如下表所示的这些子目录。
/var子目录 | 功能(作用) |
---|---|
/var/lib/ | 程序运行中需要调用或改变的数据保存位置。如 MySQL (opens new window) 的数据库保存在 /var/lib/mysql/ 目录中 |
/var/log/ | 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。 |
/var/run/ | 一些服务和程序运行后,它们的 PID(进程 ID)保存位置 |
/var/spool/ | 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。 |
/var/www/ | RPM 包安装的 Apache 的网页主目录 |
/var/nis和/var/yp | NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录 |
/var/tmp | 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除 |
# 二、Linux命令
# Linux常用命令
命令 | 说明 |
---|---|
stat | 显示指定文件的相关信息,比ls命令显示内容更多 |
who | 显示在线登录用户 |
top | 显示当前系统中耗费资源最多的进程 |
pwd | 显示当前用户所在的路径 |
ps | 显示瞬间的进程状态 |
clear | 清屏 |
last | 最近登录人的信息 |
last -n 5 | 显示最近5个 |
service –status-all | 查看系统中所有的后台服务 |
halt | 关机 |
reboot | 重启 |
df -h | 查看磁盘的空间 |
uname -m | 检查系统位数(内核版本) |
lsb_release -a | 查看系统版本 |
free -h | 显示当前内存和交换空间的使用情况 |
kill | 杀死一个进程 |
whereis | 查找文件位置 |
# 查看内存
free -h
第一部分(Mem行)
- total:内存总数 7953M
- used:已经使用的内存数 6990m
- free:空闲的内存数 192 m
- shared:多个进程的共享的内存数 1m
- buffers Buffer:缓存内存数 771m
- cached Page:缓存内存数 771m
关系:total = used+ free
第二部分-交换分区(Swap行)
把磁盘空间当做内存用,也就是windows为什么常常提示虚拟空间不足的原因.。
在内存还有大部分的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存。
linux只要不用swap的交换空间,就不用担心自己的内存太少。
如果常常swap用很多,可能你就要考虑加物理内存了。
# 关机命令
# 重启
reboot
关机后重新开机
shutdown -r now
# shutdown 命令
关机
shutdown -h now
shutdown 命令可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机。
命令 | 语法 |
---|---|
shutdown | shutdown [-t seconds][-rkhncfF] time [message] |
参数说明:
- -t seconds 设定在几秒钟之后进行关机程序
- -k 并不会真的关机,只是将警告讯息传送给所有只用者
- -r 关机后重新开机(重启)
- -h 关机后停机
- -n 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机
- -c 取消目前已经进行中的关机动作
- -f 关机时,不做 fcsk 动作(检查 Linux 档系统)
- -F 关机时,强迫进行 fsck 动作
- time 设定关机的时间
- message 传送给所有使用者的警告讯息
# su命令
Linux中切换用户的命令是su或su -。
su
命令和su
-命令最大的本质区别就是:
前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。
su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。
用echo $PATH命令看一下su和su -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令。
- su的作用是变更为其它使用者的身份,需要键入该使用者的密码(超级用户除外)。
- 格式
su [选项]... [-][USER [ARG]...]
- 主要参数
- -f , --fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。
- -l , --login:加了这个参数之后,就似乎是重新登陆为该使用者一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。假如没有指定USER,缺省情况是root。
- -m, -p ,--preserve-environment:执行su时不改变环境变数。
- -c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。
- USER:欲变更的使用者账号,ARG传入新的Shell参数。
# 查看登录日志
last命令常用参数
- -a: 将从何处登录的IP或主机名字,放到展示列的最后一列
- -n: 输出多少行记录信息
- -R: 为了安全,不输出从何处登录的IP信息
- -x: 只显示关机、重启、等级切换的信息
查看linux 关机、重启、运行级别切换记录
last -x -n 10
- reboot:重启
- shutdown:关机
- runlevel:运行级别切换
屏蔽登录IP地址的显示
last -R -n 10
Linux查看/var/log/wtmp文件查看可疑IP登陆
last -f /var/log/wtmp
该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数。
该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端tty或时间显示相应的记录。
查看/var/log/secure文件寻找可疑IP登陆次数
/var/log/secure|grep IP地址
# 三、Linux命令-网络
命令 | 说明 |
---|---|
hostname | 查看主机名 |
netstat | 显示网络状态信息 |
netstat -nlpt | 查看端口 |
ping | 测试网络的连通性 |
ifconfig | 查看linux 系统ip地址 |
# 防火墙
常见的linux系统防火墙有:ufw
、firewall
、iptables
。
ufw
是Debian系列的默认防火墙(如ubuntu20.x);firewall
是红帽系列7及以上的防火墙(如CentOS7.x);iptables
是红帽系列6及以下(如CentOS6.x)的防火墙。
首先,iptables是最底层、最古老的防火墙系统,所有系统都会存在此防火墙,但一般而言只需保证该防火墙处于完全开放状态即可,其他不用管他,更不需要复杂的配置。
而ufw和firewall都是较新linux系统上的替代iptables的工具,firewall和ufw可共同影响服务器,任一防火墙开启都会使端口无法连接。
例如:在ubuntu20.04服务器上,也可以安装firewall。就算ufw和iptable关闭,但若firewall处于开启状态,端口也无法连接。
# ufw
基础命令
apt-get install ufw #安装 ufw enable #启动 ufw disable #禁用 ufw reload #重新载入 ufw reset #回复初始化设置 ufw status #防火墙状态
1
2
3
4
5
6打开/关闭某个端口
ufw allow|deny [service]
ufw allow smtp #允许所有的外部IP访问本机的25/tcp (smtp)端口 ufw allow 22/tcp #允许所有的外部IP访问本机的22/tcp (ssh)端口 ufw allow 53 #允许外部访问53端口(tcp/udp) ufw allow from ip_address #允许此IP访问所有的本机端口 ufw deny port #拒绝访问本机端口
1
2
3
4
5本机端口的设置
#允许|禁止本地端口访问此 IP ufw allow|deny to 172.26.106.87 #允许|禁止 本地访问 指定IP 的某些端口 ufw allow|deny to ip_address port 22,20,10:120 proto tcp|udp|ssh #允许|禁止 本地访问 指定网卡 virbr0 指定IP 的 特定端口 ufw allow|deny in on virbr0 to ip_address port num proto udp|tcp
1
2
3
4
5
6
7
8目标端口设置
#允许|禁止 指定IP访问本地 ufw allow|deny from 172.26.106.87 #允许|禁止 指定IP 的某些端口 访问 本地IP ufw allow|deny from ip_address port 22,20,10:120 proto tcp|udp|ssh #允许|禁止 指定ip 指定网卡 virbr0 指定IP 的 特定端口 访问本地 ufw allow|deny out on virbr0 from ip_address port num proto udp|tcp
1
2
3
4
5
6
7
8
9
ufw命令详细说明:
ufw [--dry-run] [delete] [insert NUM] allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol] [from ADDRESS [port PORT]] [to ADDRESS [port PORT]]
#命令 [–试运行][删除][插到x号规则之前] 允许|阻止|拒绝|限制 [进|出 基于“什么网络设备”] [协议 “协议”] [来源 “地址” [端口 “端口”]] [目标 “地址” [端口 “端口”]]
2
# firewalld
安装
apt-get install firewalld
1启用禁用
#在开机时启用 systemctl enable firewalld.service #在开机时禁用 systemctl disable firewalld.service #停止 systemctl stop firewalld #查看防火墙状态 systemctl status firewalld.service
1
2
3
4
5
6
7
8
在每次修改端口和服务后/etc/firewalld/zones/public.xml文件就会被修改,所以也可以在文件中之间修改,然后重新加载。 使用命令实际也是在修改文件,需要重新加载才能生效。
firewall-cmd
#查看防火墙状态 firewall-cmd --state #查看版本 firewall-cmd --version #查看帮助 firewall-cmd --help #更新防火墙规则 firewall-cmd --reload
1
2
3
4
5
6
7
8
9开放端口
#查看防火墙所有开放的端口 firewall-cmd --zone=public --list-ports firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放5672端口 firewall-cmd --zone=public --remove-port=5672/tcp --permanent #关闭5672端口 firewall-cmd --reload # 配置立即生效 firewall-cmd --zone= public --query-port=80/tcp #查看 firewall-cmd --zone= public --remove-port=80/tcp --permanent # 删除
1
2
3
4
5
6
7
8参数解释:
–add-service #添加的服务 –zone #作用域 –add-port=80/tcp #添加端口,格式为:端口/通讯协议 –permanent #永久生效,没有此参数重启后失效
# 四、Linux命令-文件
# Liunx文件相关命令
命令 | 说明 |
---|---|
cd | 切换目录,切换当前用户所在的路径 |
cd \ | 表示切换到根目录 |
cd ~ | 表示回到当前用户的根目录 |
mkdir | 创建文件夹 |
ll –a | 查看所有文件,包括隐藏文件 |
touch xxx.txt | 创建空文件 |
echo 内容 > 文件名称 | 表示向文件中写内容,>表示覆盖写,>>表示追加写 |
rmdir 文件夹名称 | 删除文件夹 |
rm –rf 文件 | 删除文件中所有的内容。并且不提示是否删除 |
cat 文件名 | 查看文件内容 |
more 文件名 | 可以翻页查看,下翻一页 空格;上翻一页 b;退出 q; |
less 文件名 | 可以翻页查看(可以一行一行翻),下翻一页 空格;上翻一页 b; |
tail -10 文件名 | 查看文件尾部的10行 |
wc -l 文件名 | 统计行数 |
du -sh 文件名 | 查看文件大小 |
grep | 在文件中查找指定关键字 |
# 在文件中查找指定关键字
语法
grep [选项] [查找模式] [文件名1, 文件名2, ...]
示例
# 在文件中查找指定关键字
grep "world" log.txt
# 多文件查找指定关键字
grep "world" log.txt log2.txt log3.txt
# 在文件中查找指定关键字,并显示行号
grep -n "world" log.txt
# 统计匹配到的总行数
grep -c "o" log.txt
2
3
4
5
6
7
8
9
# 压缩解压
在Linux平台,tar是主要的打包工具。
tar命令通常用来把文件和目录压缩为一个文件( tarball 或 tar, gzip 和 bzip)。
# Tar参数选项
参数 | 作用 |
---|---|
c | 创建压缩文件 |
x | 解压文件 |
v | 显示进度. |
f | 文件名 |
t | 查看压缩文件内容 |
j | 通过bzip2归档 |
z | 通过gzip归档 |
r | 在压缩文件中追加文件或目录 |
# 常用命令
1、tar
打包为code.tar:
tar -cvf code.tar /home/abc/code/
解压 tar 包
tar -xvf code.tar -C /home/abc/code
2、tar.gz
压缩为 tar.gz 格式的包
tar -zcvf code.tar.gz /home/abc/code
解压 tar.gz 包
tar -zxvf code.tar.gz
# vi操作
使用vi命令对文件信息编辑
# 最基本用法
vi 文件名
vi my.cnf
(1、首先会进入“一般模式”,此模式只接受各种快捷键,不能编辑文件内容
(2、按i
键,就会从一般模式进入编辑模式,此模式下,敲入的都是文件内容
(3、编辑完成之后,按Esc
键退出编辑模式,回到一般模式;
(4、再按:
进入“底行命令模式”,输入wq
命令,回车即可
退出编辑模式并保存数据 使用 :wq
回车
如果是退出不保存 使用 :q!
回车
# 一些常用快捷键
一些有用的快捷键(在一般模式下使用):
快捷键 | 作用 |
---|---|
a | 在光标后一位开始插入 |
A | 在该行的最后插入 |
I | 在该行的最前面插入 |
gg | 直接跳到文件的首行 |
G | 直接跳到文件的末行 |
dd | 删除行,如果 5dd ,则一次性删除光标 的5行 |
yy | 把光标移动到要复制的行上,复制当前行, 然后把光标移动到要复制的位置,按p 粘贴 |
复制多行,则 3yy,复制当前行附近的3行 | |
v | 进入字符选择模式,选择完成后,按y复制,按p粘贴 |
ctrl+v | 进入块选择模式,选择完成后,按y复制,按p粘贴 |
shift+v | 进入行选择模式,选择完成后,按y复制,按p粘贴 |
在底行命令模式中输入使用:
快捷键 | 作用 |
---|---|
/you | 查找。效果:查找文件中出现的you,并定位到第一个找到的地方,按n可以定位到下一个匹配位置(按N定位到上一个) |
%s/sad/888 | 查找并替换(在底行命令模式中输入)。效果:查找文件中所有sad,替换为888 |
# 文件权限
linux文件权限的描述格式解读
drwxr-xr-x (也可以用二进制表示 111 101 101 --> 755)
d:标识节点类型(d:文件夹 -:文件 l:链接)
r:可读
w:可写
x:可执行
第一组rwx: 表示这个文件的拥有者对它的权限:可读可写可执行
第二组r-x: 表示这个文件的所属组对它的权限:可读,不可写,可执行
第三组r-x: 表示这个文件的其他用户(相对于上面两类用户)对它的权限:可读,不可写,可执行
# 修改文件权限
1、使用rwx增减
# 表示将haha.dat对所属组的rw权限取消
chmod g-rw haha.dat
# 表示将haha.dat对其他人的rw权限取消
chmod o-rw haha.dat
# 表示将haha.dat对所属用户的权限增加x
chmod u+x haha.dat
2
3
4
5
6
7
8
2、使用数字修改权限
chmod 664 haha.dat
# 就会修改成 rw-rw-r--
2
3、统一修改
(一) 如果要将一个文件夹的所有内容权限统一修改,则可以-R
参数
chmod -R 770 aaa/
# 五、crontab定时任务
# crond简介
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程。
与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程。
crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
# 系统任务调度
- 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab文件包括下面几行:
cat /etc/crontab
前四行是用来配置crond任务运行的环境变量:
- 第一行SHELL变量指定了系统要使用哪个shell,这里是/bin/sh;
- 第二行PATH变量指定了系统执行命令的路径;
- 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;
- 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
# 用户任务调度
用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
用户可以使用 crontab 工具来定制自己的计划任务。
所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
# 使用者权限文件
文件1: /etc/cron.deny
说明:该文件中所列用户不允许使用crontab命令
文件2:/etc/cron.allow
说明:该文件中所列用户允许使用crontab命令
文件3:/var/spool/cron/
说明:所有用户crontab文件存放的目录,以用户名命名
# crontab文件的含义
- 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
- 其中:
- minute: 表示分钟,可以是从0到59之间的任何整数。
- hour:表示小时,可以是从0到23之间的任何整数。
- day:表示日期,可以是从1到31之间的任何整数。
- month:表示月份,可以是从1到12之间的任何整数。
- week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
- command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
- 在以上各个字段中,还可以使用以下特殊字符:
- 星号(*****):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
- 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
# 使用实例
实例1:每1分钟执行一次command
命令:
* * * * * command
实例2:每小时的第3和第15分钟执行
命令:
3,15 * * * * command
实例3:在上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 * * * command
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 */2 * * command
实例5:每个星期一的上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 * * 1 command
实例6:每晚的21:30重启smb
命令:
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
命令:
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
命令:
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
命令:
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
命令:
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
命令:
* */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
命令:
* 23-7/1 * * * /etc/init.d/smb restart
实例13:每月的4号与每周一到周三的11点重启smb
命令:
0 11 4 * mon-wed /etc/init.d/smb restart
实例14:一月一号的4点重启smb
命令:
0 4 1 jan * /etc/init.d/smb restart
实例15:每小时执行/etc/cron.hourly目录内的脚本
命令:
01 * * * * root run-parts /etc/cron.hourly
说明:
run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了
# crond服务
- 安装crontab:
yum install crontabs
- 服务操作说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
2
3
4
5
6
7
- 查看crontab服务状态:
service crond status
- 手动启动crontab服务:
service crond start
- 查看crontab服务是否已设置为开机启动,执行命令:
ntsysv
- 加入开机自动启动:
chkconfig –level 35 crond on
# 使用注意事项
1. 注意环境变量问题
有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
在crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
2. 注意清理系统用户的邮件日志
每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。
例如,可以在crontab文件中设置如下形式,忽略日志输出:
0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。
3. 系统级任务调度与用户级任务调度
系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行,root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。
4. 其他注意事项
新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
在crontab中**%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%**,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d
# 六、yum本地源
# 1. 什么是YUM
YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
# 2. YUM的作用
在Linux上使用源码的方式安装软件非常满分,使用yum可以简化安装的过程。
# 3. YUM的常用命令
- 安装httpd并确认安装
yum instll -y httpd
- 列出所有可用的package和package组
yum list
- 清除所有缓冲数据
yum clean all
- 列出一个包所有依赖的包
yum deplist httpd
- 删除httpd
yum remove httpd
# 七、系统初始化配置
# 配置静态IP
找到/etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
需要添加属性,给对应的属性添加值!
DEVICE=eth0 # 读取那个配置文件
ONBOOT=no #配置开启自动读取 --- yes
BOOTPROTO=dhcp # 将动态获取ip改为静态获取 --- static
IPADDR=192.168.121.64
NETMASK=255.255.255.0
GATEWAY=192.168.121.2
DNS1=114.114.114.114
DNS2=8.8.8.8
2
3
4
5
6
7
8
# 修改主机名
更改/etc/sysconfig下的network文件
vi /etc/sysconfig/network
然后将HOSTNAME后面的值改为想要设置的主机名。
# 关闭防火墙
查看防火墙状态
service iptables status
永久性生效
# 开启:
chkconfig iptables on
# 关闭:
chkconfig iptables off
# 查看是否关闭:
chkconfig iptables --list**
2
3
4
5
6
7
8
即时生效,重启后失效
#开启:
service iptables start
#关闭:
service iptables stop
2
3
4
5
# 八、安装JDK
# 上次JDK安装包
先创建一个java文件夹
mkdir -m /usr/local/java
上传到/usr/local/java 该目录中!
# 解压JDK
使用tar –zxvf 命令解压该文件
tar -zxvf jdk-7u80-linux-x64.tar.gz
- x : 从 tar 包中把文件提取出来
- z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压
- v : 显示详细信息
- f xxx.tar.gz : 指定被处理的文件是 xxx.tar.gz
- z 是因为你解压gz的文件 x是从文档中释放 v是报告详细信息 f是使用tar必选的,放最后。 不一定要是zxvf 这是参数 给你一些其他的参数。如果是以tar后缀的-xvf
# 配置系统环境变量
注意:若是普通用户,请略过该操作!
利用vi编辑器 来配置
vi /etc/profile
需要配置的环境变量有
JAVA_HOME=/usr/local/java/jdk1.7.0_80
CLASSPATH=$JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
2
3
4
配置完成之后,加载配置文件
source /etc/profile
可以使用java –version 进行测试!
# 配置用户环境变量
这里我为了更好区分,普通用户使用的jdk版本为1.7.
cd /home/用户名
进到普通用户的家目录下,可以看到用户的环境变量文件.bash_profile(该文件为隐藏文件)
vim .bash_profile
添加
JAVA_HOME=/data/jdk/jdk1.8.0_201
配置完成之后,加载配置文件
source /etc/profile
执行java -version后可以看到jdk版本!
# 九、安装mysql(5.6)数据库
# 解压mysql安装包
导入mysql的压缩包
解压压缩包
tar -zxvf mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz
拷贝到 /usr/local/mysql
cp -r mysql-5.6.31-linux-glibc2.5-x86_64 /usr/local/mysql
注意:事先mysql文件夹是没有的!不用去刻意建立mysql文件夹。
# 添加mysql 用户组
groupadd mysql
# 添加mysql用户名
useradd –g mysql mysql
# 安装
进入mysql解压的目录
cd /usr/local/mysql
在mysql的data文件夹下创建一个mysql文件夹,用来后续配置文件路径的时候使用!
cd data
mkdir mysql
cd ..
2
3
给mysql文件授权
chown mysql:mysql ./
进行安装,Scripts里面有一个mysql_install_db
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
去拷贝文件mysql.service 服务到系统环境变量中
cp support-files/mysql.server /etc/init.d/mysqld
授予可以执行权限
chmod 755 /etc/init.d/mysqld
去拷贝配置文件
cp support-files/my-default.cnf /etc/my.cnf
重新编辑/etc/my.cnf
vi /etc/my.cnf
修改basedir、databir路径地址
basedir = /usr/local/mysql
databir = /usr/local/mysql/data/mysql
2
# 启动mysql
service mysqld start
测试:如何连接数据库
cd /usr/local/mysql/bin
# 十、安装Samba服务器
Samba服务器,可以实现在不同操作系统之间的文件资源共享。
在局域网中安装samba服务器,可以实现Windows和Linux资源互通。
# 配置(centOS)
修改防火墙设置。
# 允许增加samba服务,permanent表示允许 firewall-cmd --permanent --add-service=samba # 重启防火墙 firewall-cmd --reload
1
2
3
4安装samba服务。
# 安装服务器端,和客户端 yum install samba samba-client -y # 启动服务 systemctl start smb nmb # 查看服务是否启动 systemctl status smb nmb
1
2
3
4
5
6建立需要共享的文件夹。
mkdir /usr/local/company/share
1创建可以访问的账号。
# useradd -s /sbin/nologin xzuser # useradd -s /sbin/nologin gcuser # useradd -s /sbin/nologin xsuser /sbin/nologin :为用户的bash类型,/sbin/nologin:用户不能登录系统 添加为samba用户: # smbpasswd -a xzuser --> 密码 123456 # smbpasswd -a gcuser --> 密码 123456 # smbpasswd -a xsuser --> 密码 123456 smbpasswd选项:-a添加smb账号;-x删除smb账号;-d禁用smb账号;-e启用smb账号;
1
2
3
4
5
6
7
8
9
10
11
12修改配置文件:vim /samba/smb.conf
修改前先备份文件,在配置文件smb.conf的最后添加下面的内容。
# vim /samba/smb.conf 修改前先备份文件 # cp smb.conf smb.conf.bak 在文件最后添加: [company] #共享名 comment = company share #注释说明 path = /home/company #共享文件路径 browseable = yes #允许所有人可见 guest ok = no #不允许匿名访问 writeable = yes #允许用户写入数据 修改文件后重启服务:重启服务失败,可能是配置文件错误 # systemctl restart smb nmb
1
2
3
4
5
6
7
8
9
10
11
12
13限制用户访问。
修改配置文件:vim /samba/smb.conf
[company] :共享名 comment=company share :注释说明 path=/home/company :共享文件路径 gues ok=no :不允许匿名访问 valid users=xzuser,xsuser :指定用户访问 write list=xzuser :指定用户有写入权限
1
2
3
4
5
6重启服务
service smbd restart
1限制组的访问。
修改配置文件:vim /samba/smb.conf
[company] valid users = @samba,@groups write list = @samba samba,groups:组名 把用户加入到组中: gpasswd -a 用户名 组名
1
2
3
4
5
6
7重启服务
service smbd restart
1查看samba服务器中已拥有哪些用户。
pdbedit -L
1
# 配置(ubuntu)
1、更新当前软件。
apt-get upgrade
apt-get update
apt-get dist-upgrade
2
3
2、安装samba服务器。
apt-get install samba samba-common
3、创建一个用于共享的samba目录,并给共享目录设置权限。
mkdir -p /usr/local/公司名/share
chmod -R 777 /usr/local/公司名/share
2
4、添加Samba访问账号及密码,用于其他人或设备认证。
- 该用户名需要和在后面配置的配置文件
smb.conf
中配置的用户相对应; - 这里添加的用户需要在系统账号中存在,否则添加失败;
在系统用户添加账户(该用户不能登录系统);
useradd -s /sbin/nologin 用户名
在Samba添加该用户;
smbpasswd -a 用户名
查看samba服务器中已拥有哪些用户(需要root权限);
pdbedit -L
拓展:smbpasswd命令的其他用法;
# 增加用户,加的用户必须以是系统用户
smbpasswd -a 用户名
# 冻结用户,就是这个用户不能在登录了
smbpasswd -d 用户名
# 恢复用户(解冻用户),让冻结的用户可以在使用
smbpasswd -e 用户名
# 删除用户
smbpasswd -x 用户名
# 查看支持的命令列表
smbpasswd -h
# 异常时可查看日志情况
cat /var/log/samba/log.%m
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
5、修改配置samba的配置文件。
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
vim /etc/samba/smb.conf
2
在配置文件smb.conf的最后添加下面的内容:
[share]
comment = share folder
path = /usr/local/公司名/share
public = no
guest ok= no
valid users = 用户名
write list = 用户名,用户名2
printable = no
2
3
4
5
6
7
8
拓展:详细配置说明如下;
[global]
; 创建工作组 设定 Samba Server 所要加入的工作组或者域
workgroup = WORKGROUP
; 为了防止出现中文目录乱码的情况。其中根据你的local,UTF-8 有可能需要改成 cp936
; display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
; 是否允许guest用户访问
guest ok = no
; 注:如果 #security 存在就直接修改,不存在就创建
; security = user
; 安全模式 我们设置用户安全级别
security = user
; 说明:用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。
; 比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,更贴近windows用户的习惯。
username map = /etc/Samba/smbusers
; 共享名,该共享标签,该名字为在电脑上看到的共享名 注意网络映射的路径是这标签名字不是共享路径的名字
[share]
; 该共享描述
comment = Shared Folder with username and password
; 共享文件夹路径
path = /home/yhq/
; 表示是否允许匿名访问该共享目录
public = no
; 配置的Samba访问账号 指明可以访问的用户
valid users = yhq
; 表示是否可以在 Window Explorer中显示该目录
browsable = no
; 指明新建立的文件的属性
create mask = 777
; 指明新建立的目录的属性
directory mask = 777
; force group 和force user 规定创建的文件或文件夹的拥有者和组拥有者是谁
; 一般这两个值来空,则表示拥有者和组拥有者为创建文件者。 如设定值,如force group=yhq
; Force user=yhq,则不管是谁创建的文件和文件夹,拥有者都为yhq和yhq组。
; force user强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,
; 如果我用force user=yhq强制建立文件的属主是yhq,同时限制create mask = 0755,
; 这样guest就不能删除了。
force user = yhq
force group = yhq
; available用来指定该共享资源是否可用
available = yes
; 共享路径读权限 设置共享是否可浏览,如果no则表示隐藏,需要通过"//ip/共享目录"进行访问
browseable = yes
; 共享路径写权限
writable = yes
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
6、重启samba服务器
service smbd restart
或者
# 重启samba服务器
/etc/init.d/samba restart
# 有的版本路径不是/etc/init.d/samba 可以尝试用
/etc/init.d/samba-ad-dc restart
2
3
4
5
# 连接使用
1、在Windows中访问samba服务
1、在Windows文件管理器中输入\\samba服务器ip地址
,便可以看到samba服务共享的文件夹。
2、输入网络凭据:输入Samba访问账号及密码。
登录成功后,显示共享名share
,进入查看共享目录相关资料内容。
2、将共享路径映射为Windows磁盘
若经常使用的共享,可直接映射为Windows的磁盘,不用每次都输ip。
1、输入IP进入共享名share
;
2、右键,点击映射网络驱动器;
3、然后在我的电脑里就可以看到映射的网络磁盘了。
3、清除共享目录的用户名及密码(可选)
1、按下键盘上的win+r
键,输入control userpasswords2
,然后按下回车,打开用户账户窗口。
2、打开用户账户窗口之后,点击窗口上方选项卡菜单中的“高级”选项卡。然后点击下方的“管理密码”按钮。
3、点击之后,在新弹出的窗口中,找到要删除的文件夹共享用户名和密码,点击右侧的v字图标。
4、点击之后,在展开的密码信息下,点击“删除”即可。
# 十一、Linux常见问题
# Linux CPU占用100%排查
某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。
问题:如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?
解决步骤:
步骤一、找到最耗CPU的进程
工具:top
方法:
- 执行top -c ,显示进程运行信息列表
- 键入P (大写p),进程按照CPU使用率排序
如下图,最耗CPU的进程PID为10765
步骤二:找到最耗CPU的线程
工具:top
方法:
top -Hp 10765 ,显示一个进程的线程运行信息列表
键入P (大写p),线程按照CPU使用率排序
如下图,最耗CPU的进程PID为10765
步骤三:将线程PID转化为16进制
工具:printf
方法:printf “%x” 10804
如上图,10804对应的16进制是0x2a34,当然,这一步可以用计算器。
之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。
步骤四:查看堆栈,找到线程在干嘛
工具:pstack/jstack/grep
方法:jstack 10765 | grep ‘0x2a34’ -C5 --color
打印进程堆栈
通过线程id,过滤得到线程堆栈
如上图,找到了耗CPU高的线程对应的线程名称“AsyncLogger-1”,以及看到了该线程正在执行代码的堆栈。
# X-FTP报错SFTP子系统申请已拒绝
问题:用X-shell
进行打开远程文件的时候,可能会遇到如下提示错误:
SFTP 子系统申请已拒绝 请确保ssh连接的sftp子系统设置有效
解决步骤:
1、查看 /etc/ssh/sshd_config文件,若无sftp相关配置项,添加如下配置
Subsystem sftp /usr/libexec/openssh/sftp-server
重启sshd
sudo systemctl restart sshd
重启sshd后,重新链接Xshell,sftp即可正常工作。