Rocky 9系统对XFS磁盘进行配额

1. 安装quota软件

若没有xfs_quota命令,则安装quota软件:

dnf install quota

2. 关闭SeLinux安全机制

临时关闭
setenforce 0

永久关闭
perl -p -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

3. 挂载磁盘时添加配额参数

mount -o remount,usrquota,prjquota /dev/sdb1 /home

或修改 /etc/fstab 文件永久生效(需要重新挂载目标分区才能生效):

/dev/sdb1 /home xfs defaults,usrquota,prjquota 0 0
# 注意有3种quota方式,usrquota给用户限额,grpquota给用户组限额,prjquota给文件夹限额。注意后两者是互斥的,只能选一种,当修改磁盘配额方式后,重启服务器服务器才能生效,而重新挂载分区是不行的。

然后使用mount命令查看挂载分区是否支持磁盘配额:

mount | grep home
/dev/sdb1 on /home type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)

4. 开机时设置配额参数

虽然添加了挂载参数,使用mount命令检测时,其挂载方式依然是noquota。在使用xfs_quota进行配额时会失败,提示:

xfs_quota: cannot set limits: Function not implemented

此时,需要进行开机的配置设置,修改启动配置文件/etc/default/grub内容如下:

GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rhgb quiet rootflags=uquota,pquota"
主要添加了rootflags=uquota,pquota参数。

然后,重新生成启动文件:

对于Legacy启动
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.orig && grub2-mkconfig -o /boot/grub2/grub.cfg

对于UEFI启动
cp /boot/efi/EFI/rocky/grub.cfg /boot/efi/EFI/rocky/grub.cfg.orig && grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg

然后重启后,再检测mount参数。

5. 使用xfs_quota命令对分区进行配额

对user01用户的/home分区进行配额。软限制为3G,硬限制为3.5G。

xfs_quota -x -c 'limit bsoft=3000m bhard=3500m user01' /home
xfs_quota -x -c report /home

-x 允许执行管理员指令
-c 输入执行的指令

6. 使用xfs_quota命令对目录进行配额

对user01、user02、user03等多个用户的家目录进行配额。软限制为3G,硬限制为3.5G。按如下步骤进行:

第一步,生成/etc/projects文件
echo "1000:/home/user01
1000:/home/user02
1002:/home/user03" > /etc/projects
以上/etc/projects文件中设置了两个project编号。project编号是一个数字,可以随便给一个。其中1000对应两个文件夹,1002对应一个文件夹。后续设置好后,这1000对应的两个文件夹一起共享一个配额,而1002对应的文件夹独享一个配额。

第二步,生成/etc/projid文件
echo "user01_3G:1000
user03_3G:1002" > /etc/projid
该/etc/projid文件设置一个好记的project名称(随便取名,推荐取得有意义些),对应这project编号。

第三步,让project名称生效
xfs_quota -x -c 'project -s user01_3G' /home
xfs_quota -x -c 'project -s user03_3G' /home
命令行project的参数-s表示读取/etc/projects文件内容,标记目标文件夹进行配额。每当对/etc/projects文件内容进行修改后,则需要重新运行相应的命令,使修改生效。

第四步,设置project名称对应的磁盘配额。
xfs_quota -x -c 'limit -p bsoft=3000m bhard=3500m user01_3G' /home
xfs_quota -x -c 'limit -p bsoft=3000m bhard=3500m user03_3G' /home
命令行limit的参数-p表示使用project方式进行配额。若配额限制为0,则表示不进行配额限制。

7. 查看配额信息

查看磁盘配额及使用量:

xfs_quota -x -c report /home

查看磁盘分区和目录是否有quota设置:

xfs_quota -x -c print

查看磁盘配额的使用量:

xfs_quota -x -c "df -h"

通过SSH远程连接Windows系统并进行管理

1. 在Windows系统中安装OpenSSH服务端

在Windows11系统下,按 Windows+i 打开设置,点击应用,点击可选功能,点击查看功能,勾选OpenSSH服务器,点击下一步,点击安装。

或者使用Windows Terminal安装OpenSSH:按Windows + x,点击Windows终端(管理员),输入以下命令分别安装OpenSSH客户端和服务端。

# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

安装完毕OpenSSH服务端后,还需要启动SSH服务,设置开机启动,设置防火墙。在Windows终端(管理员)中执行以下命令:

# Start the sshd service
Start-Service sshd

# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'

# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}

