Linux常用命令&问题解决

/ Linux / 没有评论 / 99浏览

整理常用命令以及linux遇到的问题

常用命令

记录常用命令

免密登录

配置host

每台服务器均需要修改hostname,加入到/etc/hosts文件中

修改hostname后需要重启服务器生效

主节点生成key

ssh-keygen -t rsa

复制到其他节点

ssh-copy-id -i ~/.ssh/id_rsa.pub $username@$hostname

**提示:**如果端口不是22,那么ssh-copy-id -i ~/.ssh/id_rsa.pub -p $port $username@$hostname

创建用户、组

创建组

创建一个apps

groupadd apps

添加用户到组

创建用户tomcat并添加到apps

useradd tomcat -g apps

修改tomcat用户密码

passwd tomcat

给用户分配root权限

修改/etc/sudoers文件,将用户添加到root用户下面

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
tomcat  ALL=(ALL)       ALL

还可以将用户添加到wheel组、或当前用户组具有root权限

三种方式:linux下如何添加一个用户并且让用户获得root权限

解压&压缩

tar.gz解压到某个目录

使用-C参数解压到指定目录

tar -xvzf jdk-8u131-linux-x64.tar.gz -C /usr/local

unzip解压到某个目录

使用-d参数解压到指定目录

unzip xxx.zip -d /usr/local

shell脚本中调用sudo自动输密码

通过重定向输入,格式:echo "password" | sudo -S command

如下是卸载openjdk,安装openjdk脚本

#!/usr/bin
# jdk配置脚本

echo "uninstall openjdk..."
# 卸载openjdk
echo "your password" | sudo -S yum -y remove java-1.8.0-openjdk-headless-1.8.0.141-1.b16.el7_3.x86_64 java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el7_3.x86_64 java-1.7.0-openjdk-headless-1.7.0.141-2.6.10.1.el7_3.x86_64 java-1.8.0-openjdk-headless-1.8.0.141-1.b16.el7_3.x86_64 java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el7_3.x86_64 java-1.7.0-openjdk-headless-1.7.0.141-2.6.10.1.el7_3.x86_64
echo "uninstall openjdk compete."

echo "install sunjdk..."
# 安装sunjdk
echo "your password" | sudo -S mkdir -p /usr/local/java
echo "your password" | sudo -S tar -xzf /home/cmccapp/hdp-scripts/jdk-8u131-linux-x64.tar.gz -C /usr/local/java
echo "your password" | sudo -S sudo bash -c 'cat profile >> /etc/profile'
source /etc/profile
echo "install sunjdk compete."

echo "test jdk..."
java -version

echo "install jdk compete :)"

Linux系统遇到的问题

记录linux系统遇到的问题

安装rpm包

rpm -ivh xxx.rpm

安装rpm包时互相依赖

例如x.rpm与y.rpm互相依赖,这时我们同时安装两个包即可

rpm -ivh x.rpm y.rpm

安装包时版本冲突

在安装HDP的过程中,需要安装以下依赖

但是系统已经自带了其他的版本,当时我直接卸载了glibc-common,然后就只能敲cd命令了。。

正确姿势,强制更新该包的版本,但是不更新包依赖

rpm -Uvh glibc-2.17-157.el7.x86_64.rpm glibc-common-2.17-157.el7.x86_64.rpm glibc-devel-2.17-157.el7.x86_64.rpm glibc-headers-2.17-157.el7.x86_64.rpm --force --nodeps

即使用rpm -Uvh x.rpm --force --nodeps

挂载本地yum源

内网中,一台新的服务器到手后,挂好磁盘,本地iso镜像。例如把centos7的镜像挂在/mnt/mnt

drwxr-xr-x 5 root root   4096 11月  9 2016 addons
drwxr-xr-x 3 root root   4096 11月  9 2016 EFI
-rw-r--r-- 1 root root   8643 11月  9 2016 EULA
-rw-r--r-- 1 root root  18390 11月  9 2016 GPL
drwxr-xr-x 3 root root   4096 11月  9 2016 images
drwxr-xr-x 2 root root   4096 11月  9 2016 isolinux
drwxr-xr-x 2 root root   4096 11月  9 2016 LiveOS
drwxr-xr-x 2 root root 311296 11月  9 2016 Packages
-rw-r--r-- 1 root root  64277 11月  9 2016 RELEASE-NOTES-U3-en
-rw-r--r-- 1 root root 187067 11月  9 2016 RELEASE-NOTES-U3-en.html
drwxr-xr-x 2 root root   4096 11月  9 2016 repodata
-rw-r--r-- 1 root root   1011 11月  9 2016 RPM-GPG-KEY
-rw-r--r-- 1 root root   1011 11月  9 2016 RPM-GPG-KEY-oracle
-r--r--r-- 1 root root   3322 11月  9 2016 TRANS.TBL

我们需要添加本地yum源

Too many files open

场景:将war部署在tomcat上,运行一段时候后报too many files open错误

参考:too many open files解决方法

Cannot assign requested address

场景:jmeter压测时错误

Non HTTP response code: org.apache.http.conn.HttpHostConnectException/Non HTTP response message: Connect to 10.252.165.106:15020 [/10.252.165.106] failed: Cannot assign requested address (connect failed)

这是客户端的错误,不是服务端的错误

解决:在压测机的/etc/sysctl.conf中添加以下:

# tcp连接超时后15s可再次利用,默认60s
net.ipv4.tcp_fin_timeout=15
# 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
net.ipv4.tcp_timestamps=1
# 表示开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_tw_recycle=1
# 10000~65000之间的端口都是可用的
net.ipv4.ip_local_port_range=10000	65000

最后sysctl -p生效

参考:cannot assign requested address

MySQL连接不够用了

MySQL数据库默认的连接数只有100,显然是不够用的,我们调成1000。

/etc/my.cnf中添加max_connections=1000

重启生效

Tomcat太多connection timeout

tomcat默认的连接数为200,显然也是不够用的,我们调成600

$TOMCAT_HOME/conf/server.xml的Connector节点中增加maxThreads="600"

<!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     Java AJP  Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxThreads="600" />

重启生效

数据源连接池不够用

错误:创建数据连接失败: wait millis 10000, active 6, maxActive 50

显然默认最大的连接数50不够用了,我们按照对应的数据源连接池去调整最大的参数值即可