记录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

 后续会不断更新~

 

 

 

 

 

 

 

嘻嘻~

 有一天

一颗芦荟看到泥地里有一颗莴苣

芦荟就想为啥莴苣不能养在花盆里

然后芦荟恍然大悟

因为~

莴爱泥呀~

莴爱泥呀~

 

 

 

 

 

 

posted @ 2021-12-22 14:20  宝英姐姐  阅读(77)  评论(0编辑  收藏  举报