记录Linux常用命令
注:本人用的系统是centos7.5
1、将文件打成tar包命令
tar -czvf postgresql-11.6.tar.gz postgresql-11.6
2、宿主机调用docker里面命令显示docker的ip
docker exec -it 78 /bin/bash -c 'ip a /'
3、 将宿主机文件拷贝到docker里
docker cp 宿主机文件 容器名字:容器路径
例如:
docker cp /data/software/Anaconda3-2020.11-Linux-x86_64.sh my-ubuntu:data
4、将docker里的文件拷贝到宿主机上
docker cp 容器名字:容器文件的路径 宿主机文件路径
例如:
docker cp rna-seq-ubuntu:/data/software/ /home/data/linshi
5、grep,sed命令
查看1.txt文件只查找aaa并显示行数
cat 1.txt |grep -n "aaa"
删除1.txt文件的1-3行
sed -i '1,3d' 1.txt
6、将docker中的容器备份成镜像
ubuntu-20.04源容器名称
ubuntu-20.04-backup新镜像名称
docker commit ubuntu-20.04 ubuntu-20.04-backup
7、docker将镜像转成 tar包
tar包名称:ubuntu-20.04.tar
镜像:ubuntu-20.04:latest
docker save -o ubuntu-20.04.tar ubuntu-20.04:latest
8、将其他用户加入docker组
sudo usermod -aG docker $USER
$USER为实际的用户
9、安装nfs
挂载点:192.168.1.58:/data01
windows挂载命令:mount -o \\192.168.1.58\data01 d:\data01(提前开启nfs功能,目前是只读权限,必须是windows专业版)
Linux挂载命令:mount 192.168.1.58:/data01 /data02 (目前是只读权限,必须先安装客户端 centos命令为:yum install nfs-utils -y,Ubuntu命令为:apt-get install nfs-common)
修改权限的话,需去改 gpfsio2上的/etc/exports 文件
cat /etc/exports
/data01 192.0.0.0/255.0.0.0(ro,insecure,no_root_squash,async)
其中的ro改成rw 重启nfs
10、查看cpu前10
ps aux --sort=-pcpu | head -10
11、查看内存前10
ps aux --sort -rss | head -10
12、禁用rm命令
12.1重命名
alias rm='echo do not use rm command'
12.2编辑配置文件
vim /etc/profile
alias rm='echo do not use rm command'
source /etc/profile
12.3注释
vim /root/.bashrc
#alias rm='rm -i' 注释掉这一行
13、按照文件大小进行排序(最大的10个)
du * -sh | sort -hr |head
14、查看机器最近成功登陆的事件和最后一次不成功的登陆
lastlog
15、查看机器当前登录的全部用户
who
16、将已经创建好的容器设置为开机自启
docker update --restart=always 容器ID或者容器名字
17、下载某个网页里目录下面的所有文件,命令如下
wget -c -r -np -p www.xxx.org/pub/path/
参数说明:
-c 断点续传
-r 递归下载,下载指定网页某一目录下(包括子目录)的所有文件
-np 递归下载时不搜索上层目录,如wget -c -r www.xxx.org/pub/path/
没有加参数-np,就会同时下载path的上一级目录pub下的其它文件
-p 下载网页所需的所有文件,如图片等
18、创建ubuntu容器并把本机/data02目录映射到容器里的/data02目录下
docker run -itd --name compute -v /data02:/data02 ubuntu-20.04-backup:latest
19、查看CPU型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
20、查看内存 按内存大小排序
首先输入
top
其次按住键盘
shift+m
21、防火墙开放端口
(1)批量开放端口,如从100到500这之间的端口我们全部要打开
firewall-cmd --zone=public --add-port=100-500/tcp --permanent
(2)重新载入一下防火墙设置,使设置生效
firewall-cmd --reload
(3)查看系统所有开放的端口,可以看到从100到500的端口已被全部开放
firewall-cmd --zone=public --list-ports
(4)同理,批量限制端口为
firewall-cmd --zone=public --remove-port=100-500/tcp --permanent
firewall-cmd --reload
22、防火墙限制IP
(1)比如限制IP为192.168.0.200的地址禁止访问80端口即禁止访问机器
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" reject"
(2)重新载入一下防火墙设置,使设置生效
firewall-cmd --reload
(3)查看已经设置的规则
firewall-cmd --zone=public --list-rich-rules
解除IP地址限制
(4)解除刚才被限制的192.168.0.200
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" accept"
(5)重新载入一下防火墙设置,使设置生效
firewall-cmd --reload
(6)再查看规则设置发现已经没有192.168.0.200的限制了
firewall-cmd --zone=public --list-rich-rules
如设置未生效,可尝试直接编辑规则文件,删掉原来的设置规则,重新载入一下防火墙即可
配置文件:
vi /etc/firewalld/zones/public.xml
(7)如我们需要限制10.0.0.0-10.0.0.255这一整个段的IP,禁止他们访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject"
firewall-cmd --reload
firewall-cmd --zone=public --list-rich-rules
(8)同理,打开限制为
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" accept"
firewall-cmd --reload
(9)开放所有端口
firewall-cmd --permanent --zone=public --add-port=1-65535/tcp
firewall-cmd --reload
(10)限制IP为192.168.1.209访问所有端口
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.209" drop'
firewall-cmd --reload
23、下载ftp网址里所有的文件
wget --recursive --no-parent ftp://ftp.ebi.ac.uk/pub/databases/ipd/mhc/previous/
这个命令会下载网址下的所有文件夹和文件,并且不会下载上级目录(--no-parent选项)
24、拷贝Sample文件夹开头的下的所有gz文件到gz文件夹里
cp Sample*/*.gz gz/
25、查询所有的none镜像的id
docker images | grep none | awk '{print $3}'
删除docker images 中的none镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi
26、gpu服务器关机后,输入nvidia-smi显卡显示不出来
提示:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running
操作步骤:
1)检查驱动和cuda
nvcc -V
2)查看已安装驱动的版本信息 比如我的显示为nvidia-470.161.03
ls /usr/src | grep nvidia
3)下载dkms
apt-get install dkms
4)用dkms下载显卡
dkms install -m nvidia -v 470.161.03
5)再次查看显卡
nvidia-smi
27、docker里时间比实际显示时间慢8个小时
1)首先进入容器
docker exec it 容器ID或者容器名字 /bin/bash
2)将上海的时间软连接到localtime里
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3)输入到/etc/timezone里
echo "Asia/Shanghai" > /etc/timezone
4)再次查看时间
date
注意
如果是Ubuntu镜像的话
需要下载tzdata
首先更新
apt-get update
然后下载
apt-get install -y tzdata
27、gitlab添加SSH密钥
1)从web界面登录后,进入到项目后,会提示让添加SSH密钥
如果是windows系统需要先安装git.exe
官网:https://git-scm.com/download(下载所需的版本)
2)然后cmd打开命令行
依次输入
git config --global user.name "aaa"
git config --global user.email "aaa@123.com"
其中aaa和aaa@123.com分别为gitlab的登录用户名和自己的邮箱地址
ssh-keygen -t rsa -C 'aaa@123.com'
按回车 按回车
然后出现下图所示:
根据提示Created directory 'C:\Users\test/.ssh'.
去这个路径下会看到两个文件夹
打开最下面的文件
打将里面的内容复制到gitlab的SSH密钥里
设置下 标题 和 到期于
28、MD5值校验
确保目录下有这些文件
然后输入
md5sum -c R21130360LR01-YK-0164_combined_R1.fastq.gz.md5
将R21130360LR01-YK-0164_combined_R1.fastq.gz.md5替换为自己的MD5文件名
得到ok或者确定证明值一致
29、清理掉所有的python进程(慎用)
kill -9 $(ps aux | grep 'python' | awk '{print $2}')
30、删除docker中未使用的镜像
docker image prune -a --force
31、使用rsync命令将本地上的/data01/下所有的文件拷贝到/data03/data02_backup/并显示其进度
脚本1
内容:
#!/bin/bash
# 源目录
source_dir="/data01/"
# 目标目录
target_dir="/data03/data02_backup/"
# 需要复制的文件夹列表
folders=("192.168.1.55-backup" "192.168.1.56-backup" "192.168.1.58-backup" "192.168.1.62-backup"
"192.168.1.64_docker" "bioinfo_analysis_project" "download_data" "ftp_web_files"
"compute_files" "data_files_download" "internal_research_project" "jichen"
"list_tree" "minio" "minior" "model_data" "model_data_other" "users"
"PA-mIHC-backup" "raw_data_for_modeling" "research_projects"
"sequencing_raw_data_for_contract_service" "sequencing_raw_data_for_in_house" "software")
# 循环复制每个文件夹
for folder in "${folders[@]}"; do
rsync -av --progress "${source_dir}${folder}" "${target_dir}"
done
注意for循环要缩进
效果如下:
脚本2
这个脚本实现了对/data01目录的增量备份,并将备份存放到/data03/data02_backup目录下。每次执行脚本时,都会创建一个新的备份目录,其中只包含自上次备份以来有所更改的文件。同时,通过latest符号链接,可以快速地访问到最新的备份数据。
#!/bin/bash
# A script to perform incremental backups using rsync
set -o errexit
set -o nounset
set -o pipefail
# 更新源地址和目的地址
readonly SOURCE_DIR="/data01"
readonly BACKUP_DIR="/data03/data02_backup"
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_LINK="${BACKUP_DIR}/latest"
mkdir -p "${BACKUP_DIR}"
rsync -av --delete \
"${SOURCE_DIR}/" \
--link-dest "${LATEST_LINK}" \
--exclude=".cache" \
"${BACKUP_PATH}"
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"
注意格式(要对齐,缩进)
脚本解释:
设置脚本执行的环境:
set -o errexit:当任何语句的执行结果不是true时,整个脚本立即退出。
set -o nounset:如果脚本尝试使用未初始化的变量,脚本将退出。
set -o pipefail:如果管道中的任何命令失败了,整个管道的返回值将是最后一个失败的命令的返回值。
定义变量:
SOURCE_DIR:源目录,即要备份的数据所在的目录,被设置为/data01。
BACKUP_DIR:备份目录,即备份数据存放的位置,被设置为/data03/data02_backup。
DATETIME:当前的时间戳,格式为YYYY-MM-DD_HH:MM:SS。
BACKUP_PATH:具体的备份路径,由BACKUP_DIR和DATETIME拼接而成。
LATEST_LINK:一个符号链接(symlink),指向最近的备份,被设置在BACKUP_DIR目录下,名为latest。
创建备份目录:
使用mkdir -p命令确保BACKUP_DIR目录存在,如果不存在则创建它。
执行增量备份:
使用rsync命令进行增量备份。rsync是一个用于文件同步和备份的命令行工具。
-av:表示归档模式,其中-a代表递归传输并保持文件属性,-v代表详细输出。
--delete:删除目标位置(即备份目录)中存在但在源位置不存在的文件,实现反向同步。
--link-dest="${LATEST_LINK}":使用硬链接来节省空间,只对那些自上次备份以来有所更改的文件进行实际备份。这是实现增量备份的关键。
--exclude=".cache":排除.cache目录,不进行备份。
"${SOURCE_DIR}/":源目录,即要备份的目录。
"${BACKUP_PATH}":目标目录,即备份存放的位置。
更新最新备份的符号链接:
rm -rf "${LATEST_LINK}":删除现有的latest符号链接(如果存在的话)。
ln -s "${BACKUP_PATH}" "${LATEST_LINK}":创建一个新的符号链接latest,指向刚刚创建的备份目录。这样,通过latest链接,可以方便地访问到最新的备份。
32、每天凌晨12点备份文件夹到指定路径下
并以当天的日期生成文件夹,且每10天为1份
脚本内容:
#!/bin/bash
# 源目录
source_dir="/home/OA/odoo"
# 目标备份目录
backup_dir="/data02/192.168.1.55-backup/OA/odoo"
# 生成当前日期的格式化字符串(例如:2023-09-27)
current_date=$(date "+%Y-%m-%d")
# 备份目录名称,格式为:/data02/192.168.1.55-backup/OA/odoo/YYYY-MM-DD
backup_folder="$backup_dir/$current_date"
# 创建备份目录
mkdir -p "$backup_folder"
# 使用rsync进行备份,保留文件属性,删除源目录中已删除的文件
rsync -av --delete "$source_dir/" "$backup_folder/"
# 删除10天前的备份
find "$backup_dir" -type d -ctime +10 -exec rm -rf {} \;
然后添加到crotab里
0 0 * * * sh 脚本的绝对路径/脚本名称.sh
33.每天凌晨12点自动备份pgsql数据库的指定库名到指定路径下
脚本内容:
#!/bin/bash
# PostgreSQL连接信息
#分别为数据库的IP,数据库的端口号,数据库的连接用户,备份数据库的库名
db_host="192.168.1.55"
db_port="5432"
db_user="postgres"
db_name="yiconmed"
# 获取当前日期
current_date=$(date "+%d-%m-%Y")
# 备份文件名格式为 dd-mm-yyyy-Full.sql
backup_file="/data02/192.168.1.55-backup/pgsql_backup/$current_date-Full.sql"
# 输入数据库的密码
export PGPASSWORD="DyDLMj2eSX"
# 使用完整的pg_dump路径备份数据库
#如果不知道pg_dump在哪个路径下查看下面的注释即可。
/usr/bin/pg_dump -h $db_host -p $db_port -U $db_user -d $db_name -f $backup_file
# 清除PGPASSWORD环境变量
unset PGPASSWORD
echo "数据库备份完成。"
注释:
针对上面pg_dump的问题,如果不知道pg_dump在哪个路径下则需切换至postgres用户,然后输入命令whereis pg_dump即可。
首先切换至postgres用户
su - postgres
然后输入
whereis pg_dump
如图所示:
然后添加到crotab里
0 0 * * * sh 脚本的绝对路径/脚本名称.sh
34、快速统计文件夹的磁盘使用情况(TB级别)
要使用ncdu
,首先需要安装它,你可以使用以下命令:
sudo yum -y install ncdu
安装完成后,可以使用ncdu
命令来统计文件夹的磁盘使用情况:
ncdu 文件夹名称
例如:
ncdu /data03/data02_backup
效果如下:
35、实时备份文件夹
当源目录下有新的数据产生时,通过rsync立即备份到目标备份目录下
脚本内容:
#!/bin/bash
# 源目录
source_dir="/home/OA/odoo"
# 目标备份目录
backup_dir="/data02/192.168.1.55-backup/OA/real_time_odoo"
# 创建备份目录
mkdir -p "$backup_dir"
# 启动inotifywait监视源目录
inotifywait -m -e create -e modify -e move -e delete --format '%w%f' -r "$source_dir" | while read changed_file
do
# 生成当前日期的格式化字符串(例如:2023-09-27)
current_date=$(date "+%Y-%m-%d")
# 备份目录名称,格式为:/data02/192.168.1.55-backup/OA/real_time_odoo/YYYY-MM-DD
backup_folder="$backup_dir/$current_date"
# 创建备份目录
mkdir -p "$backup_folder"
# 使用rsync进行实时备份,保留文件属性
rsync -av --delete "$source_dir/" "$backup_folder/"
done
注意:需要首先安装inotify-tools工具
yum -y install inotify-tools
如果执行脚本后 提示“Setting up watches. Beware: since -r was given, this may take a while”!之类的内容
是由于系统中已达到允许的inotify监视数上限所致
解决这个问题的方法是增加允许每个用户的inotify监视数
编辑/etc/sysctl.conf
文件
vim /etc/sysctl.conf
#在文件的末尾添加以下行:
fs.inotify.max_user_watches=524288
#这将增加inotify监视数的上限到524,288
保存并关闭文件
应用更改 使新的内核参数生效:
sysctl -p
请注意 如果您需要更大的监视数上限 可以根据需求调整fs.inotify.max_user_watches
的值
然后 再次运行sudo sysctl -p
来使更改生效
36、给正在使用的容器添加内存
docker update --memory 4G f4
f4为容器ID
如果报错如下
证明需要再给swap分区
添加参数--memory-swap
docker update --memory 4G --memory-swap 4G f4
37、使用nginx将文件上传至服务器上 并通过访问网页进行文件下载
1.首先要安装上nginx
yum -y install nginx
2.编辑配置.conf文件
nginx默认安装路径为/usr/local/nginx/conf/conf.d/
cd /usr/local/nginx/conf/conf.d/
vim download.conf
server {
listen 83;
server_name 192.168.1.56;
location / {
alias /home/data/software/;
autoindex on;
}
}
如图:
3.配置文件参数说明:
listen 83;
要确保服务器83端口没有被占用 如果被占用了 需要换一个端口
server_name 192.168.1.56;
将192.168.1.56换成服务器的IP或hostname
alias /home/data/software/;
下载文件存放服务器的实际路径
要确认要通过nginx访问下载的文件是否真实存放在该路径下
记得将需要下载文件上传至/home/data/software/该路径下
autoindex on;
这个不需要改复制粘贴即可
4、网页访问
例如上传至/home/data/software/该路径下的文件名称为:ps2023_37007.zip
如图
然后在浏览器上输入地址:
http://192.168.1.56:83/ps2023_37007.zip
将192.168.1.56换成服务器的真实IP
83换成上面真实配置的端口号
ps2023_37007.zip换成下载文件的真实名称
然后即可看到下载成功
38、已经创建好的容器加入开机自启
docker update --restart=always 容器ID或者容器名字
39、杀死所有rsync -av --delete /home/OA/odoo/ /data02/192.168.1.55-backup/OA/real_time_odoo/09-05-2024/有关的进程
pkill -f "rsync -av --delete /home/OA/odoo/ /data02/192.168.1.55-backup/OA/real_time_odoo/09-05-2024/"
40、配置docker加速镜像
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.iscas.ac.cn",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn"
],
"log-driver": "json-file",
"log-opts": {"max-size": "1024m","max-file": "3"},
"data-root": "/home/data/docker",
"insecure-registries": ["172.16.112.1:88"]
}
主要是这三个地址
"https://mirror.iscas.ac.cn",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn"
最后重启docker服务
systemctl restart docker
后续会不断更新~
嘻嘻~
有一天
一颗芦荟看到泥地里有一颗莴苣
芦荟就想为啥莴苣不能养在花盆里
然后芦荟恍然大悟
因为~
莴爱泥呀~
莴爱泥呀~