您的位置:首页 > 运维架构 > Linux

各种小问题,各种简单的问题..持续更新.....

2012-08-15 17:22 369 查看
查看当前性能
mongodb/bin/mongostat -h xx.xx.xx.xx:27017

查看读写
mongodb/bin/mongotop -h xx.xx.xx.xx:27017

进入mongodb
./mongo --port 27017

查看当前执行语句
db.currentOp()

杀掉进程(先执行 db.currentOp()获取进程号,类似ps -ef)
db.killOP(2920488)

查看最近错误
db.getLastError()db.getLastError()

-----------------------------------------------------------------------
centos 7 内核顺序变更

查看内核顺序:
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg

选择内核0为默认
grub2-set-default 0

------------------------------------------------------------------------

查询缺少的.so 文件

如 ldd nginx

libcrypto.so.6 => not found

yum provides libcrypto.so.6

openssl098e-0.9.8e-29.el7.centos.i686 : A compatibility version of a general cryptography and TLS library
Repo : base
Matched from:
Provides : libcrypto.so.6

yum -y install openssl098e

既可!

删除0字节文件
find -type f -size 0c | xargs rm -f

关于 Crontab 不能使用的问题..没安装等..
yum install vixie-cron
yum install crontabs
/sbin/service crond start //启动服务
修改时区
vi /etc/sysconfig/clock
ZONE="Aisa/Shanghai"
UTC=true
ARC=false
更新时间不生效,还是原来的时区...
执行
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

mysql的binlog的***方法
一:查看备份的日志。
mysql> show binary logs;
+------------------+------------+
| Log_name | File_size |
+------------------+------------+
| mysql-bin.000001 | 392914665 |
| mysql-bin.000002 | 2765 |
| mysql-bin.000003 | 1073742259 |
| mysql-bin.000004 | 1073741949 |
| mysql-bin.000005 | 1073741991 |
| mysql-bin.000006 | 1073741892 |
| mysql-bin.000007 | 1073742028 |
| mysql-bin.000008 | 1073741907 |
| mysql-bin.000009 | 1073741956 |
| mysql-bin.000010 | 1073741898 |
| mysql-bin.000011 | 637578681 |
+------------------+------------+
11 rows in set (0.11 sec)
二:***指定的日志
mysql> purge binary logs to 'mysql-bin.000010';
Query OK, 0 rows affected (4.47 sec)
mysql> show binary logs;
+------------------+------------+
| Log_name | File_size |
+------------------+------------+
| mysql-bin.000010 | 1073741898 |
| mysql-bin.000011 | 637578681 |
+------------------+------------+
2 rows in set (0.00 sec)
*** 0000010 之前日志。
mysql 忘记密码
vi /etc/my.cnf
在[MySQLd]的段中加上一句:skip-grant-tables
重启 mysql
进行命令行
UPDATE user SET Password = password('123456789') WHERE User = 'root';
linux 踢出在线用户
pkill -kill -t pst/0 pst可以试用w命令查看
mysql 日志报错...
[Warning] 'user' entry 'root@localhost.localdomain' ignored in --skip-name-resolve mode.
[Warning] 'user' entry '@localhost.localdomain' ignored in --skip-name-resolve mode.

mysql>use mysql;
mysql>delete from user where HOST='localhost.localdomain';
Query OK, 2 rows affected (0.00 sec)
即可!!

让php显示详细错误信息,不改php.ini
error_reporting的用法有很多的,有时候调试的时候,有些文件不能提示详细错误信息,直接就是500错误,或者什么也没显示,给开发带来很多麻烦。
网上很多方法都是改php.ini,这个方法不可行,服务器上的环境显然是不可以乱改的,有些虚拟主机用户也没有权限改,直接在运行的文件头部加上下面这段代码是最方便的。
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);

?>

Scp互传不需要密码实现办法
在需要使用scp 的服务器
运行 ssh-keygen -t rsa
结果如下
Generating public/private rsa key pair.
Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车
Enter passphrase (empty for no passphrase):#回车
Enter same passphrase again:#回车
Your identification has been saved in /home/.username /.ssh/id_rsa.
Your public key has been saved in /home/.username /.ssh/id_rsa.pub.
The key fingerprint is:
38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost
Generating RSA keys:
Key generation complete.
会在用户目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub
把id_rsa.pub文件拷贝到 目标服务器 的用户目录下 然后再运行如下命令
cat id_rsa.pub >~/.ssh/authorized_keys
它将在/root/.ssh/目录下面生成authorized_keys这个文件
完成以后,在命令提示符下面输入SCP命令测试一下
如:scp /opt/dbback/data/aa.dmp.zip root@10.10.29.1:/opt/dbback/
手工测试的时候,系统会提示你Are you sure you want to continue connecting
(yes/no)? yes 我在这里输入yes 回车以后,系统就开始拷贝文件。

php-fpm.log 日志报了很多的....
[WARNING] fpm_children_bury(), line 215: child 2736 (pool default) exited on signal 15 SIGTERM after 59.588363 seconds from start
查过网上的资源,基本都是认为是php线程打开文件句柄受限导致的错误。
1、提升服务器的文件句柄打开打开
# vi /etc/security/limits.conf 加上
* soft nofile 65535
* hard nofile 65535
2、提升nginx的进程文件打开数
nginx.conf : worker_rlimit_nofile 65535;
3、修改php-fpm.conf文件,主要需要修改2处。
命令 ulimit -n 查看限制的打开文件数,php-fpm.conf 中的选项rlimit_files 确保和此数值一致。
<value name="max_requests">10240</value>
<value name="rlimit_files">65535</value>
4、
# vi /etc/sysctl.conf
底部添加
# Add

net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800

#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
fs.file-max=655350

/sbin/sysctl -p 生效

(CentOS 6.X) 的版本 sysctl -p 出现

----------------------------------------------------------------------
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
----------------------------------------------------------------------------------------------
错误 请先执行
modprobe bridge
再运行~

===============================================================================================

创建大于2T的分区
Fdisk所使用的分区表为MBR,Master Boot Record,即主引导记录。
硬盘的0面、0道、1扇区就是主引导扇区,Fdisk将会写512个字节的记录在此,即MBR记录。
MBR分区表:(MBR含义:Master Boot Record,主引导记录)
所支持的最大卷:2T (T; terabytes,1TB=1024GB)
对分区的设限:最多4个主分区或3个主分区加一个扩展分区(扩展分区中支持无限制的逻辑驱动器)
GPT分区表:(GPT含义:GUID分区表)
支持最大卷:18EB,(E:exabytes,1EB=2(10) PB=1024PB,1PB=2(10) TB=1024TB)
每个磁盘最多支持128个分区
------------------------------------------------------------------------------------
# parted /dev/sdb
(parted) mkpart primary 0% 10%
(parted) mkpart primary 10% 100%
(parted) p
Model: DELL MD3000 (scsi)
Disk /dev/sdb: 13.0TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 1300GB 1300GB primary
2 1300GB 13.0TB 11.7TB primary
(parted)quit
-------------------------------------------------------------------------------------
格式化分区
-------------------------------------------------------------------------------------
mkfs.ext3 -F /dev/sdb2
-------------------------------------------------------------------------------------
Ext3默认的block size的大小为4k,最大只能支持8T的空间 如果超过8T可指定block大小
-------------------------------------------------------------------------------------
mkfs.ext3 -F -b 8192 /dev/sdb2
-------------------------------------------------------------------------------------
mount 挂载
-------------------------------------------------------------------------------------
mount -t ext3 /dev/sdb2 /data
-------------------------------------------------------------------------------------
================================================================================================

平滑升级Nginx版本...
1. 首先下载新版本Nginx 1.2.3 稳定版...

wget http://www.nginx.org/download/nginx-1.2.3.tar.gz tar zxvf nginx-1.2.3.tar.gz
cd nginx-1.2.3
./configure –prefix=/opt/local/nginx –user=nobody –group=nobody –with-http_stub_status_module --with-http_ssl_module
make
2. 然后备份旧版本的nginx可执行文件,复制新版本的nginx这行文件
mv /opt/local/nginx/sbin/nginx /opt/local/nginx/sbin/nginx.old
cp objs/nginx /opt/local/nginx/sbin/nginx
3. 测试新版本nginx是否正常
/opt/local/nginx/sbin/nginx -t -c /opt/local/nginx/conf/nginx.conf
报错...
nginx: [warn] the "log_format" directive may be used only on "http" level in /opt/local/nginx/conf/nginx.conf:121
这是因为1.2.3版本的log文件 不需要放到server 里面...修改配置文件...
4. 平滑升级nginx
kill –USR2 `cat /opt/local/nginx/nginx.pid`
5. 旧版本Nginx的pid变为oldbin,执行新版本的nginx
/opt/local/nginx/sbin/nginx -c /opt/local/nginx/conf/nginx.conf
6. 从容关闭旧版本的Nginx进程
kill –WINCH `cat /opt/local/nginx/log/nginx.oldbin`
7. 验证nginx是否升级成功
/opt/local/nginx/sbin/nginx -v
nginx version: nginx/1.2.3

