(摘) 命令行技巧和功能

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

Windows

  1. 列出文件并排除某些文件
    ls .go -exclude_test.go

  2. 使用for in中的变量。
    注意第一句:设置本地为延迟扩展。即延迟变量,全称延迟环境变量扩展
    及变量引用将%改为!
    此脚本实现列出所有扩展名为go的文件,并排除_test.go,即不是测试文件。
    示例1的效果相同
    想批量用vs code打开非test的go文件,虽然echo没错,但打开文件依然不成功。待续…

@setlocal enabledelayedexpansion
@echo off
for %%i in (*.go) do ( 
    set abc=%%i
    if not "!abc:~-8!"=="_test.go" (
        echo !abc!
    )
)
  1. 批量将mp4中的音频提出为mp3
for %a in (*.mp4) do ffmpeg -i %a %a.mp3  

修改音频效果,增加多线处理,据说可以加速
or %a in (*.mp4) do ffmpeg -i %a -b:a 64k -threads 2 %a.mp3

  1. netsh端口转发 将来自333端口的流量全部转发到192.168.191.130的3389端口 netsh interface portproxy add v4tov4 listenport=333 connectaddress=192.168.191.130 connectport=3389

netsh interface portproxy show all 查看所有转发规则
netsh interface portproxy delete v4tov4 listenport=333 删除转发规则
netsh interface portproxy reset 清除所有规则

  1. caff音频批量转换为ogg
for %%a in ("*.caf") do ffmpeg -i "%%a" "%%~na.ogg
pause
  1. 监控以上脚本中ffmpeg是否结束,结束则关机
$processName = "ffmpeg.exe"

while(1){
	$process = Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE Name='$processName'"
	[Int]$threadCount = $process.ThreadCount

	if($threadCount -eq 0)
	{
     	Write-Host "Over"
     	shutdown /s /t 100
	}
	else
	{
    	 Write-Host "The number of threads in $processName is $threadCount"
	}
                Start-Sleep -s 60
}
  1. ffplay播放摄像头内容

ffplay -f dshow -i video=“C1-1 USB3 Video” -x 800 -y 600

  1. 资源管理器右键直接显示所有

reg.exe add “HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32” /f /ve
然后 taskkill /f /im explorer.exe & start explorer.exe 杀掉资源管理器并重新运行它。


Linux

下载ts视频并合并

因为各种原因(我就遇到过有站长将ts文件扩展名改为了jpg),之前的ffmpeg不能直接下载合并,但能获取到m3u8列表文件。

#!/bin/bash

i=0
for line in `cat 1.m3u8`  #视频列表文件
do
  #echo $line
  if [ "${line:0:5}" = "https" ] #读取ts视频片段地址
  then
     let i++
     cmd="curl ${line:0:${#line}-1}"  #读取时总是有换行符,删除
     echo $cmd ">>>>" $i
     `$cmd --output $i.ts -s`  #下载视频片段为顺序文件
  fi
done

#获取所有文件并合并为单个
find . -type f | grep [0-9]\\.ts | cut -c 3- | sort -n | xargs cat >> abc.ts

#转换为mp4
ffmpeg -i abc.ts -acodec copy -vcodec copy -f mp4 test.mp4

ffmpeg 合并文件

ffmpeg文件合并 文件1.ts~ 100.ts 流媒体文件

1.txt编辑

file 1.ts
file 2.ts
...

file 100.ts

命令 (-vcodec copy -acodec copy 等于 -c copy)

.\ffmpeg.exe -f concat -i .\1.txt -c copy .\output.mkv

或者

.\ffmpeg.exe -f concat -i .\1.txt -c copy .\output.mp4

脚本守护进程

后台程序莫名其妙崩溃,最好的情况是先检查问题,再恢复上线。但是也经常需要先完成任务,然后在用户最少的时间段去排除问题。

这个脚本就是不断轮循,判断后台是否有指定进程名存在。若不存在则直接运行,并发一个企业微信信息给网管。

#!/bin/bash

while true
do
   if test $( pgrep -f wyfy | wc -l ) -eq 0
   then
      echo "进程不存在"
      ./qywx "wyfy进程重启"
      nohup ./wyfy & 
   else
      echo "存在进程"
   fi 
   sleep 1m
done

Ubuntu 关闭时间同步

sudo timedatectl set-ntp false

挂载网络磁盘

sudo mount -o username=pi,password=pi,vers=1.0,iocharset=utf8 //192.168.100.4/disk /home/ease/rdisk

sudo mount -o username=pi,password=pi //192.168.8.10/usb1 /home/pi/webDisk

linux定时任务crontab设置

/1 ** * service mysqld restart //每隔1分钟执行一次

/10 ** * service mysqld restart //每隔10分钟执行一次

0 /1 ** service mysqld restart //每1小时执行一次

0 /2 ** service mysqld restart //每2小时执行一次

0 10 ** * service mysqld restart //每天10点执行

30 19 ** * service mysqld restart //每天19点30分执行

0 10 ** 1 service mysqld restart //每周一10点执行

30 17 ** 5 service mysqld restart //每周五17点30分执行

0 10 1 10 * service mysqld restart //每年的10月1日10点执行

0 20 8 8 * service mysqld restart //每年的8月8日20点执行

Shell if

   INT1 -eq INT2           =
   INT1 -ne INT2           <>
   INT1 -gt INT2           >
   INT1 -ge INT2           >=
   INT1 -lt INT2           <
   INT1 -le INT2           <=

显示占用空间并排序

du -s * | sort -nr | head

查看系统glibc支持的版本

strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_

ssh免密

本地客户端生成公私钥:(一路回车默认即可) ssh-keygen

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.235.22

磁盘空间占用情况

