ubuntu12.04運(yùn)維備忘
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-01-19 08:26:51 閱讀次數(shù):4144次
- sunyurun@agoravoice.io
- 2015⑴⑴4 22:00:23
ubuntu的運(yùn)維技能更新太快,每半年1個(gè)發(fā)行版,就要每半年更新1次。這些知識(shí)在ubuntu14.04LTS眼前就全都忘掉吧。
1. 粗魯解決ubuntu下dpkg毛病
sudo rm -rf /var/lib/apt/*
sudo apt-get update
sudo apt-get -f install
2. 在發(fā)包的抖動(dòng)與延時(shí)之間微調(diào)參數(shù)
net.ipv4.tcp_max_syn_backlog=4096 #1024 增加TCP SYN隊(duì)列長(zhǎng)度,使系統(tǒng)可以處理更多的并發(fā)連接
net.core.wmem_default = 2097152 #108544,系統(tǒng)套接字緩沖區(qū)
net.core.rmem_default = 2097152 #108544,系統(tǒng)套接字緩沖區(qū)
net.core.rmem_max=16777216 #131071,系統(tǒng)套接字緩沖區(qū)
net.core.wmem_max=16777216 #131071,系統(tǒng)套接字緩沖區(qū)
net.ipv4.tcp_rmem=4096 87380 16777216 #4096 87380 174760, TCP接收緩沖區(qū)
net.ipv4.tcp_wmem=4096 65536 16777216 #4096 16384 131072, TCP發(fā)送緩沖區(qū)
net.ipv4.tcp_mem = 786432 1048576 1572864 # Out of socket memory
net.ipv4.tcp_syncookies=1 #0,防SyncFlood攻擊
net.ipv4.ip_local_port_range = 32768 61000 #用于向外連接的端口范圍,這是默許值
net.ipv4.tcp_max_tw_buckets = 5000 #180000,同時(shí)保持TIME_WAIT套接字的最大數(shù)量
3. ubuntu自動(dòng)找最快的源
在source.list的頂部增加下面4行:
deb mirror://mirrors.ubuntu.com/mirrors.txt precise main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-security main restricted universe multiverse
4. ubuntu安裝最新redis
sudo apt-get -y install python-software-properties
sudo add-apt-repository -y ppa:rwky/redis
sudo apt-get -y update
sudo apt-get -y install redis-server
5. ubuntu安裝最新mongodb
5.1 安裝
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install mongodb-org
5.2 phpdriver
http://php.net/manual/en/mongo.installation.php
https://github.com/joevallender/slim-php-mongo-rest
sudo apt-get install php-pear
sudo pecl install mongo
extension=mongo.so
sudo service apache2 restart
6. ubuntu安裝最新nodejs
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install python g++ make nodejs
7. ubuntu安裝samba
apt-get install samba
smbpasswd -a u
vim /etc/samba/smb.conf
;homes
; writable = yes
service smbd restart
8. ssh/scp取消每次詢(xún)問(wèn)yes/no
/etc/ssh/ssh_config 中的
# StrictHostKeyChecking ask 改成
StrictHostKeyChecking no
9. ubuntu的路由表配置
9.1 增加路由匹配條目
sudo route add -net 目標(biāo)IP netmask 255.255.255.0 gw 網(wǎng)關(guān)IP
# 注意目標(biāo)IP的掩碼要和netmask保持1致
9.2 查看路由表
10. udp丟包檢測(cè)工具
sudo apt-get install 2ping
2ping --listen --stats=5 -q # udp server
2ping -i 0.02 -s 80 -q # udp client
11. tc調(diào)用netem做網(wǎng)絡(luò)摹擬
http://www.linuxfoundation.org/collaborate/workgroups/networking/netem
tc qdisc del dev eth1 root
11.1 原理
-
Netem 是 Linux 2.6 及以上內(nèi)核版本提供的1個(gè)網(wǎng)絡(luò)摹擬功能模塊。該功能模塊可以用來(lái)在性能良好的局域網(wǎng)中,摹擬出復(fù)雜的互聯(lián)網(wǎng)傳輸性能,諸如低帶寬、傳輸延遲、丟包等等情況
-
tc 是 Linux 系統(tǒng)中的1個(gè)工具,全名為traffic control。tc 可以用來(lái)控制 netem 的工作模式
11.2 發(fā)送延時(shí)
tc qdisc add dev eth0 root netem delay 100ms # 延遲100毫秒
tc qdisc add dev eth0 root netem delay 100ms 20ms # 延遲 100ms ± 10ms
tc qdisc add dev eth0 root netem delay 100ms loss 20% # 30% 的包在100ms±10ms 70%保持100ms
11.3 發(fā)送丟包
tc qdisc add dev eth0 root netem loss 20% # 隨機(jī)丟包20%
tc qdisc add dev eth0 root netem loss 20% 40% # 隨機(jī)丟包20% 成功率為40%
11.4 發(fā)送重復(fù)
tc qdisc add dev eth0 root netem duplicate 1%
11.5 發(fā)送破壞
tc qdisc add dev eth0 root netem corrupt 0.2%
11.6 發(fā)送亂序
# 有 25% 的數(shù)據(jù)包(50%相干)會(huì)被立即發(fā)送,其他的延遲 10 秒
tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
11.7 指定目標(biāo)地址
tc qdisc add dev eth1 root handle 1: prio
tc qdisc add dev eth1 parent 1:1 handle 2: netem delay 500ms
tc filter add dev eth1 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 192.168.1.140 flowid 2:1
12. mysql經(jīng)常使用運(yùn)維
12.1 增加用戶(hù)
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test_password';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost';
12.2 改變用戶(hù)密碼
SET PASSWORD FOR 'root'@'localhost' = PASSWORD("root_password");
12.3 創(chuàng)建新的mysql實(shí)例
#!/bin/bash
# script created by @everwanna
port=$2
name="mysql-$1"
data="/var/lib/$name"
log="/var/log/mysql/$name"
config="/etc/mysql/$name.cnf"
pidname="mysqld-$1.pid"
pid="/var/run/mysqld/mysqld-$1.pid"
sockname="mysqld-$1.sock"
sock="/var/run/mysqld/mysqld-$1.sock"
runpid="/run/mysqld/mysqld-$1.pid"
runsock="/run/mysqld/mysqld-$1.sock"
# data
sudo mkdir $data
sudo chown -R mysql $data
# log
sudo mkdir $log
sudo chown -R mysql $log
# config
sudo cp /etc/mysql/my.cnf $config
sudo sed -i "s/= 3306/= $port/g" $config
sudo sed -i "s/mysqld.sock/$sockname/g" $config
sudo sed -i "s/mysqld.pid/$pidname/g" $config
sudo sed -i "s//var/lib/mysql//var/lib/$name/g" $config
sudo sed -i "s//var/log/mysql//var/log/mysql/$name/g" $config
# apparmor
echo "" | sudo tee -a /etc/apparmor.d/local/usr.sbin.mysqld
echo "$data/ r," | sudo tee -a /etc/apparmor.d/local/usr.sbin.mysqld
echo "$data/** rwk," | sudo tee -a /etc/apparmor.d/local/usr.sbin.mysqld
echo "$pid rw," | sudo tee -a /etc/apparmor.d/local/usr.sbin.mysqld
echo "$sock w," | sudo tee -a /etc/apparmor.d/local/usr.sbin.mysqld
echo "$runpid rw," | sudo tee -a /etc/apparmor.d/local/usr.sbin.mysqld
echo "$runsock w," | sudo tee -a /etc/apparmor.d/local/usr.sbin.mysqld
sudo service apparmor reload
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=$data --defaults-file=$config
sudo -b mysqld_safe --defaults-file=$config --user=mysql
echo "PLEASE ADD THE FOLLOWING LINE INTO /etc/rc.local"
echo "sudo -b mysqld_safe --defaults-file=$config --user=mysql"
12.4 登陸非默許實(shí)例
mysql -h127.0.0.1 -uroot -P4316 -ppassword
修改/var/lib/phpmyadmin/config.inc.php
:
$index = INDEX; // 下拉框的下標(biāo)
$cfg['Servers'][$index]['verbose'] = 'default';
$cfg['Servers'][$index]['host'] = '127.0.0.1';
$cfg['Servers'][$index]['port'] = 3306;
$cfg['Servers'][$index]['socket'] = '/var/run/mysqld/mysqld.sock';
$cfg['Servers'][$index]['connect_type'] = 'socket';
$cfg['Servers'][$index]['extension'] = 'mysqli';
$cfg['Servers'][$index]['auth_type'] = 'cookie';
$cfg['Servers'][$index]['user'] = 'root';
$cfg['Servers'][$index]['password'] = '';
12.6 配置主從同步
@master:
sudo su
vim /etc/mysql/my.cnf
server-id = 1
log-bin = mysql-bin
binlog_format = mixed
expire_logs_days = 10
max_binlog_size = 100M
binlog-do-db = [dbname-you-wanna-sync]
service mysql restart
mysql -uroot -pagorabestvoip -h127.0.0.1 -P3306
GRANT REPLICATION SLAVE ON *.* TO '[remote username]'@'[master ip]' IDENTIFIED BY '[passwd]';
show master statusG
@slave:
sudo su
service mysql stop
vim /etc/mysql/my.cnf
server-id = [slave server id]
binlog-do-db = [dbname-you-wanna-sync]
service mysql restart
mysql -uroot -pagorabestvoip -h127.0.0.1 -P3306
slave stop;
change master to master_host='[master ip]',master_port=[port],master_user='[remote username]', master_password='[passwd]',master_log_file='mysql-bin.000004',master_log_pos=107;
start slave;
show slave statusG;
13. php允許上傳大文件
sudo vim /etc/php5/apache2/php.ini
upload_max_filesize = 50M
post_max_size = 50M
sudo vim /etc/apache2/envvars
14. bash經(jīng)常使用命令
獲得文件最后修改時(shí)間戳
stat -c %Y vs.exe
獲得本地IP
ifconfig | awk -F: '/inet addr/&& !($2 ~ /127.0.0.1/){gsub(/ .*/, "", $2); print $2}'
列出10條最高頻度的命令
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
進(jìn)程啟動(dòng)準(zhǔn)確時(shí)間
for pid in $(pgrep exe); do echo -n "${pid} " ; ps -p ${pid} -o lstart | grep -v "START" ; done
15. ubuntu x64安裝32位運(yùn)行時(shí)
sudo apt-get install ia32-libs
16. ubuntu內(nèi)核自動(dòng)更新致使/boot分區(qū)變大
http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot
uname -r # 查看正在使用的內(nèi)核
dpkg -l linux-image-* | grep ^ii # 列出所有內(nèi)核
sudo apt-get -y purge # 刪除內(nèi)核:后邊指定內(nèi)核版本
1鍵刪除不用內(nèi)核:
dpkg -l linux-{image,headers}-"[0⑼]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0⑼]' | xargs sudo apt-get -y purge
17. C++快捷方式
17.1 copy vector to stringstream
std::copy(sentence.begin(), sentence.end(), std::ostream_iterator<std::string>(ss,"
"));
17.2 transform map.key to vector
std::vector<uint32_t> vec;
std::transform(users.begin(), users.end(), std::back_inserter(vec), [&](
const std::map<uint32_t, user_info_ptr>::value_type& x) {
return x.first;
});
17.3 ifstream to string
ifstream ifs("file.txt");
stringstream ss;
ss << ifs.rdbuf();
17.4 lambda參數(shù)類(lèi)型的自動(dòng)辨認(rèn)
#define _A(container) decltype(*std::begin(container))
std::for_each(ints.begin(), ints.end(), [](_A(ints)& val){ val = 7; });
18. ubuntu配置coredump永久生效
vim /etc/security/limits.conf
* hard core unlimited
* soft core unlimited
* soft nofile 65500
* hard nofile 65500
sudo sed "s/enabled=1/enabled=0/" -i /etc/default/apport
grep enabled /etc/default/apport
sudo echo "kernel.core_pattern=/tmp/core-%e-%t-%p-%u" | sudo tee /etc/sysctl.d/core-pattern.conf
sudo service procps start
19. ubuntu自動(dòng)時(shí)鐘同步
sudo apt-get install ntpd
20. ubuntu配置dns
echo 'nameserver 8.8.8.8' | sudo tee /etc/resolvconf/resolv.conf.d/base
sudo service resolvconf restart
cat /etc/resolv.conf
21. ubuntu禁用密碼登陸
sed "s/$password_enabled/PasswordAuthentication no/" /etc/ssh/sshd_config > sshd_config
sudo mv -v sshd_config /etc/ssh/sshd_config
sudo service ssh reload
22. ubuntu使用rsyslog
22.1 安裝
sudo apt-get install -y rsyslog
22.2 分文件
$template FormatWithPRI,"%$NOW% %TIMESTAMP:8:15% %syslogseverity-text% %syslogtag%%msg:::drop-last-lf%
"
if $programname == 'demo.exe' then /var/log/demo.log;FormatWithPRI
if $programname == 'demo.exe' then ~
22.3 按級(jí)別過(guò)濾
if $syslogseverity == '7' then ~
22.4 log rotate
/var/log/demo.log
{
rotate 100
copytruncate
dateext
minsize 1M
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)