资讯详情

干货!一篇文章集合所有Linux基础命令

{ ls -rtl # 所有目录和文件都按时间倒叙列出来 ll -rttouch file # 创建空白文件rm -rf 目录名 # 非空目录不提示删除(-r:递归删除 -f强制)dos2unix # windows文本转linux文本unix2dos # linux文本转windows文本enca filename # 查看编码 安装 yum install -y encamd5sum # 查看md5值ln 源文件 目标文件 # 硬链接ln -s 源文件 目标文件 # 符号连接readlink -f /data # 查看真实的连接目录cat file | nl |less # 查看上下页面,显示行号 q退出head # 查看文件开头的内容head -c 10m # 截取文件中10M内容split -C 10M # 将文件切割大小为10M -C按行tail -f file # 查看结尾 监控日志文件tail -F file # 监控日志并重试, 针对文件被mv可以继续读取情况file # 检查文件类型umask # 更改默认权限uniq # 删除重复行uniq -c # 重复行的次数uniq -u # 只显示不重复行paste a b # 合并两个文件tab键分隔开paste -d‘ ‘ a b # 将两个文件合并指定 ‘符号隔开paste -s a # 将多行数据合并到一行tab键隔开chattr i /etc/passwd # 文件或目录不得任意变更 -i去掉 -R递归more # 向下分面器locate 字符串 # 搜索wc -l file # 查看行数cp filename{,.bak} # 快速备份文件\cp a b # 拷贝不提示 不要使用别名 cp -irev # 逆序排列行中的字符comm -12 2 3 # 行与行比较匹配iconv -f gbk -t utf8 原.txt > 新.txt # 转换编码rename 原模式 目标模式 文件 # 重命名 可正则watch -d -n 1 ‘df; ls -FlAt /path‘ # 在实时目录下查看最新更改的文件cp -v /dev/dvd /rhel4.6.iso9660 # 制作镜像diff suzu.c suzu2.c > sz.patch # 制作补丁patch suzu.c < sz.patch # 安装补丁sort排序{ -t # 指定排序时使用的栏分隔字符-n # 按数值大小排序-r # 以相反的顺序排序-f # 排序时,将小写字母视为大写字母-d # 排序时,处理英文字母、数字及空格字符外,忽略其他的字符-c # 检查文件是否按顺序排序-b # 忽略每行前开始处的空格字符-M # 前三个字母按月缩写排序-k # 指定域-m # 合并几个排序良好的文件-T # 指定临时文件目录,默认在/tmp <起始栏位>-<结束栏位> # 按指定栏排序,从开始栏到结束栏的前栏范围。-o # 将排序后的结果存储在指定的文本中

sort -n # 按数字排序sort -nr # 按数字倒叙sort -u # 过滤重复行sort -m a.txt c.txt # 将两个文件内容整合在一起sort -n -t‘ ‘ -k 2 -k 3 a.txt # 第二域相同,从第三域升降sort -n -t‘:‘ -k 3r a.txt # 以:倒叙排列分割域的第三个域sort -k 1.3 a.txt # 从第三个字母开始排序sort -t" " -k 2n -u a.txt # 以第二域排序,如遇重复,则删除

}

find查找{

# linux文件没有创建时间# Access 使用时间# Modify 修改内容的时间# Change 状态变化时间(权限,属于主)# 默认时间为24小时,当前时间为0天,前48-72小时为2天# -and 且 匹配两个条件 参数可以确定时间范围 -mtime 2 -and -mtime -4# -or 或 匹配任何条件

find /etc -name "*http*" # 按文件名搜索find . -type f # 找到某种类型的文件find / -perm # 根据文件权限进行搜索find / -user # 根据文件属主搜索find / -group # 根据文件所属的组找到文件find / -atime -n # 文件使用时间在N天内find / -atime n # N天前使用文件的时间find / -mtime n # N天前文件内容变更时间find / -ctime n # N天前文件状态变化时间find / -mmin 30 # 按分钟查找内容变化find / -size 1000000c -print # 搜索文件长度大于1M字节的文件find /etc -name "*passwd*" -exec grep "xuesong" {} \; # 根据名称查找文件并传递给-exec后命令find . -name ‘t*‘ -exec basename {} \; # 查找文件名,不取路径find . -type f -name "err*" -exec rename err ERR {} \; # 批量更名(搜索)err 替换为 ERR {}文件find 路径 -name *name1* -or -name *name2* # 找到任何关键字

}

vim编辑器{

gconf-editor # 配置编辑器/etc/vimrc # 配置文件路径vim 24 file # 打开文件定位到指定行vim file1 file2 # 打开多个文件vim -O2 file1 file2 # 垂直分屏vim -on file1 file2 # 水平分屏sp filename # 上下分割打开新文件vsp filename # 左右分割打开新文件Ctrl W [操作] # 操作多个文件间 大写W # 操作: 关闭当前窗口c 屏幕高度相同= 增加高度 移动光标所在的屏幕 右l 左h 上k 下j 中h 下一个w:n # 编辑下一个文件:2n # 编辑下两个文件:N # 编辑前一份文件:rew # 回到首文件:set nu # 打开行号:set nonu # 取消行号200G # 跳转到200:nohl # 取消高亮:set autoindent # 设置自动缩进:set ff # 查看文本格式:set binary # 改为unix格式ctrl U # 向前翻页ctrl D # 向后翻页%s/字符1/字符2//字符/字符2//字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字符/字/字符/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字/字g # 全部替换X # 文档加密}

归档解压缩{

tar zxvpf gz.tar.gz -C 放入指定目录 包中的目录 # 解包tar.gz 不指定目录的,全解压tar zcvpf /$path/gz.tar.gz * # 打包gz 注意*最好使用相对路径tar zcf /$path/gz.tar.gz * # 没有提示包装正确tar ztvpf gz.tar.gz # 查看gztar xvf 1.tar -C 目录 # 解包tartar -cvf 1.tar * # 打包tartar tvf 1.tar # 查看tartar -rvf 1.tar 文件名 # 给tar追加文件tar --exclude=/home/dmtsai --exclude=*.tar -zcvf myfile.tar.gz /home /etc # 打包/home, /etc ,但排除 /home/dmtsaitar -N "2015/06/01" -zcvf home.tar.gz /home # 在 /home 当中,比 2015/06/01 备份新文件tar -zcvfh home.tar.gz /home # 包装目录包括连接目录tar zcf - ./ | sshroot@IP"tar zxf - -C /xxxx" # 压缩时解压zgrep 字符 1.gz # 检查压缩包中的文件字符bzip2 -dv 1.tar.bz2 # 解压bzip2bzip2 -v 1.tar # bzip2压缩bzcat # 查看bzip2gzip A # 直接压缩文件 # 压缩后源文件消失gunzip A.gz # 直接解压文件 # 解压后源文件消失gzip -dv 1.tar.gz # 解压gzip到targzip -v 1.tar # 压缩tar到gzunzip zip.zip # 解压zipzip zip.zip * # 压缩zip# rar3.6下载: http://www.rarsoft.com/rar/rarlinux-3.6.0.tar.gzrar a rar.rar *.jpg # 压缩文件为rar包unrar x rar.rar # 解压rar包7z a 7z.7z * # 7z压缩7z e 7z.7z # 7z解压

}文件ACL权限控制{

getfacl 1.test # 查看文件ACL权限setfacl -R -m u:xuesong:rw- 1.test # 增加用户对文件的读写权限 -R 递归

}svn更新代码{

--force # 强制覆盖/usr/bin/svn --username user --passwordpasswd co $Code ${SvnPath}src/ # 检出整个项目/usr/bin/svn --username user --password passwd up $Code ${SvnPath}src/ # 更新项目/usr/bin/svn --username user --password passwd export $Code$File ${SvnPath}src/$File # 导出个别文件/usr/bin/svn --username user --password passwd export -r 版本号 svn路径 本地路径 --force # 导出指定版本

}git{

# 编译安装git-1.8.4.4 ./configure --with-curl --with-expatmakemake installgit clone git@10.10.10.10:gittest.git ./gittest/ # 克隆项目到指定目录git pull # 更新项目 需要cd到项目目录中git add . # 更新所有文件git commit -m "gittest up" # 提交操作并添加备注git push # 正式提交到远程git服务器git reset --hard # 本地恢复整个项目git rm -r -n --cached ./img # -n执行命令时,不会删除任何文件,而是展示此命令要删除的文件列表预览git rm -r --cached ./img # 执行删除命令 需要commit和push让远程生效git init --bare smc-content-check.git # 初始化新git项目 需要手动创建此目录并给git用户权限 chown -R git:git smc-content-check.gitgit config --global credential.helper store # 记住密码

}

恢复rm删除的文件{

# debugfs针对 ext2 # ext3grep针对 ext3 # extundelete针对 ext4df -T # 首先查看磁盘分区格式umount /data/ # 卸载挂载,数据丢失请首先卸载挂载,或重新挂载只读ext3grep /dev/sdb1 --ls --inode 2 # 记录信息继续查找目录下文件inode信息ext3grep /dev/sdb1 --ls --inode 131081 # 此处是inodeext3grep /dev/sdb1 --restore-inode 49153 # 记录下inode信息开始恢复目录

}

openssl{

openssl rand 15 -base64 # 口令生成openssl sha1 filename # 哈希算法校验文件openssl md5 filename # MD5校验文件openssl base64 filename.txt # base64编码/解码文件(发送邮件附件之类功能会可以使用)openssl base64 -d filename.bin # base64编码/解码二进制文件openssl enc -aes-128-cbc filename.aes-128-cbc # 加密文档 # 推荐使用的加密算法是bf(Blowfish)和-aes-128-cbc(运行在CBC模式的128位密匙AES加密算法),加密强度有保障openssl enc -d -aes-128-cbc -in filename.aes-128-cbc > filename # 解密文档

}

}

