Project

General

Profile

Miscellaneous » History » Version 29

Anonymous, 10/06/2024 11:46 AM
adding missing character

1 1
h1. Miscellaneous
2
3 26
h2. Find all files matching regex pattern
4
5
All PNG images starting with 5 digits followed by a dash:
6
<pre>
7
$ find . -regextype posix-extended -regex "\./[[:digit:]]{5}-(.*).png
8
</pre>
9
10 25
h2. Change all file or directory permissions
11
12
<pre>
13
$ find . -type d -exec chmod 755 {} \;
14
$ find . -type f -exec chmod 644 {} \;
15
</pre>
16
17 24
h2. List Root Device
18
19
<pre>
20
$ findmnt -n -o SOURCE /
21
</pre>
22
23
h2. List Block Devices with Serial Numbers
24
25
<pre>
26
$ lsblk --nodeps -o name,serial 
27
</pre>
28
29 23
h2. Useful rsync Examples
30
31
* Synchronize directories (one way):
32
<pre>
33
$ rsync -auhrP --delete --info=del,name,stats2 "/mnt/phalanx/" "/storage"
34
</pre>
35
* Copy with progress:
36
<pre>
37
$ rsync -ahr --info=progress2 some_file.mp4 /storage/
38
</pre>
39
40
41 22
h2. Patch Youtube App using Revanced Manager (6/22/2024)
42
43
h3. Install Steps
44
45
* Delete Revanced app, Micro G, Revanced manager prior installation any of mentioned apps.
46
* Download *but not install* following:
47
** Micro G - https://github.com/ReVanced/GmsCore/releases/tag/v0.3.1.3.240913
48
** Revanced Manager - https://revanced.app/patches?s=Mic
49
** YT App version 19.16.39 (must be this version; revanced manager will warn if not): https://www.apkmirror.com/apk/google-inc/youtube/youtube-19-16-39-release/youtube-19-16-39-android-apk-download/
50
* Install Micro G.
51
* Next install Revanced Manager
52
* Open Revanced manager
53
** Go to Patches
54
** Select an app
55
** Bottom right corner choose Storage
56
** Find YT APK you downloaded, select patch on the bottom right corner
57
* Wait for patch and compile to finish, then choose install app
58
* Open it, check if its Vanced, restart the phone.
59
* If you have stock YT app, uninstall updates and disable it
60
61
Source: https://www.reddit.com/r/revancedapp/comments/1bq92r7/me_rn_trying_to_patch_youtube_revanced/
62
63 19
h2. Combine find and GNU parallel
64
65
Example:
66
<pre>
67
$ find . -name '*.jpg' | parallel convert -geometry 120 {} {.}_thumb.jpg
68 21
$ find . -name '*.png' | parallel --eta convert '{}' -quality 90 '{.}.jpg'
69 29
$ ls -1 *.png | parallel convert '{}' -quality 90 '{.}.jpg'
70 21
$ find . -name '*.png' -delete
71 19
</pre>
72
Note @{.}@ is the filename without the @.jpg@ portion.
73
74
* See: https://www.gnu.org/software/parallel/parallel_examples.html#example-compute-intensive-jobs-and-substitution
75
76 18
h2. Setup ttyd
77
78
* Download @ttyd@ and put it in @/opt/local/bin/ttyd@:
79
** https://github.com/tsl0922/ttyd/releases
80
* Create systemd service file @/etc/systemd/system/ttyd.service@: 
81
<pre>
82
[Unit]                                                                                                                                                                                           
83
Description=TTYD
84
After=syslog.target
85
After=network.target
86
 
87
[Service]
88
ExecStart=/opt/local/bin/ttyd -W -p 9772 login
89
Type=simple
90
Restart=always
91
User=root
92
Group=root
93
 
94
[Install]
95
WantedBy=multi-user.target
96
</pre>
97
** Start and enable service:
98
<pre>
99
$ sudo systemctl start ttyd && sudo systemctl enable ttyd
100
</pre>
101
* Setup apache configuration (add to existing)
102
<pre>
103
        ProxyRequests Off
104
        ProxyPreserveHost On
105
        RewriteEngine on
106
        RewriteCond %{HTTP:Upgrade} websocket [NC]
107
        RewriteCond %{HTTP:Connection} upgrade [NC]
108
        RewriteRule /terminal/?(.*) "ws://localhost:9772/$1" [P,L]
109
        ProxyPass /terminal http://localhost:9772/
110
        ProxyPassReverse /terminal http://localhost:9772/
