书写技术成长之路

Linux漂亮的工具集

参考

Linux常用运维命令

  • 查看端口占用情况 netstat -tulpn

  • 查看最占CPU和内存的进程 ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

  • 显示内存和虚拟存储器使用情况 free -h

  • 显示CPU信息 核数,架构,一级,二级缓存等 lscpu

  • 压缩 tar -czf home.tar.gz filename

  • 解压缩 tar -zxvf filename.tar.gz

  • 查看文件大小-由大到小 du -chs --time /var/www/* | sort -rn | head
    一款强大的工具是ncdu

  • Linux强制另一终端连接退出

  1. 首先用who命令查看都有哪个终端连接
  2. 用ps命令查看终端占用的进程 sudo ps -ft pts/1
  3. 强制退出 sudo kill -9 6022 6356 6357

Docker入门

安装Docker

在RedHat 7上只能安装Docker EE版本,这里使用阿里云的源来进行安装。

执行命令: curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

安装完成后,如果要以非root身份运行docker, 需要把用户加入docker用户组, sudo usermod -aG docker ec2-user

然后启动docker服务 sudo service docker start

查看docker的信息 docker info

安装个经典的hello world,docker run hello-world , 如果成功,就说明docker可以正常工作了。

进入某个container docker exec -it container_name /bin/bash

安装docker-compose

sudo -i
curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
参考

https://docs.lvrui.io/2017/04/15/快速安装Docker/

Centos 设置交换文件失败的解决办法

由于安装MySQL的时候内存不足导致安装失败,所以需要添加交换文件来增加内存。

  1. 首先用swapon -s来查看是否已经有交换空间, 还可以通过free -m来查看,因为我的是空,所以显示如下 swap1

  2. 创建一个4G大小的交换空间 sudo fallocate -l 4G /swapfile

  3. 查看刚才创建的交换文件是否成功 ls -lh /swapfile

  4. 改变虚拟交换空间的权限 sudo chmod 600 /swapfile

  5. 将该文件标记为用于交换空间 sudo mkswap /swapfile

  6. 使用交换空间 sudo swapon /swapfile, 这个时候报错了 swap2

经过一番搜索,发现fallocate命令并不是真实的创建了物理空间, 所以需要使用下面的命令来创建真实的地址 sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB

  1. 再次执行sudo mkswap /swapfilesudo swapon /swapfile就已经成功了 swap3

参考地址

  1. https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-swap-creating-file.html

  2. https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-centos-7

  3. https://unix.stackexchange.com/questions/294600/i-cant-enable-swap-space-on-centos-7

Linux 添加用户并赋予sudo权限

第一步 添加用户

sudo adduser test-user

第二步 为新用户设置密码

sudo passwd test-user

第三步 将新用户加入wheel用户组

sudo usermod -aG wheel test-user

第四步 切换到新用户并测试sudo

su - test-user

sudo ls -al /root

如果成功展示,就说明新用户已经加入sudoers了

第五步 运行sudo命令不必输入密码

sudo visudo

在最后一行添加 test-user ALL=(ALL) NOPASSWD: ALL

参考地址

https://www.tecmint.com/run-sudo-command-without-password-linux/

Centos用Firewalld开启端口号

Firewalld可以用来开启一个端口号,比如开启9000端口

第一步 安装firewalld

yum install firewalld

sudo systemctl enable firewalld

sudo systemctl start firewalld

第二步 可以开启端口号了

开启端口号并永久保存 firewall-cmd --permanent --add-port=9200/tcp

重新加载端口信息 firewall-cmd --reload

显示所有已开启的端口号 firewall-cmd --list-ports

参考地址
  1. https://serverfault.com/questions/710076/centos-7-firewall-cmd-not-found

  2. https://www.rootusers.com/how-to-open-a-port-in-centos-7-with-firewalld/

Centos更改时区后时间仍然不一致

CentOS系统时间与现在时间相差8小时解决方法

产生原因:CentOS 默认 BIOS 时间是 UTC 时间和系统时间不一致

# 第一步 vim /etc/sysconfig/clock
ZONE="Asia/Shanghai"

# 设置为 false ,硬件时钟不和 utc 时间一致
UTC=false            
ARC=false

# 第二步 
# 设置系统时区为上海 
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

# 对准时间,需要先安装ntp服务器然后通过公网 NTP 服务器校准时间
yum install ntp            
ntpdate pool.ntp.org  

# hwclock 把准确的时间写入 BIOS 
hwclock --systohc    

参考 https://my.oschina.net/moooofly/blog/295847

Nginx gzip相关配置

gzip  on;                   # 开启gzip压缩
gzip_comp_level 5;          # 压缩级别(1-9) 越大压缩率越高,设置为5是在压缩率和CPU之间取得平衡
gzip_min_length 1100;       # 大于这个值的才会启用压缩,如果文件太小,则gzip压缩的结果适得其反
gzip_proxied any;           # 通过代理访问的也照样启用
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype  image/svg+xml image/x-icon;     # 压缩支持的类型

参考地址

  1. https://mattstauffer.co/blog/enabling-gzip-on-nginx-servers-including-laravel-forge
  2. https://varvy.com/pagespeed/enable-compression.html
  3. http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_buffers
  4. https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/optimize-encoding-and-transfer

C 指针和数组

#include <stdio.h>

int main()
{
    char board[3][3] = {
        {'1', '2', '3'},
        {'4', '5', '6'},
        {'7', '8', '9'},
    };

    printf("value of board[0][0]: %c\n", board[0][0]);
    printf("value of *board[0]: %c\n", *board[0]);
    printf("value of **board: %c\n", **board);          // 如果使用board获取第一个元素的值,就需要使用两个间接运算符**board

    // 只使用一个间接运算符,只会得到子数组的第一个元素,即board[0]引用的地址
    printf("address of board[0]: %p\n", *board);
}

Git 生成SSH key

Git 生成SSH key的步骤

  1. Generating a new SSH key ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  2. Ensure ssh-agent is enabled eval "$(ssh-agent -s)"
  3. Add your SSH key to the ssh-agent ssh-add ~/.ssh/id_rsa

检查SSH是否成功

ssh -T -p 443 git@ssh.github.com