操作完毕后,即可使用SSH登录到Windows系统终端了。登录后的操作,和在目标机器上打开其Windows终端进行操作是等同的。

ssh username@servername

修改OpenSSH配置文件,使支持使用密钥远程登录Windows系统。修改C:\ProgramData\ssh\sshd_config文件的内容,修改如下几项:

PubkeyAuthentication yes
PermitRootLogin no
ClientAliveInterval 60
ClientAliveCountMax 10
UseDNS no
GatewayPorts yes

修改完配置文件后,在Windows终端中重启SSH服务:

Stop-Service sshd; Start-Service sshd
或
Restart-Service -Name sshd

2. 实现在Linux服务器上执行一个命令后,能播放我个人笔记本电脑上的一段音乐

我经常远程登录Linux服务器进行比较耗时的计算,却又想在程序结束后能及时提醒我。于是,我在输入一个耗时较长的命令后,额外加一个命令finishing_reminder_by_ringingSong.pl。该命令在远程Linux系统上运行后,能播放我当前笔记本电脑Windows系统中的一段响铃音乐。具体的操作流程如下:

2.1 在Windows系统设置无密码登录的密钥和授权文件

将在Linux系统上的密钥文件id_rsa拷贝到Windows系统用户的.ssh文件夹下,将授权文件authorized_keys拷贝到C:\ProgramData\ssh文件夹下并重命名为administrators_authorized_keys。在Windows终端(管理员)中对这两个文件再进行权限设置,修改拥有者权限:

icacls.exe "C:\Users\chenlianfu\.ssh\id_rsa" /inheritance:r /grant "chenlianfu:F"
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

2.2 在Windows系统设置反向隧道连接到我的一台公网服务器

在Windows系统上执行命令,构建到公网服务器的反向隧道:

ssh -f -N -R 52228:localhost:22 chenlianfu@chenlianfu.com

考虑设置开机时在联网状态下自动运行以上命令:右击我的电脑,显示更多选项,管理,任务计划程序,创建任务,在弹出的页面中进行设置。触发器:启动后1分钟;条件:只有在有网络连接可用时才启动;操作:以上ssh命令。

在远程Linux计算服务器上检测能否使用密钥登录到Windows笔记本电脑上:

ssh -p 52228 chenlianfu@chenlianfu.com

2.3 在Windows下使用命令播放音乐

设置Windows系统Path路径:按Windows+q搜索“高级系统设置”,点击“查看高级系统设置”,在弹出的窗口中点击“环境变量”,鼠标左键选中“Path”所在行,再点击编辑,浏览到文件夹C:\Program Files (x86)\Windows Media Player和C:\Program Files (x86)\Tencent\QQMusic\QQMusic1917.16.31.32,从而将该路径添加进去,再点击确定。此外,我将音频文件放置于D:\ringing_sound_01.mp3路径。关闭所有Windows终端,再重新打开,输入命令即可播放音乐:

wmplayer.exe D:\ringing_sound_01.mp3
QQMusic.exe D:\ChenLianfu_Data\05.设置数据\ringing_sound_01.mp3

2.4 在Linux服务器中远程播放本地笔记本电脑上的音乐

在远程Linux服务器中执行命令,即可播放本地笔记本电脑上的音频。

ssh -p 52228 chenlianfu@chenlianfu.com "wmplayer.exe D:\ChenLianfu_Data\05.设置数据\ringing_sound_01.mp3"

Linux虚拟内存相关设置

1. 临时增加或减少虚拟内存

首先,创建一个指定大小的文件。例如创建一个大小为 200G 的文件

# dd if=/dev/zero of=swapadd1 bs=4096 count=52428800

然后,将该文件加入到交换分区

# mkswap swapadd1
# swapon swapadd1

关闭某一个文件指向的虚拟内存

# swapoff -v swapadd1

2. 设置虚拟内存开始利用的阈值

在CentOS8系统中,当物理内存使用量达到80%时,则开始使用虚拟内存。若想优先全部使用物理内存,当100%使用完毕物理内存后,才开始使用虚拟内存,则可以进行如下设置:

# sysctl vm.swappiness=0
# cat /proc/sys/vm/swappiness

3. 释放虚拟内存

有时候发现物理内存剩余很多,而需您内存使用了不少。这时可以使用以下命令来将虚拟内存数据转移到物理内存,并关闭虚拟内存:

# swapoff -a

然后再重新启用虚拟内存:

# swapon -a

邮件服务器的简单搭建

1. 邮件服务器域名解析

首先,我在万网上解析域名如下:

