好记性不如烂笔头

笔记

  • 说明
  • Linux
    • 基本命令
    • ffmpeg的使用
    • 设置永久 DNS 域名服务器
  • Mac
    • mysql
    • 启动台 删除图标
  • Windows
    • cmd命令
  • 通用
    • Excel
      • 文本转换
      • 自动填充

说明

记录平时使用命令,有误的地方,指出修改。

Linux

基本命令

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"

ffmpeg的使用

参考: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()

设置永久 DNS 域名服务器

说明:/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文件,已经成功修改。

Mac

mysql

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"替换为你的启动台程序名字即可,注意要区分大小写和空格。
最后按下“回车”即可。

Windows

cmd命令

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")

通用

Excel

文本转换

时间转换为秒数公式:=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)”,即可删除换行符。

你可能感兴趣的:(linux,运维,服务器)