作为Linux运维,需要了解Linux操作系统的基本使用和管理知识,下面编程网小编给大家介绍下Linux运维需要掌握的命令,想成为Linux运维的朋友可以来学习一下。
1 文件管理2 软件管理3 系统管理
4 服务管理5 网络管理6 磁盘管理
7 用户管理8 脚本相关9 服务配置
==================================
----------------------------------
1 文件管理
----------------------------------
创建空白文件
touch
不提示删除非空目录
rm -rf 目录名
(-r:递归删除-f 强制)
##################################
恢复rm 删除的文件(ext3)
查看磁盘分区格式
df -T
卸载挂载
umount /data/
ext3grep /dev/sdb1 --ls --inode 2
记录信息继续查找目录下文件inode 信息
ext3grep /dev/sdb1 --ls --inode 131081 # 此处是inode
记录下inode 信息开始恢复目录
ext3grep /dev/sdb1 --restore-inode 49153
##################################
windows 文本转linux 文本
dos2unix
linux 文本转windows 文本
unix2dos
转换编码
iconv -f gbk -t utf8 原.txt > 新.txt
查看md5 值
md5sum
硬链接
ln
符号连接
ln -s
查看上下翻页且显示行号
cat ? | nl |less
q 退出
结束状态
ctrl+z
查看文件开头内容
head
查看文件结尾内容
tail -f # 监视日志文件
检查文件类型
file
重命名
rename
rename source_pattern target_pattern source_files
更改默认权限
umask
按数字排序
sort -n
按数字倒叙
sort -nr
过滤重复行
sort -u
删除重复的行
uniq
重复的行出现次数
uniq -c
只显示不重复行
uniq -u
将两个文件合并用tab 键分隔开
paste a b
将两个文件合并指定'+'符号隔开
paste -d'+' a b
将多行数据合并到一行用tab 键隔开
paste -s a
设置隐藏属性
chattr [+-=] [ASacdistu] 文件或目录
向下分面器
more
搜索
locate 字符串
查看行数
wc -l
实时某个目录下查看最新改动过的文件
watch -d -n 1 'df; ls -FlAt /path'
快速备份一个文件
cp filename{,.bak}
##################################
配置编辑器
gconf-editor
vi 配置文件
vi /etc/vimrc
编辑文件
vim
打开行号
:set nu
取消行号
:set nonu
跳转到200
200G
取消高亮
:nohl
设置自动缩进
:set autoindent
查看文本格式
set ff
改为unix 格式
set binary
向前翻页
ctrl+ U
向后翻页
ctrl+ D
全部替换
g/字符1/s//字符2/g
%s/字符1/字符2/g
# 普通用户打开文档不能保存
# tee 是一个把stdin 保存到文件的小工具,而%,是vim 当中一个只读寄存器的名字,总保存着当
前编辑文件的文件路径
:w !sudo tee %
##################################
按文件名查找
find /etc -name http
查找某一类型文件
find . -type f
按照文件权限查找
find / -perm
按照文件属主查找
find / -user
按照文件所属的组来查找文件
find / -group
文件使用时间在N 天以内
find / -atime -n
文件使用时间在N 天以前
find / -atime +n
文件内容改变时间在N 天以内
find / -mtime -n
文件内容改变时间在N 天以前
find / -mtime +n
文件状态改变时间在N 天前
find / -ctime +n
文件状态改变时间在N 天内
find / -ctime -n
# linux 文件无创建时间
# Access 使用时间
# Modify 内容修改时间
# Change 状态改变时间(权限、属主)
查找文件长度大于1M 字节的文件
find / -size +1000000c -print
按名字查找文件传递给-exec 后命令
find /etc -name "passwd*" -exec grep "xuesong" {} ;
查找文件名,不取路径
find . -name 't*' -exec basename {} ;
##################################
====================================================================
----------------------------------
2 软件管理
----------------------------------
解包tar
tar xvf 1.tar -C 目录
打包tar
tar -cvf 1.tar *
查看tar
tar tvf 1.tar
给tar 追加文件
tar -rvf 1.tar 文件名
解包gz
tar zxvpf gz.tar.gz
打包gz
tar zcvpf gz.tar.gz
查看gz
tar ztvpf gz.tar.gz
解压bzip2
bzip2 -dv 1.tar.bz2
解压gzip 到tar
gzip -dv 1.tar.gz
压缩tar 到gz
gzip -v 1.tar
bzip2 压缩
bzip2 -v 1.tar
查看bzip2
bzcat
rpm 安装
rpm -ivh
卸载
rpm -e lynx
强制卸载
rpm -e lynx --nodeps
测试
rpm --test lynx
查看所有安装的rpm 包
rpm -qa
查找包是否安装
rpm -qa | grep http
解压zip
unzip zip.zip
压缩zip
zip zip.zip *
rar3.6 下载地址
/file/upload/202206/04/dmi5xzguhc4.jpg
解压rar 包
unrar x rar.rar
7z 压缩
7z a 7z.7z *
7z 解压
7z e 7z.7z
查看字符行
zgrep 字符1.gz
打包/home, /etc ,但排除/home/dmtsai
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home} # 去掉第一条/ 及其左边的字串:dir1/dir2/dir3/my.file.txt
${file##*/} # 去掉最后一条/ 及其左边的字串:my.file.txt
${file#*.} # 去掉第一个. 及其左边的字串:file.txt
${file##*.} # 去掉最后一个. 及其左边的字串:txt
${file%/p}"
删除含关键的一行
sed -i "/^$f/d" a
直接对文本替换
sed -i "s/=/:/" c
找到pearls 开头在行尾加jcui
sed -i "/^pearls/s/$/jcui/" ab.txt
标签(保存(mar)作为标签1)
sed -n 's/(mar)got/1ianne/p' 文件
echo "margot"|sed -n 's/(mar).*(t)/12/p'
sed -e 's/^([a-zA-Z]+) ([a-zA-Z]+)(.*)/2 13/g' file
在以[0-9][0-9]结尾的行后加5
sed 's/[0-9][0-9]$/&5' 文件
打印从第5 行到以no 开头行之间的所有行
sed -n '5,/^no/p' 文件
修改west 和east 之间的所有行,在结尾处加*VACA*
sed '/west/,/east/s/$' 文件
多重编辑(先删除1-3 行,在将1 替换成2)
sed -e '1,3d' -e 's/1/2/' 文件
找到含suan 的行,在后面加上读入的文件内容
sed '/suan/r 读入文件' 文件
找到含no 的行,写入到指定文件中
sed -n '/no/w 写入文件' 文件
取出第一组数字,并且忽略掉开头的0
sed 's/[^1-9]*([0-9]+).*/1/'
打印1 和3 之间的行
sed '/1/,/3/p' file
取出指定行
sed -n '1p' 文件
在第5 行之前插入行
sed '5iaaa' file
在第5 行之后抽入行
sed '5aaaa' file
在匹配行前插入一行
echo a|sed -e '/a/ib'
在匹配行后插入一行
echo a|sed -e '/a/ab'
echo a|sed 's/a/&nb/g'
引用外部变量
sed -n ''$a',10p'
sed -n ""$a",10p"
取用户家目录(匹配不为/的字符和匹配:到结尾的字符全部删除)
sed -n '{s/^[^/]*//;s/:.*//;p}' /etc/passwd
将换行符转换为换行
echo abcd\nabcde |sed 's/\n/@/g' |tr '@' 'n'
删除掉@后面所有字符,和空行
sed -e 's/@.*//g' -e '/^$/d'
将几行合并成一行
echo $(cat file)|sed 's/ //g'
取一列最大值
cat tmp|awk '{print $1}'|sort -n|sed -n '$p'
查找属主权限为7 的文件
ls -l|sed -n '/^.rwx.*/p'
在a 前面加#号
echo a|sed -e 's/a/#&/g'
##################################
图形dialog
多选界面[方括号]
dialog --title "Check me" --checklist "Pick Numbers" 15 25 3 1 "one" "off" 2 "two" "on" 3 "three"
"off" 2>tmp
多选界面(圆括号)
dialog --title "title" --radiolist "checklist" 20 60 14 tag1 "item1" on tag2 "item2" off 2>tmp
单选界面
dialog --title "title" --menu "MENU" 20 60 14 tag1 "item1" tag2 "item2" 2>tmp
进度条
dialog --title "Installation" --backtitle "Star Linux" --gauge "Linux Kernel" 10 60 50
选择yes/no
dialog --title "" --backtitle "Dialog" --yesno "说明" 20 60
公告
dialog --title "公告" --backtitle "Dialog" --msgbox "内容" 20 60
显示讯息后立即离开
dialog --title "hey" --backtitle "Dialog" --infobox "Is everything okay?" 10 60
输入对话框
dialog --title "hey" --backtitle "Dialog" --inputbox "Is okay?" 10 60 "yes"
显示文档内容
dialog --title "Array 30" --backtitle "All " --textbox /root/txt 20 75
多条输入对话框
dialog --title "Add a user" --form "Add a user" 12 40 4 "Username:" 1 1 "" 1 15 15 0 "Full
name:" 2 1 "" 2 15 15 0 2>tmp
星号显示输入--insecure
dialog --title "Password" --insecure --passwordbox "请输入密码" 10 35
选择日期
dialog --stdout --title "日历" --calendar "请选择" 0 0 9 1 2010
##################################
脚本头# sh 为当前系统默认shell,可指定为bash 等
#!/bin/sh
临时文件定义
errtmp=/tmp/$$`date +%s%N`.errtmp
outtmp=/tmp/$$`date +%s%N`.outtmp
true > $outtmp
随机数
$RANDOM
进程号
$$
纳秒
date +%N
在当前bash 环境下读取并执行FileName 中的命令
source file-name # 等同. FileName
间隔睡眠5 秒
sleep 5
在接收到信号后将要采取的行动
trap
当前目录
$PWD
之前一个目录的路径
$OLDPWD
返回上一个目录路径
cd -
重复打印
yes
自动回答y 或者其他
yes |rm -i *
查看目录所有文件夹
ls -p /home
查看匹配完整路径
ls -d /home/
命令替换xargs
#将前面的内容,作为后面命令的参数
find / -perm +7000 | xargs ls -l
不换行执行下一句话
echo -n aa;echo bb
使转义生效
echo -e "stssnnn"
取字符串中字元
echo $a | cut -c2-6
排列组合(括号内一个元素分别和其他括号内元素组合)
echo {a,b,c}{a,b,c}{a,b,c}
返回目录名
pwd | awk -F/ '{ print "目录名:" ,$2 }'
替换上一条命令中的(foo)一个短语(bar)
^foo^bar^
!!:s/foo/bar/
!!:gs/foo/bar
##################################
shell 例子
判断参数是否为空-空退出并打印null
#!/bin/sh
echo $1
name=${1:?"null"}
echo $name
##################################
循环数组
for ((i=0;i<${#o[*]};i++))
do
echo ${o[$i]}
done
##################################
判断路径
if [ -d /root/Desktop/text/123 ];then
echo "找到了123"
if [ -d /root/Desktop/text ]
then echo "找到了text"
else echo "没找到text"
fi
else echo "没找到123 文件夹"
fi
##################################
匹配替换密码
#!/bin/sh
cat mailpassword > temp.txt
sed -i "s/:/ = /" temp.txt
w=`awk -F " = " '{print $1}' temp.txt`
for d in $w
do
grep -w $d svnpassword >/dev/null
if [ $? -eq 0 ]
then
sed -i "/^$d/d" svnpassword
grep "^$d" temp.txt >> svnpassword
#替换到转义就出问题
#sed -i "/^$d/c $(grep "^$d" temp.txt)" svnpassword
fi
done
rm temp.txt
##################################
多行合并
将两行并为一行(去掉换行符)
sed '{N;s/n//}' file
将4 行合并为一行(可扩展)
awk '{if (NR%4==0){print $0} else {printf"%s ",$0}}' file
将所有行合并
awk '{printf"%s ",$0}'
##################################
shift 用法
./cs.sh 1 2 3
#!/bin/sh
until [ $# -eq 0 ]
do
echo "第一个参数为: $1 参数个数为: $#"
#shift 命令执行前变量$1 的值在shift 命令执行后不可用
shift
done
##################################
给脚本加参数getopts
#!/bin/sh
while getopts :ab: name
do
case $name in
a) aflag=1
;;
b) bflag=1
bval=$OPTARG
;;
?) echo "USAGE:`basename $0` [-a] [-b value]"
exit 1
;;
esac
done
if [ ! -z $aflag ] ; then
echo "option -a specified"
echo "$aflag"
echo "$OPTIND"
fi
if [ ! -z $bflag ] ; then
echo "option -b specified"
echo "$bflag"
echo "$bval"
echo "$OPTIND"
fi
echo "here $OPTIND"
shift $(($OPTIND -1))
echo "$OPTIND"
echo " `shift $(($OPTIND -1))` "
##################################
判断脚本参数是否正确
./test.sh -p 123 -P 3306 -h 127.0.0.1 -u root
#!/bin/sh
if [ $# -ne 8 ];then
echo "USAGE: $0 -u user -p passwd -P port -h host"
exit 1
fi
while getopts :u:p:P:h: name
do
case $name in
u)
mysql_user=$OPTARG
;;
p)
mysql_passwd=$OPTARG
;; P)
mysql_port=$OPTARG
;;
h)
mysql_host=$OPTARG
;;
*)
echo "USAGE: $0 -u user -p passwd -P port -h host"
exit 1
;;
esac
done
if [ -z $mysql_user ] || [ -z $mysql_passwd ] || [ -z $mysql_port ] || [ -z $mysql_host ]
then
echo "USAGE: $0 -u user -p passwd -P port -h host"
exit 1
fi
echo $mysql_user $mysql_passwd $mysql_port $mysql_host
#结果root 123 3306 127.0.0.1
##################################
dialog 取值接值退出
outtmp=/tmp/outtmp
dialog --no-shadow --backtitle "雪松制作" --title "请选择" --ok-label "提交" --cancel-label "取消"
--menu "请选择" 10 60 0
1 "[目录]"
q "[退出]"
2> $outtmp
#判断提交取消
if [ $? == "1" ]
then
break
#continue
fi
#只判断退出
pt=`awk '{print}' $outtmp`
if [ $pt == q ]
then
break
fi
#判断操作
case $pt in
1)
#操作
;;
q)
exit #break
;;
esac
##################################
dialog 输入对话框加判断
while :
do
outtmp=/tmp/outtmp
dialog --title "雪松制作" --form "请输入" 20 60 10 "用户:" 1 2 "" 1 15 35 0 "ID:" 2 2 "" 2
15 35 0 "" 6 2 "" 6 0 0 0 "输入格式如下" 7 2 "" 7 0 0 0 "说明" 8 2 "" 8 0 0
0 2> $outtmp
yh=`sed -n '1p' $outtmp`
id=`sed -n '2p' $outtmp`
if echo $yh | grep -e '^[1-9][0-9]{0,2}' > /dev/null 2>&1
then
if echo $id | grep -e '^[1-9][0-9]{0,12}' > /dev/null 2>&1
then
break
else
echo "您输入的不合法,请从新输入!"
fi
else
echo "您输入的不合法,请从新输入!"
fi
done
##################################
打印表格
#!/bin/sh
clear
awk 'BEGIN{
print "+--------------------+--------------------+";
printf "|%-20s|%-20s|n","Name","Number";
print "+--------------------+--------------------+";
}'
a=`grep "^[A-Z]" a.txt |sort +1 -n |awk '{print $1":"$2}'`
#cat a.txt |sort +1 -n |while read list
for list in $a
do
name=`echo $list |awk -F: '{print $1}'`
number=`echo $list |awk -F: '{print $2}'`
awk 'BEGIN{printf "|%-20s|%-20s|n","'"$name"'","'"$number"'";
print "+--------------------+--------------------+";
}'
done
awk 'BEGIN{
print " *** The End *** "
print " "
}'
##################################
判断日期是否合法
#!/bin/sh
while read a
do
if echo $a | grep -q "-" && date -d $a +%Y%m%d > /dev/null 2>&1
then if echo $a | grep -e '^[0-9]{4}-[01][0-9]-[0-3][0-9]$'
then
break
else
echo "您输入的日期不合法,请从新输入!"
fi
else
echo "您输入的日期不合法,请从新输入!"
fi
done
echo "日期为$a"
##################################
打印日期段所有日期
#!/bin/bash
qsrq=20010101
jsrq=20010227
n=0
>tmp
while :;do
current=$(date +%Y%m%d -d"$n day $qsrq")
if [[ $current == $jsrq ]];then
echo $current >>tmp;break
else
echo $current >>tmp
((n++))
fi
done
rq=`awk 'NR==1{print}' tmp`
##################################
打印提示
cat <<EOF
#内容
EOF
登陆远程执行命令(特殊符号需要转义)
ssh root@ip << EOF
#执行命令
EOF
登陆mysql 执行命令
mysql -uroot -ppasswd -S mysql.sock --default-character-set=gbk -A<<EOF>outtmp
#mysql 命令
EOF
##################################
数学计算的小算法
#!/bin/sh
A=1
B=1
while [ $A -le 10 ]
do
SUM=`expr $A * $B`
echo "$SUM"
if [ $A = 10 ]
then
B=`expr $B + 1`
A=1
fiA
=`expr $A + 1`
done
##################################
竖行转横行(三种)
cat file|tr 'n' ' '
echo $(cat file)
#!/bin/sh
for i in `cat file`
do
a=${a}" "${i}
done
echo $a
##################################
取用户的根目录
#! /bin/bash
#showhome.sh
IFS=:
while read name pass uid gid gecos home shell
do
echo $home
done
执行./showhome.sh < /etc/passwd
##################################
把汉字转成encode 格式:
echo 论坛| tr -d "n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,n"
%c2%db%cc%b3
大写的:
echo 论坛| tr -d "n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,n" | tr "[a-f]" "[A-F]"
%C2%DB%CC%B3
##################################
把带有大写字母的文件名改为全部小写
#!/bin/bash
for f in *;do
mv $f `echo $f |tr "[A-Z]" "[a-z]"`
done
##################################
查找连续多行,在不连续的行前插入
#/bin/bash
lastrow=null
i=0
cat incl|while read line
do
i=`expr $i + 1`
if echo "$lastrow" | grep "#include <[A-Z].h>"
then
if echo "$line" | grep -v "#include <[A-Z].h>"
then
sed -i ''$i'i\//All header files are include' incl
i=`expr $i + 1`
fi
fi
lastrow="$line"
done
##################################
====================================================================
----------------------------------
9 服务配置
----------------------------------
samba
修改配置文
/etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = sambaserver
security=share
hosts allow=网络主机
[file]
comment=home directories
path=/etc/samba/xuesong
public=yes
writable=yes
browseable=yes
重启
service smb restart
linux 访问windows 共享
smbclient -L //ip 地址或计算机名
##################################
DNS 服务器
DNS 主配置文件,moon.com 域名,zone.moon.com 域的配置文件
vi /etc/named.conf
zone "moon.com" IN {
type master;
file "zone.moon.com";
allow-update { none; };
};
测试主配置文件
named-checkconf
新建域的配置文件zone.moon.com
vi /var/named/chroot/var/named/zone.moon.com
$TTL 86400
@ IN SOA xs. quanzhou722.163.com. (
20102014
3H
15M
1W
1D
)
IN NS xs.
IN MX 5 mail.
www IN A 192.168.1.209
ftp IN A 192.168.1.209
mail IN A 192.168.1.209
测试moon.com 域配置文件
named-checkzone moon.com /var/named/chroot/var/named/zone.moon.com
建立域配置文件的软连接
ln -s /var/named/chroot/var/named/zone.moon.com /var/named/zone.moon.com
重启named 服务
service named restart
设置DNS
vi /etc/resolv.conf
测试解析是否成功
host www.moon.com
nslookup www.moon.com
##################################
ftp 配置
查看vsftp 是否安装
rpm -qa | grep vsftp
主配置文件
vi /etc/vsftpd/vsftpd.conf
启动VSFTPD 服务
service vsftpd restart
查看21 端口是否开放
netstat -atln |grep 21
1、匿名用户是否允许访问
anonymous_enable=YES
anon_mkdir_write_enable=YES
2、本地用户管理
local_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
将用户添加到vsftpd.chroot_list 文件中允许访问
cat /etc/passwd |grep ":5[0-9][0-9]:" | awk -F : '{print $1}' > /etc/vsftpd.chroot_list
3、虚拟用户管理
(1)要用到文件数据库db4
rpm -qa |grep db4
(2)将帐户放入文本:(奇数行)用户名(偶数行)密码
vi zhanghu.dat
(3)生成帐户的文件数据库
db_load -T -t hash -f zhanghu.dat /etc/vsftpd/vsftpd_zhanghu.db
(4)修改文件数据库访问权限
chmod 600 /etc/vsftpd/vsftpd_zhanghu.db
(5)手工建立虚拟用户所需的PAM 配置文件
vi /etc/pam.d/vsftpd.zhanghu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu
(6)添加一个虚拟用户的入口帐户
useradd -d /var/ZhanDian -s /sbin/nologin XuNiRuKou
(7)在主配置文件中添加虚拟用户的配置内容
虚拟用户的新添加配置
chroot_local_user=YES
guest_enable=YES
guest_username=XuNiRuKou
pam_service_name=vsftpd.zhanghu
(8)在vsftpd.conf 配置文件中指定用户配置文件的目录
user_config_dir=/etc/vsftpd/vsftpd_zhandian
(9)建立配置文件中指定用户配置文件的目录
mkdir /etc/vsftpd/vsftpd_zhandian
(10)因为入口帐户是一个本地帐户,所以要指定虚拟用户具有本地帐户的权限,才能读写自
己空间中的文件
虚拟用户就可以就拥有写权限
virtual_use_local_privs=YES
(11)
touch /etc/vsftpd/vsftpd_zhandian/xuesong
echo "local_root=/var/ZhanDian/xuesong" >> /etc/vsftpd/vsftpd_zhandian/xuesong
(12)
mkdir /var/ZhanDian/xuesong
(13)
chown -R XuNiRuKou:XuNiRuKou /var/ZhanDian/
(14)重启服务
/etc/init.d/vsftpd restart
(15)客户端虚拟账号测试
建立用户脚本。最好在加上判断用户名是否存在
#!/bin/sh
echo 请输入用户名
read y
echo $y >> zhanghu.dat
echo 请输入密码
read m
echo $m >> zhanghu.dat
db_load -T -t hash -f zhanghu.dat /etc/vsftpd/vsftpd_zhanghu.db
chmod 600 /etc/vsftpd/vsftpd_zhanghu.db
touch /etc/vsftpd/vsftpd_zhandian/$y
echo "local_root=/var/ZhanDian/$y" >> /etc/vsftpd/vsftpd_zhandian/$y
mkdir /var/ZhanDian/$y
chown -R XuNiRuKou:XuNiRuKou /var/ZhanDian/$y
/etc/init.d/vsftpd restart
##################################
httpd 安装
tar zxvf httpd-2.2.12.tar.gz
cd httpd-2.2.12
./configure --prefix=/usr/local/httpd
--enable-rewrite
make && make install
ls /usr/local/
groupadd www
useradd -g www -M -s /sbin/nologin www
cd /usr/local/httpd/
vi conf/httpd.conf
服务器开启在软件安装目录的bin 中
./apachectl start
网页放在的htdocs 中
开机启动
vi /etc/rc.d/rc.local
/usr/local/httpd/bin/apachectl start
如果启动提示
httpd: Could not reliably determine the server fully qualified domain name, using 127.0.0.1 for
ServerName
修改/etc/hosts 计算机名
在httpd.conf 中开启
ServerName 127.0.0.1:80
编码设置
AddDefaultCharset UTF-8
AddDefaultCharset GB2312
##################################
mysql 源码安装
groupadd mysql
useradd mysql -g mysql -M -s /bin/false
tar zxvf mysql-5.0.22.tar.gz
cd mysql-5.0.22
./configure --prefix=/usr/local/mysql
--with-client-ldflags=-all-static
--with-mysqld-ldflags=-all-static
--with-mysqld-user=mysql
--with-extra-charsets=all
--with-unix-socket-path=/var/tmp/mysql.sock
make && make install
生成mysql 用户数据库和表文件,在安装包中输入。
scripts/mysql_install_db --user=mysql
vi ~/.bashrc
export PATH="$PATH: /usr/local/mysql/bin"
配置文件,有large,medium,small 三个,根据机器性能选择
cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
cd /usr/local
chmod 750 mysql -R
chgrp mysql mysql -R
chown mysql mysql/var -R
cp /usr/local/mysql/libexec/mysqld mysqld.old
ln -s /usr/local/mysql/bin/mysql /sbin/mysql
ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin
ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc3.d/S15mysql5
ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc0.d/K15mysql5
##################################
mysql rpm 安装
到http://www.mysql.com/downloads/mysql 下载mysql RPM(service 和client),
MySQL-server-community-5.1.51-1.rhel5.i386.rpm 安装服务端
MySQL-client-community-5.1.51-1.rhel5.i386.rpm 安装客户端
MySQL-devel-community-5.1.51-1.rhel5.i386.rpm 用于php 的mysql 安装
rpm ?ivh MySQL-server-community-5.1.51-1.rhel5.i386.rpm
rpm ?ivh MySQL-client-community-5.1.51-1.rhel5.i386.rpm
rpm ?ivh MySQL-devel-community-5.1.51-1.rhel5.i386.rpm
/etc/init.d/mysqld start
mysqladmin -u root password 'xuesong'
mysql -u root -S /var/lib/mysql/mysql.sock -p
数据目录/var/lib/mysql
chkconfig --list |grep mysqld
chkconfig --level 3 mysqld on
配置文件(日志pid)
/etc/my.cnf
ll /usr/bin/mysql*
##################################
mysql 常用命令
启动mysql 服务
./mysql/bin/mysqld_safe --user=mysql &
登录mysql 的命令
格式: mysql -h 主机地址-u 用户名-p 用户密码
mysql -h110.110.110.110 -P3306 -uroot -p
mysql -uroot -p -S /data1/mysql5/data/mysql.sock -A --default-character-set=GBK
刷新
flush privileges;
显示所有数据库
show databases;
打开数据库
use dbname;
显示选中数据库中所有的表
show tables;
查看表结构
desc tables;
删除数据库
drop database name;
删除表
drop table name;
创建数据库
create database name;
mysqladmin -h myhost -u root -p create dbname
创建表
create table ka(ka_id varchar(6),qianshu int);
插入字段
alter table name add column accountid(列名) int(11) NOT NULL(字段不为空);
不登陆mysql 插入字段
mysql -uroot -p -S mysql.sock -e "use db;alter table gift add column accountid int(11) NOT
NULL;flush privileges;"
查询
select 列名称from 表名称;
select host,user,password from user;
备份数据库
mysqldump -h host -u root -p dbname >dbname_backup.sql
mysqlhotcopy 只能备份MyISAM 引擎
/bin/mysqlhotcopy -u root -p
还原数据库
mysql -h host -u root -p dbname < dbname_backup.sql
登陆mysql 后还原sql 文件
source 路径.sql
赋予查询权限(没有用户,直接创建)
grant select on db.* to log@"%" Identified by "123456";
赋予所有权限(没有用户,直接创建)
grant all privileges on db.* to log@"IP" identified by '123456' with grant option;
更改密码
update user set password=password('新密码') where user='root'
mysqladmin -u root password 'xuesong'
mysql 查看所有用户的语句
select user();
删除用户
delete from user where user='sss' and host='localhost' ;
查看主从
show slave statusG;
查看主从复制进程
show processlist;
添加索引解决停mysql 速度慢
ALTER TABLE player ADD INDEX weekcredit_faction_index (weekcredit, faction);
创建主从复制用户
grant replication slave on *.* to '用户'@'%' identified by '密码';
备份表
mysqldump -u root -p -S mysql.sock --default-character-set=utf8 --hex-blob db table1 table1 >
/data/db.sql
查看系统的字符集和排序方式的设定
SHOW VARIABLES LIKE 'character_set_%';
查看mysql 所有参数
show variables;
删除空用户
delete from user where user='';
创建表指定存储引擎的类型:
CREATE TABLE innodb (id int, title char(20)) ENGINE = INNODB
CREATE TABLE myisam (id int, title char(20)) ENGINE = MyISAM
改变现有的表使用的存储引擎:
ALTER TABLE mytable ENGINE = MyISAM
查询表引擎
SHOW TABLE STATUS from 数据库库名where Name='表名';
SHOW TABLE STATUS from db where Name='innodb';
查看mysql 变量
SHOW VARIABLES;
查询用户权限
select host,user,password from user;
查看表的引擎状态
show table status
##################################
gd 安装
分别安装组件libxml、zlib、freetype、libpng、jpegsrc、gd
libxml2-2.6.24.tar.bz2
zlib-1.2.3.tar.gz
freetype-2.2.1.tar.gz
libpng-1.2.10.tar.gz
jpegsrc.v6b.tar.gz
gd-2.0.33.tar.gz
libxml 安装
tar xzvf libxml2-2.6.24.tar.bz2
tar xvf libxml2-2.6.24.tar
cd libxml2-2.6.24
./configure
make
make install
zlib 安装
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make
make install
freetype 安装
tar xzvf freetype-2.2.1.tar.gz
cd freetype-2.2.1
./configure --prefix=/usr/local/php/modules/freetype
make
make install
libpng 安装
tar xzvf libpng-1.2.10.tar.gz
cd libpng-1.2.10
./configure --prefix=/usr/local/php/modules/libpng
jpeg 安装
mkdir /usr/local/php/modules/jpeg6
mkdir /usr/local/php/modules/jpeg6/bin
mkdir /usr/local/php/modules/jpeg6/lib
mkdir /usr/local/php/modules/jpeg6/include
mkdir /usr/local/php/modules/jpeg6/man
mkdir /usr/local/php/modules/jpeg6/man/man1
一句创建
mkdir -pv /usr/local/jpeg/{,bin,lib,include,man/man1,man1}
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --prefix=/usr/local/php/modules/jpeg6
--enable-shared
--enable-static
make
make install
gd 安装
tar zxvf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure --prefix=/usr/local/gd2
--with-jpeg=/usr/local/php/modules/jpeg6
--with-png=/usr/local/php/modules/libpng
--with-zlib
--with-freetype=/usr/local/php/modules/freetype
修改Makefile 文件231 行,重复的第二个freetype 改为libpng
make
make install
php 安装
tar xvf php-5.1.6.tar
cd php-5.1.bz2.6
./configure --prefix=/usr/local/php
--sysconfdir=/etc
--with-apxs2=/usr/local/httpd/bin/apxs
--with-config-file-path=/usr/local/php/lib
--with-libxml-dir=/usr/local/libxml2
--with-zlib
--with-jpeg-dir=/usr/local/php/modules/jpeg6
--with-freetype-dir=/usr/local/php/modules/freetype
--with-gd=/usr/local/gd2
--with-openssl
--with-regex=php
--with-gnu-ld
--with-tsrm-pthreads
--with-bz2
--with-gettext
--with-db4=/usr
--enable-ftp
--enable-bcmath
--enable-dba
--enable-sockets
--enable-soap
--enable-zend-multibyte
--enable-mbstring
--with-curlwrappers
--with-curl=/usr/local/curl
--with-pdo-mysql=/usr/local/mysql
--with-mysql=/usr/local/mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config
make
make install
cp php.ini-recommended /usr/local/php/lib/php.ini
vi /usr/local/php/lib/php.ini
在PHP.IN 添加
[eaccelerator]
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/usr/local/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
完成后在/usr/local/httpd/conf/httpd.conf 文件上添加如下一行:
AddType application/x-httpd-php .php .php5
ln -s /usr/local/php/bin/php /sbin/php
vi index.php
<? php
phpinfo();
?>
重启httpd
/usr/local/httpd/bin/apachectl restart
最后一步重新启动apache 报如下错误:
httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load
/usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore
segment prot after reloc: Permission denied
不关闭SELINUX 的方法:
# setenforce 0
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache/modules/libphp5.so
# service httpd restart
# setenforce 1
##################################
LINUX 集群
LVS-- ipvsadm 命令参考
ipvsadm 的用法和格式如下: ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p
[timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C ipvsadm -R ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight] ipvsadm -d -t|u|f
service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] ipvsadm
--stop-daemon
ipvsadm -h
命令选项解释:有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都
可以。
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的
虚拟服务器。
-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则
-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个
虚拟服务器中增加一台新的真实服务器
-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l --list 显示内核虚拟服务器表
其他的选项:-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or
[real-server-ip:port]
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or
[real-server-ip:port]
-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s --scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,-p
--persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同
一台真实的服务器处理。timeout 的默认值为300 秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真实的服务器[Real-Server:port]
-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
-i --ipip 指定LVS 的工作模式为隧道模式
-m --masquerading 指定LVS 的工作模式为NAT 模式
-w --weight weight 真实服务器的权值
--mcast-interface interface 指定组播的同步接口
-c --connection 显示LVS 目前的连接如:ipvsadm -L -c
##################################
VS-NAT 模式
内容服务器的容量10~20
使用保留地址的LAN
双向重写
安装ipvsadm 软件
内核做个连接
ln -s /usr/src/kernels/2.6.18-53.e15-i686/ /usr/src/linux
安装软件
查看ipvsadm 版本
ipvsadm --version
建立脚本/etc/rc.d/lvs
echo "1" > /proc/sys/net/ipv4/ip_forward
#清除ipvsadm 一系列规则
ipvsadm -C
ipvsadm -A -t 外网IP:端口-s rr
ipvsadm -a -t 外网IP:端口-r 内网1 服务器IP:端口-m -w 1
ipvsadm -a -t 外网IP:端口-r 内网2 服务器IP:端口-m -w 1
修改内网服务器ip 和网关,开启httpd,建立不同页面测试
缺点不能排除宕机的web 服务器,可使用LVS+Keepalived 组合
##################################
heartbeat 心跳检测(双机热备)
安装heartbeat 的rpm 包
需要先装heartbeat-pils 和heartbeat-stonith 两个包
主节点的配置
安装完解压配置文件
rpm -q heartbeat -d
cd /etc/ha.d
cp /usr/share/doc/heartbeat-2.1.3/ha.cf .
cp /usr/share/doc/heartbeat-2.1.3/authkeys .
cp /usr/share/doc/heartbeat-2.1.3/haresources .
查看计算机名,记录下来
uname -n
vi ha.cf
打开日志记录文件
logfile /var/log/ha-log
打开心跳检测
keepalive 2
死亡时间
deadtime 30
warntime 10
initdead 120
用什么协议端口(udp)
udpport 694
使用哪个网卡作为心跳检测
bcast eth1
备用的IP
ucast eth1 192.168.1.20
主节点服务器
node 主节点计算机名
node 另一个计算机名
ping 外网测试
ping 一个外网的IP
配置验证模式
vi authkeys
打开
auth1
1 crc
配置虚拟服务
vi haresources
加上一条名称和IP
计算机名IP httpd
sev1.example.com 222.90.88.88 httpd
hosts 文件要配置上两个机器的机器名和IP
vi /etc/hosts
222.90.88.10 sev1.example.com sev2
192.168.1.10 sev1
222.90.88.20 sev1.example.com sev2
192.168.1.20 sev1
chmod 600 authkeys
service heartbeat start
在配置备用节点
直接拷贝主节点的文件修改
安装完进入安装目录
cd /etc/ha.d
用sftp 登陆主机
sftp 222.90.88.10
cd /etc/ha.d
get ha.cf
get authkeys
get hare*
bye
只需要修改ha.cf 文件
vi ha.cf
ucast eth1 192.168.1.10
启动备用节点
service heartbeat start
测试
主节点和负节点建立不同index 页面
主节点虚拟出外网ip eth0:0
停掉主节点任务
重新访问
启动后在访问
##################################
DR 直接路由模式
同一网段的LAN
内容服务器的容量20 以上
降低LVF 的负载
VIP 服务器的配置脚本
vi /etc/init.d/vip.sh
ifconfig eth0:0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up
route add -host 222.90.88.88 dev eth0:0
ipvsadm -C
ipvsadm -A -t 222.90.88.88:80 -s rr
ipvsadm -a -t 222.90.88.88:80 -r 222.90.88.10 -g
ipvsadm -a -t 222.90.88.88:80 -r 222.90.88.20 -g
ipvsadm
chmod 777 /etc/init.d/vip.sh
/etc/init.d/vip.sh
服务器配置脚本
vi /etc/init.d/lvs.sh
ifconfig lo:0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up
route add -host 222.90.88.88 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
chmod 777 /etc/init.d/lvs.sh
/etc/init.d/lvs.sh
第二台服务器
sftp 222.90.88.10
get /etc/init.d/lvs.sh
bye
mv lvs.sh /etc/init.d/
/etc/init.d/lvs.sh
测试两个服务器测试页面写入不同内容
分别启动httpd
真是IP 可以分别访问不同服务器,访问虚拟IP88,则互相伦叫
##################################
IP 隧道模式
WAN(或LAN 也可)
内容服务器的容量能到100
vip-server
vi /etc/init.d/vip.sh
ifconfig tunl0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up
route add -host 222.90.88.88 dev tunl0
ipvsadm -C
ipvsadm -A -t 222.90.88.88:80 -s rr
ipvsadm -a -t 222.90.88.88 :80 -r 222.90.88.10 -i
ipvsadm -a -t 222.90.88.88 :80 -r 222.90.88.20 -i
ipvsadm
chmod -R 777 /etc/init.d/vip.sh
/etc/init.d/vip.sh
1web 服务器
ifconfig runl0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up
route add -host 222.90.88.88 dev tunl0
echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_annaunce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_annaunce
sysctl -p
chmod 777 /etc/init.d/lvs.sh
/etc/init.d/lvs.sh
2web 服务器
sftp 222.90.88.10
get /etc/init.d/lvs.sh
bye
mv lvs.sh /etc/init.d/
/etc/init.d/lvs.sh
测试两个服务器测试页面写入不同内容
分别启动httpd
真是IP 可以分别访问不同服务器,访问虚拟IP88,则互相伦叫
##################################
sendmail 邮件服务器
配置DNS 服务器为mail 服务器IP 解析
在配置文件中添加
IN MX 5 mail.
mail IN A 192.168.1.209
重启服务service named restart
测试
ping mail.xuesong.com
nslookup mail.xuesong.com
mail 服务器上设置DNS 服务器
vi /etc/resolv.conf
安装软件
sendmail-8.13.8-8.el5.i386.rpm
sendmail-cf-8.13.8-8.el5.i386.rpm
sendmail-doc-8.13.8-8.el5.i386.rpm
yum install dovecot
m4
sendmail 配置文件目录:/etc/mail
vi local-host-names
添加xuesong.com
vi sendmai.mc
去掉前面两个dnl
dnl TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
修改IP
DAEMON_OPTIONS('Port=smtp,Addr=192.168.1.209, Name=MTA')dnl
生成sendmail 配置文件sendmail.cf
m4 sendmail.mc > sendmail.cf
查看启动级别
chkconfig --list |grep sas
开启启动级别3
chkconfig --level 3 saslauthd on
makemap hash access.db < access
vi /etc/dovecot.conf
打开下面一句话
protocols = imap imaps pop3 pop3s
service sendmail restart
service dovecot restart
group mail
useradd -g mail -M -s /sbin/nologin 用户名
##################################
JDK 安装
rpm -qa|grep jdk
确认gcj 的版本号
rpm -qa | grep gcj
卸载gcj
yum -y remove java-1.4.2-gcj-compat
从SUN 下载jdk-1_5_0_14-linux-i586-rpm.bin 或jdk-1_5_0_14-linux-i586.bin
mkdir /usr/java
cd /usr/java
1. jdk-1_5_0_14-linux-i586-rpm.bin 文件安装
chmod 777 jdk-1_5_0_14-linux-i586-rpm.bin
rpm -ivh jdk-1_5_0_14-linux-i586.rpm
2. jdk-1_5_0_14-linux-i586.bin 文件安装
chmod u+x jdk-1_5_0_14-linux-i586.bin
./jdk-1_5_0_14-linux-i586.bin
添加环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.6.0_23
export
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
reboot 重启生效
##################################
xen 管理
查看虚拟主机列表
xm list
使用文本方式连接虚拟系统
xm console test
启动虚拟主机
xm create test
虚拟机和主机切换
ctrl+]
关闭虚拟主机
xm shutdown 主机名
虚拟机克隆(关闭后克隆)
virt-clone -o test -n test1 -f /data/xen/test1.img
虚拟机增加硬盘
dd if=/dev/zero of=/data/xen/test.img bs=1M count=8
编辑原来配置文件,添加新磁盘文件
vi /etc/xen/vm11
name = "vm11"
uuid = "91b0200b-eb41-46d3-1e11-ee2a87035f24"
maxmem = 128
memory = 128
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1,keymap=en-us" ]
disk = [ "tap:aio:/data/vm11.img,xvda,w", "tap:aio:/data/vm11b.img,xvdb,w" ]
vif = [ "mac=00:16:36:75:8a:ea,bridge=virbr0,script=vif-bridge" ]
启动XEN 虚拟机并登陆测试新加的磁盘
增加虚拟机网卡
cat /etc/xen/vm11
name = "vm11"
uuid = "91b0200b-eb41-46d3-1e11-ee2a87035f24"
maxmem = 512
memory = 128
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1,keymap=en-us" ]
disk = [ "tap:aio:/data/vm11.img,xvda,w" ]
vif = [ "mac=00:16:36:75:8a:ea,bridge=xenbr0,script=vif-bridge",
"mac=00:16:36:75:8a:eb,bridge=xenbr0,script=vif-bridge" ]
以上所述是小编给大家介绍的linux运维常用命令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!