rpm{

rpm -ivh lynx # rpm安装rpm -e lynx # 卸载包rpm -e lynx --nodeps # 强制卸载rpm -qa # 查看所有安装的rpm包rpm -qa | grep lynx # 查找包是否安装rpm -ql # 软件包路径rpm -Uvh # 升级包rpm --test lynx # 测试rpm -qc # 软件包配置文档rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # 导入rpm的签名信息rpm --initdb # 初始化rpm 数据库 rpm --rebuilddb # 重建rpm数据库 在rpm和yum无响应的情况使用 先 rm -f /var/lib/rpm/__db.00* 在重建

}

yum{

yum list # 所有软件列表yum install 包名 # 安装包和依赖包yum -y update # 升级所有包版本,依赖关系,系统版本内核都升级yum -y update 软件包名 # 升级指定的软件包yum -y upgrade # 不改变软件设置更新软件,系统版本升级,内核不改变yum search mail # yum搜索相关包yum grouplist # 软件包组yum -y groupinstall "Virtualization" # 安装软件包组repoquery -ql gstreamer # 不安装软件查看包含文件yum clean all # 清除var下缓存}

yum使用epel源{

# 包下载地址: http://download.fedoraproject.org/pub/epel # 选择版本5\6\7rpm -Uvh http://mirrors.hustunique.com/epel//6/x86_64/epel-release-6-8.noarch.rpm

}

自定义yum源{

find /etc/yum.repos.d -name "*.repo" -exec mv {} {}.bak \;vim /etc/yum.repos.d/yum.repo[yum]#httpbaseurl=http://10.0.0.1/centos5.5#挂载iso#mount -o loop CentOS-5.8-x86_64-bin-DVD-1of2.iso /data/iso/#本地#baseurl=file:///data/iso/enable=1

#导入keyrpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

}

编译{

源码安装{

./configure --help # 查看所有编译参数./configure --prefix=/usr/local/ # 配置参数make # 编译# make -j 8 # 多线程编译,速度较快,但有些软件不支持make install # 安装包make clean # 清除编译结果

}

perl程序编译{

perl Makefile.PLmakemake testmake install

}

python程序编译{

python file.py# 源码包编译安装python setup.py buildpython setup.py install

}编译c程序{

gcc -g hello.c -o hello

}}}

wall     # 给其它用户发消息whereis ls # 查找命令的目录which # 查看当前要执行的命令所在的路径clear # 清空整个屏幕reset # 重新初始化屏幕cal # 显示月历echo -n 123456 | md5sum # md5加密mkpasswd # 随机生成密码 -l位数 -C大小 -c小写 -d数字 -s特殊字符netstat -anlp | grep port # 是否打开了某个端口ntpdate stdtime.gov.hk # 同步时间tzselect # 选择时区 #+8=(5 9 1 1) # (TZ=‘Asia/Shanghai‘; export TZ)括号内写入 /etc/profile/sbin/hwclock -w # 时间保存到硬件/etc/shadow # 账户影子文件LANG=en # 修改语言vim /etc/sysconfig/i18n # 修改编码 LANG="en_US.UTF-8"export LC_ALL=C # 强制字符集vi /etc/hosts # 查询静态主机名alias # 别名watch uptime # 监测命令动态刷新ipcs -a # 查看Linux系统当前单个共享内存段的最大值ldconfig # 动态链接库管理命令ldd `which cmd` # 查看命令的依赖库dist-upgrade # 会改变配置文件,改变旧的依赖关系,改变系统版本 /boot/grub/grub.conf # grub启动项配置ps -mfL <PID> # 查看指定进程启动的线程 线程数受 max user processes 限制ps uxm |wc -l # 查看当前用户占用的进程数 [包括线程] max user processestop -p PID -H # 查看指定PID进程及线程lsof |wc -l # 查看当前文件句柄数使用数量 open files lsof |grep /lib # 查看加载库文件sysctl -a # 查看当前所有系统内核参数sysctl -p # 修改内核参数/etc/sysctl.conf,让/etc/rc.d/rc.sysinit读取生效strace -p pid # 跟踪系统调用ps -eo "%p %C %z %a"|sort -k3 -n # 把进程按内存使用大小排序strace uptime 2>&1|grep open # 查看命令打开的相关文件grep Hugepagesize /proc/meminfo # 内存分页大小mkpasswd -l 8 -C 2 -c 2 -d 4 -s 0 # 随机生成指定类型密码echo 1 > /proc/sys/net/ipv4/tcp_syncookies # 使TCP SYN Cookie 保护生效 # "SYN Attack"是一种拒绝服务的攻击方式grep Swap /proc/25151/smaps |awk ‘{a+=$2}END{print a}‘ # 查询某pid使用的swap大小