记录类型    主机记录    记录值
A           mail        115.29.105.12
MX          @           mail.chenlianfu.com
TXT         @           v=spf1 a mx -all

2. CentOS postfix 设置

然后修改 CetnOS 系统下的 PostFix 的配置文件 /etc/postfix/main.cf , 修改的内容如下:

myhostname = mail.chenlianfu.com
mydomain = chenlianfu.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8, 168.100.189.0/28, hash:/etc/postfix/access
relay_domains = $mydestination
home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail
message_size_limit = 52428800

然后运行如下命令启动 Postfix 服务:

# postmap hash:/etc/postfix/access 
# postalias hash:/etc/aliases
# /etc/init.d/postfix check
# /etc/init.d/postfix restart
# 

3. 使用 mail 命令发送邮件

mail命令参数:

-s subject
    邮件的标题。若标题有空格,则需要使用引号。
-a attachment
    将目标文件作为附件发送。若有多个附件需要发送,则使用多个该参数。
-c address
    抄送副本到邮件地址列表。这些邮件地址使用逗号分隔。抄送的邮件地址和收件人地址能
被所收件地址看到。
-b address
    暗送的邮件地址列表。这些邮件地址使用逗号隔开。暗送的邮件地址不能被其收件地址看
到。故mail命令不能将邮件分别发送到邮件地址列表。

使用例子:

$ mail -s "a e-mail subject" -a ./test.tar.gz chenllianfu@foxmail.com < mail_content
$ cat mail_content | mail -s "a e-mail subject" -a ./test.tar.gz chenllianfu@foxmail.com
$ echo "mail_content" | mail -s "a e-mail subject" -a ./test.tar.gz chenllianfu@foxmail.com
$ mail -s "a e-mail subject" -a ./test.tar.gz chenllianfu@foxmail.com
input
EOT

FileZilla在CentOS系统上的安装

由于编译或使用新版本需要高版本的 GCC 和 wxWidgets,因此,不推荐使用新版本的 FileZilla。Fileilla 官网仅提供了最新版本的下载链接。可以到sourceforge上下载旧版本。

$ wget http://sourceforge.net/projects/filezilla/files/FileZilla_Client/3.5.3/FileZilla_3.5.3_x86_64-linux-gnu.tar.bz2
$ tar jxf FileZilla_3.5.3_x86_64-linux-gnu.tar.bz2 -C /opt/
$ echo 'PATH=$PATH:/opt/FileZilla3/bin/' >> ~/.bashrc
$ source ~/.bashrc 
$ filezilla

磁盘IO检测工具 iostat 的简单使用说明

1. iostat 的常用例子和常用参数

iostat 的常用例子:

$ iostat -c -d 1 10
$ iostat -c -x -m 1 10
$ iostat -c -x /dev/sda /dev/sdb 1 10
上个命令表示对 /dev/sda 和 /dev/sdb 两个磁盘进行 I/O 统计,每秒统计一次,共统计10次。

iostat 的常用参数:

-c
    显示 CPU 的使用情况
-d
    显示设备的使用情况
-x
    显示扩展统计数据。若设置了 -x 参数,则 -d 参数失效
-k
    使用 Kb 作为单位
-m
    使用 Mb 作为单位

2. iostat 使用注意事项

1. 需要进行多次统计,多次统计的结果是实时的结果。

2. 使用 -c 参数能得到 CPU 的使用统计。 %iowait 表示系统有 I/O request 的 CPU 空闲时间。

3. 使用 -d 参数,其统计结果中 tps(the number of transfers per second) 表示设备每秒的传输次数。

4. 使用 -x 参数, %util 表示磁盘使用率,即处理 I/O request 的时间的比率。该值接近 100%,表明 I/O 成了瓶颈。若此时 CPU 的使用率比预期低,则表示磁盘性能不够,导致 CPU 不能充分利用。

使用 lftp 进行 FTP 数据下载和上传

1. lftp 简介

适合于 FTP 操作的命令和软件比较多。 linux 下操作命令有 ftp, lftp 和 sftp; 图形化界面非常好用的有 FileZilla。 为了便于在服务器上使用命令行来进行便捷的 FTP 操作,我个人喜欢使用 lftp 。

2. lftp 的使用

lftp 的简单例子:
比如,下载测序公司释放的数据:

从诺和致源公司 FTP 站点 ftpdata.novogene.cn 以用户名 Novo_s4VcJc 密码 dpdATZ77 端口 2300 下载测序释放的数据:
$ lftp -e "get -c data/species.reads1.fq.gz; exit" \
  -u Novo_s4VcJc,dpdATZ77 -p 2300 ftpdata.novogene.cn

比如,上传测序原始数据到 NCBI 的 SRA FTP 站点:

$ lftp -e "put raw_data.reads1.fastq; exit" \
  -u sra,VfOiVJn1 -p 21 ftp-private.ncbi.nih.gov

lftp 的参数:

-f file
    执行该文件中的 FTP 命令,执行完毕后退出。
-c cmd
    将 FTP 命令直接写入到该参数后,执行其中的命令后退出。

-u user[,passwd]
    通过该参数输入用户名,同时可以选择输入密码。
-p port
    设置端口。默认为 21。
-e cmd
    在 lftp 命令后给出 FTP 位点, -u 和 -p 参数登录 FTP 后,再执行该参数后的 FTP 命令。 

3. 常用的 FTP 命令

直接在终端中输入 lftp 命令后,进入了 lftp 的操作界面,从而可以使用 FTP 命令进行操作了。

1. open

用于连接 FTP 站点,用法为:

open [-e cmd] [-u user[,pass]] [-p port] host|url

2. pwd 和 lpwd

进入 FPT 站点后, pwd 命令用于显示服务器端的当前工作目录; lpwd 用于显示本地机器上的当前工作目录。

3. ls 和 !ls

进入 FPT 站点后, ls 命令用于列出服务器端的目录内容; !ls 用于列出本地机器上的目录内容。

4. cd 和 lcd

进入 FPT 站点后,cd 命令用于在服务器端切换路径; lcd 用于在本地机器上切换路径。

5. pget

用于从 FTP 上下载数据。该命令能使用多个连接下载数据,从而加大下载速度,但是会增大服务端和网络的负载。用法和参数为:

pget [OPTS] rfile [-o lfile]
-c
    支持续传
-n int
    设置最大的连接数

6. get 和 mget

用于从 FTP 上下载数据。 get 用于下载一个文件, mget 用于下载多个文件。 用法和参数如下:

get [-E] [-a] [-c] [-O base] rfile [-o lfile] ...
mget [-c] [-d] [-a] [-E] [-O base] files

-c
    支持断点续传。
-E
    成功下载后,删除服务器端的数据
-a
    使用 ascii 模式下载,默认为二进制模式下载
-d
    创建和下载文件名一致的文件夹,并将文件保存到文件夹中
-O string
    指定下载文件存放的路径
-o string
    将 get 命令下载数据的数据保存到此文件中

7. put 和 mput

用于将数据上传到服务器端。put用于上传一个文件,mput用于上传多个文件。用法和参数为:

put [-E] [-a] [-c] [-O base] lfile [-o rfile]
mput [-c] [-d] [-a] [-E] [-O base] files

参数和 get/mget 参数一致。

8. mirror
用于将目标文件夹全部下载到指定目录中。其用法和参数如下:

mirror [OPTS] [source [target]]

mirror 的常用参数:
-c
    支持断点续传
-R
    反向 mirror,即将本地文件上传到服务器端
--parallel=N
    同时并行下载 N 个文件
--use-pget=N
    对每个文件使用 pget 下载,并设置 pget 的连接数。

使用Aspera从NCBI或EBI高速下载数据

1. Aspera简介

Aspera提供了大文件高速传输方案,适合于大数据的传输。客服端的使用是免费的。

2. Aspera下载和安装

Aspera下载网页: http://downloads.asperasoft.com/connect2/

$ wget http://d3gcli72yxqn2z.cloudfront.net/connect/bin/aspera-connect-3.5.1.92523-linux-64.tar.gz
$ tar zxf aspera-connect-3.5.1.92523-linux-64.tar.gz
$ sh aspera-connect-3.5.1.92523-linux-64.sh
$ echo 'PATH=$PATH:~/.aspera/connect/bin/' >> ~/.bashrc
$ source ~/.bashrc
$ ascp --help

软件安装在 ~/.aspera/connect/ 目录下。

3. Aspera 的使用

例子,使用 Aspera 高速下载 NCBI或 EBI 上的数据:

$ ascp -T -l 200M -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh \
  --host=ftp-private.ncbi.nlm.nih.gov --user=anonftp --mode=recv \
  /sra/sra-instant/reads/ByRun/sra/ERR/ERR105/ERR105009/ERR105009.sra ./
