赞
踩
创建目录
mkdir 目录名1 目录名2 ...
创建多级目录
mkdir -p 目录名
查看当前所在目录
pwd
创建文件
touch 文件名
删除文件/目录
rm [文件|目录]
删除目录
rmdir [目录]
剪切/重命名
mv [文件|目录] [目标路径]
复制文件、目录
cp [文件] [目标路径]
cp -r [目录] [目标路径]
创建软链接文件
ln -s [文件|目录] [软链接名]
文件搜索
find [搜索范围] [选项]
# 选项:
# -name 指定文件名 *:匹配多个字符 ?:单个字符
# -user 指定用户名所有文件
# -size 文件大小
# -type 文件类型 d: 目录 c: 字符装置 b: 区块装置 p: 具名贮列 f: 一般文件 l: 符号连结 s: socket
# and: -a or: -o 非:!
# 例:查找/etc下50M~100M的文件
find /etc -size +50M -a -size -100M
u: 所有者 g; 所有组 o: 其他人 a: 所有人( u、g、o )
r = 4 | w = 2 | x = 1 | |
---|---|---|---|
目录 | ls | rm, mkdir, cp, mv | cd |
文件 | cat、more、less | vim | 可执行权限 |
# 第一种
chmod [{u|g|o|a}{+|-|=}{r|w|x}] [文件名|目录名]
# 第二种
chmod [mode=421] [文件名|目录名]
#更改目录下所有文件权限 (-R 递归)
chmod -R [权限] [目录]
chown 用户名 文件名
chgrp 组名 文件名
umask [-S]
# -S 文字方式
useradd 用户名
passwd 用户名
cat /etc/passwd
userdel -r 用户名
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
usermod -a -G 组名 用户名
groupadd [组名]
cat /etc/group
groupmod -n [新组名] [原组名]
groupdel [组名]
who
w
man [指令名称]
# 回车换行,空格翻页,按q退出
# 查看配置文件详细信息
man [配置文件]
[指令] --help
whatis [指令]
gzip [xxx.gz] [压缩内容] # 只能压缩文件
zip [xxx.zip] [压缩内容] # 压缩文件和目录
bzip2 [选项:-k 保留源文件] [文件] # 只能压缩文件
gunzip [xxx.gz]
unzip [xxx.zip]
bunzip2 [xxx.bz2]
tar [选项] [xxx.tar.gz] [打包的内容]
# 例
tar -zcvf etc.tar.gz etc/
tar -jcvf etc.tar.bz2 etc
# 解压到当前目录
tar -zxvf etc.tar.gz
tar -jxvf etc.tar.bz2
#解压到指定目录
tar -zxvf etc.tar.gz -C [目录]
netstat [选项: -t:tcp -u:udp -l:监听的端口 -r:路由]
# 创建挂载点
mkdir cdrom
mount [-t iso9660] /dev/cdrom /media/cdrom
# 卸载
umount [设备文件/挂载点]
# 不允许在当前光盘目录中卸载
w
who
write [当前在线用户]
# 发送:ctrl+d
# 回到命令行:ctrl+c
# wall 全称:write all
wall [发送内容]
# 发送邮件 mail [用户名] subject:主题 # ctrl+d 发送 # 接收邮件 mail # 查看邮件 邮件id # 显示邮件列表 h # 删除一条邮件内容 d [邮件id]
# (centos7)
nmtui
# centos6
第一步:执行setup指令,选择网络配置
第二步:选择配置设置
第三步:选择eth0
第四步:网络配置
使用dhcp时 用空格键
lastlog
1. 服务器不要关机,只能重启
2. 重启之前先关闭服务器上的服务
# 关机 poweroff shutdown [选项] [时间] 选项: -h 关机 halt -r 重启 -c 取消 shutdown -h now halt # 查看系统级别 cat /etc/inittab runlevel init [选项] 0:halt 1:single user mode 2:Multiuser 3:Full multiuser mode 6:reboot # 重启 reboot # 注销 logout
i # 当前光标前
a # 当前光标后
I # 光标所在行最前
A # 光标所在行最后
O # 当前光标行的上一行
o # 当前光标行的下一行
x # 删除一个字符
dd # 删除当前行
u # 撤销上一步指令
yy # 复制光标当前一行
p # 粘贴
$ # 回到行尾
0 # 回到行首
:set nu # 设置行号
:w # 保存
:q # 退出
:qw # 保持并退出
:q! # 强制退出
rpm: red hat系
对于大型web架构:主包使用源码包安装,次包使用rpm安装;gcc使用yum安装
包全名:未安装软件使用包全名
包名:已安装软件使用包名
rpm包安装,系统默认包安装
rpm包安装的依赖关系:
线性依赖
a->b->c->d 有些软件的依赖有几十个依赖包
被依赖包安装顺序,从被依赖包依次安装,安装完成后不清楚软件包中间还有那些被依赖的包,这个时候吧安装包重新安装一次。
环形依赖
a->b->c->a
一起安装
模块依赖
优点: 不需要安装,直接编译,效率高;通过指令直接执行就可以安装
缺点: 不能看到源码;安装过程需要依赖包;安装过程还依赖模块
优点: 可以看到源码,代码开发,便于升级维护,二次开发;裁剪代码;软件服务搭建起来非常干净,安装指定目录
缺点: 需要手动编译;编译时间长;编译过程出现问题难以解决
安装步骤:
下载 上传
解压
tar -zxvf 包全名
3.1. gcc编译器
# 查看
rpm -q gcc
# 安装
yum -y install gcc
# 测试
gcc hello.h
3.2. make编译工具
rpm -q make
yum -y install make
编译
检测当前编译环境和配置相关安装配置参数
./configure
指定安装路径 一般安装到/usr/local/
目录
./configure --prefix=/usr/local/apach
e
编译apche
make
安装apache
make install
启动
/usr/local/apache/bin/apachectl start
测试
cd /usr/local/apach/htdocs
vim index.html
开启80端口iptables -I INPUT -p tcp --dport 80 -j ACCEPT
访问默认页面
实现定时检测脚本
编写日志文件
#!/bin/bash
安装crontab 定时插件
设置定时
crontab -e
# {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
0 5 * * * sh /root/bin/backup.sh
# 这将会在每天早上5点运行 /root/bin/backup.sh
挂载光盘
进入光盘中的package目录中安装rpm包
rpm -ivh 包全名
-i 安装
-v 显示进度
-h 进度
# 安装依赖
apr-1.4.8-5.el7.x86_64.rpm
apr-util-1.5.2-6.el7.x86_64.rpm
apr-util-ldap-1.5.2-6.el7.x86_64.rpm
postgresql-libs-9.2.24-1.el7_5.x86_64.rpm
mailcap-2.1.41-2.el7.noarch.rpm
httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
httpd-2.4.6-90.el7.centos.x86_64.rpm
启动服务
service httpd start / stop / restart
访问服务
localhost/index.html
写一个页面 /var/www/index.html
www.rpmfind.netf
# 查询 已安装的包全名 rpm -q [包名] # 查询 所有已经安装的rpm包 rpm -qa # 查询 该已安装rpm包涉及到的目录及文件 rpm -ql [包名] # 查询 该未安装rpm包会涉及到的目录 rpm -qlp [包全名] # 查询 已安装rpm包信息 rpm -qi [包名] # 查询 未安装rpm包信息 rpm -qip [包全名] # 通过路径 查询rpm包 rpm -qf [目录] # 查询 已安装服务 的依赖 rpm -qR [包名] # 查询 未安装服务 的依赖 rpm -qRp [包全名] # 卸载rpm rpm -e [包名] # rpm包手机 rpm -Uvh [包名] #rpm包校验 检查是否被修改 rpm -V [包名] S.5....T. c /etc/httpd/conf/httpd.conf s:文件大小发生改变 5:md5校验 T:时间 c:配置文件 d:文档文件 g:ghost 幽灵 /etc/httpd/conf/httpd.conf:被修改文件路径
rpm2cpio 指: rmp to cpio
#从rpm包提取文件
rpm2cpio rpm包路径 | cpio -idv ./文件绝对路径
-i:copy-in模式,还原
-d:按照路径创建文档
-v:显示过程
###例子#####
# 方法一:从rpm包提取文件到当前目录,再拷贝到bin目录
# centos7
rpm2cpio /media/cdrom/Packages/coreutils-8.22-24.el7.x86_64.rpm | cpio -idv ./usr/bin/ls
# centos6
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
cp ./bin/ls /bin/
# 方法二:提取全部,然后移动需要的文件目录到指定目录
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idmv
yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器
/etc/yum.repos.d/
大型应用服务不提倡yum安装
# 配置文件
/etc/yum.repos.d/CentOS-Base.repo
优点:软件版本更新比较快
缺点:需要联网,大多数yum源在国外,访问慢
注意:存在操作失误可能导致系统级更新
yum [-y] install [包名]
优点:速度快
缺点:软件版本滞后
# 修改网络yum配置 使其失效 mv CentOS-Base, repo CentOS-Base.repo.bak mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak mv CentOS-Vault.repo CentOS-Vault.repo.bak # 修改Centos-Media.repo文件 vim CentOS-Media.repo [c6-media] name=CentOS-$releasever - Media baseurl=file:///mnt/cdrom #地址为你自己的光盘挂载地址 #file:///media/cdrom/ #file:///media/cdrecorder/ #注释这两个的不存在地址 gpgcheck=1 enabled=1 #把enabled=0改为enabled=1, 让这个yum源配置文件生效 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 验证 yum list
# 查看进程
ps -el
ps aux
# 查看某个进程
pstree -p | grep httpd
# 分析当前进程服务
top
# 判断服务器的稳定性 >200稳定性好
up 时间 # linux服务器运行的时间长度
# 杀掉进程
kill 进程号
kill -9 进程号 # 强制
kill -1 进程号 # 关闭并重启
yum -y install httpd yum -y install mysql mysql-server yum -y install php php-mysql ## apache service httpd start # 启动apache cd /var/www/html # 默认访问地址 ## mysql service mysqld start # 启动mysql mysqladmin -u root -p password "123456" #修改root密码 mysql -u root -p # root 登录 # 创建数据库 create database web_com; # 创建表 creare table user(id int primary key auto_increment, username varchar(60), password varchar(60)); # 插入 insert into user(`username`,`password`) values(`zhangsan`,`123456`) # 查询 select [字段1,字段2...] from [表名 where 条件] # 修改 update 表名 set [字段1=内容,...] # 删除 delete from 表名 [where 条件 ] # dbms 数据库管理系统 # db 数据库 # table 表 # field 字段 ## php vim /var/www/html/index.php
方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 方法2:用mysqladmin mysqladmin -u root password "newpass" 如果root已经设置过密码,采用如下方法 mysqladmin -u root password oldpass "newpass" 方法3: 用UPDATE直接编辑user表 mysql -u root mysql> use mysql; mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root'; mysql> FLUSH PRIVILEGES; 在丢失root密码的时候,可以这样 mysqld_safe --skip-grant-tables& mysql -u root mysql mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root'; mysql> FLUSH PRIVILEGES;
systemctl stop firewalld.service
# centos6
iptables -F # 清除防火墙规则
iptables -I INPUT -p tcp --dport 80 -j ACCEPT #允许80通过
# 启动 service iptables start # 保存规则 service iptables save # iptables常用命令: iptables -A 将一个规则添加到链末尾 iptables -D 将指定的链中删除规则 iptables -F 将指定的链中删除所有规则 iptables -I 将在指定链的指定编号位置插入一个规则 iptables -L 列出指定链中所有规则 iptables -t nat -L 列出所有NAT链中所有规则 iptables -N 建立用户定义链 iptables -X 删除用户定义链 iptables -P 修改链的默认设置,如将iptables -P INPUT DROP (将INPUT链设置为DROP) 常见设置参数介绍: --dport 指定目标TCP/IP端口 如 –dport 80 --sport 指定源TCP/IP端口 如 –sport 80 -p tcp 指定协议为tcp -p icmp 指定协议为ICMP -p udp 指定协议为UDP -j DROP 拒绝 -j ACCEPT 允许 -j REJECT 拒绝并向发出消息的计算机发一个消息 -j LOG 在/var/log/messages中登记分组匹配的记录 -m mac –mac 绑定MAC地址 -m limit –limit 1/s 1/m 设置时间策列 -s 10.10.0.0或10.10.0.0/16 指定源地址或地址段 -d 10.10.0.0或10.10.0.0/16 指定目标地址或地址段 -s ! 10.10.0.0 指定源地址以外的
# 查看监听的端口
lsof -i:端口
netstat -lnpt
# 执行方式一:
chmod u+x ./test.sh # 需要可执行权限
./test.sh
#!/bin/bash
echo "hello world"
# 执行方式二: # 不需要修改权限
/bin/sh test.sh
bash test.sh
单引号:不解析,直接输出,效率快
双引号:解析变量,效率稍慢
echo -e "id\tname\tpassword"
-n # 不换行
echo
重定向命令
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
标准的输入操作
指令 | 说明 | |
---|---|---|
0 | stdin | 标准输入 |
1 | stdout | 标准输出 |
2 | stderr | 标准错误输出 |
正确的命令执行写入文件
命令 > 文件 覆盖
命令 >> 文件 追加 $>>
命令 > 文件 2>&1 把正确的指令执行结果或错误的执行结果写入到list文件
分号: 命令1:命令2:命令3 命令之间没有逻辑关系
ls : date
cd : ls : date
逻辑与 &&
命令1 && 命令2 1成功,执行2
命令1 && 命令2 || 命令3 1成功,执行2;否则执行3
或
命令2 || 命令3 都执行
管道符 |
1、查询passwd文件中的root用户
cat /etc/passwd | grep root
grep -n “root” --color=auto /etc/passwd
-n 行号
–color 颜色
1.正确的指令放在correct,错误的放在error
ls >> courrect 2 >> error
2.dd if=/dev/zero of=/tmp/test bs=lk count=100000
/dev/zero 生成空数据流
/dev/null 可以把文件扔到这个文件中
if:源目录文件
of: 目标目录文件
bs: 每次复制1个kb
count: 复制的次数
显示开始的时间,显示复制完结束的时间
date: 命令:date
date && dd if=/dev/zero of=/tmp/test bs=lk count=100000
&& date
3.把用户信息写入一个txt文件,
user表
id name age
1 张三 18
2 李四 20
3 王五 30
从user表中查询比list年龄小的用户
echo -e 'id\tname\tage'
echo -e 'id\tname\tage\n1\t张三\t18\n2\t李四\tage\n3\t王五\t30'
字符 | 含义 |
---|---|
? | 匹配单个字符 |
* | 匹配零个或多个字符 |
[] | 匹配方括号中的任意一个,不能用于创建目录和文件 |
[a-z] | 在序列中匹配一个字符 |
^ | 取反 |
$:调用变量
set:设置变量的值
unset:取消变量
变量赋值:后面默认的值类型为字符串
``:执行命令,把执行的命令结果赋值给变量
name = `date`
echo $name
( ) : 同 ‘ ‘ , 使 用 ():同``,使用 ():同‘‘,使用()比较容易看,但不兼容部分unix
name = $(date)
#:代表注释
${ }:精确地界定变量范围
$(( )):与整数运算;还可以将其他进制转成十进制数显示出来
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | `expr $a + $b` 结果为 30。 |
- | 减法 | `expr $a - $b` 结果为 -10。 |
* | 乘法 | `expr $a * $b` 结果为 200。 |
/ | 除法 | `expr $b / $a` 结果为 2。 |
% | 取余 | `expr $b % $a` 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
注意:条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]。
num1=1
num2=2
# 一、
declare -i sum=$num1+$num2
# 二、
sum=$(expr $num1+$num2)
# 三、set
sum=$(($num1+$num2))
# 四、
$[$num1+$num2]
注意:乘法加空格需要转义\*
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
bash test.sh 1 2
# $0=test.sh
# $1=1
# $2=2
注意, 10 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 10 不能获取第十个参数,获取第十个参数需要 10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。
if[ ]
then
...
else
...
fi
if[ ]
then
...
elif[ ]
then
....
else
...
fi
# 方法一、 for i in {1..4} do print 'a' done echo 'a' # 方法二、 for i in $(seq 1 10) do echo 'a'; done # 方法三、 C语言格式 for((i=1;i<=10;i++)); do echo $(expr $i \* 3 + 1); done # for $() 执行命令 x=0 for i in $( ls ) do x=$(($x+1)) done echo $x # 星号 for num in {1..4} do for j in $(seq $num 3) # seq 生成数字序列 do printf '*' done echo '*' done
in
后面代表一个列表,可以使用数字,字符,字符串,以空格分隔
seq
seq [起点] [步长] [终点]
参数处理 | 说明 |
---|---|
$# | 传递到脚本或函数的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
# 数组定义不需要指定数组长度 name=(1 2 3) # 通过下表给数组赋值 name[0]="张三" # 获取数组元素 ${name[0]} # 获取数组全部元素 @和* ${name[@]} ${name[*]} # 获取数组长度 ${#name[@]} ${#name[*]} # 获取数组某个元素的长度 ${#name[0]} # 数组切片 ${name[@]:offset:number} ## offset: 要跳过的元素个数 ## number: 要取出的元素个数 # 取偏移量之后的所有元素 ${name[@]:offset} # 向数组中追加元素: ARRAY[${#ARRAY[*]}]
括号两边需要加空格
判断是否为目录或文件
判断当前文件的权限是否存在
写权限:-w [ -w /tmp/ ]
读:-r
执行:-x
字符串比较
逻辑判断
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。