开机启动脚本顺序{

/etc/profile/etc/profile.d/\*.sh~/bash_profile~/.bashrc/etc/bashrc

}

进程管理{

ps -eaf # 查看所有进程kill -9 PID # 强制终止某个PID进程kill -15 PID # 安全退出 需程序内部处理信号cmd & # 命令后台运行nohup cmd & # 后台运行不受shell退出影响ctrl+z # 将前台放入后台(暂停)jobs # 查看后台运行程序bg 2 # 启动后台暂停进程fg 2 # 调回后台进程pstree # 进程树vmstat 1 9 # 每隔一秒报告系统性能信息9次sar # 查看cpu等状态lsof file # 显示打开指定文件的所有进程lsof -i:32768 # 查看端口的进程renice +1 180 # 把180号进程的优先级加1ps{

ps aux |grep -v USER | sort -nk +4 | tail # 显示消耗内存最多的10个运行中的进程,以内存使用量排序.cpu +3 # USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND%CPU # 进程的cpu占用率%MEM # 进程的内存占用率VSZ # 进程虚拟大小,单位K(即总占用内存大小,包括真实内存和虚拟内存)RSS # 进程使用的驻留集大小即实际物理内存大小START # 进程启动时间和日期占用的虚拟内存大小 = VSZ - RSSps -eo pid,lstart,etime,args # 查看进程启动时间

}top{

前五行是系统整体的统计信息。第一行: 任务队列信息,同 uptime 命令的执行结果。内容如下:01:06:48 当前时间up 1:22 系统运行时间,格式为时:分1 user 当前登录用户数load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行:为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:Tasks: 29 total 进程总数1 running 正在运行的进程数28 sleeping 睡眠的进程数0 stopped 停止的进程数0 zombie 僵尸进程数Cpu(s): 0.3% us 用户空间占用CPU百分比1.0% sy 内核空间占用CPU百分比0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比98.7% id 空闲CPU百分比0.0% wa 等待输入输出的CPU时间百分比0.0% hi0.0% si

第四、五行:为内存信息。内容如下:Mem: 191272k total 物理内存总量173656k used 使用的物理内存总量17616k free 空闲内存总量22052k buffers 用作内核缓存的内存量Swap: 192772k total 交换区总量0k used 使用的交换区总量192772k free 空闲交换区总量123988k cached 缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

进程信息区,各列的含义如下: # 显示各个进程的详细信息

序号 列名 含义a PID 进程idb PPID 父进程idc RUSER Real user named UID 进程所有者的用户ide USER 进程所有者的用户名f GROUP 进程所有者的组名g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?h PR 优先级i NI nice值。负值表示高优先级,正值表示低优先级j P 最后使用的CPU,仅在多CPU环境下有意义k %CPU 上次更新到现在的CPU时间占用百分比l TIME 进程使用的CPU时间总计,单位秒m TIME+ 进程使用的CPU时间总计,单位1/100秒n %MEM 进程使用的物理内存百分比o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESp SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATAr CODE 可执行代码占用的物理内存大小,单位kbs DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kbt SHR 共享内存大小,单位kbu nFLT 页面错误次数v nDRT 最后一次写入到现在,被修改过的页面数。w S 进程状态。D=不可中断的睡眠状态R=运行S=睡眠T=跟踪/停止Z=僵尸进程 父进程在但并不等待子进程x COMMAND 命令名/命令行y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名z Flags 任务标志,参考 sched.h

}

列出正在占用swap的进程{

#!/bin/bashecho -e "PID\t\tSwap\t\tProc_Name"# 拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信息)for pid in `ls -l /proc | grep ^d | awk ‘{ print $9 }‘| grep -v [^0-9]`do# 让进程释放swap的方法只有一个:就是重启该进程。或者等其自动释放。放# 如果进程会自动释放,那么我们就不会写脚本来找他了,找他都是因为他没有自动释放。# 所以我们要列出占用swap并需要重启的进程,但是init这个进程是系统里所有进程的祖先进程# 重启init进程意味着重启系统,这是万万不可以的,所以就不必检测他了,以免对系统造成影响。if [ $pid -eq 1 ];then continue;figrep -q "Swap" /proc/$pid/smaps 2>/dev/nullif [ $? -eq 0 ];then swap=$(grep Swap /proc/$pid/smaps \| gawk ‘{ sum+=$2;} END{ print sum }‘)proc_name=$(ps aux | grep -w "$pid" | grep -v grep \| awk ‘{ for(i=11;i<=NF;i++){ printf("%s ",$i); }}‘)if [ $swap -gt 0 ];then echo -e "${pid}\t${swap}\t${proc_name}"fi fi done | sort -k2 -n | awk -F‘\t‘ ‘{ pid[NR]=$1;size[NR]=$2;name[NR]=$3;}END{ for(id=1;id<=length(pid);id++){ if(size[id]<1024)printf("%-10s\t%15sKB\t%s\n",pid[id],size[id],name[id]);else if(size[id]<1048576)printf("%-10s\t%15.2fMB\t%s\n",pid[id],size[id]/1024,name[id]);elseprintf("%-10s\t%15.2fGB\t%s\n",pid[id],size[id]/1048576,name[id]);}}‘

}linux操作系统提供的信号{ kill -l # 查看linux提供的信号trap "echo aaa" 2 3 15 # shell使用 trap 捕捉退出信号

# 发送信号一般有两种原因:# 1(被动式) 内核检测到一个系统事件.例如子进程退出会像父进程发送SIGCHLD信号.键盘按下control+c会发送SIGINT信号# 2(主动式) 通过系统调用kill来向指定进程发送信号 # 进程结束信号 SIGTERM 和 SIGKILL 的区别: SIGTERM 比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。# 如果一个进程收到一个SIGUSR1信号,然后执行信号绑定函数,第二个SIGUSR2信号又来了,第一个信号没有被处理完毕的话,第二个信号就会丢弃。

SIGHUP 1 A # 终端挂起或者控制进程终止SIGINT 2 A # 键盘终端进程(如control+c)SIGQUIT 3 C # 键盘的退出键被按下SIGILL 4 C # 非法指令SIGABRT 6 C # 由abort(3)发出的退出指令SIGFPE 8 C # 浮点异常SIGKILL 9 AEF # Kill信号 立刻停止SIGSEGV 11 C # 无效的内存引用SIGPIPE 13 A # 管道破裂: 写一个没有读端口的管道SIGALRM 14 A # 闹钟信号 由alarm(2)发出的信号 SIGTERM 15 A # 终止信号,可让程序安全退出 kill -15SIGUSR1 30,10,16 A # 用户自定义信号1SIGUSR2 31,12,17 A # 用户自定义信号2SIGCHLD 20,17,18 B # 子进程结束自动向父进程发送SIGCHLD信号SIGCONT 19,18,25 # 进程继续(曾被停止的进程)SIGSTOP 17,19,23 DEF # 终止进程SIGTSTP 18,20,24 D # 控制终端(tty)上按下停止键SIGTTIN 21,21,26 D # 后台进程企图从控制终端读SIGTTOU 22,22,27 D # 后台进程企图从控制终端写缺省处理动作一项中的字母含义如下:A 缺省的动作是终止进程B 缺省的动作是忽略此信号,将该信号丢弃,不做处理C 缺省的动作是终止进程并进行内核映像转储(dump core),内核映像转储是指将进程数据在内存的映像和进程在内核结构中的部分内容以一定格式转储到文件系统,并且进程退出执行,这样做的好处是为程序员提供了方便,使得他们可以得到进程当时执行时的数据值,允许他们确定转储的原因,并且可以调试他们的程序。D 缺省的动作是停止进程,进入停止状况以后还能重新进行下去,一般是在调试的过程中(例如ptrace系统调用)E 信号不能被捕获F 信号不能被忽略}系统性能状态{

vmstat 1 9r # 等待执行的任务数。当这个值超过了cpu线程数,就会出现cpu瓶颈。b # 等待IO的进程数量,表示阻塞的进程。swpd # 虚拟内存已使用的大小,如大于0,表示机器物理内存不足,如不是程序内存泄露,那么该升级内存。free # 空闲的物理内存的大小buff # 已用的buff大小,对块设备的读写进行缓冲cache # cache直接用来记忆我们打开的文件,给文件做缓冲,(把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)inact # 非活跃内存大小,即被标明可回收的内存,区别于free和active -a选项时显示active # 活跃的内存大小 -a选项时显示si # 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露,要查找耗内存进程解决掉。so # 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。bi # 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024bytebo # 块设备每秒发送的块数量,例如读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。in # 每秒CPU的中断次数,包括时间中断。in和cs这两个值越大,会看到由内核消耗的cpu时间会越多cs # 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用。us # 用户进程执行消耗cpu时间(user time) us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施sy # 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。id # 空闲 CPU时间,一般来说,id + us + sy = 100,一般认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。wt # 等待IOCPU时间。Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。如果 r 经常大于4,且id经常少于40,表示cpu的负荷很重。如果 pi po 长期不等于0,表示内存不足。如果 b 队列经常大于3,表示io性能不好。

}

}

