linux shell 常用工作指令总结
linux启动流程
- 读取初始化文件:系统级和用户级
- 系统级:应用于户所有用户的全局配置,一般存在于/etc目录中,如 /etc/profiles、/etc/bashrc或者 /etc/bash.bashrc。
- 用户级:含一些应用于单用户的配置文件,一般存放在各个用户目录,这些配置可以覆盖系统级全局配置 .profiles、.bash_profile、.bashrc .bash_login.
- 显示命令提示符,输入命令进行交互
- 命令类型和判定顺序:别名、关键字、函数、内置命令、可执行程序
- shell启动后会生成相应的进程
ps pstree/ptree 列出运行进程,PID进程号
- shell 输入命令行会:
- 首先在当前进 父进程(parent)中创建(系统调用fork)一个子进程(chlid)
- 然后子进程 读取用户输入的命令行执行(系统执行exec)新程序,此时 父进程(系统调用wait)处于休眠状态
- 新程序执行完毕(系统调用exit)退出,成功执行返回0,(cshell保存在变量
$status
中,B/K Shell 保存在$?
中,父进程被唤醒。 - Ctrl+c /
kill PID
可以终止进程
- 环境和继承:
shell从启动程序/bin/login
,或者子shell从父shell那里都会继承一个环境,包括:- 所有权:读取
/etc/passwd
中的ID号,决定对程序和文件的相应操作权限,可以通过修改ID号(setuid/setgid
)拥有其他用户的程序 - 为文件创建掩码:创建文件时,得到的一组默认权限。默认掩码000 ;默认目录权限777(rwxrwxrwx);默认文件权限666(rw-rw-rw);目录和文件权限从默认权限中减去umask的值。umask可以在初始shell文件或命令提示符下设置
- 修改权限和所有者:
chmod -R 755 filename #修改文件夹下所有文件权限
必须是文件所有者或者超级用户可以修改文件权限
chown 所有者:所在组 filename #root用户可以修改文件所有者及组关系
- 工作目录:会被shell派生的进程继承
- 变量:局部变量和全局变量
局部变量:只属于创建他们的shell,不会传给子shell,内置命令set可以显示和设置:set var=1
环境变量:可以被子进程继承。在子进程设置的环境变量不会回传给父进程。
setenv var 456 #设置环境变量 env #显示环境变量
- 重定向和管道:
- 文件描述符:所有I/O,都是通过文件描述符机制管理,子进程会从父进程继承文件描述符。0:标准输入 1:标准输出 2:标准错误输出
- 重定向:文件描述符被分配给终端以外的对象时,称为I/O重定向。输出>、输入< 、
- 管道:| 将管道符前面的命令输出传给后面的命令输入。管道是一个内核缓冲区,两个进程以此共享数据。
- shell 和信号
- 可以通过信号与进程进行交互。例如Ctrl +C 强制终止进程。
- 所有权:读取
linux 和EDA工具工作环境相关
- setenv 显示和编辑当前的所有环境变量
- echo $option 打印环境变量
- .cshrc 环境配置文件
license 查看(Cadence)
lmstat -a -c port@host
lmstat -a -c 1881@public1348 "redhawk licsence"
source 命令
source filename #在当前shell执行filename中的命令语句
常用文件处理指令
统计文件行数
ls -l /a | grep "^-" | wc -l
截文件中的内容
head -n filename #截取文件的前n行内容
tail -n filename #截取文件的后n行内容
sed -n 'm,np' filename #截取中间m到n行的内容
sftp (远程传输文件)
[https://blog.csdn.net/mingyuli/article/details/123662029]
移动文件夹下的某些文件到其他目录(附xargs命令)
xargs命令详解
For example
ls |head -n 5 |xargs -i mv {} /data2 # 将该目录下的前五个文件移动到其他文件夹
压缩解压缩(tar)
tar -xzvf filename #解压缩文件
tar -czvf filename #压缩文件
常用option
option | description |
---|---|
-c | 建立压缩文档 |
-x | 解压 |
-t | 查看内容 |
-r | 压缩归档末尾添加文件 |
-u | 更新压缩包中的文件 |
tips: | 以上命令五选一 |
-z | 解压.gzp文件 |
-j | 解压.bj2文件 |
-Z | 有compress属性 |
-v | 显示解压过程 |
-O | 输出到标准输出 |
LSF【bsub合集】
bsub
bsub -Is -q backend -m public3759 task(ICC2 UPdate)
bsub -Is -q backend -m public3760 task( See Big report)
bsub -Is -q backen -m public3761
/netapp2/tools/share/apps/pycharm-community/bin/pycharm.sh (phython开发环境编译器)
bsub -Is -m public3759 -q backend /netapp2/tools/
synopsys/ICC2_2021.06-SP5/bin.icc2_shell -gui
option | description |
---|---|
-Is | 可以返回图形界面 |
-q | 选择队列 |
-i | 指定输入文件 |
-o | 指定输出文件,作业提交后标准输出的信息会保存到这个文件中 |
-e | 指定输出文件,作业提交后标准错误输出的信息保存到这个文件夹中. |
-n | 指定作业需要的CPU 核 |
-J | 作业的名字 |
-m | 丢job到指定的机器上 |
-I | 交互式模式,此时终端不能输入 |
-Ip | 提交job的时候提供虚拟terminal支持,如vim这种应用是需要terminal支持的. |
R | 指定为当前任务的资源需求。 |
bhosts
利用bhosts命令可查看当前各节点的空闲情况。
STATUS:
ok: 表示可以接收新作业,只有这种状态可以接受新作业
closed: 表示已被作业占满,不接受新作业
unavail和unreach: 系统停机或作业调度系统服务有问题
bhosts −l 会显示节点详细信息,其中slots表示目前最大可以接受作业槽数(默认一般与CPU核数一致)
bqueues
利用bqueues可以查看现有队列信息
QUEUE_NAME 队列名
PRIO 优先级,数字越大优先级越高
STATUS 状态
Open 队列开放,可以接受提交新作业
Active 队列已激活,队列中未开始运行的作业可以开始运行
Closed 队列已关闭,不接受提交新作业
Inact 队列未激活,可接受提交新作业,但队列中的等待运行的作业不会开始运行
JL/U 单个用户同时可以使用的CPU核数
MAX 队列对应的最大作业槽数(Job Slot,一般与CPU核数一致,以下通称CPU核数),-表示无限
JL/P 每个处理器可以接受的CPU核数
JL/H 每个节点可以接受的CPU核数
NJOBS 排队、运行和被挂起的总作业所占CPU核数
PEND 排队中的作业所需CPU核数
RUN 运行中的作业所占CPU核数
SUSP 被挂起的作业所占CPU核数
RSV 为排队作业预留的CPU核数
bjobs
利用bjobs可以查看作业的运行情况,bjobs | wc
统计总的job数
查看作业的详细信息−l选项:bjobs −l 79727
bkill
利用 bkill
命令可以终止某个运行中或排队中的作业
bkill JOBID
bhist
bhist -a
: 查看已经运行完毕的作业信息
busers
利用busers可以查看用户信息
MAX: 最大可以同时运行的核数
NJOBS: 当前所有运行和待运行作业所需的核数
PEND: 排队等待运行的作业所需要的核数
RUN: 已经开始运行的作业占据的核数
————————————————
版权声明:本文为CSDN博主「Angel20200620」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_43629962/article/details/122436308
ln
ln [option] source goal
为source文件或目录创建链接。链接分为软链接和硬链接。
- 软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。软链接链接incode
- 硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。硬链接链接文件名
创建软链接:
ln -s /home/a.txt(source) /tmp/a.link.txt # source 文件绝对路径
创建硬链接:
ln /home/a.txt(source) /tmp/a.link.txt #source文件可以用非绝对路径
硬链接特点:
不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的数据都会发生改变。
不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode 号是 262147 的文件)都可以被访问。
硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。
软链接特点:
不论是修改源文件(check),还是修改硬链接文件(check-soft),另一个文件中的数据都会发生改变。
删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。
软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及 inode 号。
软链接可以链接目录。
软链接可以跨分区。
awk
awk [选项] '脚本命令' 文件名
-F fs #指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符。
-f file #从脚本文件中读取 awk 脚本指令,以取代直接在命令行中输入指令。
-v var=val #在执行处理过程之前,设置一个变量 var,并给其设备初始值为 val。
awk 的强大之处在于脚本命令,它由 2 部分组成,分别为匹配规则和执行命令,如下所示:
'匹配规则{执行命令}'
这里的匹配规则,和 sed 命令中的 address 部分作用相同,用来指定脚本命令可以作用到文本内容中的具体行,可以使用字符串(比如 /demo/,表示查看含有 demo 字符串的行)或者正则表达式指定。另外需要注意的是,整个脚本命令是用单引号(‘’)括起,而其中的执行命令部分需要用大括号({})括起来。
在 awk 程序执行时,如果没有指定执行命令,则默认会把匹配的行输出;
如果不指定匹配规则,则默认匹配文本中所有的行。
example
awk '/^$/ {print "Blank line"}' test.txt
在此命令中,/^$/ 是一个正则表达式,功能是匹配文本中的空白行,同时可以看到,执行命令使用的是 print 命令,此命令经常会使用,它的作用很简单,就是将指定的文本进行输出。因此,整个命令的功能是,如果 test.txt 有 N 个空白行,那么执行此命令会输出 N 个 Blank line。
awk 使用数据字段变量
awk 的主要特性之一是其处理文本文件中数据的能力,它会自动给一行中的每个数据元素分配一个变量。默认情况下,awk 会将如下变量分配给它在文本行中发现的数据字段:
$0 代表整个文本行;
$1 代表文本行中的第 1 个数据字段;
2
∗
∗
代表文本行中的第
2
个数据字段;
∗
∗
2** 代表文本行中的第 2 个数据字段; **
2∗∗代表文本行中的第2个数据字段;∗∗n 代表文本行中的第 n 个数据字段。
example
[root@localhost ~] cat data2.txt
One line of test text.
Two lines of test text.
Three lines of test text.
[root@localhost ~] awk '{print $1}' data2.txt
One
Two
Three
该程序用 $1 字段变量来表示“仅显示每行文本的第 1 个数据字段”。当然,如果你要读取采用了其他字段分隔符的文件,可以用 -F 选项手动指定
awk 脚本命令使用多个命令
awk 允许将多条命令组合成一个正常的程序。要在命令行上的程序脚本中使用多条命令,只要在命令之间放个分号即可,例如:
[root@localhost ~] echo "My name is Rich" | awk '{$4="Christine";
print $0}'
My name is Christine
第一条命令会给字段变量 $4 赋值。第二条命令会打印整个数据字段。可以看到,awk 程序在输出中已经将原文本中的第四个数据字段替换成了新值。
awk BEGIN关键字
awk 中还可以指定脚本命令的运行时机。默认情况下,awk 会从输入中读取一行文本,然后针对该行的数据执行程序脚本,但有时可能需要在处理数据前运行一些脚本命令,这就需要使用 BEGIN 关键字。
BEGIN 会强制 awk 在读取数据前执行该关键字后指定的脚本命令,例如:
[root@localhost ~] cat data3.txt
Line 1
Line 2
Line 3
[root@localhost ~] awk 'BEGIN {print "The data3 File Contents:"}
> {print $0}' data3.txt
The data3 File Contents:
Line 1
Line 2
Line 3
可以看到,这里的脚本命令中分为 2 部分,BEGIN 部分的脚本指令会在 awk 命令处理数据前运行,而真正用来处理数据的是第二段脚本命令。
awk END关键字
和 BEGIN 关键字相对应,END 关键字允许我们指定一些脚本命令,awk 会在读完数据后执行它们,例如:
[root@localhost ~] awk 'BEGIN {print "The data3 File Contents:"}
> {print $0}
> END {print "End of File"}' data3.txt
The data3 File Contents:
Line 1
Line 2
Line 3
End of File
可以看到,当 awk 程序打印完文件内容后,才会执行 END 中的脚本命令。
grep
从文件中搜索指定内容,且支持正则表达式。
grep [option] string text
–color :高亮查找到的文本
-i : 查找时不区分大小写
-r :递归查找文件夹下的子文件夹
-v :查找不含字符串的其他内容
-n :显示行号和内容
-c :只显示行号
-A num : 显示匹配行及之后 num 行
-B num: 显示匹配行及之前 num 行
-C num :前后及当前行全部显示
-w :匹配字符串为一个词
grep 支持基本正则表达式:
即只承认“^”、“$”、“.”、“[”、“]”、“*”这些是元字符,所有其他的字符都被识别为普通字符。
sed
sed 是 stream editor 的缩写,中文称之为“流编辑器”。
sed 命令是一个面向行处理的工具,它以“行”为处理单位,针对每一行进行处理,处理后的结果会输出到标准输出(STDOUT)。你会发现 sed 命令是很懂礼貌的一个命令,它不会对读取的文件做任何贸然的修改,而是将内容都输出到标准输出中。
sed [选项] [脚本命令] 文件名
选项 | 含义 |
---|---|
-e 脚本命令 | 该选项会将其后跟的脚本命令添加到已有的命令中。 |
-f 脚本命令文件 | 该选项会将其后文件中的脚本命令添加到已有的命令中。 |
-n | 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。 |
-i | 此选项会直接修改源文件,要慎用。 |
Earth flow
earth #打开earth 环境
mkd -top CORE -f 1118 #生成子集文件目录
cfg -all #导入所有配置文件
earth ov02c10 /../ #新建或者打开某个项目
vim 中正则表达式查找替换
[range]s/from/to/[flags]
range:搜索范围,如果没有指定范围,则作用于前行。可选项有:
:1,10s/from/to/
表示在第1到第10行(包含第1,第10行)之间搜索替换;
:10s/from/to/
表示只在第10行搜索替换;
:%s/from/to/
表示在所有行中搜索替换;
:1,$s/from/to/
同上。
:.,$
#.
表示光标所在的行,$
表示末尾行
:/FROM/,/;/
#可以从指定字段进行匹配
flags 有如下四个选项:
c 每次替换前询问;
e 不显示错误;
g 不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
i 忽略大小写。
这些选项可以合并使用,如cgi表示不区分大小写,整行替换,替换前询问。
支持正则匹配
>>>:sort u #对文本进行去重排列
Cshell &Tcshell 编程
#! bin/csh |#!/bin/tcsh
通配符
在脚本中防止被解释加反斜杠或引号进行引用:
文件名拓展:*、?、[ number]
历史命令符:!
标准I/O重定向和管道:< 、>、>>、<& 和 |
局部变量
局部变量之作用于当前shell
set a=value
全局变量
可以由该shell派生的任意进程使用
setenv AA=value
数组
索引从1开始
命令替换
将命令输出赋予一个变量
set now=`date` #将date执行后的命令赋值给now
条件语句
if
if ()then
statements
endif
switch
switch variable
case con1:
state
case con2:
state
default:
state
endsw
switch ("$color")
case blue:
echo
breaksw
case green:
echo
breaksw
default:
echo
endsw
循环语句
while()
state
end
foreach vv ( word list)
state
end
文件测试
-r file 当前用户可读该文件
-w 可以写
-x 可以执行
-e 文件存在
-o 属于当前用户
-z 文件长度为0
-d 文件为一个目录
-f 文件是普通文件