当在mongodb中***了大量的数据后
日志中会出现以下信息:
[conn154] info DFM::findAll(): extent 2:8c6c000 was empty, skipping ahead. ns:eu3g.rankings_general

意思是太多闲置的空间(***体积较大的集合,或***大量文档后腾出的空间)。
可以通过修复命令来压缩数据。
use test
db.repairDatabase();
netstat -an -t |grep '80'| grep SYN_RECV 发现有900+个连接
假如说黑客攻击的是Web 80端口,察看连接80端口的客户端IP和端口,命令如下:
netstat -an -t |grep '80'| grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort|more
如果来自同一IP的连接很多(超过50个),而且都是连续端口,就很可能是攻击。
netstat -ntu |sed '1,2d'| awk '{print $NF}' | cut -d: -f1 | sort | uniq -c | sort -n
mount 命令... 挂载时指定 用户 与 用户组...
mount -o uid=1000,gid=1000 xxxxxxx

yum安装图形化界面

yum groupinstall "X Window System"
yum groupinstall "GNOME Desktop Environment"

--------------------------------------------------------------------------------------------
查看硬盘型号信息等!!
messages 日志出现大量
smartd[3209]: Device: /dev/sda, 8 Currently unreadable (pending) sectors
smartd[3209]: Device: /dev/sda, 8 Offline uncorrectable sectors
需要更换硬盘 ,需要查看硬盘的信息.
hdparm -i /dev/sda
/dev/sda:
Model=ST1000DM003-9YN162 , FwRev=CC4D , SerialNo= W1D0RW8M
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=0kB, MaxMultSect=16, MultSect=?16?
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=268435455
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2
AdvancedPM=yes: unknown setting WriteCache=enabled
Drive conforms to: unknown: ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6 ATA/ATAPI-7
* signifies the current active mode
通过 Model 确认硬盘型号.... 由于我们的硬盘都是同一型号!!
通过 SerialNo = W1D0RW8M 也就是硬盘的SN 号!!确认是那块硬盘出了问题.....

php-fpm 进程占用CPU 100% 的问题处理..
top //找出CPU使用率高的进程PID
strace -p PID //跟踪进程
ll /proc/PID/fd //查看该进程在处理哪些文件
将有可疑的PHP代码上报
如果文件没有错误...再查看内存使用情况...
通过pmap指令查看PHP-CGI进程的内存使用情况
pmap $(pgrep php-cgi |head -1)
按输出的结果,结合系统的内存大小,配置PHP-CGI的进程数(max_children)
记录执行时间长的文件.进程号.
编辑 vim php-fpm.conf
找到 request_slowlog_timeout 设置为5s 或者更多...
slowlog = /var/log/slowlog.log 设置log 路径..

centos yum warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
这是由于yum安装了旧版本的GPG keys造成的,解决办法就是
rpm --import /etc/pki/rpm-gpg/RPM*

禁止root用户登陆,使用普通用户切换 and Shell命令下面sudo 命令的使用 延伸...
一:
1. 新建一个用户:

useradd haha
passwd haha

2. 禁止root 用户登陆:

vi /etc/ssh/sshd_config

查找“#PermitRootLogin yes”,将前面的“#”去掉,短尾“Yes”改为“No”,并保存文件。
“PermitRootLogin no”

3. 重启sshd 服务:
service sshd restart

二:
1. sudo 命令普通用户使用不需要密码

直接执行 /usr/sbin/visudo

查找“ root ALL=(ALL) ALL ” 在这行的下面,添加:

“haha ALL=(ALL) NOPASSWD:ALL”

保存!

三:
1. Shell命令下使用sudo 提示 sudo: sorry, you must have a tty to run sudo 的错误

