# Create patch for file
diff -Naur original_file modified_file > changes.patch
# Test
patch --dry-run file_to_be_patched changes.patchAll posts by Roman
grep
# Search in files
grep -rnw '/path/to/somewhere/' -e 'pattern'Convert 2FAuth TOTP codes to Bitwarden Authenticator
- Select codes in 2FAuth and export them as a list of otpauth URIs.
- Save the Python script below as
convert-2fauth-to-bitwarden.py - Run the command below to create Bitwarden Authenticator JSON export file.
python3 convert-2fauth-to-bitwarden.py -o bitwarden_export.json 2fauth_export_otpauth.txt
#!/usr/bin/env python3
import json
import uuid
import argparse
def parse_otpauth_uri(uri):
parts = uri.split('?')
label = parts[0].split('/')[-1]
service, account = label.split(':', 1) if ':' in label else (label, '')
return {'service': service, 'account': account}
def convert_otpauth_to_bitwarden(input_file, output_file):
with open(input_file, 'r', encoding='utf-8') as f:
uris = [line.strip() for line in f if line.strip().startswith('otpauth://')]
items = []
for uri in uris:
parsed = parse_otpauth_uri(uri)
bw_item = {
"id": str(uuid.uuid4()).upper(),
"type": 1,
"name": f"{parsed['service']}",
"favorite": False,
"login": {
"username": parsed['account'],
"totp": uri,
}
}
items.append(bw_item)
output = {"encrypted": False, "items": items}
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(output, f, indent=2, ensure_ascii=False)
print(f"Converted {len(items)} items to {output_file}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Convert otpauth URIs → Bitwarden JSON")
parser.add_argument("input", help="File with otpauth URIs")
parser.add_argument("-o", "--output", default="bitwarden_export.json")
args = parser.parse_args()
convert_otpauth_to_bitwarden(args.input, args.output)curl
# Headers only using GET
curl -s -D - -o /dev/null --url https://www.romanstefko.com/
# HEAD request
curl -I https://www.romanstefko.com/
# Test with local IP address
curl --resolve 'www.romanstefko.com:443:192.168.1.10' -s -D - -o /dev/null --url https://www.romanstefko.com/
# HTTP Proxy
curl -x http://proxy:3128 https://www.romanstefko.comT-SQL: List open transactions
SELECT * FROM sys.sysprocesses WHERE open_tran = 1List active user T-SQL connections
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
AND DB_NAME(dbid) = 'mydb'
GROUP BY
dbid, loginame
mysql
Backup
mysqldump -u root dbname > backup.sql
Restore
mysql -u root dbname < backup.sql
Commands
# Create database
CREATE DATABASE dbname;
# Create user
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost';dmesg
# User friendly time
dmesg --ctime
bash
#!/usr/bin/env bash
set -euo pipefail
# Get time
NOW=$(date '+%d/%m/%Y %H:%M:%S');
echo "$NOW: Text"dd
Backup / Clone
# clone disk
dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress
# backup to file using gzip compression
dd if=/dev/sdX bs=64K conv=noerror,sync status=progress | gzip -c > /PATH/TO/DRIVE/backup_image.img.gz
# restore from file
gunzip -c /PATH/TO/DRIVE/backup_image.img.gz | dd of=/dev/sdX status=progress
# restore from file without gzip
dd if=/PATH/TO/DRIVE/backup_image.img of=/dev/sdX status=progress
# clone only to the end of last partition
SECTOR_SIZE=$(blockdev --getss /dev/sdX)
# LAST_END=start + size - 1
sfdisk -d /dev/sdX
# parameters for dd
bs="$SECTOR_SIZE" count="$LAST_END"
Mount Image
# Scan
losetup --partscan --find --show backup_image.img
# Free-up
losetup -d /dev/loop0