Installing Entware-ng on Synology NAS
https://github.com/Entware/Entware-ng/wiki/Install-on-Synology-NAS
Using GCC (native compilation)
https://github.com/Entware/Entware-ng/wiki/Using-gcc-%28native-compilation%29
Installing Entware-ng on Synology NAS
https://github.com/Entware/Entware-ng/wiki/Install-on-Synology-NAS
Using GCC (native compilation)
https://github.com/Entware/Entware-ng/wiki/Using-gcc-%28native-compilation%29
Humble Bundle
GOG
GamersGate
Abandonware DOS
SPORE™ Collection on GoG
Google Search (videos) “Spore GDC 2005”
Spore 35min Demonstration from the GDCe (2005)
Will Wright: Spore, birth of a game (TED Talk)
OpenFodder
(some free levels + uses data from full Amiga/PC versions)
Available from Steam and Humble Bundle
https://store.steampowered.com/app/284160/BeamNGdrive/
https://www.humblebundle.com/store/beamngdrive
https://beamng.com/
https://www.beamng.com/threads/your-performance-testing-results.37866/
https://www.beamng.com/threads/performance-statistics-feedback-thread.28306/
https://www.humblebundle.com/store/wreckfest
One of the best flight simulators of its time. Partial source code (the main file ‘flight.exe’) for the simulator was released for enhancement in 2016.
https://github.com/TornadoGame
Game download on myabandonware
https://www.myabandonware.com/game/tornado-41i
Tornado subforum on dogsofwar
http://dogsofwarvu.com/forum/index.php/board,50.0.html
Tornado gameplay by Frankie Kam
Digital Integration Tornado On Twitch (Frankie Kam)
https://www.x-plane.com/
https://www.x-plane.com/email-archives-index/
Adding new disks, including in mirroring of system partitions (md0 and md1)
# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md1 : active raid1 sdd2[3] sdb2[1] sdc2[2] sda2[0] 2097088 blocks [5/4] [UUUU_] md0 : active raid1 sdd1[3] sdb1[1] sda1[0] sdc1[2] 2490176 blocks [5/4] [UUUU_] unused devices:
# parted /dev/sda (parted) unit s (parted) p Model: ATA ST3000DM001-1CH1 (scsi) Disk /dev/sda: 5860533168s Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 2048s 4982527s 4980480s ext4 raid 2 4982528s 9176831s 4194304s linux-swap(v1) raid (parted) q
# parted /dev/sde (parted) unit s (parted) p Model: ATA ST3000DM001-1CH1 (scsi) Disk /dev/sda: 5860533168s Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags (parted) mkpart system ext4 2048 4982527 (parted) mkpart swap linux-swap 4982528 9176831 (parted) p ... Number Start End Size File system Name Flags 1 2048s 4982527s 4980480s ext4 system 2 4982528s 9176831s 4194304s linux-swap(v1) swap (parted) q
# mdadm --add /dev/md0 /dev/sde1 # mdadm --add /dev/md1 /dev/sde2
# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md1 : active raid1 sde2[4] sdd2[3] sdb2[1] sdc2[2] sda2[0] 2097088 blocks [5/5] [UUUUU] md0 : active raid1 sde1[4] sdd1[3] sdb1[1] sda1[0] sdc1[2] 2490176 blocks [5/5] [UUUUU] unused devices:
Fullt möjligt, men inte så snabbt.
Jag har på en av mina Buffalos även testat köra WordPress på LS220n, funkar fram till 5.1.1 med förinstallerad version av PHP. Från version 5.2 krävs PHP version 5.6 (jag kommer undersöka om det går att uppdatera php-cgi på Buffalon)
En förutsättning för att få det att fungera är att den är patchad för att tillåta root-inloggning via SSH:
Buffalo LS220 – root access och andra modifieringar
Nästa steg är att få igång en egen virtualhost på den förinstallerade (och tok-felkonfigurerade) Apache 2.2.14 som finns där:
Buffalo LS220 – apache web server
Apache får sitt PHP-stöd genom php-cgi, PHP versionen som är tillgänglig är 5.3.23
Sedan MySQL:
Buffalo LS220 – MySQL server
Nyaste firmwaren finns här. Version 1.70 kom i slutet på januari 2018. I början på december 2019 varnade mina LS220s att det finns en ny firmware. 1.73 hade släppts, och timestamp på innehållet i arkivet är 2019-11-19. Mina NASar (och NASNavigator) har slutat att indikera att det finns ny firmware att installera, och jag kör 2020-01-01 fortfarande på 1.70.
Senaste firmware för LS220
Installationen är enkel. Ladda ner senaste versionen, packa upp och starta LSUpdater.exe
Programmet hittar själv de Buffalosar på ditt nät som behöver uppdateras.
Var beredd på att innehåll i /root kommer gå förlorat, likaså allt som är modifierat i filer som följer med systemet (många av modifieringarna nedan).
Ifall något går helt snett, eller om båda diskarna byts. Med tanke på hur kasst BuffaloOS är, så kanske det inte ens går byta en disk utan att återställa den.
Completely revocering from a bricked Buffalo Linkstation LS200
Den flersidiga tråden med de av andras och mina inlägg är källan till alla mina Buffalo-artiklar
Hacka Buffalo Linkstation LS220D (LS200, LS400)
Testad upp till firmware 1.70 (14 sepember 2018)
En del av Buffalo LS220 – BAMP – Buffalo Apache MySQL PHP
MySQL 5.1.63 är förinstallerat med firmware 1.67 (säkert samma på äldre) men används inte till något (vad jag känner till).
För att databaserna inte ska gå förlorade är det en bra idé att lägga dom under ‘/mnt/array1’.
Börja med att kopiera konfigurationsfilen för MySQL från /usr/share/mysql:
cp /usr/share/mysql/my-small.cnf /etc/my.cnf
Lägg till ‘datadir’ och ‘pid-file’ under [mysqld] i /etc/my.cnf:
... [mysqld] port = 3306 socket = /tmp/mysql.sock pid-file = /tmp/mysql.pid datadir = /var/lib/mysql ...
Skapa uppdateringssäker lagringsplats för databaserna och länka
mkdir /mnt/array1/mysql ln -s /mnt/array1/mysql /var/lib
Skapa grupp och användare för MySQL
addgroup -S mysql adduser -S -s /bin/false -G mysql -g "MySQL Server" -h /var/lib/mysql mysql
Skapa systemdatabas i /mnt/array1/mysql och sätt rootlösenord
mysql_install_db --user=mysql --datadir=/mnt/array1/mysql /usr/share/mysql/mysql.server start /usr/bin/mysqladmin -u root password 'new-password'
Kolla att det fungerar, och länka sen in start/stoppscripten
ln -s /usr/share/mysql/mysql.server /etc/rc.d/extensions.d/S70_mysql.server ln -s /usr/share/mysql/mysql.server /etc/rc.d/extensions.d/K70_mysql.server
/etc/passwd och /etc/group oförstörda (alltid nåt, det innebär att mysql-användaren finns kvar)
Kopiera /usr/share/mysql/my-small.cnf till /etc
cp /usr/share/mysql/my-small.cnf /etc/my.cnf
Lägg in ‘datadir’ och ‘pid-file’ i /etc/my.cnf
[mysqld] port = 3306 socket = /tmp/mysql.sock pid-file = /tmp/mysql.pid datadir = /var/lib/mysql
Länka till /var/lib/mysql
ln -s /mnt/array1/mysql /var/lib
Starta:
/usr/share/mysql/mysql.server start
Länka in start/stoppscripten:
ln -s /usr/share/mysql/mysql.server /etc/rc.d/extensions.d/S70_mysql.server ln -s /usr/share/mysql/mysql.server /etc/rc.d/extensions.d/K70_mysql.server
Testad upp till firmware 1.70 (14 sepember 2018)
En del av Buffalo LS220 – BAMP – Buffalo Apache MySQL PHP
Apache httpd kommer förinstallerad på LS220. Riktigt kasst konfigurerad, och är tänkt att bara användas för webguiet. Bl.a. ligger en hel del av konfigurationen innästlad i ett <VirtualHost>-block, så aktiverar man de extra konfigurationsfilerna kommer det bli virtualhosts inne i virtualhost-blocket, vilket inte funkar särskilt bra.
HIttade en hel del i mitt grävande i filstrukturen på den när man väl följt instruktionerna för att kunna ta sig in på den via SSH
* Apache httpd (2.2) finns där för WebAccess. Konfiguration, binärfiler och innehåll ligger i en struktur under /usr/local/webaxs
* Under webaxs/bin finns en del blandade gamla binärer, bl.a en äldre version av perl
* Under webaxs/www ligger WebAccess guiet
* /var/www/webui innehåller det aktuella webbaserade admin-gränssnittet för konfiguration
* PHP 5.3.23 finns installerad, /usr/bin/php-cgi, konfiguration /etc/php.ini
* /www innehåller en hel del rester från Buffalos gamla webadmin (kanske nåt som används också, allt i helt normal Buffalo-stil)
Idén jag ville prova var att starta en PHP-hanterande webserver på port 8000. Har med vissa ful-lösningar runt Buffalos konstigheter fått igång den nu, och ser att den PHP-binär som finns där har rätt så mycket inkompilerat, bl.a stöd för curl, iconv och mysql, så den är inte helt oanvändbar.
Har stött på ett antal problem som jag gått runt:
* i Buffalos httpd.conf för WebAccess har dom lagt in konfigurationen för port 9000 där WebAccess körs direkt i httpd.conf, och dessutom på ett galet sätt – en stor del av huvudkonfigurationen har dom nästlat in i
* Alternativet att lägga in include-raden i slutet på httpd.conf fungerar – men bara tills man ändrar på nåt i konfigurationen via webadmin – för då återställs httpd.conf till den vanliga, trasiga (och det innebär att det inte är nån idé att bygga den på rätt sätt heller), och httpd för WebAccess startas om (så vhosten slutar fungera direkt)
WebAccess måste aktiveras från Buffalons startsida eller “File sharing / Web Access” på den vanliga konfigurationen (det är den del som förstör konfigurationsfilen så att även include hamnar inuti ett virtualhost-block).
Skapa /mnt/array1/web på lämpligt sätt (alltså en share med namnet “web”), och ställ delning och rättigheter som du vill ha det
Skapa ”vhost1” inne i ”web” på valfritt sätt.
Skapa ”logs” inne i ”web” på valfritt sätt (för loggfiler, vi vill inte ha dom åtkomliga för en besökare från utsidan)
Gör en minimal PHP-fil för att kunna testa att det fungerar:
/mnt/array1/web/vhost1/index.php
En minimal testfil som visar information om PHP och allt som är konfigurerat där
<?php phpinfo(); ?>
httpd-vhosts.conf
För att göra så lite fel som möjligt, så lägger jag min virtualhost, port 8000 i “httpd-vhosts.conf”
Jag sparar filen i ‘/mnt/array1/web’ för att den inte ska gå förlorad vid en uppdatering av firmware.
Listen 8000 NameVirtualHost *:8000 <VirtualHost *:8000> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/mnt/array1/web/vhost1" ServerName vhost1.example.com DirectoryIndex index.php index.html ErrorLog "/mnt/array1/web/logs/vhost1-error.log" CustomLog "/mnt/array1/web/logs/vhost1-access.log" common ScriptAlias /local-bin /usr/bin AddHandler application/x-httpd-php5 php Action application/x-httpd-php5 /local-bin/php-cgi </VirtualHost>
Ta bort skräp-httpd-vhosts.conf (default, med exempel), länka in den nya
rm /usr/local/webaxs/apache/conf/extra/httpd-vhosts.conf ln -s /mnt/array1/web/httpd-vhosts.conf /usr/local/webaxs/apache/conf/extra/
Lägg till följande rad sist i httpd.conf
Include conf/extra/httpd-vhosts.conf
echo >>/usr/local/webaxs/apache/conf/httpd.conf "Include conf/extra/httpd-vhosts.conf"
Starta om webservern
/usr/local/webaxs/apache/bin/apachectl restart
Prova om det funkar
Skriv in din NASs IP-adress i URL-rutan i webläsaren, port 8000 (:8000 på slutet)
Förbered för enklare återställning vid uppdatering:
/mnt/array1/web/link-httpd-vhost-conf.sh (chmod 700)
#!/bin/sh rm /usr/local/webaxs/apache/conf/extra/httpd-vhosts.conf ln -s /mnt/array1/web/httpd-vhosts.conf /usr/local/webaxs/apache/conf/extra/ /usr/local/webaxs/apache/bin/apachectl restart
Lägg till i /mnt/array1/buffalo_fix.sh
# check that configuration has not been reset if ! cat /usr/local/webaxs/apache/conf/httpd.conf | grep '^Include conf/extra/httpd-vhosts.conf' > /dev/null 2>&1; then echo >>/usr/local/webaxs/apache/conf/httpd.conf "Include conf/extra/httpd-vhosts.conf" fi # Restart Apache if not listening to port 8000 exec 6<>/dev/tcp/127.0.0.1/8000 2>&1>/dev/null || /usr/local/webaxs/apache/bin/apachectl restart
Scriptet kollar om det finns en rad i httpd.conf som börjar med “Include conf/extra…”. Ifall raden är borta, så läggs den dit igen och httpd startas om.
På det här sättet blir det ett avbrott på högst 5 minuter efter det att konfigurationen skrivs över..
Efter en firmware-uppdatering så förstörs en del av konfigurationen i sedvanlig Buffalo-stil.
Länka tillbaks ‘httpd-vhosts.conf’ från ‘/mnt/array1/web’ genom att köra scriptet som skapades för det:
/mnt/array1/web/link-httpd-vhost-conf.sh
Lägg tillbaks include-raden i httpd.conf
echo >>/usr/local/webaxs/apache/conf/httpd.conf "Include conf/extra/httpd-vhosts.conf"
Starta om webservern
/usr/local/webaxs/apache/bin/apachectl restart
Kolla att det fungerar.
Scriptet som är inlagt i cron-jobbet sedan tidigare ska både lägga till vhost konfiguration och starta om httpd ifall det behövs. Har du gjort enligt mina tidigare instruktioner är det enda som behöver göras efter uppdatering att länka tillbaka din httpd-vhosts.conf till ‘/usr/local/webaxs/apache/conf/extra/’.
Testad upp till firmware 1.78 (18 januari 2022)
En del av Buffalo LS220 – BAMP – Buffalo Apache MySQL PHP
Om acp_commander vägrar fungera – stäng temporärt av brandväggen på datorn som används att patcha med:
Starting authentication procedure... Sending Discover packet... A SocketTimeoutException usually indicates bad firewall settings. Check especially for *UDP* port 22936 and make sure that the connection to your LS is working. ERROR: Exception: SocketTimeoutException (Receive timed out) [ACP Send/Receive (Packet:8020 = ACP_Discover)]
Starta och ställ in lösenord för ‘admin’
Uppdatera firmware om det finns någon ny
Aktivera default-sharen “share” (‘advanced’ från startsidan, sedan ‘folder setup’, read/write och stäng av ‘folder restrictions’ att börja med)
Du behöver fungerande java installerat på datorn som patchningen ska ske från (java-kommandot i path eller inte, bara du vet var det är).
Nytt för i år är att nas-central.org är trasigt. Har du gjort det här tidigare, så kanske du har filerna nedladdade och sparade nånstans. Annars kan du ta mina sparade filer…
https://tech.webit.nu/Buffalo/
ACP_commander är det javaprogram som används för patchningen, finns att hämta på acp_commander.jar
Från datorn att patcha ifrån:
java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw Password -c "(echo newrootpass;echo newrootpass)|passwd" java -jar acp_commander.jar -t 192.168.0.10 -o -addons java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw Password -c "sed -i 's/SFTP=0/SFTP=1/g' /etc/nas_feature" java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw Password -c "sed -i 's/#PermitRootLogin/PermitRootLogin/g' /etc/sshd_config" java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw Password -c "/etc/init.d/sshd.sh restart"
Om det av någon anledning efter detta inte fungerar att logga in via SSH, kolla att du i kommandona ovan ersatt “Password” med ditt admin-lösenord, “newrootpass” med det lösenord du vill använda för root användaren och IP-adressen 192.168.0.10 med IP till din LS220.
Skulle det ändå inte fungera, ladda ner addons.tar, lägg filen i samma låda som acp_commander ligger i. Kör sedan alla kommandona på nytt.
Detta görs inloggad som ‘root’ på Buffalon. Medföljande texteditor är ‘vi’.
Eftersom Buffalons operativsystem är så trasigt som det är, så förstör den inställningarna vid omstart, eller om man ändrar i konfigurationen via web-gui, eller om man kopplar in en USB-disk eller ett USB-minne i den.
Lösningen är att köra ett script som lagar de inställningar BuffaloOS har sönder av kända och okända anledningar. Skapa files /mnt/array1/buffalo_fix.sh med följande innehåll:
#!/bin/sh root_entry='ROOT-LINE-FROM-ETC-SHADOW' # make sure root password has not changed if ! cat /etc/shadow | grep $root_entry > /dev/null 2>&1; then sed -i 's|root:.*::::::|'"$root_entry"'|' /etc/shadow fi # reset SUPPORT_SFTP if need to if ! cat /etc/nas_feature | grep SFTP=1 > /dev/null 2>&1; then sed -i 's/SFTP=0/SFTP=1/g' /etc/nas_feature fi # Restart sshd if broken (which it will be after mounting/unmounting USB, or changning anything in web admin exec 6<>/dev/tcp/127.0.0.1/22 2>&1>/dev/null || /etc/init.d/sshd.sh restart
Glöm inte att ersätta ‘ROOT-LINE-FROM-ETC-SHADOW’ med root-raden i /etc/shadow och sedan köra chmod 700 på scriptet.
Jag har grävt fram det ställe jag tyckte det passade minst dåligt att köra scriptet ifrån:
/etc/init.d/syslog_user_setup.sh som körs var 5:e minut av /etc/cron/cron.d/logrotate via cron.
Lägg in som rad 2 i /etc/init.d/syslog_user_setup.sh (alltså på den tomma raden, gör en ny tom under om du vill):
/mnt/array1/buffalo_fix.sh
Början av filen ska efter modifiering se ut så här:
#!/bin/sh /mnt/array1/buffalo_fix.sh . /etc/melco/info . /etc/nas_feature . /usr/local/lib/libsys TARGET_LOGS="linkstation.log file.smb xferlog" LOG_FOLDER_NAME="system_log" LOG_FOLDER=${syslog_user_folder}/${LOG_FOLDER_NAME}
Om du inte missat nånting nu, så ska du kunna testa att scriptet gör det det ska genom att ändra lösenord för ‘root’.
Kolla att klockan inte är för nära en jämn 5-minut först, så du får tid att testa.
Då du ändrat lösenordet, logga in som ‘root’ med det nya lösenordet i ett annat terminalfönster.
Vänta tills 5-minuten inträffat och gör ett till försök med det tidigare satta lösenordet.
Efter en uppdatering slutar inloggningen via SSH att fungera. Du kommer också förlora eventuella filer sparade i /root, så låt bli att göra det. Saker du är rädd om ska alltid läggas på lämpligt ställe (någon share) under /mnt/array1.
Från datorn att patcha ifrån:
java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw Password -c "(echo newrootpass;echo newrootpass)|passwd" java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw Password -c "sed -i 's/SFTP=0/SFTP=1/g' /etc/nas_feature" java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw Password -c "sed -i 's/#PermitRootLogin/PermitRootLogin/g' /etc/sshd_config" java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw Password -c "/etc/init.d/sshd.sh restart"
(dvs. allt behöver göras om utom raden med ‘-addons’)
Efter det här ska det gå logga in som ‘root’ för att göra ändringen i /etc/init.d/syslog_user_setup.sh
Som tidigare, lägg bara till ‘/mnt/array1/buffalo_fix.sh’ på den tomma rad 2 i filen, så ska det inte bli något längre avbrott på åtkomsten än 5 minuter.
Skulle det inte fungera att SSH:a in efter att du följt guiden, prova då köra ‘sshd.sh restart’ en gång till.
Jag har några gånger fått det här svaret från acp_commander:
Using random connID value = CEDA5122F200 Using target: BUFFALO-1/192.168.0.241 Starting authentication procedure... Sending Discover packet... Found: BUFFALO-1 (/192.168.0.241) LS220D(SANJO) (ID=004813) mac: 74:03:BD:0C:80:C7 Firmware= 1.670 Key=37BA1BC0 Trying to authenticate EnOneCmd... ACP_STATE_OK Trying to authenticate with admin password... ACP_STATE_OK A SocketTimeoutException usually indicates bad firewall settings. Check especially for *UDP* port 22936 and make sure that the connection to your LS is working. ERROR: Exception: SocketTimeoutException (Receive timed out) [ACP Send/Receive (Packet:8A10 = ACP_CMD)]
‘sshd.sh restart’ ska, om det fungerar ge ett svar liknande det här:
Using random connID value = B0EC8F0D4B6D Using target: BUFFALO-1/192.168.0.241 Starting authentication procedure... Sending Discover packet... Found: BUFFALO-1 (/192.168.0.241) LS220D(SANJO) (ID=004813) mac: 74:03:BD:0C:80:C7 Firmware= 1.670 Key=747CA520 Trying to authenticate EnOneCmd... ACP_STATE_OK Trying to authenticate with admin password... ACP_STATE_OK >/etc/init.d/sshd.sh restart load_info ItemValue = off LoadConfFileStringEx:key=[ad_dns] not found in /etc/melco/info. LoadConfFileOnOffEx:key=[info_visible] not found in /etc/melco/info. LoadConfFileOnOffEx:key=[recycle_admin] not found in /etc/melco/info. file:/etc/sftponly_config userinfo finished groupname guest groupname admin groupname hdusers file:/etc/pam.d/sshd Changeing IP: ACP_STATE_PASSWORD_ERROR Please note, that the current support for the change of the IP is currently very rudimentary. The IP has been set to the given, fixed IP, however DNS and gateway have not been set. Use the WebGUI to make appropriate settings.
Jag har vid den senaste uppdateringen av alla mina LS220 upptäct att “sshd restart” fungerar först på 3e försöket.
When taking a hard drive containing OneDrive folders out and mounting it as a secondary drive, some files in the OneDrive folders might be “online only” or to be “downloaded on demand”. On that disk, which is disconnected from the OneDrive account, all the files will be there (until disconnected) but not accessible.
The inaccessible files can be detected by the “dir” command, giving the file sizes in parentheses.
One option to clean out the mess made by disconnecting the OneDrive disk is to just delete the whole old OneDrive folder, if you are sure there’s nothing there you want to keep (you files should be stored online).
If you want to be safe, keeping all the files that are available offline in the folder, you need to get rid of the “placeholder” files in there.
This is how I did, it might or might not work for you (always be careful when deleting files).
First, I removed all files in my Pictures (automatic sync from camera) folder with a block size of zero:
stat -c "#rm%brm %n" * | sed 's/#rm0rm/rm/g' >rmscript
./rmscript
I decided it was too much work to use that method for doing all directories recursively inside the OneDrive folder, so for the rest of the online-only files I used another method.
For this, I used the “file” command which gave an error for the inaccessible files “(Invalid argument)”:
find . -type f -exec file {} >>filinfo \;
grep "(Invalid argument)" filinfo >offlinefiles
sed "s;\./;rm './;g" offlinefiles >offlinefiles2
sed "s;: ERROR: ;' #;g" offlinefiles2 >offlinefiles3
What this does is creating a list of all the files starting from the current directory. The next command filters out the lines with the error “(Invalid argument)”. As the names in the list begins with “./”, this is then replaced with “rm ./”, creating commands to remove all the files which was filtered out in the previous command.
I then replace ” ERROR” with a hashtag to tell shell to ignore the rest of the line (“#” starts a comment, if you didn’t know).
Double check the “offlinefiles3” before executing it.
Backup windows userfolders
touch backupstamp for dir in *; do ls -ld "$dir"; tar cf "/cygdrive/s/${dir}.tar" "backupstamp"; for subdir in "Pictures" "Favorites" "Documents" "Downloads" "Desktop"; do tar rf "/cygdrive/s/${dir}.tar" "${dir}/${subdir}"; done; done
How to output a multiline string in Bash?
expr and if in bash (bash compare with expr calculation) (if -lt compare)
The most of the commands below are also valid for Windows 10, since Microsoft invented Ubuntu and bash in 2016.
Mount a partition inside a disk image
Source: https://ktln2.org/2013/10/01/mount-a-partition-inside-a-disk-image/
1: Find the start of the partition you want to mount using parted:
# parted /root/amiga.hdf -s unit b print
Pralloc = 0, Reserved = 2, blocksize = 1, root block at 262176
Model: (file)
Disk /root/amiga.hdf: 268435456B
Sector size (logical/physical): 512B/512B
Partition Table: amiga
Disk Flags:
Number Start End Size File system Name Flags
1 32768B 268435455B 268402688B affs1 DH99
2: set up the loop device, and check it afterwards
# losetup --offset=32768 -f /root/amiga.hdf
# losetup --all
/dev/loop0: [2049]:1443765 (/root/amiga.hdf), offset 32768
3: Mount the partition and check that it is mounted
# mkdir -p /mnt/amiga # mount /dev/loop0 /mnt/amiga/ # df -h /mnt/amiga Filesystem Size Used Avail Use% Mounted on /dev/loop0 256M 66K 256M 1% /mnt/amiga
Mounting CD images on Linux
mount /path/to/cdimage.iso /mnt/cdmount -o loop,ro
Mounting .bin / .cue files on Linux
Is not possible, but the .bin and .cue can be converted to .iso as follows using ‘bchunk’ (Binchunker):
sudo apt-get install bchunk bchunk cdimage.bin cdimage.cue output
Compare the Contents of Two Folders with the Diff Command
https://lifehacker.com/compare-the-contents-of-two-folders-with-the-diff-comma-598872057
rsync
Can I make rsync output only the summary?
summary only in output
awk
Print Column – Change Field Separator – Linux Bash
https://www.shellhacks.com/awk-print-column-change-field-separator-linux-bash/
Remove line break
https://serverfault.com/questions/391360/remove-line-break-using-awk
grep getting confused by filenames with dashes
https://unix.stackexchange.com/questions/364922/grep-getting-confused-by-filenames-with-dashes
HEX dump a file
http://www.theunixschool.com/2011/06/3-different-ways-of-dumping-hex.html
Exclude directory using tar
https://www.linuxquestions.org/questions/linux-software-2/tar-exclude=directory-455908/
Rename files, replace spaces with underscore
https://unix.stackexchange.com/questions/405085/rename-files-to-change-spaces-to-underscore
for file in *.doc *.mp3 *.wav *.txt do mv -- "$file" "${file// /_}" done
More mass-renaming of files
If you, for example use some program to split a PDF document into single-page files, and that program does not name the files as you want, as in resultig files named as: p_Part_1.pdf, p_Part_2.pdf … p_Part_10.pdf, p_Part_11.pdf … p_Part_100.pdf, p_Part_101.pdf …
The PDFill PDF Editor (tools) does stupid naming like this (you have to supply at least one letter for the file names, and “_Part_” is appended).
Correct naming could be possible by using ‘convert’ from the imagemagick package, but when I tried, the PDFs got large and/or in low quality (converted to images and then back to PDF).
for file in *.pdf; do mv -- "$file" "${file//p_Part_/}"; done for file in ?.pdf; do mv -- $file 00$file; done for file in ??.pdf; do mv -- $file 0$file; done
The following search and replace is related to above, but can be used for other purposes:
Search and replace filenames in a text
Add leading zeroes to short numerical filenames (1.pdf = 001.pdf, 10.pdf = 010.pdf)
sed -E 's%/([0-9][0-9]).pdf%/0\1.pdf%' source.1 >source.2 sed -E 's%/([0-9]).pdf%/00\1.pdf%' source.2 >source.1
Another multi-step renaming I did
This time, I renamed the output files from Wondershare Video Converter, in this specific case the DVDs from “The Amiga Years”.
The converted files were in this case named lika:
THE_AMIGA_YEARS_D1_Title_01_02.mp4
THE_AMIGA_YEARS_D1_Title_02_01.mp4
THE_AMIGA_YEARS_D1_Title_03_01.mp4
..
THE_AMIGA_YEARS_D1_Title_03_10.mp4
and
THE_AMIGA_YEARS_D2_Title_02_01.mp4
..
THE_AMIGA_YEARS_D2_Title_02_16.mp4
I also made converted files with the subtitles, and these were named as usual with windows, appending ” (2)” at the end of the filename:
THE_AMIGA_YEARS_D1_Title_03_10 (2).mp4
First step: decide on how you want the files named
I want my file names short, keeping the disc, track and chapter numbers, later appending (manually) the title of the track, so in case for DVD1:
D1.03.02.mp4
D1.03_02 (sub).mp4
When manually adding titles, I will append ” – title”:
D1.03.02 – David Pleasance – Releasing The Amiga CD32 (sub).mp4*
D1.03.02 – David Pleasance – Releasing The Amiga CD32.mp4*
The renaming process:
Be careful when working on your files. Always use a simple echoing command first to determine what will be done.
The common part of the file names for DVD1 is “THE_AMIGA_YEARS_D1_Title_”, and according to my naming goals, that part should be replaced by “D1.”:
for file in THE_AMIGA_YEARS_D1_Title_*.mp4; do echo -- "$file" "${file//THE_AMIGA_YEARS_D1_Title_/D1.}"; done
This will shorten the file names to:
D1.03_10.mp4
D1.03_10 (2).mp4
This next renaming step will replace “(2)” with “(sub)”:
for file in D1.*\(2\).mp4; do mv -- "$file" "${file//(2)/(sub)}"; done
The last step will replace the underscore ‘_’ with ‘.’:
for file in D1.03_*.mp4; do mv -- "$file" "${file//_/.}"; done
Move finished downloads out of the downloads folder
Automatically move finished downloads of specific size (larger than) or any other criteria out to a mounted network drive with more space:
(windows steps)
Mount the share as usual and take note of the drive letter (in the example “S”)
(windows-Ubuntu shell steps)
mkdir /mnt/s mount -t drvfs S: /mnt/s
The script (edit as suitable) to move the files out of downloads (my script is in the downloads drawer, which is also the cwd):
cd /mnt/c/Users/user-name/Downloads
Find any zip-files, larger than about 20MB, not altered in 30 minutes
#!/bin/sh find . -type f -mmin +30 -name "*\.zip" -size +20000000c -exec mv {} /mnt/s/downloads/ \;
Run this whenever you want to move files, or automate it as follows:
while true; do date;./move-downloads.sh; sleep 300; done
(Scan for new files to move every 5 minutes)
Find directories containing matching files
find . -iname "*.pdf" -exec dirname {} \; | sort | uniq
Find the latest modified file(s) in a directory
https://unix.stackexchange.com/questions/240418/find-latest-files
To print the last 3 accessed files (sorted from the last accessed file to the third last accessed file):
find . -type f -exec stat -c '%X %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print $2}'
To print the last 3 modified files (sorted from the last modified file to the third last modified file):
find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print $2}'
Find files NOT matching search pattern
Simple.. use -not with the ‘find’ command:
find . -type f -not -name *html
Remove Apache-generated indexes after wget -m
wget web crawler retrieves unwanted index.html index files
find . -type f -name "index.html\?C=?;O=?" -exec rm {} \;
Use ‘grep’
Finding files which does not match search pattern (use ‘grep -L’, as inverse for ‘grep -l’)
Delete lines in a text file that contain a specific string
Mount smb share inside a user home folder
mount -t cifs -o username=theuser,uid=1001,gid=1001 //192.168.1.250/theuser /home/theuser/storage
Where “theuser” is the a) user name on the SMB/CIFS server, b) name of the SMB share, c) the user name on the Linux system it will be mounted on. These do not have to be identical. The given gid and uid is for the Linux user that the share is mounted for. Also, the “nounix” option can be used for SMB servers with buggy unix permission implementations.
Enable /etc/rc.local on Ubuntu 20.04
https://marsown.com/wordpress/how-to-enable-etc-rc-local-with-systemd-on-ubuntu-20-04/
Periodic – using it to run shell scripts
http://www.freebsddiary.org/periodic.php
4.5. Using the Ports Collection
https://www.freebsd.org/doc/handbook/ports-using.html
Ubuntu 16.04
https://www.linode.com/docs/web-servers/lamp/install-lamp-stack-on-ubuntu-16-04/
Ubuntu 18.04
https://www.linode.com/docs//web-servers/lamp/install-lamp-stack-on-ubuntu-18-04/
https://www.cloudbooklet.com/install-php-7-4-on-ubuntu/
https://hostadvice.com/how-to/configure-apache-with-tls-ssl-certificate-on-ubuntu-18/
Internet Radio Players for Linux
http://www.webupd8.org/2017/02/5-cool-internet-radio-players-for-linux.html
MOC – Music on Console
http://moc.daper.net/
Raspberry Pi Headless Internet Radio and Audio Player (updated)
https://www.raspberrypi.org/forums/viewtopic.php?t=43108
Raspberry Pi Internet Radio Tutorial (MPD + 20×4 LCD)
Curseradio
https://github.com/chronitis/curseradio