日志管理{

history # 历时命令默认1000条HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 让history命令显示具体时间history -c # 清除记录命令cat $HOME/.bash_history # 历史命令记录文件lastb -a # 列出登录系统失败的用户相关信息 清空二进制日志记录文件 echo > /var/log/btmp last # 查看登陆过的用户信息 清空二进制日志记录文件 echo > /var/log/wtmp 默认打开乱码who /var/log/wtmp # 查看登陆过的用户信息lastlog # 用户最后登录的时间tail -f /var/log/messages # 系统日志tail -f /var/log/secure # ssh日志

}

selinux{

sestatus -v # 查看selinux状态getenforce # 查看selinux模式setenforce 0 # 设置selinux为宽容模式(可避免阻止一些操作)semanage port -l # 查看selinux端口限制规则semanage port -a -t http_port_t -p tcp 8000 # 在selinux中注册端口类型vi /etc/selinux/config # selinux配置文件SELINUX=enfoceing # 关闭selinux 把其修改为 SELINUX=disabled

}

查看剩余内存{

free -m#-/+ buffers/cache: 6458 1649#6458M为真实使用内存 1649M为真实剩余内存(剩余内存+缓存+缓冲器)#linux会利用所有的剩余内存作为缓存,所以要保证linux运行速度,就需要保证内存的缓存大小

}系统信息{

uname -a # 查看Linux内核版本信息cat /proc/version # 查看内核版本cat /etc/issue # 查看系统版本lsb_release -a # 查看系统版本 需安装 centos-releaselocale -a # 列出所有语系locale # 当前环境变量中所有编码hwclock # 查看时间who # 当前在线用户w # 当前在线用户whoami # 查看当前用户名logname # 查看初始登陆用户名uptime # 查看服务器启动时间sar -n DEV 1 10 # 查看网卡网速流量dmesg # 显示开机信息lsmod # 查看内核模块

}硬件信息{

more /proc/cpuinfo # 查看cpu信息lscpu # 查看cpu信息cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # 查看cpu型号和逻辑核心数getconf LONG_BIT # cpu运行的位数cat /proc/cpuinfo | grep ‘physical id‘ |sort| uniq -c # 物理cpu个数cat /proc/cpuinfo | grep flags | grep ‘ lm ‘ | wc -l # 结果大于0支持64位cat /proc/cpuinfo|grep flags # 查看cpu是否支持虚拟化 pae支持半虚拟化 IntelVT 支持全虚拟化more /proc/meminfo # 查看内存信息dmidecode # 查看全面硬件信息dmidecode | grep "Product Name" # 查看服务器型号dmidecode | grep -P -A5 "Memory\s+Device" | grep Size | grep -v Range # 查看内存插槽cat /proc/mdstat # 查看软raid信息cat /proc/scsi/scsi # 查看Dell硬raid信息(IBM、HP需要官方检测工具)lspci # 查看硬件信息lspci|grep RAID # 查看是否支持raidlspci -vvv |grep Ethernet # 查看网卡型号lspci -vvv |grep Kernel|grep driver # 查看驱动模块modinfo tg2 # 查看驱动版本(驱动模块)ethtool -i em1 # 查看网卡驱动版本ethtool em1 # 查看网卡带宽

}终端快捷键{

Ctrl+A   # 行前Ctrl+E   # 行尾Ctrl+S   # 终端锁屏Ctrl+Q    # 解锁屏Ctrl+D    # 退出

}

开机启动模式{

vi /etc/inittabid:3:initdefault: # 3为多用户命令#ca::ctrlaltdel:/sbin/shutdown -t3 -r now # 注释此行 禁止 ctrl+alt+del 关闭计算机

}

终端提示显示{

echo $PS1 # 环境变量控制提示显示PS1=‘[\u@ \H \w \A \@#]\$‘PS1=‘[\u@\h \W]\$‘

}

定时任务{

at 5pm + 3 days /bin/ls # 单次定时任务 指定三天后下午5:00执行/bin/lscrontab -e # 编辑周期任务#分钟 小时 天 月 星期 命令或脚本1,30 1-3/2 * * * 命令或脚本 >> file.log 2>&1echo "40 7 * * 2 /root/sh">>/var/spool/cron/root # 直接将命令写入周期任务crontab -l # 查看自动周期性任务crontab -r # 删除自动周期性任务cron.deny和cron.allow # 禁止或允许用户使用周期任务service crond start|stop|restart # 启动自动周期性服务

}

date{ 星期日[SUN] 星期一[MON] 星期二[TUE] 星期三[WED] 星期四[THU] 星期五[FRI] 星期六[SAT]一月[JAN] 二月[FEB] 三月[MAR] 四月[APR] 五月[MAY] 六月[JUN] 七月[JUL] 八月[AUG] 九月[SEP] 十月[OCT] 十一月[NOV] 十二月[DEC]

date -s 20091112 # 设日期date -s 18:30:50 # 设时间date -d "7 days ago" +%Y%m%d # 7天前日期date -d "5 minute ago" +%H:%M # 5分钟前时间date -d "1 month ago" +%Y%m%d # 一个月前date -d ‘1 days‘ +%Y-%m-%d # 一天后date -d ‘1 hours‘ +%H:%M:%S # 一小时后date +%Y-%m-%d -d ‘20110902‘ # 日期格式转换date +%Y-%m-%d_%X # 日期和时间date +%N # 纳秒date -d "2012-08-13 14:00:23" +%s # 换算成秒计算(1970年至今的秒数)date -d "@1363867952" +%Y-%m-%d-%T # 将时间戳换算成日期date -d "1970-01-01 UTC 1363867952 seconds" +%Y-%m-%d-%T # 将时间戳换算成日期date -d "`awk -F. ‘{print $1}‘ /proc/uptime` second ago" +"%Y-%m-%d %H:%M:%S" # 格式化系统启动时间(多少秒前)

}

