Project

General

Profile

Miscellaneous » History » Version 9

Anonymous, 07/08/2022 03:08 PM
adding note

1 1
h1. Miscellaneous
2
3 9
h2. Script to Convert Local manpages to html
4
5
Note use @zcat@ if the manpages are compressed:
6
7
<pre>
8
#!/bin/bash
9
10
mkdir -p html
11
for file in *; do
12
        if [ -f $file ] && [ "${file: -3}" != ".sh" ]; then
13
                echo $file
14
                #echo "${file%.*}"
15
                pandoc --from man --to html < $file > html/${file%.*}.html
16
        fi
17
done
18
</pre>
19
20 6
h2. Display Total rsync Progress
21
22
<pre>
23 7
$ rsync -a --no-i-r --info=progress2 /path/to/src /path/to/dest/
24 6
</pre>
25
26
NOTE: @-v@ does not work with @--info=progress2@
27
28
Source: https://serverfault.com/a/441724/472586
29
30 5
h2. Slice Video File 
31
32
<pre>
33
$ ffmpeg -ss 00:01:00 -to 00:02:00  -i input.mp4 -c copy output.mp4
34
</pre>
35
36
Explanation of the command:
37
38
* -i: This specifies the input file. In that case, it is (input.mp4).
39
* -ss: Used with -i, this seeks in the input file (input.mp4) to position.
40
* 00:01:00: This is the time your trimmed video will start with.
41
* -to: This specifies duration from start (00:01:40) to end (00:02:12).
42
* 00:02:00: This is the time your trimmed video will end with.
43
* -c copy: This is an option to trim via stream copy. (NB: Very fast)
44
45 4
h2. Add new drive SW RAID5
46
47
# Format drive if needed (see below for steps).
48
# Add new drive to SW RAID:
49
<pre>
50
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1
51
</pre>
52
# Grow array:
53
<pre>
54
$ sudo mdadm --grow --raid-devices=4 /dev/md0
55
</pre>
56
57
h2. Replace failed SW RAID drive
58
59
# If drive is brand new be sure to create a partition on it:
60
<pre>
61
sorber@file2:~$ sudo parted /dev/sdg
62
GNU Parted 3.3
63
Using /dev/sdg
64
Welcome to GNU Parted! Type 'help' to view a list of commands.
65
(parted) mklabel gpt
66
(parted) mkpart primary 2048s 100%                                        
67
(parted) print                                                            
68
Model: ATA ST2000DM008-2FR1 (scsi)
69
Disk /dev/sdg: 2000GB
70
Sector size (logical/physical): 512B/4096B
71
Partition Table: gpt
72
Disk Flags: 
73
74
Number  Start   End     Size    File system  Name     Flags
75
 1      1049kB  2000GB  2000GB               primary
76
77
(parted) quit
78
</pre>
79
# If needed, mark bad drive as failed:
80
<pre>
81
$ sudo mdadm --manage /dev/md0 --fail /dev/sdd
82
</pre>
83
# Add new drive to replace failed:
84
<pre>
85
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1 /dev/sdg1
86
</pre>
87
# Improve rebuild speed slightly:
88
<pre>
89
$ sudo bash -c "echo 9999999 > /proc/sys/dev/raid/speed_limit_min"
90
$ sudo bash -c "echo 9999999 > /proc/sys/dev/raid/speed_limit_max"
91
</pre>
92
# Monitor rebuild:
93
<pre>
94
$ watch -n1 cat /proc/mdstat 
95
</pre>
96
97
h2. Get detailed drive information
98
99
<pre>
100
$ udevadm info --query=all --name=/dev/sda
101
</pre>
102
103 1
h2. Split flac with cue
104
105
<pre>
106
$ sudo apt install cuetools shntool
107
108
$ shnsplit -f file.cue -t %n-%t -o flac file.flac
109
</pre>
110
111
h2. Fix Chrome Display Glitches
112
113
Somewhere around Chrome 86 display glitches started happening on wake. Here is how to fix:
114
115 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.
116 1
117
h2. Setup SSH Public Key
118
119
# 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.
120
<pre>
121
$ ssh-keygen -t rsa
122
</pre>
123 3
 *NOTE:* for NetBeans to use/recognize the ssh key you must use the old PEM format:
124 1
<pre>
125
$ ssh-keygen -m PEM -t rsa
126
</pre>
127
# Now use `ssh-copy-id` to copy the key to the remote machine (for example):
128
<pre>
129
$ ssh-copy-id -i ~/.ssh/phalanx_rsa.pub dsorber@phalanx
130
</pre>
131
132
h2. Read Windows Product Key from ACPI Firmware
133
134
Boot into Linux and run:
135
136
<pre>
137
$ sudo strings /sys/firmware/acpi/tables/MSDM
138
</pre>
139
140
h2. Windows 10 Install and SysPrep Instructions
141
142
Very good instructions: https://theitbros.com/sysprep-windows-10-machine-guide/
143
144
145
h2. Search and Replace on Binary Files
146
147
A good hex editor can do search and replace on binary files but sometimes that's not practical:
148
149
* BBE - https://sourceforge.net/projects/bbe-/
150
 BBE is a binary editor with SED-like syntax:
151
<pre>
152
$ bbe -e 's/\x0a\x0d\x0a/\x0d\x0a/' infile > outfile
153
</pre>
154
* binwalk - https://github.com/ReFirmLabs/binwalk
155
 binwalk can search for hex strings (and do many other things)
156
<pre>
157
$ binwalk -R "\x0a\x0d\x0a" infile
158
159
WARNING: Signature '0    string    \x0a\x0d\x0a    Raw signature (\x0a\x0d\x0a)' is a self-overlapping signature!
160
161
DECIMAL       HEXADECIMAL     DESCRIPTION
162
--------------------------------------------------------------------------------
163
242           0xF2            Raw signature (\x0a\x0d\x0a)
164
412           0x19C           Raw signature (\x0a\x0d\x0a)
165
580           0x244           Raw signature (\x0a\x0d\x0a)
166
749           0x2ED           Raw signature (\x0a\x0d\x0a)
167
. . .
168
</pre>
169
170
h2. Wake-on-LAN WOL
171
172
Must be enabled on interface; need MAC
173
<pre>
174
$ sudo apt install etherwake
175
$ sudo etherwake <target MAC> -i <outgoing interface>
176
177
$ sudo etherwake b4:2e:99:a5:1e:f0 -i enp30s0
178
</pre>
179
180
h2. Allocator Shim
181
182
From Chromium, this is really interesting
183
* https://chromium.googlesource.com/chromium/src/base/+/master/allocator/README.md
184
185
However it is not clear how to use it outside of Chromium.
186
187
h2. Update Geany
188
189
# Install prereq packages (this obviously only needs to be done once):
190
<pre>
191
$ sudo apt install libgtk-3-dev libgtkspell-dev libgtkspell3-3-dev
192
</pre>
193
# Set compile flags:
194
<pre>
195
$ export CFLAGS="-O3 -march=native" 
196
$ export CXXFLAGS=$CFLAGS
197
</pre>
198
# Build geany and set to install in /opt so it won't collide with the packaged version:
199
<pre>
200
$ tar xf geany-1.30.tar.bz2
201
$ cd geany-1.30/
202
$ ./configure --prefix=/opt/local --enable-gtk3
203
$ make -j20
204
$ sudo make install
205
</pre>
206
# Set PKG_CONFIG_PATH environment variable so we can build the plugins.
207
<pre>
208
$ export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/
209
</pre>
210
# Build geany-plugins:
211
<pre>
212
$ tar xf geany-plugins-1.30.tar.bz2 
213
$ cd geany-plugins-1.30/
214
$ ./configure --prefix=/opt/local --enable-gtk3
215
$ make -j20
216
$ sudo make install
217
</pre>
218
219
h2. Find and replace across multiple files
220
221
<pre>
222
$ find /home/www -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g'
223
</pre>
224
225
h2. Useful IPMI commands
226
227
228
Power measurement on the SuperMicro (probably won't work on Dell chassis as they have some proprietary version of ipmi):
229
230
<pre>
231
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.136.108 dcmi power reading
232
</pre>
233
234
Check power status (i.e. on/off) of chassis:
235
<pre>
236
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.70.45 power status
237
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.70.45 power off
238
</pre>
239
240
Get IPMI IP address (look for "IP Address"):
241
<pre>
242
sudo ipmitool lan print 
243
</pre>
244
245
h2. Full sshfs Connect Command
246
247
<pre>
248
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/
249
</pre>
250
251
h2. Side-by-side Color Diff
252
253
<pre>
254
$ sudo apt-get install colordiff
255
$ colordiff -y --suppress-common-lines data.txt /ryftone/data.txt
256
</pre>
257
258
h2. x86 ABI
259
260
* https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
261
262
h2. clang-format and clang-tidy
263
264
* http://www.labri.fr/perso/fleury/posts/programming/using-clang-tidy-and-clang-format.html
265
266
h2. Shared Library and Related Resources
267
268
* http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
269
* https://blog.qt.io/blog/2011/10/28/rpath-and-runpath/
270
* http://www.bnikolic.co.uk/blog/linux-ld-debug.html
271
* http://insanecoding.blogspot.com/2012/07/creating-portable-linux-binaries.html
272
* https://stackoverflow.com/questions/4156055/static-linking-only-some-libraries
273
274
h2. Ubuntu: List Grub Entries
275
276
<pre>
277
gawk  'BEGIN {                                                                                                                       
278
  l=0                                                                                                                                
279
  menuindex= 0                                                                                                                       
280
  stack[t=0] = 0                                                                                                                     
281
}                                                                                                                                    
282
283
function push(x) { stack[t++] = x }                                                                                                  
284
285
function pop() { if (t > 0) { return stack[--t] } else { return "" }  }                                                              
286
287
{                                                                                                                                    
288
289
if( $0 ~ /.*menu.*{.*/ )                                                                                                             
290
{                                                                                                                                    
291
  push( $0 )                                                                                                                         
292
  l++;                                                                                                                               
293
294
} else if( $0 ~ /.*{.*/ )                                                                                                            
295
{                                                                                                                                    
296
  push( $0 )                                                                                                                         
297
298
} else if( $0 ~ /.*}.*/ )                                                                                                            
299
{                                                                                                                                    
300
  X = pop()                                                                                                                          
301
  if( X ~ /.*menu.*{.*/ )                                                                                                            
302
  {                                                                                                                                  
303
     l--;                                                                                                                            
304
     match( X, /^[^'\'']*'\''([^'\'']*)'\''.*$/, arr )                                                                               
305
306
     if( l == 0 )                                                                                                                    
307
     {                                                                                                                               
308
       print menuindex ": " arr[1]                                                                                                   
309
       menuindex++                                                                                                                   
310
       submenu=0                                                                                                                     
311
     } else                                                                                                                          
312
     {                                                                                                                               
313
       print "  " (menuindex-1) ">" submenu " " arr[1]                                                                               
314
       submenu++                                                                                                                     
315
     }                                                                                                                               
316
  }                                                                                                                                  
317
}                                                                                                                                    
318
319
}' /boot/grub/grub.cfg
320
</pre>
321
322
* https://askubuntu.com/a/941993/392271
323
324
325
h2.GCC Disable Unused Variable Warnings
326
327
<pre>
328
#pragma GCC diagnostic push
329
#pragma GCC diagnostic ignored "-Wunused-variable"
330
( your problematic library includes )
331
#pragma GCC diagnostic pop
332
</pre>
333
334
See: https://stackoverflow.com/a/22708539/73878
335
336
h2. Fix Steam after NVidia driver update
337
338
Since this has now bitten me twice... Steam requires the 32 bit version of the GL library.
339
340
<pre>
341
$ sudo apt install libnvidia-gl-418:i386
342
</pre>
343
344
h2. Restart Cinnamon from TTY
345
346
# Cinnamon freezes
347
# Switch tty. I usually go to tty6, `Ctrl+Alt+F6`
348
# If you need to login first, do so.
349
# 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).
350
# 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.
351
352
Sauce: https://askubuntu.com/a/198935/392271
353
354
h2. Ubuntu Set Specific Kernel to Boot
355
356
* Use this command to get a list of available options:
357
<pre>
358
$ grep -Ei 'submenu|menuentry ' /boot/grub/grub.cfg | sed -re "s/(.? )'([^']+)'.*/\1 \2/"
359
menuentry  Ubuntu
360
submenu  Advanced options for Ubuntu
361
    menuentry  Ubuntu, with Linux 4.4.0-34-generic
362
    menuentry  Ubuntu, with Linux 4.4.0-34-generic (upstart)
363
    menuentry  Ubuntu, with Linux 4.4.0-34-generic (recovery mode)
364
menuentry  System setup
365
</pre>
366
* Backup grub configuration, just in case:
367
<pre>
368
$ sudo cp /etc/default/grub /etc/default/grub.bak
369
</pre>
370
* Edit grub configuration and change `GRUB_DEFAULT` to something like this:
371
<pre>
372
$ sudo vim /etc/default/grub
373
374
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 3.13.0-53-generic"
375
</pre>
376
* Update grub configuration
377
<pre>
378
$ sudo update-grub
379
</pre>
380
* See also: https://askubuntu.com/questions/216398/set-older-kernel-as-default-grub-entry
381
382
h2. Ubuntu Networking Resources
383
384
* https://blog.ubuntu.com/2017/12/01/ubuntu-bionic-netplan
385
* https://help.ubuntu.com/lts/serverguide/network-configuration.html.en
386
* https://netplan.io/
387
388
h2. Win10 Licensing Info
389
390
* https://www.windowscentral.com/how-change-product-key-windows-10
391
* https://www.tenforums.com/tutorials/49586-determine-if-windows-license-type-oem-retail-volume.html
392
* https://www.tenforums.com/windows-updates-activation/104569-win-10-activation-expiring-volume-license.html
393
394
h2. Python GTK Development Resources
395
396
* https://python-gtk-3-tutorial.readthedocs.io/en/latest/layout.html
397
* https://lazka.github.io/pgi-docs/Gtk-3.0/classes/Box.html#Gtk.Box.pack_start
398
* https://lazka.github.io/pgi-docs/Gtk-3.0/mapping.html
399
400
h2. cpufrequtils Governor Configuration
401
402
These instructions are intended for Ubuntu 16.04 and later (using systemd init).
403
404
* Check the available and currently set governors. Ubuntu has an โ€œondemandโ€ service that sets the governor to ondemand after boot.
405
<pre>
406
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
407
conservative ondemand userspace powersave performance schedutil
408
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 
409
ondemand
410
</pre>
411
412
* Configure cpufrequtils to set the governor to performance at boot
413
<pre>
414
$ echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
415
GOVERNOR="performance"
416
</pre>
417
418
* Disable the automatic ondemand service. 
419
<pre>
420
$ sudo systemctl disable ondemand
421
</pre>
422
423
* Reboot.
424
425
* Now check that the governor is set to performance for every CPU:
426
<pre>
427
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
428
performance
429
performance
430
performance
431
performance
432
โ€ฆ
433
performance
434
performance
435
performance
436
</pre>
437
438
* Check current CPU speeds:
439
<pre>
440
$ watch -n 1 bash -c 'cpufreq-info | grep "current CPU frequency"'
441
</pre>
442
443
h2. rsync via ssh example
444
445
<pre>
446
$ rsync --info=progress2 -ahz --compress-level=9 -e "ssh -i ~/ryft-pat-f1.pem" data/ ryftuser@18.205.65.5:/ryftone/regression/pubmed/data/
447
</pre>
448
449
h2. Read Performance using AIO
450
451
Use this fio command (run from temp directory on disk in question) to measure max disk read performance:
452
453
<pre>
454
$ 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
455
</pre>
456
457
Note that DIRECT_IO is required when using AIO. (see also: https://askubuntu.com/a/991311/392271)
458
459
h2. Remove Source Files While Creating Tarball
460
461
This is handy as it saves on disk space.
462
<pre>
463
$ tar --remove-files -cf pictures.tar Pictures/
464
</pre>
465
466
h2. Linux Find and Remove Files
467
468
Find and remove files (even with spaces in the path) using case insensitive matching for the wildcard:
469
<pre>
470
$ find . -type f -iname "*.jpg" -print0 | xargs -0 rm
471
</pre>
472
473
h2. Convert ASCII hex to binary
474
This problem seems to come up every so often. There is no need for a one-off solution:
475
476
<pre>
477
$ xxd -r -p input.txt output.bin
478
</pre>
479
480
https://stackoverflow.com/questions/7826526/transform-a-hex-info-to-binary-using-linux-command
481
482
h2. Well Said
483
484
https://developers.slashdot.org/comments.pl?sid=12326098&cid=56908942
485
486
h2. Hex Editor
487
488
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.
489
490
Download from here: https://github.com/EUA/wxHexEditor
491
492
You'll need the latest version of libwxgtk<version>-dev package.
493
494
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.
495
496
Finally, to get it installed in the right place:
497
<pre>
498
sudo make install DESTDIR=/opt/local BINDIR=bin DATADIR=share
499
</pre>
500
501
h2. Preprocessor Fun
502
503
To invoke the preprocessor directly:
504
<pre>
505
gcc -E -DSOME_DEFINE=SOME_VALUE somefile.c 
506
</pre>
507
508
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."
509
510
h2. Convert Oversampled .flac to 16 bit 44.1 khz .flac
511
512
<pre>
513
mkdir -p output && find . -type f -name "*.flac" | parallel -j16 "sox {} -b 16 -r 44100 output/{/.}.flac"
514
515
mkdir -p output && find . -type f -name "*.flac" | parallel -j16 "sox -v 0.98 {} -b 16 -r 44100 output/{/.}.flac"
516
</pre>
517
518
h2. Aligned C++ STL Types
519
520
<pre>
521
#include <vector>
522
#include <boost/align/aligned_allocator.hpp>
523
524
template <typename T>
525
using aligned_vector = std::vector<T, boost::alignment::aligned_allocator<T, 4096>>;
526
</pre>
527
528
h2. Command line convert .png to .jpg
529
530
<pre>
531
$ for x in *.png; do convert $x $(basename $x .png).jpg; done
532
</pre>
533
534
You can also add the "`-quality 90`" option if needed.
535
536
h2. Determine CPU Family Name
537
538
<pre>
539
$ gcc -march=native -Q --help=target|grep march
540
</pre>
541
542
h2. Convert .flac to .m4a (AAC)
543
544
Requires `ffmpeg` built with libfdk_aac:
545
546
<pre>
547
$ /opt/bin/ffmpeg -i input.flac -vn -c:a libfdk_aac -vbr 3 output.m4a
548
</pre>
549
550
All together using `find` and `parallel` for magic:
551
<pre>
552
$ find . -type f -name "*.flac" | parallel -j16 "/opt/bin/ffmpeg -i {} -vn -c:a libfdk_aac -vbr 4 {/.}.m4a"
553
</pre>
554
555
h2. PyGObject
556
557
This is the magic needed to have stuff happen quasi asynchronously using PyGObject (GTK+):
558
559
<pre>
560
# Yield to the main loop temporarily
561
while Gtk.events_pending():
562
    Gtk.main_iteration()
563
</pre>
564
565
h2. FUSE Code
566
567
 *https://pastebin.com/wavKntiu
568
569
h2. Use Windoze Schtuffs
570
571
 * 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)
572
 * [[http://landinghub.visualstudio.com/visual-cpp-build-tools|MSVC Tools]] - compiler (seems to be the rough equivalent of `build-essential`)
573
 * [[https://docs.microsoft.com/en-us/sysinternals/downloads/procmon|Process Monitor]] - useful debug tool
574
  * https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems-usi - example for using Process Monitor
575
 * http://download.microsoft.com/download/7/2/E/72E0F986-D247-4289-B9DC-C4FB07374894/wdexpress_full.exe - (required by wingtk below)
576
 
577
* https://github.com/wingtk/gvsbuild - haven't tried this yet but looks amazing... 
578
579
h2. Build Handbrake Git Build
580
581
Steps for building Handbrake using AOCC:
582
583
<pre>
584
$ source /home/dsorber/Downloads/aocc/setenv_AOCC.sh
585
$ export CC=clang
586
$ export CXX=clang++
587
$ export CFLAGS="-g -O3 -mtune=native"
588
$ export CXXFLAGS=$CFLAGS
589
$ cd ~/Downloads/HandBrake/
590
$ rm -rf build/
591
$ ./configure --prefix=/opt --enable-x265 --enable-fdk-aac --gcc=/home/dsorber/Downloads/aocc/AOCC-1.1-Compiler/bin/clang
592
$ cd build
593
$ make -j17
594
$ sudo make install
595
</pre>
596
597
----
598
599
Regular build (18.04 and later):
600
<pre>
601
$ rm -rf build/
602
$ ./configure --prefix=/opt/local --enable-x265 --enable-fdk-aac
603
$ cd build
604
$ make -j17
605
$ sudo make install
606
</pre>
607
608
h2. Politically Correct Linux
609
610
* https://entertainment.slashdot.org/comments.pl?sid=11493671&cid=55759997
611
612
h2. This guy gets it
613
614
Regarding software purist ideology vs pragmatism
615
616
* https://linux.slashdot.org/comments.pl?sid=11156367&cid=55256437
617
618
h2. "Rotate" Video Playback via Metadata
619
620
<pre>
621
$ ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
622
</pre>
623
624
625
h2. Ubuntu Remove Old Kernels Oneliner
626
627
<pre>
628
$ 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)
629
</pre>
630
631
* [[https://askubuntu.com/questions/2793/how-do-i-remove-old-kernel-versions-to-clean-up-the-boot-menu/571360#571360|Sauce]]
632
633
h2. Remove New Lines (command line)
634
635
For a file:
636
<pre>
637
$ tr -d '\n' < yourfile.txt
638
</pre>
639
640
Or for output of a command (e.g.):
641
<pre>
642
$ find . -type f -name '*.txt' | tr -d '\n'
643
</pre>
644
645
h2. Convert from .mp4 to .mkv Container
646
647
Use `avconv` to convert container without re-encoding:
648
<pre>
649
$ sudo apt-get install libav-tools
650
651
$ avconv -i filme.mp4 -c copy filme.mkv
652
</pre>
653
654
h2. Remove String From Many File Names
655
656
On Ubuntu use Perl rename utility, e.g.:
657
658
<pre>
659
$ rename 's/ \(1920x1080\) \[WaifuKenny\]//' *.mp4
660
</pre>
661
662
h2. Change Default Text Editor
663
664
I always have to Google this...
665
666
<pre>
667
$ sudo update-alternatives --config editor
668
</pre>
669
670
h2. Linux View System RAM Speed
671
672
View RAM speed (actual) on Debian/Ubuntu/Mint:
673
674
<pre>
675
$ sudo lshw -short -C memory
676
H/W path                      Device      Class          Description
677
====================================================================
678
/0/0                                      memory         64KiB BIOS
679
/0/b                                      memory         32GiB System Memory
680
/0/b/0                                    memory         [empty]
681
/0/b/1                                    memory         16GiB DIMM Synchronous 2134 MHz (0.5 ns)
682
/0/b/2                                    memory         [empty]
683
/0/b/3                                    memory         16GiB DIMM Synchronous 2134 MHz (0.5 ns)
684
/0/d                                      memory         768KiB L1 cache
685
/0/e                                      memory         4MiB L2 cache
686
/0/f                                      memory         16MiB L3 cache
687
</pre>
688
689
h2. Linux Memory Schtuff
690
691
* [[https://github.com/jbert/exmap|exmap]]
692
* https://jameshunt.us/writings/smaps.html
693
* https://techtalk.intersec.com/2013/07/memory-part-2-understanding-process-memory/
694
* http://bmaurer.blogspot.com/2006/03/memory-usage-with-smaps.html
695
696
* https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt
697
698
* From: http://stackoverflow.com/questions/24484481/entry-in-proc-meminfo
699
<pre>
700
  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.
701
</pre>
702
703
704
* From: http://unix.stackexchange.com/questions/56879/tracking-down-missing-memory-usage-in-linux
705
706
  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).
707
708
  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.
709
710
 * [[http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html|Understanding memory usage on Linux]]
711
712
 * https://linux-mm.org/LinuxMM
713
714
h2. Reinstall grub on UEFI System
715
716
Reinstalling grub on a UEFI system is slightly different than on a traditional legacy BIOS system:
717
718
<pre>
719
# Mount the primary drive root partition and the boot EFI partition
720
sudo mount /dev/sda# /mnt            # Mount root (/) partition
721
sudo mount /dev/sda# /mnt/boot       # Mount boot (/boot) partition (if separate from root partition; typically not)
722
723
sudo mkdir -p /mnt/boot/efi          # Create EFI partition mount point
724
sudo mount /dev/sda1 /mnt/boot/efi   # Mount EFI partition
725
726
# Mount your virtual filesystems:
727
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
728
729
# Chroot
730
sudo chroot /mnt
731
</pre>
732
733
Now, if you have networking you'll need DNS. If using `resolvconf` (for recent versions of Ubuntu):
734
735
# Edit ` /etc/resolvconf/resolv.conf.d/head` and add the following line (OpenDNS server).  Then save and exit:
736
<pre>
737
add nameserver 208.67.222.222
738
</pre>
739
# Next enable updates and update:
740
<pre>
741
sudo resolvconf --enable-updates
742
sudo resolvconf -u
743
</pre>
744
# Now you should have DNS. Test by pinging something.
745
746
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.
747
<pre>
748
apt-get install grub-efi-amd64  # Install grub EFI bootloader (this should be all you need to do)
749
750
751
# manual steps if you need them for some reason
752
grub-install --recheck --no-floppy --force /dev/sda1  # Install grub bootloader in EFI partition
753
754
#####
755
echo "configfile (hd0,gpt#)/boot/grub.cfg" > /boot/efi/ubuntu/grub.cfg # Tell grub to load grub.cfg from /boot
756
757
update-grub                          # Create grub menu list
758
#####
759
760
exit                                 # Exit chroot
761
</pre>
762
763
Reboot and you should be back in business.
764
765
h2. Convert flac to VBR mp3 using ffmpeg/lame
766
767
<pre>
768
for file in *.flac; do name=$(echo $file | sed "s/\.flac//g"); ffmpeg -i "$file" -codec:a libmp3lame -qscale:a 0 "$name".mp3; done
769
</pre>
770
771
h2. Create UEFI/legacy BIOS Bootable ISO
772
773
* http://askubuntu.com/questions/625286/how-to-create-uefi-bootable-iso
774
775
h2. Getting rEFInd to work on Mac OS 10.11
776
777
* http://mattjanik.ca/blog/2015/10/01/refind-on-el-capitan/
778
779
h2. Convert DTS 5.1 to FLAC
780
781
<pre>
782
sudo apt-get install libdca-utils ffmpeg sound-juicer gnome-terminal easytag vlc 
783
784
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
785
</pre>
786
787
Source: http://ubuntuforums.org/archive/index.php/t-1849260.html
788
789
h2. Windows Utils
790
791
* http://windirstat.info/download.html
792
* https://www.raymond.cc/blog/safely-delete-unused-msi-and-mst-files-from-windows-installer-folder/
793
794
h2. SSH Security
795
796
https://stribika.github.io/2015/01/04/secure-secure-shell.html
797
798
h2. Windows 10
799
800
* http://ultimateoutsider.com/downloads/ - GWX Control Panel to disable GWX (Windows 10 update nagging)
801
* [[https://www.safer-networking.org/spybot-anti-beacon/|Spybot Anti-Beacon]] - Disable Micro$oft "telemetry" data gathering from Windows 10, 8.x, and 7
802
803
<pre>
804
The newest version of the KB3035583 update includes a background process which scans the 
805
system's Windows Registry twice a day to see if the values for the four aforementioned registry 
806
inputs were manually edited to disable the upgrade prompt. If they were, the process will alter 
807
the values, silently re-download the Windows 10 installation files (about 6 GB in total), and 
808
prompt the user to upgrade.
809
</pre>
810
811
812
h2. gpg-agent
813
814
* http://www.infrastructureanywhere.com/documentation/additional/mirrors.html
815
816
These instructions are geared toward reprepro but should be useful in general for setting up `gpg-agent`.
817
818
819
h2. Resolve DNS While VPN Connected
820
821
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/
822
823
h2. Pretty Print Python Traceback
824
825
<pre>#!python
826
import traceback
827
828
 ...
829
830
try: 
831
    with open('/dev/null', 'w') as void:
832
        rc = not bool(subprocess.call('modprobe -r {:s}'.format(mod_name), 
833
                                      shell=True, stdout=void, stderr=void))
834
except Exception as e:
835
    print_failure_status()
836
    exc_type, exc_value, exc_traceback = sys.exc_info()
837
    print('\n')
838
    traceback.print_exception(exc_type, exc_value, exc_traceback)
839
    print('\n')
840
</pre>
841
842
h2. Generating Random Data Files for Testing
843
844
One approach is to use /dev/urandom (non-blocking pseudorandom device):
845
<pre>
846
$ dd if=/dev/urandom bs=32M count=32 of=data_1GB.bin
847
</pre>
848
Unfortunately /dev/urandom is a bit slow. However, you can alternatively use openssl to generate pseudorandom numbers a bit faster:
849
<pre>
850
 $ openssl rand 1073741824 > data_1GB.bin
851
 $ for run in {1..30}; do echo $run; openssl rand 1073741824 >> data_30GB.bin; done
852
</pre>
853
854
h2. Cloning HDDs
855 8
856 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).
857
858
To clone a single drive to another identical drive (assuming sda is the source and sdb is the destination):
859
<pre>
860
 $ sudo dd if=/dev/sda bs=32M | pv -s `sudo blockdev --getsize64 /dev/sda` | sudo dd of=/dev/sdb bs=32M
861
</pre>
862
To clone to multiple drives all at once (assuming sda is the source and sdb, sdc are destinations):
863
<pre>
864
 $ 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
865
</pre>
866
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!
867
868
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.
869
870
h2. Generating ISOs
871
872
<pre>
873
 $ genisoimage -R -J -o <output.iso> <some directory>
874
</pre>
875
To deal with long file names:
876
<pre>
877
 $ genisoimage -R -J -l -D -joliet-long -o <output.iso> <some directory>
878
</pre>
879
880 2
h2. BIOS/grub
881 1
882 2
* http://forums.linuxmint.com/viewtopic.php?f=46&t=119832
883
* http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html
884
* https://wiki.archlinux.org/index.php/GRUB2
885
* http://unix.stackexchange.com/questions/28443/does-grub2-support-putting-boot-on-a-raid5-partition
886 1
887
h3. Creating a BIOS Boot Partition on a GPT system
888
889
<pre>
890
$ sudo parted /dev/sda
891
(parted) mkpart primary 0 1024k
892
(parted) set 2 bios_grub on
893
</pre>
894
895 2
h2. Actiontec Router
896
897
* http://transition.fcc.gov/oet/ea/fccid/
898
* http://opensource.actiontec.com/mi424wref.html
899 1
900
h2. Temp
901
902
https://www.grumpyland.com/blog/183/installing-software-raid-on-centos-567-via-ssh/
903
<pre>
904
# swap is on /dev/md1
905
/dev/md1 none            swap    sw              0       0
906
907
# storage is on /dev/md0
908
/dev/md0        /storage        xfs     noatime,barrier=0 0 0
909
//faramir/production/sw /sw     cifs    username=samba,password=w00tw00t!,file_mode=0666,dir_mode=0777  0       0
910
</pre>
911
912
----
913
[[../|Back home]]