记录平时使用命令,有误的地方,指出修改。
df -h 查看系统各磁盘大小
du -sh 查看当前目录文件总大小
ls -1 -l 读取目录然后立即显示文件
Linux递归统计当前目录下普通文件的数量:
ls -lR |grep "^-"|wc -l
或者:
ls -lR | grep -c "^-"
递归统计方式: ls -lR
find ./ -type f | wc -l
chown -R test:test 目录 为test设置文件夹权限
-R 处理指定目录以及其子目录下的所有文件
分割文件:split -b 4000M -d -a 1 文件名—>文件.*
合并文件:cat 文件名.* > 文件.zip
lsof -i:端口号 查看端口使用
netstat -anp|grep 端口号 查看端口使用:
unzip -O cp936 -q 文件.zip 解决解压乱码(根据实际情况替换 cp936)
pkill --oldest --signal TERM -f chrome 彻底删除chrome浏览器程序进程
md5sum 文件名 返回文件md5的值
ls *.jpg | xargs -n1 -I {} cp {} /data/images 复制所有图片文件到 /data/images 目录下
Linux合并目录:
rsync -av /source/ /destination/
(after checking)
rm -rf /source/
安装ShellClash
export url='https://cdn.jsdelivr.net/gh/juewuy/ShellClash@master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
vi文件,替换第 n 行开始到最后一行中每一行所有 str1 为 str2:
:n,$s/str1/str2/g
n 为数字,若 n 为 .,表示从当前行开始到最后一行
批量更改目录下所有文件的后缀名:
命令格式:rename 's/\.csv/\.txt/' *
摘自
vi 文件内容替换
rename 批量修改名字
Linux常见的文件类型有:普通文件、目录文件、字符设备文件和块设备文件、符号链接文件等,其中:
1 普通文件的文件权限第一个字符为"-"
2 目录文件的文件权限第一个字符为"d"
3 字符设备文件的文件权限第一个字符为"c";
4 块设备文件的文件权限第一个字符为"b"
5 符号链接文件的文件权限第一个字符为"s"
参考:gabriel
ffmpeg -i source.mp4 查看视频信息
ffmpeg -i source.mp4 -ss 0 -t 600 first-10-min.mp4 从0秒开始截取一个600秒的视频(缓慢但是精准)
ffmpeg -ss 0 -i source.mp4 -t 600 first-10-min.mp4 从0秒开始截取一个600秒的视频(快速但不准确)
eg:ffmpeg -ss 0 -i source.mp4 -t 600 -t 10 -c:v copy -c:a copy first-10-min.mp4
eg:ffmpeg -ss 0 -i source.mp4 -t 600 -t 10 -c copy first-10-min.mp4
-c:v 和 -c:a分别指定视频和音频的编码格式。
-c:v copy -c:a copy标示视频与音频的编码不发生改变,而是直接复制,这样会大大提升速度。
从视频中截取一段时间的视频
ffmpeg -i source.mp4 -vcodec copy -acodec copy -ss 00:00:00 -to 00:00:05 cutout1.mp4 -y
-ss 起始时间
-to 终止时间
将视频按照20分钟截取:
ffmpeg -i source.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment 20-min-d%.mp4
如果发现播放效果不好的,请尝试添加-reset_timestamps 1
ffmpeg -i source.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 20-min-d%.mp4
#!/usr/bin/env python
import os
import time
def get_time(fn):
def inner(*args, **kwargs):
tt = time.time()
result = fn(*args, **kwargs)
print(f"方法 {fn.__name__} 耗时:{time.time()-tt}秒")
return result
return inner
@get_time
def main():
file_path = input("请输入视频目录(绝对路径):")
save_path = input("请输入截取后保存的路径(绝对路径):")
if not os.path.exists(save_path):
os.makedirs(save_path)
for root, dirs, files in os.walk(file_path):
for file in files:
if not file.endswith(".mp4"):
continue
file_path = os.path.join(root, file)
save_name = os.path.join(save_path, file.replace(".mp4", "_%d.mp4"))
# 截取命令非后台运行
cmd = "nohup ffmpeg -i %s -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 %s >/dev/null 2>&1 &" % (file_path, save_name)
# 截取命令非后台运行
# cmd = "nohup ffmpeg -i %s -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 %s >/dev/null 2>&1" % (file_path, save_name)
os.system(cmd)
print("执行成功\n已保存到%s下" % save_path)
if __name__ == "__main__":
main()
从视频中截取图片 每60s截取一帧
ffmpeg -i video.mp4 -f image2 -vf fps=fps=1/60 -qscale:v 2 mp4-%05d.jpeg
-vf fps=fps=1/60 每60s截取一帧
对视频进行截图
ffmpeg -i source.mp4 -r 1 (-f image2) output_%04d.png 图片储存更大
ffmpeg -i source.mp4 -r 1 (-f image2) output_%04d.jpg 图片储存更小
-r 指定抽取的帧率,即从视频中每秒钟抽取图片的数量。1代表每秒抽取一帧
-f 指定保存图片使用的格式,可忽略
#!/usr/bin/env python
import os
import time
def get_time(fn):
def inner(*args, **kwargs):
tt = time.time()
result = fn(*args, **kwargs)
print(f"方法 {fn.__name__} 耗时:{time.time()-tt}秒")
return result
return inner
@get_time
def screenshot():
file_path = input("请输入视频目录(绝对路径):")
save_path = input("请输入截取后保存的路径(绝对路径):")
for root, dirs, files in os.walk(file_path):
files.sort()
for file in files:
if not file.endswith(".mp4"):
continue
video_file = os.path.join(root, file)
# 每个视频截图存放视频文件下
save_picture_path = os.path.join(save_path, file.replace(".mp4", ""))
if not os.path.exists(save_picture_path):
os.makedirs(save_picture_path)
save_name = os.path.join(save_picture_path, file.replace(".mp4", "_%04d.jpg"))
# 截图命令后台运行
cmd = "nohup ffmpeg -i %s -r 1 %s >/dev/null 2>&1 &" % (video_file, save_name)
# 截图命令非后台运行
# cmd = "nohup ffmpeg -i %s -r 1 %s >/dev/null 2>&1" % (video_file, save_name)
os.system(cmd)
print("执行成功\n已保存到%s下" % save_path)
if __name__ == "__main__":
screenshot()
说明:/etc/resolv.conf 包含主配置文件DNS名称解析库
安装并使用reolvconf实用程序来使更改永久化
$ sudo apt update
$ sudo apt install resolvconf
resolvconf安装完成后,systemd将触发resolvconf.service将自动启动并启用。
要检查它是否已启动并正在运行,请发出以下命令
sudo systemctl status resolvconf.service
如果该服务由于某种原因没有自动启动和启用,您可以按如下方式启动和启用它
$ sudo systemctl start resolvconf.service
$ sudo systemctl enable resolvconf.service
$ sudo systemctl status resolvconf.service
接下来,打开/etc/resolvconf/resolv.conf.d/head配置文件。
$ sudo vi /etc/resolvconf/resolv.conf.d/head
# 添加
nameserver 8.8.8.8
nameserver 8.8.4.4
保存更改并重新启动resolvconf.service和systemd-resolved或重新启动系统。
$ sudo systemctl restart resolvconf.service
$ sudo systemctl restart systemd-resolved.service
检查/etc/resolv.conf文件,已经成功修改。
mysql 服务:
# 如果要安装指定版本的mysql,brew install [email protected],安装8.0版本的
brew install mysql
# 启动mysql服务
mysql.server start
# 查看mysql服务
mysql.server status
# 停止mysq服务
mysql.server stop
mysql客户:
# 第一次登陆时不需要密码
mysql -uroot
# 查看用户权限
SHOW GRANTS;
# 修改root密码
# 注意,在mysql8.0+版本上修改密码时与以往版本不同
use mysql;
# 使用之前版本的密码方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
# 刷新配置
FLUSH PRIVILEGES;
# 查看password密码策略的变量名
SHOW VARIABLES LIKE 'validate_password%';
# 修改validate_password.policy参数的值
set global validate_password.policy=0;
# 创建用户,赋予某数据库名权限
create user user_name identified by '你的密码';
grant all on 数据库名.* to 'user_name'@'%';
flush privileges;
# 删除用户
drop user user_name; # 默认删除的是'XXX'@'%'这个用户
drop user 'user_name'@'localhost'; # 删除'XXX'@'localhost'
delete from user where user='XXX' and host='localhost'; # 其中XXX为用户名,localhost为主机名。
# 注意:drop不仅会将user表中的数据删除,还会删除其他权限表的内容。而delete只删除user表中的内容,所以使用delete删除用户后需要执行FLUSH PRIVILEGES;刷新权限,否则下次使用create语句创建用户时会报错。
1、 打开访达,点击最顶部菜单栏的“前往”-“前往文件夹”;或者在访达图标右击,选择“前往文件夹”,然后输入“/private/var/folders”。
然后在该文件夹位置搜索文件:com.apple.dock.launchpad,搜索范围选择“folders”。
2、 接着进入“com.apple.dock.launchpad” 文件夹里,可以看到 “db”。
3、 最后在这个位置打开 “终端”或者“iTerm”,在“终端”输入删除遗留产物的命令行:
sqlite3 db "delete from apps where title='appName';"&&killall Dock
把"appName"替换为你的启动台程序名字即可,注意要区分大小写和空格。
最后按下“回车”即可。
tasklist 列出进程
taskkill /f /im 进程ID 结束进程
taskkill /F /im 进程名 结束进程
eg:
taskkill /F /im chromedriver.exe
python test.pyw 后台执行py程序
pythonw test.py/ test.pyw 后台执行py程序
样例
import subprocess
from selenium import webdriver
chrom_path = r"C:\Users\user\Downloads\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrom_path)
link = 'https://google.com'
driver.get(link)
s = driver.page_source
print((s.encode("utf-8")))
subprocess.call("TASKKILL /f /IM CHROME.EXE")
subprocess.call("TASKKILL /f /IM CHROMEDRIVER.EXE")
时间转换为秒数公式:=SECOND(B2)+MINUTE(B2)*60+HOUR(B2)*60*60
数字前补充0公式:=TEXT(B2, "0000")
对于不同大小单元格自动填充?
1、选中需要自动填充的单元格
2、填入 “=MAX($A$1:A1)+1”
这里的“$A$1”指的是上一个单元格位置的绝对引用,冒号后的“A1”也是指上一个单元格位置
3、输入完公式后按组合键“Ctrl+回车”
Excel中如何实现拆分单元格后填充相同内容?
1、选中需要拆分的单元格,点击取消单元格合并,选中数据区域,再按住Ctrl+G打开定位;
2、在定位面板中选择空值,点击确定;
3、输入等于符号,选择等号的上一个单元格,最后按着Ctrl加回车键,就填充完成了。
Excel中清除不能打印的字符
CLEAN函数可以删除文本中不能打印的字符。假如A1单元格包含换行符,可在B1单元格中输入公式:“=CLEAN(A1)”,即可删除换行符。