limits.conf{

ulimit -SHn 65535 # 临时设置文件描述符大小 进程最大打开文件柄数 还有socket最大连接数, 等同配置 nofileulimit -SHu 65535 # 临时设置用户最大进程数ulimit -a # 查看

/etc/security/limits.conf

# 文件描述符大小 open files # lsof |wc -l 查看当前文件句柄数使用数量* soft nofile 16384 # 设置太大,进程使用过多会把机器拖死* hard nofile 32768

# 用户最大进程数 max user processes# echo $((`ps uxm |wc -l`-`ps ux |wc -l`)) 查看当前用户占用的进程数 [包括线程]user soft nproc 16384user hard nproc 32768

# 如果/etc/security/limits.d/有配置文件,将会覆盖/etc/security/limits.conf里的配置# 即/etc/security/limits.d/的配置文件里就不要有同样的参量设置/etc/security/limits.d/90-nproc.conf # centos6.3的默认这个文件会覆盖 limits.confuser soft nproc 16384user hard nproc 32768

sysctl -p # 修改配置文件后让系统生效

}

百万长链接设置{ # 内存消耗需要较大vim /root/.bash_profile# 添加如下2行,退出bash重新登陆echo 20000500 > /proc/sys/fs/nr_openulimit -n 10000000

}

libc.so故障修复{

# 由于升级glibc导致libc.so不稳定,突然报错,幸好还有未退出的终端grep: error while loading shared libraries: /lib64/libc.so.6: ELF file OS ABI invalid

# 看看当前系统有多少版本 libc.sols /lib64/libc-[tab]

# 更改环境变量指向其他 libc.so 文件测试export LD_PRELOAD=/lib64/libc-2.7.so # 如果不改变LD_PRELOAD变量,ln不能用,需要使用 /sbin/sln 命令做链接

# 当前如果好使了,在执行下面强制替换软链接。如不好使,测试其他版本的libc.so文件ln -f -s /lib64/libc-2.7.so /lib64/libc.so.6

}

sudo{

echo myPassword | sudo -S ls /tmp # 直接输入sudo的密码非交互,从标准输入读取密码而不是终端设备visudo # sudo命令权限添加 /etc/sudoers用户 别名(可用all)=NOPASSWD:命令1,命令2user ALL=NOPASSWD:/bin/su # 免root密码切换root身份wangming linuxfan=NOPASSWD:/sbin/apache start,/sbin/apache restartUserName ALL=(ALL) ALLUserName ALL=(ALL) NOPASSWD: ALLpeterli ALL=(ALL) NOPASSWD:/sbin/serviceDefaults requiretty # sudo不允许后台运行,注释此行既允许Defaults !visiblepw # sudo不允许远程,去掉!既允许

}

grub开机启动项添加{

vim /etc/grub.conftitle ms-dosrootnoverify (hd0,0)chainloader +1

}

stty{

#stty时一个用来改变并打印终端行设置的常用命令

stty iuclc # 在命令行下禁止输出大写stty -iuclc # 恢复输出大写stty olcuc # 在命令行下禁止输出小写stty -olcuc # 恢复输出小写stty size # 打印出终端的行数和列数stty eof "string" # 改变系统默认ctrl+D来表示文件的结束 stty -echo # 禁止回显stty echo # 打开回显stty -echo;read;stty echo;read # 测试禁止回显stty igncr # 忽略回车符stty -igncr # 恢复回车符stty erase ‘#‘ # 将#设置为退格字符stty erase ‘^?‘ # 恢复退格字符定时输入{ timeout_read(){ timeout=$1old_stty_settings=`stty -g`  # save current settingsstty -icanon min 0 time 100  # set 10seconds,not 100secondseval read varname   # =read $varnamestty "$old_stty_settings"   # recover settings}read -t 10 varname # 更简单的方法就是利用read命令的-t选项}

检测用户按键{

#!/bin/bashold_tty_settings=$(stty -g) # 保存老的设置(为什么?). stty -icanonKeypress=$(head -c1) # 或者使用$(dd bs=1 count=1 2> /dev/null)echo "Key pressed was \""$Keypress"\"."stty "$old_tty_settings" # 恢复老的设置. exit 0

}

}