$ ascp -T -l 200M -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh \
  anonftp@ftp-private.ncbi.nlm.nih.gov:/sra/sra-instant/reads/ByRun/sra/ERR/ERR105/ERR105009/ERR105009.sra ./

$ ascp -T -l 200M -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh \
  --host=fasp.sra.ebi.ac.uk --user=era-fasp --mode=recv \
  /vol1/fastq/ERR105/ERR105009/ERR105009_1.fastq.gz ./
$ ascp -T -l 200M -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh \
  era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/ERR105/ERR105009/ERR105009_1.fastq.gz ./

Aspera 的用法和简单参数:

Aspera的用法:
$ ascp [参数] 目标文件 目的地址

Aspera的常用参数:
-T
    不进行加密。若不添加此参数,可能会下载不了。
-i string
    输入私钥,安装 aspera 后有在目录 ~/.aspera/connect/etc/ 下有几个私钥,使用 linux 服务器的时候一般使用 asperaweb_id_dsa.openssh 文件作为私钥。
--host=string
    ftp的host名,NCBI的为ftp-private.ncbi.nlm.nih.gov;EBI的为fasp.sra.ebi.ac.uk。
--user=string
    用户名,NCBI的为anonftp,EBI的为era-fasp。
--mode=string
    选择模式,上传为 send,下载为 recv。
-l string
    设置最大传输速度,比如设置为 200M 则表示最大传输速度为 200m/s。若不设置该参数,则一般可达到10m/s的速度,而设置了,传输速度可以更高。

PostGreSQL 数据库的简单使用

1. PostGreSQL 简介

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目,并且有非常广泛的用户。
有人将 PostgreSQL 和 MySQL 作了比较, PostgreSQL 貌似完胜。

2. PostGreSQL 的安装

# yum install postgres*
# /etc/init.d/postgresql start       启动数据库,第一次启动则会初始化数据库。

3. PostGreSQL 的简单使用

参考自: PostgreSQL 8.1 中文文档

3.1 登录 PostGreSQL 的命令

使用 psql 命令登录 PostGreSQL 数据库。
初始化 PostGreSQL 数据库后,则会有名为 postgres 和 tempalte1 的数据库,有一个名为 postgres 的用户,无密码登录。
例如,使用 postgres 用户登录 postgres 数据库

$ psql postgres postgres
psql (8.4.18)
Type "help" for help.

postgres=#

psql的用法与常用参数:

psql [options] [DBNAME [USERNAME]]

DBNAME
    设置要登录的数据库,默认为当前系统用户名
USERNAME
    设置登录数据库的用户,默认为当前系统用户名
-h | --host=HOSTNAME
    设置连接的服务器名,default: localhost
-p | --port=PORT
    设置端口, default: 5432
-U | --username=USERNAME
    设置登录的用户名,默认为当前系统用户名

3.2 简单常用的 postgresql 命令行

登录 postgresql 数据库后,提示符以登录的数据名加等于号表示。此时,可以输入 postgresql 命令行用于辅助数据库操作。这些命令行以 \ 开头。几个简单常用的命令如下:

\c[onnect] DBNAME
    切换数据库
\l[+]
    列举数据库
\dt
    列举表
\d TABLENAME
    查看表的结构
\q
    退出 postgresql
\cd [DIR]
    切换 linux 系统的工作目录
\! [COMMAD]
    执行 linux 系统命令。比如 \! ls --color 用于打印出当前目录的文件名; 但是 \! cd 命令无效。
\?
    展示所 postgresql 的命令行帮助文档
\h CREATE ROLE
    \h 为查看 SQL 命令的帮助信息,以上命令为查看 CREATE ROLE 命令的详细帮助。

3.3 简单常用的 SQL 命令

使用 SQL 语言对 postgresql 的数据库和表进行操作,初学者需要的 SQL 命令:

CREATE DATABASE chado
    创建名为 chado 的数据库
DROP DATABASE chado
    删除名为 chado 的数据库
CREATE ROLE chenlianfu [PASSWORD '123456']
    创建名为 chenlianfu 的用户
DROP ROLE chenlianfu
    删除名为 chenlianfu 的用户

3.4 PostGres 的 linux 命令

在 linux 终端下,可以使用一些命令来操作 PostGres 数据库。

createdb
    创建数据库
createlang
    给数据库安装语言
createuser
    用户创建用户
dropdb
    删除数据库
droplang
    从数据库删除语言
dropuser
    删除用户
initdb
    初始化数据库
pg_dump
    将数据库转换为文本文件,用于备份