系统、Shell与软件使用拾遗

本文汇总了Linux与Windows系统中常用的命令技巧,包括文件管理、进程管理、远程连接、环境配置等方面,帮助读者提高日常工作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用shell命令及测试判断语句总结》:grep、sed、awk、tr、find、seq、xarg的用法;及条件测试,与if、for语句。

Chrome

有些页面滚动非常慢:由于chrome的平滑滚动导致的,只要在chrome:flags里将Smooth Scrolling改为disable即可。

Linux系统

  • 文件夹 打开 shell: Ctrl+Alt+T
  • shell 打开 文件夹: nautilus .

配置与设定

提示符PS1

PS1 是一个环境变量,用于定义命令行提示符的外观。PS1 代表 “Prompt String 1”,是最常用的提示符设置。
修改提示符:

# echo "PS1='\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\] '" >> .bashrc
修改用户主目录下的: .bashrc,
完成后生效:source .bashrc

PS1 可以包含以下特殊字符来显示不同的信息:

  • \u:当前用户名
  • \h:主机名(不包括域名)
  • \H:主机名(包括域名)
  • \w:当前工作目录的完整路径
  • \W:当前工作目录的最后一部分
  • \d:当前日期,格式为 “周几 月份 日”
  • \t:当前时间(24小时制),格式为 “HH:MM:SS”
  • \T:当前时间(12小时制),格式为 “HH:MM:SS”(不显示秒)
  • @:当前时间,格式为 “12:00 AM”
  • $:如果是普通用户则显示 $,如果是根用户则显示 #

基本命令

查看进程运行路径

ps -ef | grep [proc]
ll /proc/[ProcID]/exe

软连接
ln -s /existed/file /link/file

mount覆盖
mount --bind /source/dir /dest/dir

查看Linux版本

> uname -a  # 查看Linux内核版本
> cat /proc/version # 查看Linux内核版本和gcc版本
> cat /etc/redhat-release # 查看centOS的版本
> cat /etc/os-release # 查看操作详细信息
> lsb_release #查看特定版本信息

通过脚本改变当前目录
默认情况下,脚本执行时会开启一个子进程;改变的目录不会影响父进程,因此执行完后,当前目录并没有改变;若要改变,则需要使用source或点号.(表示在当前shell中执行)来执行:

## chPath.sh
# cd /mnt/d/dest/dir 
> . ./chPath.sh  # 使用点号执行当前目录下脚本
> source ./chPath.sh

显示文件内容
tail -100f <file>:显示文件最后100行内容,并不断刷新(只要文件更新就显示最新的内容)。

磁盘管理命令

磁盘挂载查看《mount与nfs挂载简介

df -hT [path]:列出各分区(或指定目录)大小、使用情况与挂载系统类型;

# 磁盘使用空间