iptables{

内建三个表:nat mangle 和 filterfilter预设规则表,有INPUT、FORWARD 和 OUTPUT 三个规则链vi /etc/sysconfig/iptables # 配置文件INPUT # 进入FORWARD # 转发OUTPUT # 出去ACCEPT # 将封包放行REJECT # 拦阻该封包DROP # 丢弃封包不予处理-A # 在所选择的链(INPUT等)末添加一条或更多规则-D # 删除一条-E # 修改-p # tcp、udp、icmp 0相当于所有all !取反-P # 设置缺省策略(与所有链都不匹配强制使用此策略)-s # IP/掩码 (IP/24) 主机名、网络名和清楚的IP地址 !取反-j # 目标跳转,立即决定包的命运的专用内建目标-i # 进入的(网络)接口 [名称] eth0-o # 输出接口[名称] -m # 模块--sport # 源端口--dport # 目标端口iptables -F # 将防火墙中的规则条目清除掉 # 注意: iptables -P INPUT ACCEPTiptables-restore < 规则文件 # 导入防火墙规则/etc/init.d/iptables save # 保存防火墙设置/etc/init.d/iptables restart # 重启防火墙服务iptables -L -n # 查看规则iptables -t nat -nL # 查看转发

iptables实例{ iptables -L INPUT # 列出某规则链中的所有规则iptables -X allowed # 删除某个规则链 ,不加规则链,清除所有非内建的iptables -Z INPUT # 将封包计数器归零iptables -N allowed # 定义新的规则链iptables -P INPUT DROP # 定义过滤政策iptables -A INPUT -s 192.168.1.1 # 比对封包的来源IP # ! 192.168.0.0/24 ! 反向对比iptables -A INPUT -d 192.168.1.1 # 比对封包的目的地IPiptables -A INPUT -i eth0 # 比对封包是从哪片网卡进入iptables -A FORWARD -o eth0 # 比对封包要从哪片网卡送出 eth+表示所有的网卡iptables -A INPUT -p tcp # -p ! tcp 排除tcp以外的udp、icmp。-p all所有类型iptables -D INPUT 8 # 从某个规则链中删除一条规则iptables -D INPUT --dport 80 -j DROP # 从某个规则链中删除一条规则iptables -R INPUT 8 -s 192.168.0.1 -j DROP # 取代现行规则iptables -I INPUT 8 --dport 80 -j ACCEPT # 插入一条规则iptables -A INPUT -i eth0 -j DROP # 其它情况不允许iptables -A INPUT -p tcp -s IP -j DROP # 禁止指定IP访问iptables -A INPUT -p tcp -s IP --dport port -j DROP # 禁止指定IP访问端口iptables -A INPUT -s IP -p tcp --dport port -j ACCEPT # 允许在IP访问指定端口iptables -A INPUT -p tcp --dport 22 -j DROP # 禁止使用某端口iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP # 禁止icmp端口iptables -A INPUT -i eth0 -p icmp -j DROP # 禁止icmp端口iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP # 阻止所有没有经过你系统授权的TCP连接iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT # IP包流量限制iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT # 除192.168.62.1外,禁止其它人ping我的主机iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --rttl --name WEB --rsource -j DROP # 可防御cc攻击(未测试)

}

iptables配置实例文件{

# Generated by iptables-save v1.2.11 on Fri Feb 9 12:10:37 2007*filter:INPUT ACCEPT [637:58967]:FORWARD DROP [0:0]:OUTPUT ACCEPT [5091:1301533]# 允许的IP或IP段访问 建议多个-A INPUT -s 127.0.0.1 -p tcp -j ACCEPT-A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT# 开放对外开放端口-A INPUT -p tcp --dport 80 -j ACCEPT# 指定某端口针对IP开放-A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT# 拒绝所有协议(INPUT允许)-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP# 允许已建立的或相关连的通行-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 拒绝ping-A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachableCOMMIT# Completed on Fri Feb 9 12:10:37 2007

}

iptables配置实例{

# 允许某段IP访问任何端口iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT# 设定预设规则 (拒绝所有的数据包,再允许需要的,如只做WEB服务器.还是推荐三个链都是DROP)iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT ACCEPT# 注意: 直接设置这三条会掉线# 开启22端口iptables -A INPUT -p tcp --dport 22 -j ACCEPT# 如果OUTPUT 设置成DROP的,要写上下面一条iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT # 注:不写导致无法SSH.其他的端口一样,OUTPUT设置成DROP的话,也要添加一条链# 如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT# 做WEB服务器,开启80端口 ,其他同理iptables -A INPUT -p tcp --dport 80 -j ACCEPT# 做邮件服务器,开启25,110端口iptables -A INPUT -p tcp --dport 110 -j ACCEPTiptables -A INPUT -p tcp --dport 25 -j ACCEPT# 允许icmp包通过,允许pingiptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话) iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)# 允许loopback!(不然会导致DNS无法正常关闭等问题) IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)

}

centos6的iptables基本配置{ *filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -s 222.186.135.61 -p tcp -j ACCEPT-A INPUT -p tcp --dport 80 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT}

添加网段转发{

# 例如通过vpn上网echo 1 > /proc/sys/net/ipv4/ip_forward # 在内核里打开ip转发功能iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE # 添加网段转发iptables -t nat -A POSTROUTING -s 10.0.0.0/255.0.0.0 -o eth0 -j SNAT --to 192.168.10.158 # 原IP网段经过哪个网卡IP出去iptables -t nat -nL # 查看转发

}

端口映射{ # 内网通过有外网IP的机器映射端口# 内网主机添加路由route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.20.111 # 内网需要添加默认网关,并且网关开启转发# 网关主机echo 1 > /proc/sys/net/ipv4/ip_forward # 在内核里打开ip转发功能iptables -t nat -A PREROUTING -d 外网IP -p tcp --dport 9999 -j DNAT --to 10.10.20.55:22 # 进入iptables -t nat -A POSTROUTING -s 10.10.20.0/24 -j SNAT --to 外网IP # 转发回去iptables -t nat -nL # 查看转发

}

}

}

/etc/init.d/sendmail start # 启动服务 /etc/init.d/sendmail stop # 关闭服务/etc/init.d/sendmail status # 查看服务当前状态/date/mysql/bin/mysqld_safe --user=mysql & # 启动mysql后台运行vi /etc/rc.d/rc.local # 开机启动执行 可用于开机启动脚本/etc/rc.d/rc3.d/S55sshd # 开机启动和关机关闭服务连接 # S开机start K关机stop 55级别 后跟服务名ln -s -f /date/httpd/bin/apachectl /etc/rc.d/rc3.d/S15httpd # 将启动程序脚本连接到开机启动目录ipvsadm -ln # lvs查看后端负载机并发ipvsadm -C # lvs清除规则xm list # 查看xen虚拟主机列表virsh # 虚拟化(xen\kvm)管理工具 yum groupinstall Virtual*./bin/httpd -M # 查看httpd加载模块httpd -t -D DUMP_MODULES # rpm包httpd查看加载模块echo 内容| /bin/mail -s "标题" 收件箱 -f 发件人 # 发送邮件"`echo "内容"|iconv -f utf8 -t gbk`" | /bin/mail -s "`echo "标题"|iconv -f utf8 -t gbk`" 收件箱 # 解决邮件乱码/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg # 检测nagios配置文件

chkconfig{

chkconfig 服务名 on|off|set # 设置非独立服务启状态chkconfig --level 35 httpd off # 让服务不自动启动chkconfig --level 35 httpd on # 让服务自动启动 35指的是运行级别chkconfig --list # 查看所有服务的启动状态chkconfig --list |grep httpd # 查看某个服务的启动状态chkconfig –-list [服务名称] # 查看服务的状态

}

nginx{

yum install -y make gcc openssl-devel pcre-devel bzip2-devel libxml2 libxml2-devel curl-devel libmcrypt-devel libjpeg libjpeg-devel libpng libpng-devel openssl

groupadd nginxuseradd nginx -g nginx -M -s /sbin/nologinmkdir -p /opt/nginx-tmp

wget http://labs.frickle.com/files/ngx_cache_purge-1.6.tar.gztar fxz ngx_cache_purge-1.6.tar.gz# ngx_cache_purge 清除指定url缓存# 假设一个URL为 http://192.168.12.133/test.txt # 通过访问 http://192.168.12.133/purge/test.txt 就可以清除该URL的缓存。tar zxvpf nginx-1.4.4.tar.gzcd nginx-1.4.4

# ./configure --help# --with # 默认不加载 需指定编译此参数才使用# --without # 默认加载,可用此参数禁用# --add-module=path # 添加模块的路径# --add-module=/opt/ngx_module_upstream_check \ # nginx 代理状态页面 # ngx_module_upstream_check 编译前需要打对应版本补丁 patch -p1 < /opt/nginx_upstream_check_module/check_1.2.6+.patch# --add-module=/opt/ngx_module_memc \ # 将请求页面数据存放在 memcached中# --add-module=/opt/ngx_module_lua \ # 支持lua脚本 yum install lua-devel lua

./configure \--user=nginx \--group=nginx \--prefix=/usr/local/nginx \--pid-path=/usr/local/nginx/nginx.pid \--lock-path=/usr/local/nginx/nginx.lock \--with-http_ssl_module \--with-http_realip_module \--with-http_gzip_static_module \--with-http_stub_status_module \--add-module=/opt/ngx_cache_purge-1.6 \--http-client-body-temp-path=/opt/nginx-tmp/client \--http-proxy-temp-path=/opt/nginx-tmp/proxy \--http-fastcgi-temp-path=/opt/nginx-tmp/fastcgi \--http-uwsgi-temp-path=/opt/nginx-tmp/uwsgi \--http-scgi-temp-path=/opt/nginx-tmp/scgi

make && make install

/usr/local/nginx/sbin/nginx –t # 检查Nginx配置文件 但并不执行/usr/local/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf # 检查Nginx配置文件/usr/local/nginx/sbin/nginx # 启动nginx/usr/local/nginx/sbin/nginx -s reload # 重载配置/usr/local/nginx/sbin/nginx -s stop # 关闭nginx服务

}

