常用命令

查询linux当前各个状态的连接数量

  • 查询各个连接状态的连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  • 统计80端口连接数
netstat -nat|grep -i "80"|wc -l
  • 统计httpd协议连接数
ps -ef|grep httpd|wc -l
  • 统计已连接上的,状态为 established 的连接数
netstat -na|grep ESTABLISHED|wc -l
  • 查出哪个IP地址连接最多
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r 
netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r 

mysql随机取一条数据

FROM `tablename` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `tablename`)-(SELECT MIN(id) FROM `tablename`))+(SELECT MIN(id) FROM `tablename`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;

mysql查询哪个表占用空间大

  • mysql数据库中information_schema 数据库存储了数据库很多信息,可以通过查询tables表来获得所需要的表相关信息。
    mysql> select table_name,table_rows from tables order by table_rows desc limit 10;

mysql更改sock文件位置

  • 由于Mysql在有时会出现mysql.sock定位误差,会造成不连接数据库。
[client]
socket = /tmp/mysql.sock
[mysqld]
socket = /tmp/mysql.sock

没有[client]的话。自己加入~

mysql不停机修改最大连接数

  • gdb是一个工具,需要yum安装一下
    然后找到mysql.pid文件所在位置
ps -ef | grep mysql
mysql     1310     1 99 12月09 ?      4-19:39:03 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

然后使用gdb修改连接数即可

gdb -p $(cat /var/run/mysqld/mysqld.pid) -ex "set max_connections=500" -batch  

mysql的sock文件丢失

  • sock文件丢失,造成数据库无法启动,日志中显示mysql_safe之类的提示,但没有error

  • mysql日志:
    160608 09:18:25 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
    160608 09:18:25 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
    160608 09:18:26 mysqld_safe mysqld from pid file /var/run/mariadb/mariadb.pid ended

  • 解决方法
    $/usr/local/bin/mysql_install_db //到bin目录执行,重建授权表

    $/usr/local/bin/mysqld_safe &

linux清除缓存

  • 这个文件可以设置的值分别为1、2、3。它们所表示的含义为:
echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象。

docker清理空间

  • 该指令默认只会清除悬空镜像,未被使用的镜像不会被删除
    docker system prune -a
    删除任何未被容器关联引用的卷
    docker volume rm $(docker volume ls -qf dangling=true)

复制文件进docker

  • docker ps -a
    找出我们想要的容器名字
    查找容器长ID
docker inspect -f '{{.ID}}' python
docker cp 本地路径 容器长ID:容器路径**[备注:其实容器ID用短ID就可以]**
docker cp /etc/localtime 38ef22f922704b32cf2650407e16b146bf61c221e6b8ef679989486d6ad9e856:/etc/localtime
  • 从docker往外面复制文件,也一样的,把路径对换一下就好了

查询比较耗时的SQL

select * from information_schema.processlist where time >3 and state='Sending data';

linux耗时操作防止终端挂起

  • 在新session执行命令(使进程不属于接受 HUP 信号的终端的子进程,那么就不会受到 HUP 信号的影响)
  • setsid ./shell.sh

linux删除文件名乱码的文件

  • ls -i 找到节点编号
  • find -inum 33333 -delete 根据节点编号找到并删除文件
  • image.png

锁定网卡配置文件

  • 锁定文件
cd /etc/sysconfig/network-scripts/
chattr +i ifcfg-eth0
  • 解锁文件
chattr -i ifcfg-eth0

docker部署jenkins

  • docker run -p 8080:8080 -p 50000:50000 -v /home/docker/jenkins:/var/jenkins_home jenkins
  • 应该会报如下错误
touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

需要给目录增加jenkins权限 chown -R 1000:1000 /home/docker/jenkins

  • 默认密码的查找方式 docker exec -it dc68ae9d6603 cat /var/jenkins_home/secrets/initialAdminPassword
  • 解决“Getting Started”卡死问题 jenkins_home/jenkins/updates$ vim default.json
    将"http://www.google.com/",修改为"connectionCheckUrl":"http://www.baidu.com/"
    修改完成后如果重启docker服务,上面这个配置会被还原,以后再跟进一下看看

docker容器支持真正的root权限

  • --privileged=true

docker里的程序(php)需要访问磁盘文件的时候可能会没有权限

  • 需要给目录增加jenkins权限 chown -R 1000:1000 /wwwroot

docker容器里安装软件无法启动(报错:Failed to get D-Bus connection: Operation not permitted

  • 这个的原因是因为dbus-daemon没能启动。其实systemctl并不是不可以使用。将你的CMD或者entrypoint设置为/usr/sbin/init即可。会自动将dbus等服务启动起来。
docker run -itd -name mysql   mysql-yum-install /usr/sbin/init
docker exec -it mysql /bin/bash

gitlab docker构建镜像报如下错误

 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied
  • 原因是:docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。
  • 设置一下用户权限
usermod -aG docker gitlab-runner

pgsql 备份与还原

备份:pg_dump -h localhost -p 5432 -U postgres -W -F c -b -v -f "/databak/database.backup" database
恢复:pg_restore -h localhost -p 5432 -U postgres -W -d database -v "/databak/database.backup"

docker里的程序控制台日志太大的问题

  • 是因为控制台输出的日志系统会记录在一个文件里,当输出内容太多的时候,这个日志文件就会特别大,在启动参数里增加下面两个参数即可
--log-opt max-size=10m --log-opt max-file=3

windows下不安装第三方工具抓包

  • 首先开始抓包(注意:命令行需要管理员权限启动),这个命令下面还有很多参数,详细的自己百度吧
netsh trace start capture=yes scenario=NetConnection tracefile=C:\net.etl maxSize=200M
  • 然后停止抓包
netsh trace stop
  • C盘根目录下会出现两个文件 net.etl 和 net.cab ,cab文件里包含里系统非常全面的配置信息,etl可以用“Microsoft Message Analyzer“工具打开

swarm灰度发布

  • image 指定要更新的镜像
  • update-parallelism 指定最大同步更新的任务数
  • update-delay 指定更新间隔
docker service update --image image-name --update-delay 15s  --update-parallelism 1 service-name

CentOS7里network和NetworkManager

CentOS里提供了两套网络管理工具network和NetworkManager,但是我们在实际使用过程中发现他两个会有冲突,目前NetworkManager版本也比较低,比较适合于桌面端,在服务器上关闭掉并使用network就好了

chkconfig NetworkManager off
chkconfig network on
service NetworkManager stop
service network start

swarm添加管理节点

docker swarm join-token manager

docker build添加代理

docker build . \
    --build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
    --build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

防火墙规则

新增防火墙规则(允许指定ip访问指定端口):
firewall-cmd  --permanent --add-rich-rule=" \
rule family="ipv4" \
source address="192.168.1.11" \
port protocol="tcp" \
port="8080" \
accept"
删除防火墙规则:
firewall-cmd --permanent --remove-rich-rule=" \
rule family="ipv4" \
source address="192.168.1.11" \
port protocol="tcp" \
port="8080" \
accept"
允许10.0.0.55访问所有端口(允许指定ip访问所有端口):
firewall-cmd --zone=public --permanent --add-rich-rule=" \
rule family="ipv4" \
source address="10.0.0.55" \
accept" 
移除10.0.0.55访问所有端口:
firewall-cmd --zone=public --permanent --remove-rich-rule=" \
rule family="ipv4" \
source address="10.0.0.55" \
accept"

你可能感兴趣的:(常用命令)