不定时维护 Linux 常用命令
软连接
ln -s [源文件或目录] [目标文件或目录] ln -s /usr/local/php/bin/php /usr/bin/php
|
注意:第一个参数必须为绝对路径
重命名
修改 root 密码
添加快捷命令
alias site='cd /var/www/site/mycitsm/'
|
使用 yum 安装软件 sudo
yum -y install sudo yum remove sudo
|
-y
忽略确认
删除目录
杀进程
先 ps -ef | more
分页看进程情况,如果知道进程名称 也可以用 ps -ef | grep
进程名称
实时查看更新中的文件
tail -f file.log tailf file.log
|
查找有 bom 头的文件
grep -r -I -l $'^\xEF\xBB\xBF' ./
|
然后用 notepad++去掉即可
查找文件
find ./ -maxdepth 1 -name "@*"
|
这个命令意思是,查找当前目录下以@开头的文件或者目录,搜索深度为一级也就是只在当前目录找,不进入子目录
查看硬盘是不是满了
查看磁盘剩余空间
查看该目录的大小
查看软件安装位置
查看 git 位置:
查看服务器端口通不通
telnet 60.194.65.154 3341
|
查看 linux 系统版本
uname -a Linux qs-xezf-db2 2.6.18-194.el5
|
centos 版本
cat /etc/redhat-release CentOS release 5.4 (Final)
|
cat /etc/issue CentOS release 6.8 (Final)
|
安装时指定安装目录
./configure --prefix=/usr/local/python3 make && make install
|
自启开机启动文件
临时设置代理到本地
用来下载 github 文件
export all_proxy=socks5://192.168.2.133:1092
|
应用重启
centos6,service 命令依赖于 /etc/init.d/xxx
/etc/init.d/php-fpm restart service php-fpm restart
|
centos7、Alibaba Cloud Liunx 2
systemctl restart php-fpm
|
应用开机自启
chkconfig
centos6 使用,串行启动需等待进程逐个启动
- 必须存在
/etc/init.d/nginx
文件
- 文件开头指定级别
2345
#! /bin/sh # chkconfig: 2345 55 25 # Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
|
chkconfig --add nginx
添加服务
systemctl
centos7 使用,多进程并发启动
实际是在 /etc/systemd/system/multi-user.target.wants/php-fpm.service
建立了/lib/systemd/system/php-fpm.service
的软链接
- systemd 中的 service 如果开启了
PrivateTmp=true
将创建它自己的/tmp
子目录/tmp/systemd-private-*
并相应地更改它的命名空间
- systemctl 也会去
/etc/init.d
目录下查找
- systemctl 也会去
/lib/systemd/system
目录下查找
- 修改后刷新 systemd,
systemctl daemon-reload
- status 中查看是否已设置开机启动
查看 redis 连接数
netstat -pan | grep 6379 | wc -l
|
查看 docker 容器中的 tcp 连接数
docker inspect nginx | grep Pid
- 进入某个进程的 network namespace
sudo nsenter -n -t 6692
- 执行 netstat,此时只能查看当前 namespace 下的连接
netstat -pan | grep 443 | wc -l
变量操作
赋值
name="test" echo $name echo ${name}
|
等号周围不能有空格
定义默认值
name 默认为$1,$1 未定义时为 test
只读
name="test" readonly name name="read"
|
使用 readonly 把变量变为只读变量,第二次赋值会报错
将命令的结果赋值给变量
name=`command` name=$(command)
|
删除
读取文件收到的参数
自定义的方法入参也是使用 $1
定义方法
get_ip() { echo $1 return 0 }
get_ip liu.app echo $?
|
函数的返回值必须为整数,用来标识方法是否执行成功,0 代表成功,非整数时会报 numeric argument required
,所以建议直接再方法中操作全局变量
局部变量
- 脚本中定义的变量是 global 的
- 函数定义的变量默认是 global 的,函数定义的变量可以被显式定义成 local 的,其作用域局限于函数内。 > 函数的入参也是局部变量,仅限于函数内使用
添加 local/bin 到 PATH
默认情况下/sbin/
/usr/sbin
和 /usr/local/sbin
不在普通用户的 $PATH
中,这些文件往往需要管理员权限,建议只在 root 用户的~/.bashrc
中增加下列内容
export PATH=$PATH:/usr/local/sbin:/usr/local/bin
|
centos7:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
|
centos8:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
|
以指定用户执行命令
以 /sbin/nologin
用户执行指定命令
su www -s /bin/bash/ -c "git pull"
|
bin sbin 区别
/bin
用于在/usr
安装分区之前可用的二进制文件,用于在非常早期的引导阶段或在引导单用户模式下需要可用的简单二进制文件,如cat
ls
,适用于所有用户
/sbin
相上,需要拥有超级用户(root)权限的二进制文件
/usr/bin
同 /bin
,但适用于一般系统范围的二进制文件
/usr/sbin
同 /usr/bin
,需要拥有超级用户(root)权限的二进制文件
/usr/local/bin
本地程序的二进制文件
/usr/local/sbin
本地程序需要拥有超级用户(root)权限的二进制文件
- root 的环境变量为:
/sbin:/bin:/usr/sbin:/usr/bin
日期
- 当前日期
date +%F
2022-01-29
- 当前时间
date +"%F %H:%M:%S"
2022-01-29 10:59:07
- 当月
date +%Y-%m
2022-01
- 昨日
date -d yesterday +%F
2022-01-28
- 上一个月
date -d "$(date +%Y%m)01 last month" +%Y%m
202112
- 下一个月
date -d "$(date +%Y%m)01 next month" +%Y%m
202202
FreeBSD
- 当前日期
date +%F
2022-01-29
- 当前时间
date +"%F %H:%M:%S"
2022-01-29 10:59:07
- 当月
date +%Y-%m
2022-01
- 昨日
date -v-1d +%F
2022-01-28
- 上一个月
date -v -1m -j "
date +%Y%m010000" +%Y%m
202112
- 下一个月
date -v +1m -j "
date +%Y%m010000" +%Y%m
202202 注意:+
号不能省略,-v 1m
代表当前月
- 详见:date
调试脚本
sh -x test.sh
记录调试脚本信息到日志
sh -x test.sh > /tmp/test.out 2>&1
|
文件系统
- 目录项:包括文件名和 inode 节点号。
- Inode:又称文件索引节点,包含文件的基础信息以及数据块的指针。
- 数据块:包含文件的具体内容
数据块 block
- 硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存 512 字节(相当于 0.5KB)
- 为增加效率会一次性连续读取多个扇区,即一次性读取一个"块"(block),这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是 4KB,即连续八个 sector 组成一个 block。
- 文件数据都储存在"块"中
inode
- 储存文件元信息的区域就叫做 inode,中文译名为"索引节点"
- 当查看某个文件时,会先从 inode 表中查出文件属性及数据存放点,再从数据块中读取数据。
- inode 也会消耗硬盘空间
- 每个 inode 都有一个号码,操作系统用 inode 号码来识别不同的文件
- 使用
ls -i demo.txt
查看文件名对应的 inode 号码
inode 包含文件的元信息,具体来说有以下内容:
- 文件的字节数
- 文件拥有者的 User ID
- 文件的 Group ID
- 文件的读、写、执行权限
- 文件的时间戳,共有三个:ctime 指 inode 上一次变动的时间,mtime 指文件内容上一次变动的时间,atime 指文件上一次打开的时间。
- 链接数,即有多少文件名指向这个 inode。
- 文件数据块 block 的位置。
目录项 dirent
- 目录(directory)也是一种文件,打开目录,实际上就是打开目录文件
- 目录文件的结构非常简单,就是一系列目录项(dirent)的列表
- 每个目录项,所包含文件的文件名,以及该文件名对应的 inode 号码
ls -i /etc
软链接 硬链接
- 硬链接使用
ln A B
创建 A 链接到 B,两个文件都指向相同的 inode
- 软链接使用
ln -s A B
创建 A 链接到 B,两个文件使用不通的 inode,但文件 A 的内容是文件 B 的路径,无论打开哪一个文件,最终读取的都是文件 B
重复执行命令
watch -n 1 "cat test1.sh >> test.txt"
|
-n 1
代表停留 1 秒
while true; do date; sleep 1; done
|
循环的方式会有滚动的输出