生信大白记第2记-linux命令
操作系统是一种软件,是计算机硬件和应用软件之间的接口。它为计算机提供了基本的服务和管理,使得计算机能够运行应用程序和管理数据。操作系统负责控制和协调计算机硬件和软件的各种活动,并为用户和应用程序提供一个友好的界面。
生物信息分析必定少不了linux系统,Linux是一种免费开源的操作系统,其内核由Linus Torvalds于1991年首次发布。与其他操作系统类似,Linux操作系统也有图形用户界面(GUI)和命令行界面,但Linux系统的核心在于其稳定性、可靠性和灵活性。有以下主要特点:
免费开源:Linux操作系统是免费的,并且源代码是开放的,这意味着用户可以自由地查看、修改和分发代码。
多用户支持:Linux系统支持多用户环境,这意味着多个用户可以同时使用同一台计算机。
多任务处理:Linux操作系统支持多任务处理,这意味着用户可以同时运行多个程序而不会出现系统崩溃或卡顿。
[图片上传失败...(image-6963d7-1679930285323)]
linux操作系统有许多不同的Linux发行版。以下是一些常见的Linux发行版:
生信分析通常要登录到linux服务器,在服务器上跑程序任务。
如何登录到linux服务器?
可以用远程登录软件登录到linux服务器,比如Putty, Xshell, MobaXterm等软件。
登录账号,一般需要
主机ip
端口号
用户名
密码
这四个要素。具体详细的登录教程可以搜索一下对应软件的登录使用教程。
以下是一些常见的Linux命令:
cd:用于更改当前目录。例如,使用“cd /home/user”命令可以进入/home/user目录。
ls:用于列出当前目录中的文件和文件夹。例如,“ls -l”命令将显示文件和文件夹的详细信息。
pwd:用于显示当前工作目录的完整路径。例如,“pwd”命令将显示当前目录的路径。
mkdir:用于创建新目录。例如,“mkdir new_directory”将创建一个名为“new_directory”的新目录。
rm:用于删除文件和目录。例如,“rm file.txt”将删除名为“file.txt”的文件。
cp:用于复制文件。例如,“cp file.txt new_file.txt”将把“file.txt”文件复制为“new_file.txt”。
mv:用于移动或重命名文件。例如,“mv file.txt new_directory/”将把“file.txt”文件移动到名为“new_directory”的目录中。
cat:用于查看文件内容。例如,“cat file.txt”命令将显示名为“file.txt”的文件的内容。
grep:用于在文件中搜索文本。例如,“grep 'hello' file.txt”命令将在“file.txt”文件中查找所有包含“hello”的行。
chmod:用于更改文件或目录的权限。例如,“chmod 777 file.txt”命令将为“file.txt”文件授予最高权限。
可以使用“man”命令查看命令的手册页,了解命令的详细信息和选项。
我的linux命令笔记
在跑程序的时候经常会多次用同样的命令,但自己不想记,也记不住,就想起来了去查一下相应的linux命令,于是就有了一个linux命令笔记便于查询:
du -ah --max-depth=1 ./ #查看文件存储
cp -r /home/packageA /home/packageB #复制一整个文件夹
rm -rf ./ #删除文件夹所有文件和文件夹
grep 'physical id' /proc/cpuinfo | sort -u | wc -l #查看物理cpu个数
grep 'core id' /proc/cpuinfo | sort -u | wc -l #查看每个cpu核心数量
grep 'processor' /proc/cpuinfo | sort -u | wc -l #查看线程总数
ls -a #查看隐藏文件
rm -fr .* #(删除当前目录下的所有隐藏文件)
rm -f .tmp #(删除tmp文件)
rm -fr .tmp #(删除tmp目录或者文件)
cat >hello.pl <<eof #输入文件
jobs------------查看在后台执行的进程
fg %n----------将后台执行进程n调到前台执行,n表示jobnumber(通过jobs查看的进程编号,而非pid)
ctrl+z----------将在前台执行的进程,放到后台并挂起
bg %n---------将在后台挂起的进程,继续执行
ctrl+c----------前台进程终止
kill %n---------杀掉后台运行的进程,n表示jobnumber(通过jobs查看的进程编号,而非pid)
nohup sh test.sh > myout.log 2>&1 & #不挂断运行
awk -F "\t" '{print $5}' class.OC_1yrF > filter_id.txt #提取某一列
wc -l filename #就是查看文件里有多少行。
wc -w filename #看文件里有多少个word。
wc -L filename #文件里最长的那一行是多少个字。
awk -F'\t' 'END{print NF}' test.txt #查看有多少列
#替换字符
awk -F " " '{OFS=" "} {if ($1==1) $1="chr1"}1' test.gff3 > oschr.gff3 #替换字符
#将一列数据转换为一行数据
cat a.txt | awk '{printf("%s ", $0)} END {printf("\n")}' | cat -A
#统计文件夹,文件数量命令
ls -l |grep “^d”|wc -l
ls -l |wc -l
#在文件的首行插入指定内容:
sed -i "1i#! /bin/sh -" a
#在文件的指定行(n)插入指定内容:
sed -i "niecho "haha"" a
egg:
sed -i "10ithis is a test" /etc/profile
#在文件的末尾行插入指定内容:
echo “haha” >> a
#删除指定范围的行:
sed -i 'begin,endd' + 文件名
egg:
sed -i '10,20d' /etc/profile
#删除指定行:
sed -i '行数d' + 文件名
#查看指定范围行:
sed -i 'begin,endp' + 文件名
egg:
sed -i '10,20p' /etc/profile
#查看指定行:
sed -i '行数p' + 文件名
#删除最后一行
sed -i '$d' file
#参考链接https://blog.51cto.com/u_15278282/4896535
#将文件链接到另外一个目录
ln -s /mnt/usr/lib/* /usr/lib/
sed -i '1d' filename #去掉第1行
#删除send_url_log.txt前面第1行到14030000行
sed -i ‘1,14030000d’ send_url_log.txt
#删除第一列
sed -e 's/[^ ]* //' text
awk '{OFS="\t"}{$1="";print $0}' text
#取行名输出成列
head genotype_transpose.txt -n 1|sed 's/ /\n/g' >genetype_sample_name.txt
#给文件在开头追加一行数据
sed -i "1i cat 1.txt" filename.txt
#删除文件某一行
sed -i "nd" filename
#连续提取文件几列数据
awk '{for(i = 2; i <= 5; i++) printf("%s ", $i); {print $8, $9}}' a.txt
#替换字符
sed 's/原字符串/新字符串/' 文件
sed 's/原字符串/新字符串/g' 文件
#没有“g”表示只替换第一个匹配到的字符串,有“g”表示替换所有能匹配到的字符串
#有斜杠/冲突时可以
sed -i "s#abc#cde#g" file
#-i 选项是直接在文件中替换,不在终端输出。
#提取指定行
sed -n '2p' a.txt
#列处理
cut -f 3-315 test.txt #提取3到315列数据,默认制表符分隔
cut -d "|" -f 1,3,5 test.txt #提取1,3,5列数据,以|分隔
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
#如果文件夹不存在,创建文件夹
if [ ! -d "/opt/test/111" ]; then
mkdir -p /opt/test/111
fi
#如果目录/opt/test存在,删除目录
if [ ! -d "/opt/test" ]; then
rm -rf /opt/test
fi
#查看用户占用空间
du -sh /share/ganyuli
du -sh /share/*
#解压:
bzip2 -d FileName.bz2。
bunzip2 FileName.bz2。
tar jxvf FileName.tar.bz2,或tar --bzip xvf FileName.tar.bz2。
tar jcvf FileName.tar.bz2 DirName。
#ls按时间 降序 排列:
ls -lt (最常用)
#ls按时间 升序 排列:
ls -lrt
ls -lS #按照由大到小排序
ls -Slr #按照从小到大排序
ls lSh | ls -lShr #如果想要输入是按照“便于人类阅读的方式”,那么就再加一个-h,表示"--human-readable"
#运算
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
awk 'BEGIN{printf"%.1f%%\n",('29'/'500')*100}' #保留一位小数
awk 'BEGIN{printf"%.2f%%\n",('29'/'500')*100}' #保留两位小数
awk 'BEGIN{printf"%.3f%%\n",('29'/'500')*100}' #保留三位小数,以此类推
awk 'BEGIN{printf"%.f%%\n",('29'/'500')*100}' #四舍五入
printf "%d%%" $((29*100/500)) #计算29除以500的百分数,不保留小数位
#通配符
1、星号(*)可以使用星号代替零个、单个或多个字符
2、问号?可以匹配任意一个字符
3、中括号[]匹配中括号任意一个字符,如[ljk]代表匹配一个l,j或k的字符
4、[-]匹配范围,[0-9]代表匹配任一个数字
5、[*]匹配不是中括号的一个字符
#替换掉换行符
sed ":a;N;s/\n//g;ta" a.txt
#取出两个文件中相同的行
grep -wf aaa.txt bbb.txt
#取出两个文件中不同的行
grep -wvf aaa.txt bbb.txt
#此时取出的是bbb.txt文件中存在而aaa.txt文件中没有的内容
grep -wvf bbb.txt aaa.txt
#从远处复制到本地
scp -P 2222 -r ganyuli@123.123.123.123:/share/ganyuli/index ./
#方式 一:mv
#使用mv进行批量替换:
# ①、批量替换文件中“_”字符为"-"字符
find ./ -name "*_*" | while read f; do mv $f ${f/_/-}; done
# ②、批量替换文件中“test”字符为"TEST"字符
ls | while read f; do mv $f ${f/test/TEST}; done
> 引申,文件中的文本替换为:
# A). 对于单个文件
sed -i 's/string1/string2/g' example.txt
#说明:将example.txt文件中的 "string1" 替换成 "string2"(如果不加-i参数,则在内存中替换; 添加-i参数,则在文件中直接替换)
# B). 对于多个文件
ls|while read f; do sed -i 's/beijing/shanghai/g' $f; done
#方式 二:rename
#linux的rename命令有两个版本,一个是c语言版本的,一个是perl语言版本的,一般内置的都是C语言版本的
# C语言版本格式:rename 原字符串 新字符串 文件名
例子:将文件名中的“test”批量替换为“TEST”
rename test TEST test_*.log
ls
TEST_10.log TEST_1.log TEST_2.log TEST_3.log TEST_4.log TEST_5.log TEST_6.log TEST_7.log TEST_8.log TEST_9.log
Perl语言版本格式:rename ‘s/原字符串/新字符串/’ 文件名
perl版的rename因其支持正则表达式,使用更广泛:
例子:
字母的替换rename "s/AA/aa/" * //把文件名中的AA替换成aa
修改文件的后缀rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀
批量添加文件后缀rename "s/$//.txt/" * //把所有的文件名都以txt结尾
批量删除文件名rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉
Linux中join命令可以对两个文件进行merge
查看linux服务器cpu个数
grep -c ^processor /proc/cpuinfo
生信大白记第2记,就到这里,下一记,持续更新学习生物信息学的内容!