httpd{

编译参数{

# so模块用来提供DSO支持的apache核心模块# 如果编译中包含任何DSO模块,则mod_so会被自动包含进核心。# 如果希望核心能够装载DSO,但不实际编译任何DSO模块,则需明确指定"--enable-so=static"

./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=most --enable-rewrite --enable-forward # 实例编译

--with-mpm=worker # 已worker方式运行--with-apxs=/usr/local/apache/bin/apxs # 制作apache的动态模块DSO rpm包 httpd-devel #编译模块 apxs -i -a -c mod_foo.c--enable-so # 让Apache可以支持DSO模式--enable-mods-shared=most # 告诉编译器将所有标准模块都动态编译为DSO模块--enable-rewrite # 支持地址重写功能--enable-module=most # 用most可以将一些不常用的,不在缺省常用模块中的模块编译进来--enable-mods-shared=all # 意思是动态加载所有模块,如果去掉-shared话,是静态加载所有模块--enable-expires # 可以添加文件过期的限制,有效减轻服务器压力,缓存在用户端,有效期内不会再次访问服务器,除非按f5刷新,但也导致文件更新不及时--enable-deflate # 压缩功能,网页可以达到40%的压缩,节省带宽成本,但会对cpu压力有一点提高--enable-headers # 文件头信息改写,压缩功能需要--disable-MODULE # 禁用MODULE模块(仅用于基本模块)--enable-MODULE=shared # 将MODULE编译为DSO(可用于所有模块) --enable-mods-shared=MODULE-LIST # 将MODULE-LIST中的所有模块都编译成DSO(可用于所有模块) --enable-modules=MODULE-LIST # 将MODULE-LIST静态连接进核心(可用于所有模块)# 上述 MODULE-LIST 可以是:1、用引号界定并且用空格分隔的模块名列表 --enable-mods-shared=‘headers rewrite dav‘2、"most"(大多数模块) --enable-mods-shared=most 3、"all"(所有模块)

}

转发{

#针对非80端口的请求处理RewriteCond %{SERVER_PORT} !^80$RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

RewriteCond %{HTTP_HOST} ^ss.aa.com [NC]RewriteRule ^(.*) http://www.aa.com/so/$1/0/p0? [L,R=301]#RewriteRule 只对?前处理,所以会把?后的都保留下来#在转发后地址后加?即可取消RewriteRule保留的字符#R的含义是redirect,即重定向,该请求不会再被apache交给后端处理,而是直接返回给浏览器进行重定向跳转。301是返回的http状态码,具体可以参考http rfc文档,跳转都是3XX。#L是last,即最后一个rewrite规则,如果请求被此规则命中,将不会继续再向下匹配其他规则。

}

}

