Linux shell

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

optiondescription
-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
optiondescription
-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此选项会直接修改源文件,要慎用。

sed用法详解

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 文件是普通文件

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值