du -h --max-depth=1  [path]:列出指定目录(默认是当前目录)下文件夹大小(已使用空间);
du -s -h /* | sort -nr:查询目录占用空间

# 磁盘管理
lsblk:查看磁盘(包括未挂载的)
fdisk -l:查看分区情况

# 分区
fdisk /dev/sdb:分区n创建,最后w写入
mkfs.xfs /dev/sdb1:格式,完成后即可挂载
mount /dev/sdb1 /data

grep

grep方便文本查找:

  • -r :递归查找
  • -n :显示行号
  • -R :查找所有文件包含子目录(会递归进软连接中)
  • -i :忽略大小写
# 通过-A可显示匹配行及后续指定行数,-B前面指定行数,-C同时显示前后指定行数
docker inspect {docker-id} | grep Binds -A 10 # 显示docker绑定目录

# 查找文件
# grep -n 字符串 文件名
# grep -rn 字符串 *  # 查找当前目录及子目录下文件
grep -n docker run.sh # 搜索run脚本中docker,并显示对应函数

# 查看当前路径及子目录下html中包含vip.com的文件:
grep -R --include=*.html vip.com ./

ls显示目录

ls列出目录/文件的内容ls [选项] [目录或是文件],常用选项:

  • a:显示所有子目录与文件,包括隐藏文件;
  • A:显示所有子目录与文件,包括隐藏文件,但不列出...
  • F:目录名后面添加/标记(如tmp/ test.sh);
  • l:以长格式来显示文件的详细信息;
  • L:指定的名称为一个符号链接文件,则显示链接所指向的文件;
  • R:递归显示各个子目录中的文件;
  • t:显示时按修改时间(最近优先)而不是按名字排序;
  • u:显示时按文件上次存取的时间(最近优先)而不是按名字排序;
  • dl <dir>:显示目录自身的详情(若没有d,则显示其子目录与文件的详情);

(排除指定文件)删除/复制

除指定文件外,删除所有文件:

# 删除当前目录下,除modules外的所有文件/文件夹
find ./  -path ./modules  -prune -o -maxdepth 1 -mindepth 1  -print | xargs rm -rf

# 为所有子目录添加权限
find ./ -type d -exec chmod a+rx {} \;

# 通过grep -v实现
ls -A | grep -v 'mount' | xargs rm -rf

除指定文件外,复制所有文件:

# grep中-w为精确匹配(否则会匹配所有包含mount的文件名);-v为排除(取反)
# 复制时,必须在原目录,且ls等命令通过反引号包含起来
cp `ls -A | grep -wv 'mount'` ../test/ -rf

复制隐藏文件

默认情况下,cp不会复制隐藏文件,可通过最后加点号复制所有文件:

# 不会复制隐藏文件(以点号开始的)
cp -r /aaa/* /bbb/

# 会把aaa下所有文件偶复制bbb目录下
cp -arf /aaa/. /bbb/

后台运行程序

要保证终端退出时,Linux脚本继续执行,需要在后台执行(守护进程,终端退出不影响):

> nohup ./cliTest > nohup.out & 2>&1

后台启动Python脚本

以在后台运行python脚本(需添加参数-u,禁用缓冲区)为例:

cd test
nohup python3 -u TestMain.py > test.log 2>&1 &
  • nohup:保证程序不被挂起;
  • python3:确保执行python代码;
  • -u:表示不启用缓存,实时打印输出信息到日志文件(保证tail查看日志时能实时刷新);
  • TestMain.py:运行的程序;
  • >:将打印信息输出到日志文件;
  • test.out:输出的日志文件;
  • 2>&1:将标准错误输出转变为标准输出,可以将错误信息也输出到日志文件中,0-> stdin, 1->stdout, 2->stderr;
  • &:最后一个&表示后台运行程序。

查找程序ID并kill

通过ps+grep+awk获取程序ID,然后kill掉:

ID=`ps -ef | grep TestMain.py | grep -v grep | awk '{print $2}'`
echo "IDs: "$ID
for id in $ID
do
        kill  $id
        echo "kill $id"
        sleep 5
done

Vim

VIM常用操作

范围符号使用[start]:[end]标识:

  • .: 当前行。
  • $: 最后一行。
  • %: 所有行,等价与1,$
# 删除所有行
:% d
#删除当前行到文件尾
:.,$ d

统计字符串查询次数

命令::%s/pattern//gn
如,在vim查找load次数::%s/load//gn

  • %:指明操作区间,%表示全文本;可以使用1,$或者行区间代替
  • s:substitute,表示替换
  • `pattern - 要查找的字符串
  • //:两斜杠间为替代,两个斜杠中间没有任何字符表示无替代文本
    • g:替换行中遇到的所有匹配字符串(否则,只替换一行中遇到的首个匹配字符串);
    • n:报告查找到匹配字符串数量,并不实际替换(这就是,为什么//之间可以添加任意字符的原因)。

示例

  • :k,ms/pattern//gn:统计k行到m行中pattern出现的次数;
  • cat file|greg –i pattern |wc –l:统计pattern在file中出现的次数(行数)

SSH

登录到指定目录(tts用户):
ssh -t tts@192.168.1.10 'cd /home/tts/test && exec bash -l'
登录并切换到root:
ssh -t tts@192.168.1.10 'cd /home/tts/test; sudo su; exec bash -l'

使用sshpass可在ssh命令行中携带口令(一般不推荐):
sshpass -p xxx ssh user@192.168.11.11

scp & rsync

rsync可本地与远程复制文件:

rsync -avrl --progress  [src] [dest]

# apt-get install sshpass
nohup rsync -avrl --progress --rsh="/usr/bin/sshpass -p passwd ssh -o StrictHostKeyChecking=no -l username" ./upload user@192.168.1.10:/home/upload &
scp [option] file_source file_target
# 从本地复制到远程
scp local_file {user}@{hosts-ip}:remote_path
# 从远程复制到本地
scp {user}@{hosts-ip}:remote_file  local_path

参数说明:

  • -p:保留原文件的修改时间,访问时间和访问权限。
  • -q:不显示传输进度条。
  • -r:递归复制整个目录。
  • -v:详细方式显示输出。
  • -P port:注意是大写的P, port是指定数据传输用到的端口号。

SSH经常断开连接解决

在profile中添加export TMOUT=0

[root@Host ~]#  vi /etc/profile
export TMOUT=0
[root@Host ~]#  source /etc/profile

SSH免密登录

修改主机名:
hostnamectl set-hostname {host-name}

Linux之间

本地产生公私钥对,然后把公钥放到要远程的机器上:

  • ssh-keygen:一路回车,产生密钥对;
  • ssh-copy-id -i .ssh/id_rsa.pub {user}@{remote-ip}:将公钥写到远程机器的~/ .ssh/authorized_keys文件中;
  • ssh {user}@{remote-ip}:直接登录到远程机器;
windows登录Linux(vscode)

要通过私钥登录,需要先生成私钥(以Windows远程登录Linux为例):

  • 生成私钥:
    • 打开cmd,执行ssh-keygen;
    • 全部回车;
    • 会在‘用户’目录下的.ssh目录下生成id_rsa与id_rsa.pub文件
  • 上传公钥:
    • 复制id_rsa.pub到远端Linux机器的~/.ssh下;
    • 把公钥加入authorized_keys中:cat id_rsa.pub >> authorized_keys

shell命令

常用shell命令及测试判断语句总结》:grep、sed、awk、tr、find、seq、xarg的用法;及条件测试,与if、for语句。

一行命令内执行复杂语句(检测文件是否存在,存在后执行):

bash -c "while true; do if [ -f \"./test.sh\" ]; then break; fi ; echo wait; sleep 10;done ; bash \"./test.sh\";"

设定变量与执行命令

设定、取消环境变量:

# 设定
export EXP_tmp=t1

# 显示
printenv EXP_tmp
echo $EXP_tmp

# 删除
unset EXP_tmp

执行命令前设定变量:

# 执行命令前设定,执行完成后变量有效(已成为环境变量)
export EXP_ONE=e1 EXP_TWO=e2 && bash test.sh

# 设定变量,只在当前命令中有效,执行完成后自动失效
EXP_ONE=e1 EXP_TWO=e2  bash test.sh

打包与解压

同时解压当前目录下多个文件:
ls *.tar.gz | xargs -n1 tar -xzvf

打包(压缩)文件:
tar zcvf FileName.tar.gz DirName
解压文件:
tar zxvf FileName.tar.gz

打包时,不包含路径(通过-C指定要打包文件所在路径,然后用.则打包后就不在包含前面的路径了):
tar czvf test.tar.gz -C publish/test/ .

zip打包时,直接进入打包目录即可(tar时不可以,会把自身.tar.gz作为一个空文件打入包中)

cd publish/test
zip -r test.zip *

拆分文件

通过split可拆分文件为多个split [选项] {file} [前缀]

  • -b:设置每个分割包的大小,单位可以是(K、M、G);
  • -d:指定后缀为数字(默认是字母);
  • -a:设定后缀序列的长度(默认值是2);
# 拆分为每个包1.5G,格式为(outfile.tar.gz.0, outfile.tar.gz.1 。。。)
split -b 1500M -d -a 1 test-file.tar.gz outfile.tar.gz.

# 或者打包拆分一起做
tar czvf test-file.tar.gz test-files | split -b 2600M -d -a 1 - outfile.tar.gz.

解压拆分的包:

cat outfile.tar.gz.* | tar xzvf -

# 单纯合并拆分的包
cat outfile.tar.gz.* > outfile.tar.gz

wc

wc统计文件里面有多少单词、多少行、多少字符:
wc [-lwm]选项与参数

  • -c:统计字节数。
  • -l:统计行数。
  • -m:统计字符数。这个标志不能与 -c 标志一起使用。
  • -w:统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
  • -L:打印最长行的长度。
    选项组合使用时,输出列的顺序不受选项的顺序影响,总是按下述顺序显示:
    行数、字数、字节数、文件名

例子:

  • ls -l | wc -l #当前目录下的文件数
  • ps -ef | grep procName | wc -l # 进程数量
  • wc -l $(find -name "*.sh") # .sh文件的行数,及总行数
  • wc -l /etc/passwd #统计行数

sort

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件],常用选项说明:

  • -b:忽略每行前面开始的空格字符(空格数量不固定时,非常有用;"-n"选项隐含该选项);
  • -c:检查文件是否已经按照顺序排序,如未排序,会提示从哪一行开始乱序;
  • -C:类似于"-c",只不过未排序输出1;
  • -d:只处理英文字母、数字及空格,忽略其他的字符;
  • -f:将小写字母视为大写字母;
  • -k:指定排序的列(从1开始计数);
  • -n:依照数值的大小排序(默认是按字符);
  • -o<输出文件>:将排序后的结果存入指定的文件
  • -r:降序
  • -u:忽略相同行
  • -t<分隔字符>:指定分隔符(默认空白字符;若是转义字符,如tab,则使用-t$'\t);
# 显示队列最长的5个(队列以tab分割:第一列为队列名,第二列为数量)
./rabbitmqctl list_queues | sort -t$'\t' -n -r -k 2 | head -n 5

netstat

查看端口netstat

netstat -anp   # 查看连接,并显示端口、进程信息
netstat -antp  # 查看tcp连接,并显示端口、进程信息
  • -t (tcp)仅显示tcp相关
  • -u (udp)仅显示udp相关
  • -l 仅显示侦听端口
  • -n 显示数字IP地址(非域名等)
  • -p 显示相关链接的程序名

lsof

lsof(list open files):列出当前打开文件

lsof -i:<port> #查看指定端口
lsof -i -n  # 查看连接
lsof -i -p [pid] #查看某个进程的

在这里插入图片描述

修改命令提示符

vim ~/.bashrc  # 修改PS1对应的内容
source ~/.bashrc

在这里插入图片描述

Windows

Windows使用:

查看端口netstat

netstat -ano | findstr [port]

进程操作task

tasklist | findstr <PID> # 查看指定PID的进程
taskkill /f /t /PID <PID> # 杀死指定进程(根据PID)
taskkill /f /t /IM <myprog.exe> # 杀死指定进程(根据程序名)
  • /PID:processid,进程ID
  • /IM:imagname,进程映像名称
  • /T:终止指定进程和由他启动的子进程
  • /F:强制终止

环境变量

环境变量的设置和修改只会在当前窗口下有效,设置和修改只是临时缓存,一旦关闭命令窗口,环境变量就会失效。
如果要设置真实的环境变量,还是要经过去我的电脑->属性->更改设置->高级->环境变量,添加环境变量。

Powershell中设定:

#查看所有环境变量  
ls env:

#查看单个环境变量(使用‘$env’)
$env:NODE_ENV

#添加/更新环境变量 
$env:NODE_ENV=development

#删除环境变量        
del evn:NODE_ENV

cmd中设定:

#查看所有环境变量     
set

#查看单个环境变量     
set NODE_ENV

#添加/更新环境变量     
set NODE_ENV=development

#删除环境变量         
set NODE_ENV=

Powershell

修改PS的提示符

  • 修改文件%UserProfile%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1(若不存在则创建),添加:
    Function Prompt { "$ $( ( get-item $pwd ).Name )\>" }
    
  • 然后重启
  • 若提示无权限,则在PS中执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

后台启动java程序

@echo To stop MyService
wmic process where "commandline like 'javaw  -jar kpsoft.MyService-%%.jar' " terminate
@timeout /T 3

@echo To start MyService
start javaw -jar kpsoft.MyService-1.0-SNAPSHOT.jar
@echo MyService started

@timeout /T 2

windows注册表修改

右键菜单关联程序

以在右键菜单中添加notepad++为例:

  • 在HKEY_CLASSES_ROOT*\shell目录点击右键。新建–>项,命名为 Notepad++
  • 修改默认项的数据为"Edit With Notepad++", 即在右键中显示的名称
  • 在Notepad++上右键新建字符串,名称为"Icon"值为notepad++.exe的路径地址,并在地址后添加",0",即(D:\Programme\notepad++7.9\notepad++.exe,0)
  • 在Notepad++上新建 Command 子项,编辑右侧默认项的值为notepad++.exe的路径,并且后面添加" %1",即(D:\Programme\notepad++7.9\notepad++.exe %1)

软件

IDEA/Goland快捷键

快速搜索类: Ctrl+N  
快速搜索文件: Ctrl+Shift+N  
快速搜索函数: Ctrl+Alt+Shift+N  
快速搜索字符串: Ctrl+Shift+F

自动定位到标红位置:F2、或Shift+F2
添加标签:F11

重写父类函数(override):Ctrl+O
增加try-catch:Ctrl+Alt+T

调试
F8 单步调试,不进入函数内部
F7 单步调试,进入函数内部
Shift+F8 跳出函数
F9 继续执行,进入下一个断点或执行完程序
Alt+F9 运行到断点
Alt+F8 执行表达式查看结果
Ctrl+F8 设置/取消当前行断点
Ctrl+Shift+F8 查看断点

重命名: Shift+F6
重构函数: Ctrl+F6  
格式化代码: Ctrl+Alt+L
弹出重构菜单: Ctrl+Alt+Shift+T

跳转到定义处: Ctrl+B/Ctrl+Click
跳转到方法实现处: Ctrl+Alt+B/Click

删除行: Ctrl+X,
复制行(复制当前行到下一行): Ctrl+D

导入包,自动修正: Ctrl+Enter
移除无用import: Ctrl+alt+O

查看文件、方法结构图、类继承机构图: Ctrl+F12
查看maven依赖,类图: Ctrl+shift+Alt+U
查看方法调用层次: Ctrl+Alt+H

VSCODE快捷键

Ctrl + ` 打开或关闭终端;使用F1和Ctrl+Shift+P打开命令面板;
Ctrl+P快速打开,输入不同字符,进行不同操作:

  • ?:列出当前可执行的动作;
  • !:显示Errors或Warnings;直接快捷键Ctrl+Shift+M;
  • ::跳转到指定行;直接快捷键Ctrl+G;
  • @:根据分类跳转的Symbol;
  • #:根据名字查找Symbol;
  • >:命令面板

常用快捷键

  • 格式化代码:Alt + Shift + F
  • 单行注释: Ctrl + /
  • 多行注释:Shift + Alt + A/* */
  • 跳到指定行: Ctrl + G,然后输入行号
  • 查找文件: Ctrl + Shift + F
  • Ctrl+[:向左(减少)缩进;
  • Ctrl+]:向右(增加)缩进;