mysql源码安装{ groupadd mysqluseradd mysql -g mysql -M -s /bin/falsetar zxvf mysql-5.0.22.tar.gzcd 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.sockmake && make install# 生成mysql用户数据库和表文件,在安装包中输入scripts/mysql_install_db --user=mysqlvi ~/.bashrcexport PATH="$PATH: /usr/local/mysql/bin"# 配置文件,有large,medium,small三个,根据机器性能选择cp support-files/my-medium.cnf /etc/my.cnfcp support-files/mysql.server /etc/init.d/mysqldchmod 700 /etc/init.d/mysqldcd /usr/localchmod 750 mysql -Rchgrp mysql mysql -Rchown mysql mysql/var -Rcp /usr/local/mysql/libexec/mysqld mysqld.oldln -s /usr/local/mysql/bin/mysql /sbin/mysqlln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladminln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc3.d/S15mysql5ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc0.d/K15mysql5}

mysql常用命令{ ./mysql/bin/mysqld_safe --user=mysql & # 启动mysql服务./mysql/bin/mysqladmin -uroot -p -S ./mysql/data/mysql.sock shutdown # 停止mysql服务mysqlcheck -uroot -p -S mysql.sock --optimize --databases account # 检查、修复、优化MyISAM表mysqlbinlog slave-relay-bin.000001 # 查看二进制日志(报错加绝对路径)mysqladmin -h myhost -u root -p create dbname # 创建数据库

flush privileges; # 刷新show databases; # 显示所有数据库use dbname; # 打开数据库show tables; # 显示选中数据库中所有的表desc tables; # 查看表结构drop database name; # 删除数据库drop table name; # 删除表create database name; # 创建数据库select 列名称 from 表名称; # 查询show grants for repl; # 查看用户权限show processlist; # 查看mysql进程select user(); # 查看所有用户show slave status\G; # 查看主从状态show variables; # 查看所有参数变量show status; # 运行状态show table status # 查看表的引擎状态drop table if exists user # 表存在就删除create table if not exists user # 表不存在就创建select host,user,password from user; # 查询用户权限 先use mysqlcreate table ka(ka_id varchar(6),qianshu int); # 创建表SHOW VARIABLES LIKE ‘character_set_%‘; # 查看系统的字符集和排序方式的设定show variables like ‘%timeout%‘; # 查看超时(wait_timeout)delete from user where user=‘‘; # 删除空用户delete from user where user=‘sss‘ and host=‘localhost‘ ; # 删除用户drop user ‘sss‘@‘localhost‘; # 使用此方法删除用户更为靠谱ALTER TABLE mytable ENGINE = MyISAM ; # 改变现有的表使用的存储引擎SHOW TABLE STATUS from 库名 where Name=‘表名‘; # 查询表引擎CREATE TABLE innodb (id int, title char(20)) ENGINE = INNODB # 创建表指定存储引擎的类型(MyISAM或INNODB)grant replication slave on *.* to ‘用户‘@‘%‘ identified by ‘密码‘; # 创建主从复制用户ALTER TABLE player ADD INDEX weekcredit_faction_index (weekcredit, faction); # 添加索引alter table name add column accountid(列名) int(11) NOT NULL(字段不为空); # 插入字段update host set monitor_state=‘Y‘,hostname=‘xuesong‘ where ip=‘192.168.1.1‘; # 更新数据自增表{ create table oldBoy (id INTEGER PRIMARY KEY AUTO_INCREMENT, name CHAR(30) NOT NULL, age integer , sex CHAR(15) ); # 创建自增表insert into oldBoy(name,age,sex) values(%s,%s,%s) # 自增插入数据}

登录mysql的命令{

# 格式: mysql -h 主机地址 -u 用户名 -p 用户密码mysql -h110.110.110.110 -P3306 -uroot -pmysql -uroot -p -S /data1/mysql5/data/mysql.sock -A --default-character-set=GBK

}

shell执行mysql命令{ mysql -u root -p‘123‘ xuesong < file.sql # 针对指定库执行sql文件中的语句,好处不需要转义特殊符号,一条语句可以换行.不指定库执行时语句中需要先usemysql -u$username -p$passwd -h$dbhost -P$dbport -A -e " use $dbname;delete from data where date=(‘$date1‘);" # 执行多条mysql命令mysql -uroot -p -S mysql.sock -e "use db;alter table gift add column accountid int(11) NOT NULL;flush privileges;" # 不登陆mysql插入字段}

备份数据库{

mysqldump -h host -u root -p --default-character-set=utf8 dbname >dbname_backup.sql # 不包括库名,还原需先创建库,在use mysqldump -h host -u root -p --database --default-character-set=utf8 dbname >dbname_backup.sql # 包括库名,还原不需要创建库/bin/mysqlhotcopy -u root -p # mysqlhotcopy只能备份MyISAM引擎mysqldump -u root -p -S mysql.sock --default-character-set=utf8 dbname table1 table2 > /data/db.sql # 备份表mysqldump -uroot -p123 -d database > database.sql # 备份数据库结构innobackupex --user=root --password="" --defaults-file=/data/mysql5/data/my_3306.cnf --socket=/data/mysql5/data/mysql.sock --slave-info --stream=tar --tmpdir=/data/dbbackup/temp /data/dbbackup/ 2>/data/dbbackup/dbbackup.log | gzip 1>/data/dbbackup/db50.tar.gz # xtrabackup备份需单独安装软件 优点: 速度快,压力小,可直接恢复主从复制

}

还原数据库{

mysql -h host -u root -p dbname < dbname_backup.sql source 路径.sql # 登陆mysql后还原sql文件

}

赋权限{

# 指定IP: $IP 本机: localhost 所有IP地址: % # 通常指定多条grant all on zabbix.* to user@"$IP"; # 对现有账号赋予权限grant select on database.* to user@"%" Identified by "passwd"; # 赋予查询权限(没有用户,直接创建)grant all privileges on database.* to user@"$IP" identified by ‘passwd‘; # 赋予指定IP指定用户所有权限(不允许对当前库给其他用户赋权限)grant all privileges on database.* to user@"localhost" identified by ‘passwd‘ with grant option; # 赋予本机指定用户所有权限(允许对当前库给其他用户赋权限)grant select, insert, update, delete on database.* to user@‘ip‘identified by "passwd"; # 开放管理操作指令revoke all on *.* from user@localhost; # 回收权限

}

更改密码{

update user set password=password(‘passwd‘) where user=‘root‘mysqladmin -u root password ‘xuesong‘

}

mysql忘记密码后重置{

cd /data/mysql5/data/mysql5/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking &use mysql;update user set password=password(‘123123‘) where user=‘root‘;

}

mysql主从复制失败恢复{

slave stop;reset slave;change master to master_host=‘10.10.10.110‘,master_port=3306,master_user=‘repl‘,master_password=‘repl‘,master_log_file=‘master-bin.000010‘,master_log_pos=107,master_connect_retry=60;slave start;

}

sql语句使用变量{

use xuesong;set @a=concat(‘my‘,weekday(curdate())); # 组合时间变量set @sql := concat(‘CREATE TABLE IF NOT EXISTS ‘,@a,‘( id INT(11) NOT NULL )‘); # 组合sql语句select @sql; # 查看语句prepare create_tb from @sql; # 准备execute create_tb; # 执行

}

检测mysql主从复制延迟{ 1、在从库定时执行更新主库中的一个timeout数值2、同时取出从库中的timeout值对比判断从库与主库的延迟}

mysql慢查询{

开启慢查询日志{ # 配置文件 /etc/my.conf[mysqld]log-slow-queries=/var/lib/mysql/slowquery.log # 指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.loglong_query_time=5 # 记录超过的时间,默认为10slog-queries-not-using-indexes # log下来没有使用索引的query,可以根据情况决定是否开启 可不加log-long-format # 如果设置了,所有没有使用索引的查询也将被记录 可不加# 直接修改生效show variables like "%slow%"; # 查看慢查询状态 set global slow_query_log=‘ON‘; # 开启慢查询日志 变量可能不同,看上句查询出来的变量

}mysqldumpslow慢查询日志查看{

-s # 是order的顺序,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序 -t # 是top n的意思,即为返回前面多少条的数据 -g # 后边可以写一个正则匹配模式,大小写不敏感的mysqldumpslow -s c -t 20 host-slow.log # 访问次数最多的20个sql语句mysqldumpslow -s r -t 20 host-slow.log # 返回记录集最多的20个sqlmysqldumpslow -t 10 -s t -g "left join" host-slow.log # 按照时间返回前10条里面含有左连接的sql语句show global status like ‘%slow%‘; # 查看现在这个session有多少个慢查询show variables like ‘%slow%‘; # 查看慢查询日志是否开启,如果slow_query_log和log_slow_queries显示为on,说明服务器的慢查询日志已经开启show variables like ‘%long%‘; # 查看超时阀值desc select * from wei where text=‘xishizhaohua‘\G; # 扫描整张表 tepe:ALL 没有使用索引 key:NULLcreate index text_index on wei(text); # 创建索引

}}

mysql操作次数查询{

select * from information_schema.global_status;

com_selectcom_deletecom_insertcom_update

}

}

mongodb{

一、启动{ # 不启动认证./mongod --port 27017 --fork --logpath=/opt/mongodb/mongodb.log --logappend --dbpath=/opt/mongodb/data/# 启动认证./mongod --port 27017 --fork --logpath=/opt/mongodb/mongodb.log --logappend --dbpath=/opt/mongodb/data/ --auth

# 配置文件方式启动cat /opt/mongodb/mongodb.confport=27017 # 端口号fork=true # 以守护进程的方式运行,创建服务器进程auth=true # 开启用户认证logappend=true # 日志采用追加方式logpath=/opt/mongodb/mongodb.log # 日志输出文件路径dbpath=/opt/mongodb/data/ # 数据库路径shardsvr=true # 设置是否分片maxConns=600 # 数据库的最大连接数./mongod -f /opt/mongodb/mongodb.conf# 其他参数bind_ip # 绑定IP 使用mongo登录需要指定对应IPjournal # 开启日志功能,降低单机故障的恢复时间,取代dur参数syncdelay # 系统同步刷新磁盘的时间,默认60秒directoryperdb # 每个db单独存放目录,建议设置.与mysql独立表空间类似repairpath # 执行repair时的临时目录.如果没开启journal,出现异常重启,必须执行repair操作# mongodb没有参数设置内存大小.使用os mmap机制缓存数据文件,在数据量不超过内存的情况下,效率非常高.数据量超过系统可用内存会影响写入性能

}

二、关闭{

# 方法一:登录mongodb./mongouse admindb.shutdownServer()

# 方法:kill传递信号 两种皆可kill -2 pidkill -15 pid

}

三、开启认证与用户管理{

./mongo # 先登录use admin # 切换到admin库db.addUser("root","123456") # 创建用户db.addUser(‘zhansan‘,‘pass‘,true) # 如果用户的readOnly为true那么这个用户只能读取数据,添加一个readOnly用户zhan

标签: 压力变送器mpm486mpm430压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台