du -s * | sort -nr | head 空间占用并排序输出

screen创建后自动执行命令

screen -dmS test bash -c ‘go run /1.go’

远程运行指令

ssh -p 2222 abc@defg.3322.org “df -lh”

flac转换为mp3

find . -name “*.flac” -exec ffmpeg -i {} -ab 320k -map_metadata 0 -id3v2_version 3 {}.mp3 ;

让电脑不休眠

这里有个工具,xdotool,用于控制鼠标或键盘。其实就是让鼠标动来动去。

#!/bin/bash
while [ 1=1 ]
do
   xdotool mousemove 1 1
   sleep 10
   xdotool mousemove 150 60
   sleep 60
done

下载ts视频

ffmpeg -i https://.../index.m3u8 -acodec copy -vcodec copy output.mp4

查询当前所有连接的ip

netstat -ntu

将 tcp 过滤出来 : netstat -ntu | grep tcp

将第五列单独截出来: netstat -ntu | grep tcp | awk ‘{print $5}’

仅列出IP: netstat -ntu | grep tcp | awk ‘{print $5}’ | cut -d: -f1

使用 sort 默认字符顺序将字段值排序 :netstat -ntu | grep tcp | awk ‘{print $5}’ | cut -d: -f1 | sort

将已经排序好的字段计算不同值的数目 : netstat -ntu | grep tcp | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c

服务器登陆报告

即在有用户通过ssh时,报告信息到微信。qywx是我的一个通知信息到企业微信的工具

nano /etc/profile

#获取当前通过22端口连接的IP
getip=`netstat -ntu | grep :22 | awk '{print $5}' | cut -d: -f1 | sort`
./qywx "\n服务器有用户登陆:\n$getip"

查看网络信号强度和质量

现在来看这个所谓的dBm,数值范围在-XX~0之间。这个数越大,信号强度越高。

iwconfig wlan0 | grep -i –color quality //查询网络连接质量

iwconfig wlan0 | grep -i –color signal //查询信号强度

下载网站

wget -r -p -np -k -w 4 –random-wait http://xxx.com/xxx

参数解析:

-r, –recursive(递归) specify recursive download.(指定递归下载)

-k, –convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接)

-p, –page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)

-np, –no-parent(不追溯至父级) don’t ascend to the parent directory.

-w 4 延时4秒

--random-wait 在延时时间的0.5-1.5倍之间随机延时

二进制显示文件内容

cat ./aaa | hexdump -C

tail -n 2 ./aaa | hexdump -C 只显示后面部份

下载网络m3u8格式视频

ffmpeg -i http://hls.com/aaaaa.m3u8 1.mp4

ffmpeg转码加速

ffmpeg -i 1.ts -c:v h264_amf output.mp4

实际这里是使用了GPU。不同的硬件,可能需要不同的解码/压缩方式(h264_amf为amd显卡)

批量将aac音频转换为mp3

find . -name "*.aac" -exec ffmpeg -i {} -acodec libmp3lame {}.mp3  
PowerShell: Get-ChildItem -Filter "*.mp4" | ForEach-Object { ffmpeg -i $_.FullName -acodec libmp3lame ($_.FullName + ".mp3") }  

顺便扩展名也要改:

for file in *.mp4.mp3; do mv -- "$file" "${file%.mp4.mp3}.mp3"; done  
PowerShell: Get-ChildItem -Filter "*.mp4.mp3" | Rename-Item -NewName { $_.Name -replace "\.mp4\.mp3$", ".mp3" }  

播放音频指定位置

用于把多个语音合成为一个文件,使用时指定开始及结束位置.
mplayer -ss 13.0 -endpos 0.9 音频.mp3

主机检查

一般来说,通过Ping来检查主机是否基本正常

#!/bin/bash

PingCheck()
{
  echo "Check IP " $1
  local count=0
  # 主机不通5次,则报警
  while [ $count -lt 4 ]; do
    ping -c 1 -q $1 > /dev/null
    if [ $? -ne 0 ]; then
      # 主机不通
      count=`expr $count + 1`
      sleep 5
    else
      # 主机通,退出
      return 0
    fi
  done
  curl -H "Title:服务器问题" -d $2 ntfy.sh/ease
  return -1
}

# 先确定自己有没有病(能Ping通外网)
# 自己不能Ping通外网,消息其实发不出去。只有能Ping通外网,才会检查其它主机。
PingCheck baidu.com "自己不通"
if [ $? -eq 0 ]; then
  PingCheck 118.123.1.151 "服务器118.123.1.151(scwy.net)不通"
  PingCheck 192.168.8.5 "服务器192.168.8.5(pi3主机)不通"
  PingCheck 192.168.8.22 "服务器192.168.8.22(邮件服务)不通"
fi

内存清理

sudo su - // 先进入root sync // 将系统缓冲数据写入磁盘 echo 1 > /proc/sys/vm/drop_caches // 丢弃一些系统缓存 echo 3 > /proc/sys/vm/drop_caches // 清空缓存,临时文件和可回收文件

递归搜索文件内容

grep -rn “hello,world!” *

  • : 表示当前目录所有文件,也可以是某个文件名
    -r 是递归查找
    -n 是显示行号
    -R 查找所有文件包含子目录
    -i 忽略大小写

Nano

Alt + Shift + 3 显示行号

相关目录

/etc/update-motd.d/ 登陆时的脚本
/etc/update-motd.d/50-landscape-sysinfo 登陆时显示系统信息,它是调用了/usr/bin/landscape-sysinfo这个脚本来生成

搜索包含文本

grep -rl ‘abcdefg’ . 列出所有包含字符abcdefg的文件
grep -rn ‘abcdefg’ . 列出所有包含字符的文件,并显示行号

相关文章