111
</pre>
112
** Enable necessary apache modules:
113
<pre>
114
$ a2enmod proxy proxy_http proxy_wstunnel mod_rewrite
115
</pre>
116
117
118 17
h2. Increase tmux scrollback
119
120
<pre>
121
$ cd 
122
$ echo "set -g history-limit 9999999" >> ~/.tmux.conf
123
</pre>
124
125 16
h2. Setup VNC
126 15
127
On the server side:
128
# Install @x11vnc@:
129
<pre>
130
$ sudo apt install x11vnc net-tools
131
</pre>
132
# Set VNC password:
133
<pre>
134
$ x11vnc -storepasswd
135
</pre>
136
# Start VNC service from command line:
137
<pre>
138
$ sudo x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/dsorber/.vnc/passwd -rfbport 5900 -shared
139
</pre>
140
# To start at boot using systemd service create: @/etc/systemd/system/x11vnc.service@:
141
<pre>
142
[Unit]
143
Description=x11vnc remote desktop server
144
After=multi-user.target
145
146
[Service]
147
Type=simple
148
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/dsorber/.vnc/passwd -rfbport 5900 -shared
149
150
Restart=on-failure
151
152
[Install]
153
WantedBy=multi-user.target
154
</pre>
155 28
** Setup service
156
<pre>
157
$ sudo systemctl daemon-reload
158
$ sudo systemctl enable x11vnc.service 
159
$ sudo systemctl start x11vnc.service
160
</pre>
161 15
162
On the client side:
163
# Install @remmina@:
164
<pre>
165
$ sudo apt install remmina
166
</pre>
167
# Open @remmina@, select "VNC", and type in the server's IP address.
168
169
* Source: https://forums.linuxmint.com/viewtopic.php?t=369092
170
171 14
h2. sshuttle
172 15
173
Poor man's VPN:
174 14
175
<pre>
176
$ sshuttle --dns -NHr dsorber@phalanx.homelinuxserver.org:3268  192.168.0.0/16
177
</pre>
178
179 13
h2. Batch Convert PNG to JPG
180
181
NOTE: @convert@ comes from ImageMagick
182
<pre>
183
& ls -1 *.png | parallel --eta convert '{}' -quality 90 '{.}.jpg'
184
</pre>
185
186 12
h2. Crop Video with ffmpeg
187
188
<pre>
189
$ ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4
190
</pre>
191
192
* @out_w@ is the width of the output rectangle
193
* @out_h@ is the height of the output rectangle
194
* @x@ and @y@ specify the top left corner of the output rectangle (coordinates start at (0,0) in the top left corner of the input) 
195
196
Test using @ffplay@:
197
<pre>
198
$ ffplay -i input -vf "crop=out_w:out_h:x:y"
199
</pre>
200
201 10
h2. Build Custom Windows ISOs
202
203
* https://uupdump.net/
204 11
* https://forums.mydigitallife.net/threads/kms_vl_all-smart-activation-script.79535/
205 10
206 9
h2. Script to Convert Local manpages to html
207
208
Note use @zcat@ if the manpages are compressed:
209
210
<pre>
211
#!/bin/bash
212
213
mkdir -p html
214
for file in *; do
215
        if [ -f $file ] && [ "${file: -3}" != ".sh" ]; then
216
                echo $file
217
                #echo "${file%.*}"
218
                pandoc --from man --to html < $file > html/${file%.*}.html
219
        fi
220
done
221
</pre>
222
223 6
h2. Display Total rsync Progress
224
225
<pre>
226 7
$ rsync -a --no-i-r --info=progress2 /path/to/src /path/to/dest/
227 6
</pre>
228
229
NOTE: @-v@ does not work with @--info=progress2@
230
231
Source: https://serverfault.com/a/441724/472586
232
233 5
h2. Slice Video File 
234
235
<pre>
236
$ ffmpeg -ss 00:01:00 -to 00:02:00  -i input.mp4 -c copy output.mp4
237
</pre>
238
239
Explanation of the command:
240
241
* -i: This specifies the input file. In that case, it is (input.mp4).
242
* -ss: Used with -i, this seeks in the input file (input.mp4) to position.
243
* 00:01:00: This is the time your trimmed video will start with.
244
* -to: This specifies duration from start (00:01:40) to end (00:02:12).
245
* 00:02:00: This is the time your trimmed video will end with.
246
* -c copy: This is an option to trim via stream copy. (NB: Very fast)
247
248 4
h2. Add new drive SW RAID5
249
250
# Format drive if needed (see below for steps).
251
# Add new drive to SW RAID:
252
<pre>
253
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1
254
</pre>
255
# Grow array:
256
<pre>
257
$ sudo mdadm --grow --raid-devices=4 /dev/md0
258
</pre>
259
260
h2. Replace failed SW RAID drive
261
262
# If drive is brand new be sure to create a partition on it:
263
<pre>
264
sorber@file2:~$ sudo parted /dev/sdg
265
GNU Parted 3.3
266
Using /dev/sdg
267
Welcome to GNU Parted! Type 'help' to view a list of commands.
268
(parted) mklabel gpt
269
(parted) mkpart primary 2048s 100%                                        
270
(parted) print                                                            
271
Model: ATA ST2000DM008-2FR1 (scsi)
272
Disk /dev/sdg: 2000GB
273
Sector size (logical/physical): 512B/4096B
274
Partition Table: gpt
275
Disk Flags: 
276
277
Number  Start   End     Size    File system  Name     Flags
278
 1      1049kB  2000GB  2000GB               primary
279
280
(parted) quit
281
</pre>
282
# If needed, mark bad drive as failed:
283
<pre>
284
$ sudo mdadm --manage /dev/md0 --fail /dev/sdd
285
</pre>
286
# Add new drive to replace failed:
287
<pre>
288
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1 /dev/sdg1
289
</pre>
290
# Improve rebuild speed slightly:
291
<pre>
292
$ sudo bash -c "echo 9999999 > /proc/sys/dev/raid/speed_limit_min"
293
$ sudo bash -c "echo 9999999 > /proc/sys/dev/raid/speed_limit_max"
294
</pre>
295
# Monitor rebuild:
296
<pre>
297
$ watch -n1 cat /proc/mdstat 
298
</pre>
299
300
h2. Get detailed drive information
301
302
<pre>
303
$ udevadm info --query=all --name=/dev/sda
304
</pre>
305
306 1
h2. Split flac with cue
307
308
<pre>
309
$ sudo apt install cuetools shntool
310
311
$ shnsplit -f file.cue -t %n-%t -o flac file.flac
312
</pre>
313
314
h2. Fix Chrome Display Glitches
315
316
Somewhere around Chrome 86 display glitches started happening on wake. Here is how to fix:
317
318 3
Enabling @enable-vulkan@ in @chrome://flags@ then restarting the browser fixed it. If that does not work, you can also try enabling `ignore-gpu-blacklist` as well.
319 1
320
h2. Setup SSH Public Key
321
322
# On host machine generate a key pair. This key can be reused for multiple remote machines so it's not really necessary to change the name unless multiple keys are generated, which is also not really needed.
323
<pre>
324
$ ssh-keygen -t rsa
325
</pre>
326 3
 *NOTE:* for NetBeans to use/recognize the ssh key you must use the old PEM format:
327 1
<pre>
328
$ ssh-keygen -m PEM -t rsa
329
</pre>
330
# Now use `ssh-copy-id` to copy the key to the remote machine (for example):
331
<pre>
332
$ ssh-copy-id -i ~/.ssh/phalanx_rsa.pub dsorber@phalanx
333
</pre>
334
335
h2. Read Windows Product Key from ACPI Firmware
336
337
Boot into Linux and run:
338
339
<pre>
340
$ sudo strings /sys/firmware/acpi/tables/MSDM
341
</pre>
342
343
h2. Windows 10 Install and SysPrep Instructions
344
345
Very good instructions: https://theitbros.com/sysprep-windows-10-machine-guide/
346
347
348
h2. Search and Replace on Binary Files
349
350
A good hex editor can do search and replace on binary files but sometimes that's not practical:
351
352
* BBE - https://sourceforge.net/projects/bbe-/
353
 BBE is a binary editor with SED-like syntax:
354
<pre>
355
$ bbe -e 's/\x0a\x0d\x0a/\x0d\x0a/' infile > outfile
356
</pre>
357
* binwalk - https://github.com/ReFirmLabs/binwalk
358
 binwalk can search for hex strings (and do many other things)
359
<pre>
360
$ binwalk -R "\x0a\x0d\x0a" infile
361
362
WARNING: Signature '0    string    \x0a\x0d\x0a    Raw signature (\x0a\x0d\x0a)' is a self-overlapping signature!
363
364
DECIMAL       HEXADECIMAL     DESCRIPTION
365
--------------------------------------------------------------------------------
366
242           0xF2            Raw signature (\x0a\x0d\x0a)
367
412           0x19C           Raw signature (\x0a\x0d\x0a)
368
580           0x244           Raw signature (\x0a\x0d\x0a)
369
749           0x2ED           Raw signature (\x0a\x0d\x0a)
370
. . .
371
</pre>
372
373
h2. Wake-on-LAN WOL
374
375
Must be enabled on interface; need MAC
376
<pre>
377
$ sudo apt install etherwake
378
$ sudo etherwake <target MAC> -i <outgoing interface>
379
380
$ sudo etherwake b4:2e:99:a5:1e:f0 -i enp30s0
381
</pre>
382
383
h2. Allocator Shim
384
385
From Chromium, this is really interesting
386
* https://chromium.googlesource.com/chromium/src/base/+/master/allocator/README.md
387
388
However it is not clear how to use it outside of Chromium.
389
390
h2. Update Geany
391
392
# Install prereq packages (this obviously only needs to be done once):
393
<pre>
394
$ sudo apt install libgtk-3-dev libgtkspell-dev libgtkspell3-3-dev
395
</pre>
396
# Set compile flags:
397
<pre>
398
$ export CFLAGS="-O3 -march=native" 
399
$ export CXXFLAGS=$CFLAGS
400
</pre>
401
# Build geany and set to install in /opt so it won't collide with the packaged version:
402
<pre>
403
$ tar xf geany-1.30.tar.bz2
404
$ cd geany-1.30/
405
$ ./configure --prefix=/opt/local --enable-gtk3
406
$ make -j20
407
$ sudo make install
408
</pre>
409
# Set PKG_CONFIG_PATH environment variable so we can build the plugins.
410
<pre>
411
$ export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/
412
</pre>
413
# Build geany-plugins:
414
<pre>
415
$ tar xf geany-plugins-1.30.tar.bz2 
416
$ cd geany-plugins-1.30/
417
$ ./configure --prefix=/opt/local --enable-gtk3
418
$ make -j20
419
$ sudo make install
420
</pre>
421
422
h2. Find and replace across multiple files
423
424
<pre>
425
$ find /home/www -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g'
426
</pre>
427
428
h2. Useful IPMI commands
429
430
431
Power measurement on the SuperMicro (probably won't work on Dell chassis as they have some proprietary version of ipmi):
432
433
<pre>
434
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.136.108 dcmi power reading
435
</pre>
436
437
Check power status (i.e. on/off) of chassis:
438
<pre>
439
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.70.45 power status
440
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.70.45 power off
441
</pre>
442
443
Get IPMI IP address (look for "IP Address"):
444
<pre>
445
sudo ipmitool lan print 
446
</pre>
447
448
h2. Full sshfs Connect Command
449
450
<pre>
451
sudo sshfs -o idmap=user -o uid=$(id -u) -o gid=$(id -g) -o allow_other -o follow_symlinks ryftuser@sm-X11DGQ:/home/ryftuser /mnt/sm-X11DGQ/
452
</pre>
453
454
h2. Side-by-side Color Diff
455
456
<pre>
457
$ sudo apt-get install colordiff
458
$ colordiff -y --suppress-common-lines data.txt /ryftone/data.txt
459
</pre>
460
461
h2. x86 ABI
462
463
* https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
464
465
h2. clang-format and clang-tidy
466
467
* http://www.labri.fr/perso/fleury/posts/programming/using-clang-tidy-and-clang-format.html
468
469
h2. Shared Library and Related Resources
470
471
* http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
472
* https://blog.qt.io/blog/2011/10/28/rpath-and-runpath/
473
* http://www.bnikolic.co.uk/blog/linux-ld-debug.html
474
* http://insanecoding.blogspot.com/2012/07/creating-portable-linux-binaries.html
475
* https://stackoverflow.com/questions/4156055/static-linking-only-some-libraries
476
477
h2. Ubuntu: List Grub Entries
478
479
<pre>
480
gawk  'BEGIN {                                                                                                                       
481
  l=0                                                                                                                                
482
  menuindex= 0                                                                                                                       
483
  stack[t=0] = 0                                                                                                                     
484
}                                                                                                                                    
485
486
function push(x) { stack[t++] = x }                                                                                                  
487
488
function pop() { if (t > 0) { return stack[--t] } else { return "" }  }                                                              
489
490
{                                                                                                                                    
491
492
if( $0 ~ /.*menu.*{.*/ )                                                                                                             
493
{                                                                                                                                    
494
  push( $0 )                                                                                                                         
495
  l++;                                                                                                                               
496
497
} else if( $0 ~ /.*{.*/ )                                                                                                            
498
{                                                                                                                                    
499
  push( $0 )                                                                                                                         
500
501
} else if( $0 ~ /.*}.*/ )                                                                                                            
502
{                                                                                                                                    
503
  X = pop()                                                                                                                          
504
  if( X ~ /.*menu.*{.*/ )                                                                                                            
505
  {                                                                                                                                  
506
     l--;                                                                                                                            
507
     match( X, /^[^'\'']*'\''([^'\'']*)'\''.*$/, arr )                                                                               
508
509
     if( l == 0 )                                                                                                                    
510
     {                                                                                                                               
511
       print menuindex ": " arr[1]                                                                                                   
512
       menuindex++                                                                                                                   
513
       submenu=0                                                                                                                     
514
     } else                                                                                                                          
515
     {                                                                                                                               
516
       print "  " (menuindex-1) ">" submenu " " arr[1]                                                                               
517
       submenu++                                                                                                                     
518
     }                                                                                                                               
519
  }                                                                                                                                  
520
}                                                                                                                                    
521
522
}' /boot/grub/grub.cfg
523
</pre>
524
525
* https://askubuntu.com/a/941993/392271
526
527
528
h2.GCC Disable Unused Variable Warnings
529
530
<pre>
531
#pragma GCC diagnostic push
532
#pragma GCC diagnostic ignored "-Wunused-variable"
533
( your problematic library includes )
534
#pragma GCC diagnostic pop
535
</pre>
536
537
See: https://stackoverflow.com/a/22708539/73878
538
539
h2. Fix Steam after NVidia driver update
540
541
Since this has now bitten me twice... Steam requires the 32 bit version of the GL library.
542
543
<pre>
544
$ sudo apt install libnvidia-gl-418:i386
545
</pre>
546
547
h2. Restart Cinnamon from TTY
548
549
# Cinnamon freezes
550
# Switch tty. I usually go to tty6, `Ctrl+Alt+F6`
551
# If you need to login first, do so.
552
# Type `w` (yes, just the letter) and press enter. This commands does a lot of different things, but you need it to figure out the number of the display you are using. The display number is in the column FROM. Mine is `:0` (yes, including the colon).
553
# Assuming that cinnamon is already dead (which you would notice by the windows lacking titles and that you can't move different windows around, and perhaps even not being able to use the keyboard), you type `export DISPLAY=:0; cinnamon &`, and don't forget the colon. I add the ampersand (&) only not to keep that tty busy.
554
555
Sauce: https://askubuntu.com/a/198935/392271
556
557
h2. Ubuntu Set Specific Kernel to Boot
558
559
* Use this command to get a list of available options:
560
<pre>
561
$ grep -Ei 'submenu|menuentry ' /boot/grub/grub.cfg | sed -re "s/(.? )'([^']+)'.*/\1 \2/"
562
menuentry  Ubuntu
563
submenu  Advanced options for Ubuntu
564
    menuentry  Ubuntu, with Linux 4.4.0-34-generic
565
    menuentry  Ubuntu, with Linux 4.4.0-34-generic (upstart)
566
    menuentry  Ubuntu, with Linux 4.4.0-34-generic (recovery mode)
567
menuentry  System setup
568
</pre>
569
* Backup grub configuration, just in case:
570
<pre>
571
$ sudo cp /etc/default/grub /etc/default/grub.bak
572
</pre>
573
* Edit grub configuration and change `GRUB_DEFAULT` to something like this:
574
<pre>
575
$ sudo vim /etc/default/grub
576
577
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 3.13.0-53-generic"
578
</pre>
579
* Update grub configuration
580
<pre>
581
$ sudo update-grub
582
</pre>
583
* See also: https://askubuntu.com/questions/216398/set-older-kernel-as-default-grub-entry
584
585
h2. Ubuntu Networking Resources
586
587
* https://blog.ubuntu.com/2017/12/01/ubuntu-bionic-netplan
588
* https://help.ubuntu.com/lts/serverguide/network-configuration.html.en
589
* https://netplan.io/
590
591
h2. Win10 Licensing Info
592
593
* https://www.windowscentral.com/how-change-product-key-windows-10
594
* https://www.tenforums.com/tutorials/49586-determine-if-windows-license-type-oem-retail-volume.html
595
* https://www.tenforums.com/windows-updates-activation/104569-win-10-activation-expiring-volume-license.html
596
597
h2. Python GTK Development Resources
598
599
* https://python-gtk-3-tutorial.readthedocs.io/en/latest/layout.html
600
* https://lazka.github.io/pgi-docs/Gtk-3.0/classes/Box.html#Gtk.Box.pack_start
601
* https://lazka.github.io/pgi-docs/Gtk-3.0/mapping.html
602
603
h2. cpufrequtils Governor Configuration
604
605
These instructions are intended for Ubuntu 16.04 and later (using systemd init).
606
607
* Check the available and currently set governors. Ubuntu has an โ€œondemandโ€ service that sets the governor to ondemand after boot.
608
<pre>
609
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
610
conservative ondemand userspace powersave performance schedutil
611
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 
612
ondemand
613
</pre>
614
615
* Configure cpufrequtils to set the governor to performance at boot
616
<pre>
617
$ echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
618
GOVERNOR="performance"
619
</pre>
620
621
* Disable the automatic ondemand service. 
622
<pre>
623
$ sudo systemctl disable ondemand
624
</pre>
625
626
* Reboot.
627
628
* Now check that the governor is set to performance for every CPU:
629
<pre>
630
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
631
performance
632
performance
633
performance
634
performance
635
โ€ฆ
636
performance
637
performance
638
performance
639
</pre>
640
641
* Check current CPU speeds:
642
<pre>
643
$ watch -n 1 bash -c 'cpufreq-info | grep "current CPU frequency"'
644
</pre>
645
646
h2. rsync via ssh example
647
648
<pre>
649
$ rsync --info=progress2 -ahz --compress-level=9 -e "ssh -i ~/ryft-pat-f1.pem" data/ ryftuser@18.205.65.5:/ryftone/regression/pubmed/data/
650
</pre>
651
652
h2. Read Performance using AIO
653
654
Use this fio command (run from temp directory on disk in question) to measure max disk read performance:
655
656
<pre>
657
$ fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=10g --io_size=10g --blocksize=512k --ioengine=libaio --fsync=0 --iodepth=32 --direct=1 --numjobs=1 --runtime=300 --group_reporting
658
</pre>
659
660
Note that DIRECT_IO is required when using AIO. (see also: https://askubuntu.com/a/991311/392271)
661
662
h2. Remove Source Files While Creating Tarball
663
664
This is handy as it saves on disk space.
665
<pre>
666
$ tar --remove-files -cf pictures.tar Pictures/
667
</pre>
668
669
h2. Linux Find and Remove Files
670
671
Find and remove files (even with spaces in the path) using case insensitive matching for the wildcard:
672
<pre>
673
$ find . -type f -iname "*.jpg" -print0 | xargs -0 rm
674
</pre>
675
676
h2. Convert ASCII hex to binary
677
This problem seems to come up every so often. There is no need for a one-off solution:
678
679
<pre>
680
$ xxd -r -p input.txt output.bin
681
</pre>
682
683
https://stackoverflow.com/questions/7826526/transform-a-hex-info-to-binary-using-linux-command
684
685
h2. Well Said
686
687
https://developers.slashdot.org/comments.pl?sid=12326098&cid=56908942
688
689
h2. Hex Editor
690
691
I had been using [[https://hexinator.com/|Hexinator]] but I've had some minor issues with it. Today I tried [[https://www.wxhexeditor.org/home.php|wxHexEditor]] and I was pleasantly surprised.
692
693
Download from here: https://github.com/EUA/wxHexEditor
694
695
You'll need the latest version of libwxgtk<version>-dev package.
696
697
I had some minor issues with the build (which seems a somewhat bizarre arrangement...) modify the makefile to set `CC` and `CXX` directly, right about line 90.
698
699
Finally, to get it installed in the right place:
700
<pre>
701
sudo make install DESTDIR=/opt/local BINDIR=bin DATADIR=share
702
</pre>
703
704
h2. Preprocessor Fun
705
706
To invoke the preprocessor directly:
707
<pre>
708
gcc -E -DSOME_DEFINE=SOME_VALUE somefile.c 
709
</pre>
710
711
See also [[https://linux.die.net/man/1/unifdef|unifdef]]: "The unifdef utility acts on #if, #ifdef, #ifndef, #elif, #else, and #endif lines, and it understands only the commonly-used subset of the expression syntax for #if and #elif lines."
712
713
h2. Convert Oversampled .flac to 16 bit 44.1 khz .flac
714
715
<pre>
716
mkdir -p output && find . -type f -name "*.flac" | parallel -j16 "sox {} -b 16 -r 44100 output/{/.}.flac"
717
718
mkdir -p output && find . -type f -name "*.flac" | parallel -j16 "sox -v 0.98 {} -b 16 -r 44100 output/{/.}.flac"
719
</pre>
720
721
h2. Aligned C++ STL Types
722
723
<pre>
724
#include <vector>
725
#include <boost/align/aligned_allocator.hpp>
726
727
template <typename T>
728
using aligned_vector = std::vector<T, boost::alignment::aligned_allocator<T, 4096>>;
729
</pre>
730
731
h2. Command line convert .png to .jpg
732
733
<pre>
734
$ for x in *.png; do convert $x $(basename $x .png).jpg; done
735
</pre>
736
737
You can also add the "`-quality 90`" option if needed.
738
739
h2. Determine CPU Family Name
740
741
<pre>
742
$ gcc -march=native -Q --help=target|grep march
743
</pre>
744
745
h2. Convert .flac to .m4a (AAC)
746
747
Requires `ffmpeg` built with libfdk_aac:
748
749
<pre>
750
$ /opt/bin/ffmpeg -i input.flac -vn -c:a libfdk_aac -vbr 3 output.m4a
751
</pre>
752
753
All together using `find` and `parallel` for magic:
754
<pre>
755
$ find . -type f -name "*.flac" | parallel -j16 "/opt/bin/ffmpeg -i {} -vn -c:a libfdk_aac -vbr 4 {/.}.m4a"
756
</pre>
757
758
h2. PyGObject
759
760
This is the magic needed to have stuff happen quasi asynchronously using PyGObject (GTK+):
761
762
<pre>
763
# Yield to the main loop temporarily
764
while Gtk.events_pending():
765
    Gtk.main_iteration()
766
</pre>
767
768
h2. FUSE Code
769
770
 *https://pastebin.com/wavKntiu
771
772
h2. Use Windoze Schtuffs
773
774
 * https://support.microsoft.com/en-gb/help/17588/fix-problems-that-block-programs-from-being-installed-or-removed (gotta love how this requires a separate program)
775
 * [[http://landinghub.visualstudio.com/visual-cpp-build-tools|MSVC Tools]] - compiler (seems to be the rough equivalent of `build-essential`)
776
 * [[https://docs.microsoft.com/en-us/sysinternals/downloads/procmon|Process Monitor]] - useful debug tool
777
  * https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems-usi - example for using Process Monitor
778
 * http://download.microsoft.com/download/7/2/E/72E0F986-D247-4289-B9DC-C4FB07374894/wdexpress_full.exe - (required by wingtk below)
779
 
780
* https://github.com/wingtk/gvsbuild - haven't tried this yet but looks amazing... 
781
782
h2. Build Handbrake Git Build
783
784
Steps for building Handbrake using AOCC:
785
786
<pre>
787
$ source /home/dsorber/Downloads/aocc/setenv_AOCC.sh
788
$ export CC=clang
789
$ export CXX=clang++
790
$ export CFLAGS="-g -O3 -mtune=native"
791
$ export CXXFLAGS=$CFLAGS
792
$ cd ~/Downloads/HandBrake/
793
$ rm -rf build/
794
$ ./configure --prefix=/opt --enable-x265 --enable-fdk-aac --gcc=/home/dsorber/Downloads/aocc/AOCC-1.1-Compiler/bin/clang
795
$ cd build
796
$ make -j17
797
$ sudo make install
798
</pre>
799
800
----
801
802
Regular build (18.04 and later):
803
<pre>
804
$ rm -rf build/
805
$ ./configure --prefix=/opt/local --enable-x265 --enable-fdk-aac
806
$ cd build
807
$ make -j17
808
$ sudo make install
809
</pre>
810
811
h2. Politically Correct Linux
812
813
* https://entertainment.slashdot.org/comments.pl?sid=11493671&cid=55759997
814
815
h2. This guy gets it
816
817
Regarding software purist ideology vs pragmatism
818
819
* https://linux.slashdot.org/comments.pl?sid=11156367&cid=55256437
820
821
h2. "Rotate" Video Playback via Metadata
822
823
<pre>
824
$ ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
825
</pre>
826
827
828
h2. Ubuntu Remove Old Kernels Oneliner
829
830
<pre>
831
$ sudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done)
832
</pre>
833
834
* [[https://askubuntu.com/questions/2793/how-do-i-remove-old-kernel-versions-to-clean-up-the-boot-menu/571360#571360|Sauce]]
835
836
h2. Remove New Lines (command line)
837
838
For a file:
839
<pre>
840
$ tr -d '\n' < yourfile.txt
841
</pre>
842
843
Or for output of a command (e.g.):
844
<pre>
845
$ find . -type f -name '*.txt' | tr -d '\n'
846
</pre>
847
848
h2. Convert from .mp4 to .mkv Container
849
850
Use `avconv` to convert container without re-encoding:
851
<pre>
852
$ sudo apt-get install libav-tools
853
854
$ avconv -i filme.mp4 -c copy filme.mkv
855
</pre>
856
857
h2. Remove String From Many File Names
858
859
On Ubuntu use Perl rename utility, e.g.:
860
861
<pre>
862
$ rename 's/ \(1920x1080\) \[WaifuKenny\]//' *.mp4
863
</pre>
864
865
h2. Change Default Text Editor
866
867
I always have to Google this...
868
869
<pre>
870
$ sudo update-alternatives --config editor
871
</pre>
872
873
h2. Linux View System RAM Speed
874
875
View RAM speed (actual) on Debian/Ubuntu/Mint:
876
877
<pre>
878
$ sudo lshw -short -C memory
879
H/W path                      Device      Class          Description
880
====================================================================
881
/0/0                                      memory         64KiB BIOS
882
/0/b                                      memory         32GiB System Memory
883
/0/b/0                                    memory         [empty]
884
/0/b/1                                    memory         16GiB DIMM Synchronous 2134 MHz (0.5 ns)
885
/0/b/2                                    memory         [empty]
886
/0/b/3                                    memory         16GiB DIMM Synchronous 2134 MHz (0.5 ns)
887
/0/d                                      memory         768KiB L1 cache
888
/0/e                                      memory         4MiB L2 cache
889
/0/f                                      memory         16MiB L3 cache
890
</pre>
891
892
h2. Linux Memory Schtuff
893
894
* [[https://github.com/jbert/exmap|exmap]]
895
* https://jameshunt.us/writings/smaps.html
896
* https://techtalk.intersec.com/2013/07/memory-part-2-understanding-process-memory/
897
* http://bmaurer.blogspot.com/2006/03/memory-usage-with-smaps.html
898
899
* https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt
900
901
* From: http://stackoverflow.com/questions/24484481/entry-in-proc-meminfo
902
<pre>
903
  2. Active(file), Inactive(file) has file back-end which means its original file is in disk but to use it faster it was loaded on RAM.
904
</pre>
905
906
907
* From: http://unix.stackexchange.com/questions/56879/tracking-down-missing-memory-usage-in-linux
908
909
  The "memory used by a process" is not a clear cut concept in modern operating systems. What can be measured is the size of the address space of the process (SIZE) and resident set size (RSS, how many of the pages in the address space are currently in memory). Part of RSS is shared (most processes in memory share one copy of glibc, and so for assorted other shared libraries; several processes running the same executable share it, processes forked share read-only data and possibly a chunk of not-yet-modified read-write data with the parent). On the other hand, memory used for the process by the kernel isn't accounted for, like page tables, kernel buffers, and kernel stack. In the overall picture you have to account for the memory reserved for the graphics card, the kernel's use, and assorted "holes" reserved for DOS and other prehistoric systems (that isn't much, anyway).
910
911
  The only way of getting an overall picture is what the kernel reports as such. Adding up numbers with unknown overlaps and unknown left outs is a nice exercise in arithmetic, nothing more.
912
913
 * [[http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html|Understanding memory usage on Linux]]
914
915
 * https://linux-mm.org/LinuxMM
916
917
h2. Reinstall grub on UEFI System
918
919
Reinstalling grub on a UEFI system is slightly different than on a traditional legacy BIOS system:
920
921
<pre>
922
# Mount the primary drive root partition and the boot EFI partition
923
sudo mount /dev/sda# /mnt            # Mount root (/) partition
924
sudo mount /dev/sda# /mnt/boot       # Mount boot (/boot) partition (if separate from root partition; typically not)
925
926
sudo mkdir -p /mnt/boot/efi          # Create EFI partition mount point
927
sudo mount /dev/sda1 /mnt/boot/efi   # Mount EFI partition
928
929
# Mount your virtual filesystems:
930
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
931
932
# Chroot
933
sudo chroot /mnt
934
</pre>
935
936
Now, if you have networking you'll need DNS. If using `resolvconf` (for recent versions of Ubuntu):
937
938
# Edit ` /etc/resolvconf/resolv.conf.d/head` and add the following line (OpenDNS server).  Then save and exit:
939
<pre>
940
add nameserver 208.67.222.222
941
</pre>
942
# Next enable updates and update:
943
<pre>
944
sudo resolvconf --enable-updates
945
sudo resolvconf -u
946
</pre>
947
# Now you should have DNS. Test by pinging something.
948
949
Finally, back to fixing grub. Note that the grub install should run smoothly with no errors or warnings. If you see any something is probably wrong.
950
<pre>
951
apt-get install grub-efi-amd64  # Install grub EFI bootloader (this should be all you need to do)
952
953
954
# manual steps if you need them for some reason
955
grub-install --recheck --no-floppy --force /dev/sda1  # Install grub bootloader in EFI partition
956
957
#####
958
echo "configfile (hd0,gpt#)/boot/grub.cfg" > /boot/efi/ubuntu/grub.cfg # Tell grub to load grub.cfg from /boot
959
960
update-grub                          # Create grub menu list
961
#####
962
963
exit                                 # Exit chroot
964
</pre>
965
966
Reboot and you should be back in business.
967
968
h2. Convert flac to VBR mp3 using ffmpeg/lame
969
970
<pre>
971
for file in *.flac; do name=$(echo $file | sed "s/\.flac//g"); ffmpeg -i "$file" -codec:a libmp3lame -qscale:a 0 "$name".mp3; done
972
</pre>
973
974
h2. Create UEFI/legacy BIOS Bootable ISO
975
976
* http://askubuntu.com/questions/625286/how-to-create-uefi-bootable-iso
977
978
h2. Getting rEFInd to work on Mac OS 10.11
979
980
* http://mattjanik.ca/blog/2015/10/01/refind-on-el-capitan/
981
982
h2. Convert DTS 5.1 to FLAC
983
984
<pre>
985
sudo apt-get install libdca-utils ffmpeg sound-juicer gnome-terminal easytag vlc 
986
987
for file in *.wav; do name=$(echo $file | sed "s/\.wav//g"); dcadec -o wavall "$file" > "$name"_decoded.wav; ffmpeg -i "$name"_decoded.wav "$name".flac; rm -f "$file" "$name"_decoded.wav; done
988
</pre>
989
990
Source: http://ubuntuforums.org/archive/index.php/t-1849260.html
991
992
h2. Windows Utils
993
994
* http://windirstat.info/download.html
995
* https://www.raymond.cc/blog/safely-delete-unused-msi-and-mst-files-from-windows-installer-folder/
996
997
h2. SSH Security
998
999
https://stribika.github.io/2015/01/04/secure-secure-shell.html
1000
1001
h2. Windows 10
1002
1003
* http://ultimateoutsider.com/downloads/ - GWX Control Panel to disable GWX (Windows 10 update nagging)
1004
* [[https://www.safer-networking.org/spybot-anti-beacon/|Spybot Anti-Beacon]] - Disable Micro$oft "telemetry" data gathering from Windows 10, 8.x, and 7
1005
1006
<pre>
1007
The newest version of the KB3035583 update includes a background process which scans the 
1008
system's Windows Registry twice a day to see if the values for the four aforementioned registry 
1009
inputs were manually edited to disable the upgrade prompt. If they were, the process will alter 
1010
the values, silently re-download the Windows 10 installation files (about 6 GB in total), and 
1011
prompt the user to upgrade.
1012
</pre>
1013
1014
1015
h2. gpg-agent
1016
1017
* http://www.infrastructureanywhere.com/documentation/additional/mirrors.html
1018
1019
These instructions are geared toward reprepro but should be useful in general for setting up `gpg-agent`.
1020
1021
1022
h2. Resolve DNS While VPN Connected
1023
1024
How to configure dnsmasq for DNS overrides while using a VPN connection: https://chawlasumit.wordpress.com/2014/06/15/linux-mint-openconnect-vpn-dns-issues/
1025
1026
h2. Pretty Print Python Traceback
1027
1028
<pre>#!python
1029
import traceback
1030
1031
 ...
1032
1033
try: 
1034
    with open('/dev/null', 'w') as void:
1035
        rc = not bool(subprocess.call('modprobe -r {:s}'.format(mod_name), 
1036
                                      shell=True, stdout=void, stderr=void))
1037
except Exception as e:
1038
    print_failure_status()
1039
    exc_type, exc_value, exc_traceback = sys.exc_info()
1040
    print('\n')
1041
    traceback.print_exception(exc_type, exc_value, exc_traceback)
1042
    print('\n')
1043
</pre>
1044
1045
h2. Generating Random Data Files for Testing
1046
1047
One approach is to use /dev/urandom (non-blocking pseudorandom device):
1048
<pre>
1049
$ dd if=/dev/urandom bs=32M count=32 of=data_1GB.bin
1050
</pre>
1051
Unfortunately /dev/urandom is a bit slow. However, you can alternatively use openssl to generate pseudorandom numbers a bit faster:
1052
<pre>
1053
 $ openssl rand 1073741824 > data_1GB.bin
1054
 $ for run in {1..30}; do echo $run; openssl rand 1073741824 >> data_30GB.bin; done
1055
</pre>
1056
1057
h2. Cloning HDDs
1058 8
1059 1
When configuring multiple chassis it is necessary to clone an HDD. There are all sorts of disk imaging tools out there but it's hard to beat the trusty dd command. The pv (pipe viewer) portion isn't strictly necessary but it prints out a very useful textual status bar. The back ticked blockdev command reports the size of the drive in bytes, which pv then uses to determine overall progress. The bs argument to dd should correspond to the cache size of the drive for optimum performance (32MB is a sane default for most drives these days).
1060
1061
To clone a single drive to another identical drive (assuming sda is the source and sdb is the destination):
1062
<pre>
1063
 $ sudo dd if=/dev/sda bs=32M | pv -s `sudo blockdev --getsize64 /dev/sda` | sudo dd of=/dev/sdb bs=32M
1064
</pre>
1065
To clone to multiple drives all at once (assuming sda is the source and sdb, sdc are destinations):
1066
<pre>
1067
 $ sudo dd if=/dev/sda bs=32M | pv -s `sudo blockdev --getsize64 /dev/sda` | tee >(sudo dd of=/dev/sdb bs=32M) | sudo dd of=/dev/sdc bs=32M
1068
</pre>
1069
It is entirely possible to clone more drives by adding additional `>(sudo dd of=/dev/sdX bs=32M)` arguments to the tee command. Note that tee outputs to stdout so it is necessary to pipe the output of tee to the final dd command as shown above. If you don't do this then tee will spew the raw contents of the source HDD to your screen, which will make the clone take forever and look especially ugly!
1070
1071
For some reason RedHat/CentOS do not have the pv command or even a package for it in their repos!!! Therefore, boot from a Debian-based OS in order to clone.
1072
1073
h2. Generating ISOs
1074
1075
<pre>
1076
 $ genisoimage -R -J -o <output.iso> <some directory>
1077
</pre>
1078
To deal with long file names:
1079
<pre>
1080
 $ genisoimage -R -J -l -D -joliet-long -o <output.iso> <some directory>
1081
</pre>
1082
1083 2
h2. BIOS/grub
1084 1
1085 2
* http://forums.linuxmint.com/viewtopic.php?f=46&t=119832
1086
* http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html
1087
* https://wiki.archlinux.org/index.php/GRUB2
1088
* http://unix.stackexchange.com/questions/28443/does-grub2-support-putting-boot-on-a-raid5-partition
1089 1
1090
h3. Creating a BIOS Boot Partition on a GPT system
1091
1092
<pre>
1093
$ sudo parted /dev/sda
1094
(parted) mkpart primary 0 1024k
1095
(parted) set 2 bios_grub on
1096
</pre>
1097
1098 2
h2. Actiontec Router
1099
1100
* http://transition.fcc.gov/oet/ea/fccid/
1101
* http://opensource.actiontec.com/mi424wref.html
1102 1
1103
h2. Temp
1104
1105
https://www.grumpyland.com/blog/183/installing-software-raid-on-centos-567-via-ssh/
1106
<pre>
1107
# swap is on /dev/md1
1108
/dev/md1 none            swap    sw              0       0
1109
1110
# storage is on /dev/md0
1111
/dev/md0        /storage        xfs     noatime,barrier=0 0 0
1112
//faramir/production/sw /sw     cifs    username=samba,password=w00tw00t!,file_mode=0666,dir_mode=0777  0       0
1113
</pre>
1114
1115
----
1116
[[../|Back home]]