.sh脚本 #
shebang开头特殊行 #
这行告诉系统应该使用哪个解释器来执行脚本
#!/bin/bash
#!
是shebang的标识符,后面跟着解释器的路径
对于Python脚本#!/usr/bin/env python3
.使用 /usr/bin/env
是为了确保系统能够在任何安装了Python的位置找到Python解释器,而不是硬编码路径。
设置参数 #
#!/bin/bash
verisim=/home/public/software/verisim/bin/verisim
if [ "$1" == "--case" ]; then
if [ -n "$2" ]; then
Case=$2;
else
echo "Error! No case at provided after --case"
exit 1
fi
else
echo "run without appoint testcase"
#Case=../testcase/gate_2000_2000_100.v
#Case=../testcase/gate_1000_1000_50.v
#Case=../testcase/gate_500_500_50.v
#Case=../testcase/gate_200_200_20.v
#Case=../testcase/gate_100_100_20.v
#Case=../testcase/gate_40_40_10.v
#Case=../testcase/gate_30_30_10.v
#Case=../testcase/gate_20_20_10.v
Case=../testcase/gate_20_20_5.v
fi
export Case
#设为环境变量,这样就可以在代码里面获得,eg: char *env_name = getenv("Case"); //get case from env_var
#以下是关于这个项目的编译的相关指令,无关
CFile=setUpSystemFunc_verisim.cpp
PliMap=../code/systf.tab
rm -rf verisim_history.db verisim.env verisim.db verisim_work verisim.log
${verisim} +acc+c ${Case} -P ${PliMap} ${CFile} -no-mold
rm -rf verisim_history.zdb verisim.env verisim.zdb verisim_work verisim.log
#eg:
./run.sh --case ../testcase/gate_100_100_20.v
输出重定向 #
循环 #
#!/bin/bash
export PATH=IVERILOG_PATH/bin:${PATH}
VPI=myvpi
# 定义一个包含所有测试案例的数组
cases=(
"../testcase/test.v"
"../testcase/gate_20_20_5.v"
"../testcase/gate_20_20_10.v"
"../testcase/gate_30_30_10.v"
"../testcase/gate_40_40_10.v"
"../testcase/gate_100_100_20.v"
"../testcase/gate_200_200_20.v"
"../testcase/gate_500_500_50.v"
"../testcase/gate_1000_1000_50.v"
)
# 循环遍历所有的测试案例
for Case in "${cases[@]}"; do
echo "Running case: $Case"
# 清理之前的文件
rm -rf *.vvp *.vpi obj_dir *.o myvpi.c
# 触摸VPI的C文件
touch ${VPI}.c
# 编译Verilog文件和VPI文件
iverilog "$Case" -o testcase.vvp
iverilog-vpi -L. ${VPI}.c ./setUpSystemFunc_iverilog.cpp ./loopchecker.h -o testcase.vvp
# 运行模拟
vvp -M. -m ${VPI} testcase.vvp
# 清理生成的文件
rm -rf *.vvp *.vpi obj_dir *.o ${VPI}.c
done
echo "All cases have been run."
提升权限直接运行 #
#查看脚本权限
ls -l yourscript.sh
#改变权限
chmod +x yourscript.sh
chmod 755 yourscript.sh
7 代表 rwx(读、写、执行) 6 代表 rw-(读、写) 5 代表 r-x(读、执行) 4 代表 r–(读)
环境变量 #
程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的
种类 #
系统环境变量:公共的,对全部的用户都生效。
用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。
永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
临时环境变量:使用时在Shell中临时定义,退出Shell后失效
查看环境变量 #
env #查看所有环境变量
env|grep relate_name #用grep筛选和relate_name相关的环境变量
#常用的
echo $LD_LIBRARY_PATH #C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要
echo $LANG #Linux系统的语言、地区、字符集
echo $SHELL#用户当前使用的Shell解析器。通常为/bin/bash
echo $HOSTNAME#106服务器是 user_super_server
echo $HISTSIZE#保存历史命令的数目
echo $USER
echo $PWD#当前工作目录
echo $CLASSPATH#JAVA语言库文件搜索的目录,它也不是Linux缺省的环境变量,但对JAVA程序员来说非常重要
设置环境变量 #
export var
var='值'
#或export var='值'
#在.bashrc等文件中写了后,需要source再能生效
如果环境变量的值没有空格等特殊符号,可以不用单引号包含。
采用export设置的环境变量,在退出Shell后就会失效,下次登录时需要重新设置。如果希望环境变量永久生效,需要在登录脚本文件中配置。
变量名='值'
export 变量名
或export 变量名='值'
设置系统环境变量 #
在/etc/profile文件中设置 #
用户登录时执行/etc/profile文件中设置系统的环境变量。但是,Linux不建议在/etc/profile文件中设置系统环境变量。
在/etc/profile.d目录下设置 #
可以对不同的项目用.sh/.csh文件设置环境变量
这是Linux推荐的方法,不想要什么变量直接删除 /etc/profile.d下对应的 shell 脚本即可
在/etc/bashrc文件中设置环境变量 #
该文件配置的环境变量将会影响全部用户使用的bash shell。但是,Linux也不建议在/etc/bashrc文件中设置系统环境变量。
设置用户环境变量 #
- .bash_profile
- 当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
- 但是现在没了?
- .bashrc
- 当用户登录时以及每次打开新的Shell时该文件都将被读取,不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。
- 但是现在都这么做0.0
PATH #
- 可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序。如果可执行程序的目录不在PATH指定的目录中,执行时需要指定目录。
- PATH环境变量存放的是目录列表,目录之间用冒号:分隔
- 最后的圆点.表示当前目录(加入了当前补录到PATH),如果PATH变量中没有包含圆点.,执行当前目录下的程序需要加./或使用绝对路径
- PATH缺省包含了Linux系统命令所在的目录(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin),如果不包含这些目录,Linux的常用命令也无法执行(要输入绝对路径才能执行)
- /usr/bin里面有很多可执行文件
- 在用户的.bashrc文件中,会对PATH进行扩充
- 比如:
export PATH=$PATH:$HOME/bin
- 比如:
LD_LIBRARY_PATH #
C/C++语言动态链接库文件搜索的目录
与PATH的格式相同
参考 #
linux环境变量 - a龙 - 博客园 (cnblogs.com)
安装方式的不同 #
使用
apt
:更新软件包列表:
sudo apt update
安装软件包:
sudo apt install package_name
卸载软件包:
sudo apt remove package_name
查看安装过的包:
apt list --installed
使用
apt-get
(较旧的Ubuntu版本中常用):更新软件包列表:
sudo apt-get update
安装软件包:
sudo apt-get install package_name
卸载软件包:
sudo apt-get remove package_name
使用
dpkg
(直接操作.deb
包):安装
.deb
文件:sudo dpkg -i package_name.deb
卸载软件包:
sudo dpkg -r package_name
使用
pip
(Python包管理工具):安装Python包:
sudo pip install package_name
卸载Python包:
sudo pip uninstall package_name
使用
make
和源代码(用于安装从源代码编译的软件):通常需要先
./configure
,然后make
,最后sudo make install
pip和pip3 #
pip install [package-name] # 安装名为[package-name]的包
pip install [package-name]==X.X # 安装名为[package-name]的包并指定版本X.X
pip install [package-name] --proxy=代理服务器IP:端口号 # 使用代理服务器安装
pip install [package-name] --upgrade # 更新名为[package-name]的包
pip uninstall [package-name] # 删除名为[package-name]的包
pip list # 列出当前环境下已安装的所有包
远程方法 #
xrdp #
利用xrdp实现Windows远程连接Kali Linux桌面-百度开发者中心 (baidu.com)
日志输出在 /var/log/xrdp.log 和 /var/log/xrdp-sesman.log。
sudo ufw allow from your_ip/24 to any port 3389
vnc #
windows环境安装VNC及远程连接linux(centos7) - 银河星光 - 博客园 (cnblogs.com)
vnc和ssh的区别 #
主要区别:VNC服务器和SSH服务器有一些显著的区别。 首先,VNC服务器提供图形界面的远程访问和控制,可以让用户直观地操作计算机。 而SSH服务器主要用于远程命令行访问和文件传输,对于不需要图形界面的操作更为适用。 其次,VNC服务器在传输图形界面时消耗较多的网络带宽,因为它需要传输图像数据。 相比之下,SSH服务器的传输开销较小,因为它主要传输文本和命令。 此外,SSH服务器采用了加密和身份验证机制,提供了更高的安全性,而VNC服务器的安全性相对较弱,需要通过额外的措施来增强其安全性。 使用场景:VNC服务器适合需要通过图形界面进行远程操作的场景,例如远程协助、远程教学和讲座、远程演示等
mobaxterm启用X server #
WSL #
MobaXterm上默认设置就好,根据提示在设置中开启一个东西。。
MobaXterm的Xserver是在win上的,而WSL的ip和win不一样,所以不能通过直接设置DISPLAY=0.0
或者DISPLAY=localhost:0.0
来指定Xserver
#bashrc
export windows_host=`ipconfig.exe | grep -n4 WSL | tail -n 1 | awk -F":" '{ print $2 }' | sed 's/^[ \r\n\t]*//;s/[ \r\n\t]*$//'`
export DISPLAY=$windows_host:0
#也可以直接export DISPLAY=${window_ip}:0
#比如export DISPALY=192.168.1.28:0.0 # 192.168.1.28为windows当前ip,下次重连网络可能会变动
#还看到以下这个,没验证过
#export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 # in WSL 2
#export LIBGL_ALWAYS_INDIRECT=1
pycharm设置DISPLAY #
将本地文件复制到另一台服务器 #
bsub #
bsub
是一个在许多 Unix-like 系统中用于提交作业到批处理系统(如 LSF、PBS 或 Slurm)的命令。它允许用户在后台运行程序,而不会占用终端。
bsub < job_script.sh #提交任务
bsub -n 4 < job_script.sh #指定使用的节点数
bsub -R "span[hosts=1]" < job_script.sh #指定使用的CPU核心数
bkill <job_id> #终止
bjobs #查看作业状态
bjobs -l #详细信息
bqueues #查看队列状态
bhosts #查看系统资源
bsub -W 01:00 < job_script.sh #设置作业的运行时间限制