编辑 /etc/sudoers 文件

查找 “Defaults requiretty”

修改为: “ Defaults:haha !requiretty ”

保存修改! 要使用 :wq! 保存

四:
1. Shell 命令下使用 sudo echo > 这样的命令 依然提示 权限不够
这是因为重定向符号 “>” 也是 bash 的命令。sudo 只是让 echo 命令具有了 root 权限,
但是没有让 “>” 命令也具有root 权限,所以 bash 会认为这个命令没有写入信息的权限。

可以利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。

sudo sh -c "echo 654321 > 1.txt"

最后测试所有应用是否正常!

SVN 钩子文件 输出日志.
编辑 post-commit 文件

写入

svnlook changed /svn/yx > /svn/yx/changed.log && /shell/commit.sh

# svnlook changed 命令 将 svn/yx 库操作记录到 changed.log 文件内... 然后用shell读取 changed.log 内的操作~执行脚本...

# 重装系统以后~
top 查看
md127_resync md127_raid1
原来raid 正在重建~

使用
cat /proc/mdstat

查看~重建进度...

Personalities : [raid1]
md127 : active raid1 sda[1] sdb[0]
976759808 blocks super external:/md0/0 [2/2] [UU]
[====>................] resync = 20.9% (204401216/976759940) finish=83.6min speed=153954K/sec

md0 : inactive sda[1](S) sdb[0](S)
5288 blocks super external:imsm

unused devices: <none>

使用CPAN模块自动安装方法

perl -MCPAN -e shell

安装模块,自动完成Net::Server模块从下载到安装的全过程。
cpan>install DBI::DBD

-----------------------------------------------------------------

CPAN::shell() called at -e line 1google结果有人是这样解决的rm -rf ~/.cpan
***后在perl -MCPAN -e shell中执行reload index
然后执行install Bundle::CPAN
最后执行reload CPAN即可正常通过命令行install MODULES

-------------------------------------------------------------------

perl 执行错误 缺少 DBD-MYSQL

thisdaystring name: 13thismonthstring name: 02table name: t_day_20140213
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/local/lib/perl5/site_perl/5.14.2/x86_64-linux /usr/local/lib/perl5/site_perl/5.14.2 /usr/local/lib/perl5/5.14.2/x86_64-linux /usr/local/lib/perl5/5.14.2 .) at (eval 4) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge.
at shop_stat.pl line 54

到这里下载 DBD-MYSQL
http://www.cpan.org/modules/by-module/DBD/

wget http://www.cpan.org/modules/by-module/DBD/DBD-mysql-4.026.tar.gz

tar zxvf DBD-mysql-4.0.26

perl Makefile.PL

perl Makefile.PL --mysql_config=/opt/local/mysql/bin/mysql_config
需要执行路径否则报错

make

make install

用命令查看Linux 内存槽数量 与内存根数

首先安装dmidecode 软件
http://www.nongnu.org/dmidecode/

CentOS可用 yum 安装

dmidecode |grep -A16 "Memory Device$"

svn url 变更

svn switch --relocate svn://123.123.123.123/rl/api svn://192.168.0.74/rl/api

svn switch --relocate 原url地址 新URL地址

SSH 登陆很慢

vi /etc/ssh/sshd_config

UseDNS 改成 no
GSSAPIAuthentication 改成 no

重启 sshd
service sshd restart

php worker进程频繁地挂掉和拉起

解决办法:
修改php-fpm配置,只起一个worker进程
kill -USR2 php-fpm_master_pid 重启php-fpm
strace -p only_php_worker_pid

升级 gcc 版本
gcc -v

gcc 版本 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC)

下载 gcc 5.3.0
http://ftp.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz
tar zxvf gcc-5.3.0.tar.gz

cd gcc-5.3.0

./contrib/download_prerequisites 下载编译所需依赖库。

mkdir gcc-build 创建一个编译目录

cd gcc-build

../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

make -j 4 #这个编译过程真是超级久

make install

update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc 40

gcc -v

gcc 版本 5.3.0 (GCC)

已经切换到 5.3.0 版本了

iptables 开放某IP段端口

iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

iptables 关闭某IP段端口
iptables -A INPUT -p tcp --syn --dport 8080 -j DROP
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux 基础