Linux日常使用技巧集


作为技术人员,Linux 系统可以说是我们使用最多的操作系统,但我们可能并不是很了解它。在这里我将自己日常遇到的 Linux 使用技巧记录下来,方便以后查询使用。

常用命令

  • 统计 IP 连接数
$ netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

操作系统

查看系统版本

在安装环境或者软件时,我们常常需要知道所在操作系统的版本信息,这里列举几种查看内核和发行版本信息的方法,更多见 查看 Linux 系统版本

内核版本

  • uname命令
$ uname -a
Linux fhb-6.6 2.6.32-642.13.1.el6.i686
  • /proc/version文件
$ cat /proc/version 
Linux version 2.6.32-642.13.1.el6.i686

发行版本

  • lsb_release命令
$ lsb_release -a
LSB Version: :base-4.0-ia32:base-4.0-noarch:core-4.0-ia32
Distributor ID: CentOS
Release: 6.8
  • /etc/issue文件
$ cat /etc/redhat-release
CentOS release 6.8 (Final)

启用Swap分区

在遇到内存容量瓶颈时,我们就可以尝试启用 Swap 分区。使用文件(还可以磁盘分区)作为 Swap 分区时,具体步骤如下:

1、 创建 Swap 分区的文件

# bs*count为文件大小
$ dd if=/dev/zero of=/root/swapfile bs=1M count=1024

2、 格式化为交换分区文件

$ mkswap /root/swapfile

3、 启用交换分区

$ swapon /root/swapfile

4、 开机自启用 Swap 分区

/etc/fstab文件中添加如下内容:

/root/swapfile swap swap defaults 0 0

最后,查看系统的 Swap 分区信息:

$ free -h
total used free shared buff/cache available
Mem: 1.7G 729M 252M 9.2M 714M 763M
Swap: 1.0G 0B 1.0G

免密码使用sudo

以下两种需求:

  1. 开发中经常会使用到 sudo 命令,为了避免频繁输入密码的麻烦;
  2. 脚本中使用到 sudo 命令,怎么输入密码?;

这些,都可以通过将用户加入 sudoers 来解决,当然情况 2 也可以使用echo "passwd"|sudo -S cmd,从标准输入读取密码。

sudoers 配置文件为/etc/sudoers,sudo 命令操作权限配置内容如下:

# 授权用户/组 主机名=(允许转换至的用户) NOPASSWD:命令动作
root ALL=(ALL) ALL

授权格式 说明:

  • 第一个字段为授权用户或组,例如 root;
  • 第二个字段为来源,() 中为允许转换至的用户,= 左边为主机名;
  • 第三个字段为命令动作,多个命令以,号分割;

因此,我的用户为fhb,授权步骤如下:

# 1. 执行visudo命令,操作的文件就是/etc/sudoers
$ sudo visudo
# 2. 追加内容
fhb ALL=(root) NOPASSWD: /usr/sbin/service,/usr/local/php/bin/php,/usr/bin/vim
# 3. Ctrl+O保存并按Enter

然后,使用sudo service ssh restart命令测试 OK。

Yum更新排除指定软件

有时候我们使用 yum 安装的软件,由于配置向后兼容性等问题,我们并不希望这些软件(filebeat 和 logstash)在使用update时,被不经意间被自动更新。这时,可以使用如下方法解决:

  • 临时

通过-x--exclude参数指定需要排除的包名称,多个包名称使用空格分隔。例如:

# --exclude同样
$ yum -x filebeat logstash update
  • 永久

在 yum 配置文件/etc/yum.conf中,追加exclude配置项。例如:

# 需排序的包名称
exclude=filebeat logstash

再次使用yum update命令,就不会自动更新指定的软件包了。

$ yum update
No Packages marked for Update

ssh

强制踢出其他登录用户

在某些情况下,需要强制踢出系统其他登录用户,比如遇到非法用户登录。查询当前登陆用户:

# 当前用户
$ whoami
root
# 当前所有用户
$ ps -ef | grep 'pts'
root 4752 4727 0 00:09 pts/0 00:00:00 su www
www 4755 4752 0 00:09 pts/0 00:00:00 bash

剔除非法登陆用户:

$ kill -9 4755

更多详细说明,见 Linux 强制踢出其他登录用户

建立隧道实现端口转发

在可以使用 ssh 情况下,为了能进行线上调试,我们可以使用 ssh 隧道建立端口映射。

例如,线上远程目标机器 ip:10.1.1.123、端口:3303;映射到本地 33031 端口。命令如下:

# [主机ip]:[端口]:[主机ip]:[远程目标机器端口] [远程目标机器ip]
ssh -L 127.0.0.1:33031:127.0.0.1:3303 10.1.1.123

该命令操作后,只能通过127.0.0.1访问。若想全网段访问,需要将第一个主机 ip 更改为0.0.0.0,同时需要在/etc/ssh/sshd_config增加GatewayPorts yes的配置项。

常用工具

Strace调试

在调试程序时,我们会遇到一些系统层面的错误问题,一般都不易发现,这时可以使用 strace 来跟踪系统调用的过程,方便快速定位和解决问题。

$ strace crontab.sh
execve("./crontab.sh", ["./crontab.sh"], [/* 29 vars */]) = 0
brk(0) = 0x106a000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0434160000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=53434, ...}) = 0
mmap(NULL, 53434, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0434152000
close(3) = 0
open("/lib64/libc.so.6", O_RDONLY) = 3
... ...

更多详细说明,见 错误调试

彩色的命令行

在脚本或者代码中,有时候需要在控制终端输出醒目的提示信息,以便引起我们的关注。其实,在 Linux 终端下很容易就能搞定,如下:

彩色的命令行

实现的源代码,内容为:

echo -e "\033[1;30m Hello World. \033[0m [高亮]"
echo -e "\033[0;31m Hello World. \033[0m [关闭属性]"
echo -e "\033[4;32m Hello World. \033[0m [下划线]"
echo -e "\033[5;33m Hello World. \033[0m [闪烁]"
echo -e "\033[7;34m Hello World. \033[0m [反显]"
echo -e "\033[8;35m Hello World. \033[0m [消隐]"
echo -e "\033[0;36;40m Hello World."
echo -e "\033[0;37;41m Hello World."

\033是 Esc 键对应的 ASCII 码(27=/033=0x1B),表示后面的内容具有特殊含义,类似表述有^[以及/e,而\033[0m表示清除格式控制。

输出格式的规则,可表示为\033[特殊格式;前景色;背景色m,主要分为 颜色格式 两类规则。

  • 颜色

主要包括 前景色背景色,前景色范围为30~39,背景色范围为40~49(前景色对应颜色值 +10)。前景色颜色代码表如下:

黑 = “\033[30m”
红 = “\033[31m”
绿 = “\033[32m”
黄 = “\033[33m”
蓝 = “\033[34m”
紫 = “\033[35m”
青 = “\033[36m”
白 = “\033[37m”
  • 格式
表达式 格式
\033[0m 关闭所有属性
\033[1m 高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐

转载:樊浩柏科学院


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM