08_linux_shell


tutorials

https://www.tecmint.com/linux-dir-command-usage-with-examples/

shell

& 符号(非阻塞运行,后台运行)

image-20230110094043892

image-20230110094046825

手动 ctrl+z fg <=> & 放到shell末尾,jobs查看后台进程,fg job_id放到前台

image-20230110094054313

nohup命令:后台命令脱离终端运行

http://c.biancheng.net/view/1080.html

image-20230110094106921

w和who命令:查看登陆用户信息

image-20230110094117549

image-20230110094120775

last和lastlog命令:查看过去登陆的用户信息

http://c.biancheng.net/view/3875.html

chown命令:修改文件和目录的所有者和所属组

image-20230110094134876

Linux权限位

http://c.biancheng.net/view/753.html

image-20230110094143300

tar命令做打包操作(tar zip gzip)

http://c.biancheng.net/view/3976.html

.zip .gz .tar .tar.gz

image-20230110094154856

命令行快捷键

image-20230110094204747

image-20230110094208780

linux下对Shell/.sh脚本加密

http://wuhongyi.cn/CodeProject/shell/shelljiami.html

image-20230110094221571

linux PATH环境变量全解析

http://wuhongyi.cn/CodeProject/shell/linuxPATH.html

https://www.cnblogs.com/youyoui/p/10680329.html

image-20230110094231267

image-20230110094234987

查看进程状态

ps aux | grep python
watch -n1 'ps aux | grep python' 

查看文本内容

find . -name "*.in" | xargs grep "thermcontact"

通过PID找到进程

# 找到pid
# 匹配
ps -ef|grep <PID>

或者 
watch -n 1 'fuser -v /dev/nvidia*'   

后台

image-20230110094336377

image-20230110094338610

windows共享文件夹挂载到linux(或直接挂载到docker中)

http://linux.51yip.com/search/mount

# windows创建文件夹,属性修改权限为共享
shared_from_win_to_linux
# linux挂载到shared_win

# 挂载到linux或者docker中
sudo mount -o username=jet,password=Aa123456,iocharset=utf8,dir_mode=0777,file_mode=0777 -l //192.168.30.70/shared_from_win_to_linux ./shared_win/ 
sudo mount -o username=jet,password=Aa123456,iocharset=utf8,dir_mode=0700,file_mode=0700 -l //192.168.30.70/shared_from_win_to_linux ./shared_win/ 

# 挂载到docker容器中
mount -t cifs -o username=windows用户名,password=windows密码,ro,vers=2.0 //windowsip地址/共享的目录名称 /win/share(centos/docker中的目录名称)

192.168.30.70为windowsip 
username=jet,password=Aa123456 登陆号
-o rw,uid=48,gid=48,username=jet,password=Aa123456 中间逗号分割 不能有空格

# 取消挂载
sudo umount shared_win/

挂载远程服务器的路径到Windows系统中

1 https://zhuanlan.zhihu.com/p/71052208 samba

yum -y install samba
vim /etc/samba/smb.conf
pdbedit -a username # jet
pdbedit -L

windows映射驱动器
\\ip\\your_config_name  # samba配置文件中 [your_config_name]
输入
    用户名 jet
    密码 Aa123456

image-20230110094507058

2 sshfs

\\sshfs\用户名@IP地址!端口\路径
示例:
\\ssfs\chenlianfu@122.205.95.116!22\relative_path
relative_path是相对于用户家目录的相对路径

rsync远程同步命令

http://c.biancheng.net/view/6121.html

image-20230110094536612

image-20230110094539433

sudo rsync -av  /home/jet/projects/socket_py/ /home/jet/shared_win/
sudo rsync -av --exclude=client.py /home/jet/projects/socket_py/ /home/jet/shared_win/  
sudo rsync -av --exclude=client.py --exclude=server.py /home/jet/projects/socket_py/ /home/jet/shared_win/  

image-20230110094604285

创建用户和权限管理

image-20230110094611326

加密方法(还是需要文件加密才行,因为容器进出都是root)

# 在linux的docker中挂载windows共享文件夹,同时设置挂载权限700,非root不可访问
sudo mount -o username=jet,password=Aa123456,iocharset=utf8,dir_mode=0700,file_mode=0700 -l //192.168.30.70/shared_from_win_to_linux ./shared_win/ 

# docker创建jet用户
useradd -d /home/jet -m jet
passwd jet # 123456
su jet # su root #  Aa123456
ctrl+D

# 设置用户jet,登陆的时候非root即可
docker exec -it -u jet face /bin/bash

image-20230110094638077

chmod [选项] [ugoa] [– + =] [r,w,x]文件

image-20230110094644004

ssh连接docker容器;docker容器设置root密码

image-20230110094655439

端口映射

# windows cmds
@echo on
ssh jet@192.168.33.32 -p 22 -L 127.0.0.1:6006:127.0.0.1:6006

查看CPU INFO

查看系统中CPU的型号
frilab@ubuntu:~$ cat /proc/cpuinfo |grep "model name"| sort -u

model name : Intel(R) Xeon(R) CPU E7- 4807 @ 1.87GHz12

计算系统中有几颗CPU
frilab@ubuntu:~$ cat /proc/cpuinfo |grep "physical id" | sort -u |wc -l

4

计算每颗CPU中有几颗核心
frilab@ubuntu:~$ cat /proc/cpuinfo |grep "cpu cores" |sort -u

cpu cores : 6

计算系统中有多少个CPU线程
frilab@ubuntu:~$ cat /proc/cpuinfo |grep "processor" |wc -l

48
————————————————
原文链接:https://blog.csdn.net/baidu_38432732/article/details/82836909

---------------------------------------------------------------------------------------------------------
1、查看 CPU 物理个数
  grep 'physical id' /proc/cpuinfo | sort -u | wc -l
2、查看 CPU 核心数量
  grep 'core id' /proc/cpuinfo | sort -u | wc -l
3、查看 CPU 线程数
  grep 'processor' /proc/cpuinfo | sort -u | wc -l
4、查看 CPU  型号
  dmidecode -s processor-version
5、查看 CPU 的详细信息:
  cat /proc/cpuinfo
  
# 查看每个线程CPU占用
https://www.cnblogs.com/ghost240/p/3863774.html
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 

image-20230110094734813

限制CPU占用率

修改环境变量
export OMP_NUM_THREADS=1

在代码里面设置线程数
torch.set_num_threads(int thread) 

或者
dataloder的num_workers线程数调少点    

cpulimit命令

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
cp src/cpulimit /usr/bin
# 加sudo

image-20230110094806396

image-20230110094810643

https://blog.csdn.net/loyachen/article/details/52167124

TOP

# 用top命令指定固定的PID 
top -p $PID
# 查看某个进程所有线程
top -p 1143851 -H  

使用ps查询指定进程名或者PID的占用情况
ps -aux | grep zookeeper
ps -aux | grep 2181

使用 ps 命令找出 CPU 占用高的进程
ps -eo pid,ppid,%mem,%cpu,comm --sort=-%cpu | head

image-20230110094833006

apt-get彻底卸载软件包

# 删除软件及其配置文件
apt-get --purge remove <package>
# 删除没用的依赖包
apt-get autoremove <package>
# 此时dpkg的列表中有“rc”状态的软件包,可以执行如下命令做最后清理:
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

命令行配色

export PS1='\[\e[1;35m\]\u@\h:\[\e[0m\]\[\e[1;33m\]\w\[\e[1;35m\]\[\e[0m\]\[\e[1;34m\] \$ \[\e[1;32;1m\]'
source ~/.bashrc

image-20230110094906231

image-20230110094908875

image-20230110094911968

crontab -e 定时任务

https://segmentfault.com/a/1190000023186565

https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html

$ crontab -e
输入:
# m     h      dom     mon     dow       command
分钟   小时    日      月      星期几     命令
SHELL=/bin/bash
PATH=~/bin:/usr/bin/:/bin

$ ps -e | grep cron 查看是否运行定时

ldd

image-20230110094934088

mobaXterm就可以在服务器端通过SSH运行python的plot.imshow()

https://mobaxterm.mobatek.net/download.html

vim ~/.bashrc
输入
# display
export DISPLAY=192.168.30.70:0.0 # windows ip:mobaXterm port
然后
source ~/.bashrc
cv2.imshow("Result", frame)               
if cv2.waitKey(1)&0xFF == ord('q'):
    break
cv2.destroyAllWindows()

image-20230110095022177

shell脚本中针织判断和编程是相反的,零为真,非零为假。

vscode配置jupyter lab

https://blog.csdn.net/u011119817/article/details/115966917

http://127.0.0.1:6002/lab

# 默认在用户目录下~/,名为deep_rl的conda环境下
conda activate deep_rl
conda install jupyterlab
conda install ipykernel 
pip install ipywidgets widgetsnbextension pandas-profiling
# !jupyter nbextension enable --py widgetsnbextension # 在notebook内运行, 不一定需要

# 把当前conda虚拟环境deep_rl 显示为 jupyterlab中的kernel名为deep_rl:stable-baselines
# jupyter kernelspec remove deep_rl 移除环境
# 方便我们在jupyter lab切换环境
python -m ipykernel install --user --name notebook --display-name py10_pt1.12

nohup jupyter lab --port 10008 --allow-root &
cat nohup.out

直接端口mapping

image-20230110095101796

vscode选择conda环境需要插件 Jupyter PowerToys

进度条progress

https://github.com/Xfennec/progress

progress -q
progress -w
watch progress -q
watch progress -w

man查看内置手册

man mv

short cuts

C-r 查找历史执行命令,很便捷的调用历史命令的方式,输入历史命令关键字,就会及时显示匹配命令,enter 即可执行  
C-p 前一条指令  
C-n 后一条指令  
C-c 终止已经运行的命令(针对还没有运行完的命令和脚本,实际为向相关进程发送中断信号)或者取消已经输入的命令  
C-o/C-j/C-m 执行当前行输入的命令,跟 enter 类似  
C-l 清屏,clear 命令

C-a 移动光标到行首  
C-e 移动光标到行尾

C-t 交换光标前俩字符的位置  
C-h 往后删除一字符  
C-d 往前删除一字符  
C-b 往后移动一个字符  
C-f 往前移动一个字符


C-w 剪切前一个单词(空格间隔的字符串单元)  
C-u 剪切到行首  
C-k 剪切到行尾  
C-y 粘贴剪切

查看线程数

ps hH p pid|wc -l

top -H -p pid # 或者shift+h

% cpu 是表示单核 cpu 的占用率, 而不是占用所有 cpu 的占用率. 即如果我们是 32 核 cpu, 那么 3200% 才是最高的 cpu 利用率

CPU个数: 电脑插槽上的CPU个数, 物理cpu数量
CPU核数:一个物理CPU上面能处理数据的芯片组的数量
CPU逻辑核数:一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥CPU的性能
总核数 = 物理CPU个数 X 每个物理CPU的核数
总逻辑核数= 物理CPU个数 X 每个物理CPU的核数 X 超线程数

# 查看CPU型号
cat /proc/cpuinfo | grep 'model name' | sort | uniq

# 查看物理CPU个数
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
grep 'physical id' /proc/cpuinfo | sort -u

# 查看单个CPU的核数
cat /proc/cpuinfo| grep "cpu cores"| uniq
grep 'core id' /proc/cpuinfo | sort -u | wc -l

# 查看CPU逻辑核数, 此处查看的线程数是总的线程数,可以理解为逻辑cpu的数量
cat /proc/cpuinfo| grep "processor"| wc -l
grep 'processor' /proc/cpuinfo | sort -u | wc -l

# 如果是2倍 可见该CPU支持并已打开超线程

总线程数<= CPU数量:并行运行
总线程数> CPU数量:并发运行
+
执行top ,按 shift+m ,对%MEM降序排列并分析结果
在命令行输入top,然后shift+p查看占用CPU最高的进程,记下进程号
  • 一个程序至少有一个进程,一个进程至少有一个线程.

  • 并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。

https://blog.csdn.net/fen_dou_shao_nian/article/details/121485129?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-121485129-blog-79153167.pc_relevant_3mothn_strategy_and_data_recovery&spm=1001.2101.3001.4242.3&utm_relevant_index=7

Argument list too long”解决方法

https://www.cnblogs.com/dev-sy/p/12925087.html

image-20230110095251804

Linux中“Argument list too long”解决方法

image-20230110095153992

电脑卡

image-20230110095258180


文章作者: Lee Jet
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lee Jet !
评论
  目录