行操作:

  • 剪切当前行: Ctrl + X
  • 插入一行:Ctrl + Enter(无论光标在何位置,插入一行并设光标到新行行首)下方插入;Ctrl + Shift + Enter上方插入;
  • 复制一行:Alt + Shift + ↓下方;Alt + Shift + ↑上方;
  • 移动一行:Alt + ↓下方;Alt + ↑上方;

词操作:

  • 选中一个词:Ctrl + D

搜索替换:

  • 查找:Ctrl + F
  • 替换:Ctrl + H
  • 项目内查找:Ctrl + Shift + F

书签

要使用书签功能,需要先安装Bookmarks插件:

  • 创建或取消:Ctrl + Alt + K
  • 下一个书签:Ctrl + Alt + L
  • 上一个书签:Ctrl + Alt + J

列出所有书签:Ctrl + Shift + P打开控制面板,然后输入bookmarks,选择对应命令即可。

代码折叠

代码折叠都是通过组合键实现的:

  • 折叠所有区域(整个文件)代码:先Ctrl + K,再Ctrl + 0(数字0);
  • 展开所有区域(整个文件)折叠:先Ctrl + K,再Ctrl + J
  • 切换当前区域折叠状态:先Ctrl + K,再Ctrl + L
  • Ctrl+Shift+[:折叠当前区域(代码块);
  • Ctrl+Shift+]:展开当前区域(代码块);
  • Ctrl+K Ctrl+[:折叠当前区域(代码块)及子区域;
  • Ctrl+K Ctrl+]:展开当前区域(代码块)及子区域;

Tab按键

tab按键无效(不产生缩进,而是跳到其他位置):按Ctrl+M(Toggle Tab moves focus),会切回正常模式;

在markdown中,tab缩进混乱(有些4、有些8);统一转为空格即可:

  • ctrl+shift+p
  • 在框中输入convert Indentation to Spaces,统一转换为空格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值