Setting automatic random password for wifi - random

I am trying to set up on my office "guest" wifi, something that gives me everyday a new password. I am doing it on a raspberry Pi.
i've come so far as to set up SED to do it manually :
" sudo sed -i 's/wpa_passphrase=.* /wpa_passphrase=test_new_wifi/' /etc/hostapd/hostapd.conf "
and i found this other command here to do randomly generates passwords :
" < /dev/urandom tr -dc a-z0-9 | head -c6 "
the big question is, is there a away i can put both together so later on i'll be able to set up cronjob, so i will generate a new password every day. ????
Sorry guys, i am still a noob in "the" area :D

PASSWD=$(tr -dc a-z0-9 < /dev/urandom | head -c6)
sudo sed -i "s/wpa_passphrase=.* /wpa_passphrase=$PASSWD/" /etc/hostapd/hostapd.conf

Related

Grep title of a page which is written with spaces [duplicate]

This question already has answers here:
Parsing XML using unix terminal
(9 answers)
Closed last month.
I am trying to get the meta title of some website...
some people write title like
`<title>AllHeart Web INC, IT Services Digital Solutions Technology
</title>
`
`<title>AllHeart Web INC, IT Services Digital Solutions Technology</title>`
`<title>
AllHeart Web INC, IT Services Digital Solutions Technology
</title>`
some like more ways... my current focus on above 3 ways...
I wrote a simple code, it only capture 2nd way of title written, but i am not sure how can I grep the other ways,
`curl -s https://allheartweb.com/ | grep -o '<title>.*</title>'`
I also made a code (very bad i guess)
where i can grep number of line like
`
% curl -s https://allheartweb.com/ | grep -n '<title>'
7:<title>AllHeart Web INC, IT Services Digital Solutions Technology
% curl -s https://allheartweb.com/ | grep -n '</title>'
8:</title>
`
and store it and run loop to get title item... which i guess a bad idea...
any help I can get all possible of getting title?
Try this:
curl -s https://allheartweb.com/ | tr -d '\n' | grep -m 1 -oP '(?<=<title>).+?(?=</title>)'
You can remove newlines from HTML via tr because they have no meaning in the title. The next step returns the first match of the shortest string enclosed in <title> </title>.
This is quite a simple approach of course. xmllint would be better but that's not available to all platforms by default.
'grep' is not a very good tool to match multiple lines. It is processing line-by-line. You could hack that by making your incoming text one line like
curl -s https://allheartweb.com/ | xargs | grep -o -E "<title>.*</title>"
This is probably what you want.
Try this sed:
curl -s https://allheartweb.com/ | sed -n "{/<title>/,/<\/title>/p}"

How to delete a connection by type with nmcli?

I want to have a bash script that can delete all my network manager connections of type gsm with nmcli.
What is the best approach for this?
This is actually a trickier question than it seems on the surface, because NetworkManager allows for connection names with spaces in them. This makes programmatic parsing of the output of nmcli connection show for connection names a bit awkward. I think the best option for scripting would be to rely on the UUID, since it seems to consistently be a 36 character group of hexidecimal characters and dashes. This means we can pull it consistently with a regular expression. So for example you could get a list of the UUIDs for gsm connections with the following:
$ nmcli connection show | grep gsm | grep -E -o '[0-9a-f\-]{36}'
cc823da6-d4e1-4757-a37a-aaaaaaaaa
etc
So you could grab the UUIDs and then delete based on the UUID:
GSM_UUIDS=$(nmcli connection show | grep gsm | grep -E -o '[0-9a-f\-]{36}')
while IFS= read -r UUID; do echo nmcli connection delete $UUID; done <<< "$GSM_UUIDS"
Run with the echo to make sure you're getting the result you expect, then you can remove it and you should be in business. I ran locally with some dummy GSM connections and it seemed to work they way you would want it to:
GSM_UUIDS=$(nmcli connection show | grep gsm | grep -E -o '[0-9a-f\-]{36}')
while IFS= read -r UUID; do nmcli connection delete $UUID; done <<< "$GSM_UUIDS"
Connection 'gsm' (cd311376-d7ab-4891-ba73-e4e8a3fc6614) successfully deleted.
Connection 'gsm-1' (54171181-5c37-4224-baf5-9eb36458f773) successfully deleted.
nmcli con del $(nmcli -t -f UUID,TYPE con | awk -F":" '{if ($2 == "gsm") print $1}')

Magic Mouse Battery Status in MenuBar

I'm new to mac and everything around, I just want to know if I can code a sort of plug-in to show the batterie of the magic mouse, in the menu bar.
What is the type of template i have to choose in Xcode to realize my idea.
So this answer is more a shell-first answer, but you can execute shell commands in ObjectiveC/Swift too.
You can get the percentage of your bluetooth devices pretty easy with this shell command:
ioreg -l | grep BatteryPercent
With a little bit of regex you should be able to get the number:
Regex 1: https://regexr.com/3ouu3
Regex 2: https://regexr.com/3ouu6
Or as a complete shell solution:
ioreg -c BNBMouseDevice |grep '"BatteryPercent" =' | tr -dc '0-9'
And the same for the Magic Keyboard:
ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" =' | tr -dc '0-9'
So know I have differents informations I would like to know to insert the BatteryPercent from the IORegistery explorator in my code ;)
I have the Bundle Identifier from IORegistery :com.apple.driver.AppleBluetoothMultitouch

Get Macbook screen size from terminal/bash

Does anyone know of any possible way to determine or glean this information from the terminal (in order to use in a bash shell script)?
On my Macbook Air, via the GUI I can go to "About this mac" > "Displays" and it tells me:
Built-in Display, 13-inch (1440 x 900)
I can get the screen resolution from the system_profiler command, but not the "13-inch" bit.
I've also tried with ioreg without success. Calculating the screen size from the resolution is not accurate, as this can be changed by the user.
Has anyone managed to achieve this?
I think you could only get the display model-name which holds a reference to the size:
ioreg -lw0 | grep "IODisplayEDID" | sed "/[^<]*</s///" | xxd -p -r | strings -6 | grep '^LSN\|^LP'
will output something like:
LP154WT1-SJE1
which depends on the display manufacturer. But as you can see the first three numbers in this model name string imply the display-size: 154 == 15.4''
EDIT
Found a neat solution but it requires an internet connection:
curl -s http://support-sp.apple.com/sp/product?cc=`system_profiler SPHardwareDataType | awk '/Serial/ {print $4}' | cut -c 9-` |
sed 's|.*<configCode>\(.*\)</configCode>.*|\1|'
hope that helps
The next script:
model=$(system_profiler SPHardwareDataType | \
/usr/bin/perl -MLWP::Simple -MXML::Simple -lane '$c=substr($F[3],8)if/Serial/}{
print XMLin(get(q{http://support-sp.apple.com/sp/product?cc=}.$c))->{configCode}')
echo "$model"
will print for example:
MacBook Pro (13-inch, Mid 2010)
Or the same without perl but more command forking:
model=$(curl -s http://support-sp.apple.com/sp/product?cc=$(system_profiler SPHardwareDataType | sed -n '/Serial/s/.*: \(........\)\(.*\)$/\2/p')|sed 's:.*<configCode>\(.*\)</configCode>.*:\1:')
echo "$model"
It is fetched online from apple site by serial number, so you need internet connection.
I've found that there seem to be several different Apple URLs for checking this info. Some of them seem to work for some serial numbers, and others for other machines.
e.g:
https://selfsolve.apple.com/wcResults.do?sn=$Serial&Continue=Continue&num=0
https://selfsolve.apple.com/RegisterProduct.do?productRegister=Y&country=USA&id=$Serial
http://support-sp.apple.com/sp/product?cc=$serial (last 4 digits)
https://selfsolve.apple.com/agreementWarrantyDynamic.do
However, the first two URLs are the ones that seem to work for me. Maybe it's because the machines I'm looking up are in the UK and not the US, or maybe it's due to their age?
Anyway, due to not having much luck with curl on the command line (The Apple sites redirect, sometimes several times to alternative URLs, and the -L option doesn't seem to help), my solution was to bosh together a (rather messy) PHP script that uses PHP cURL to check the serials against both URLs, and then does some regex trickery to report the info I need.
Once on my web server, I can now curl it from the terminal command line and it's bringing back decent results 100% of the time.
I'm a PHP novice so I won't embarrass myself by posting the script up in it's current state, but if anyone's interested I'd be happy to tidy it up and share it on here (though admittedly it's a rather long winded solution to what should be a very simple query).
This info really should be simply made available in system_profiler. As it's available through System Information.app, I can't see a reason why not.
Hi there for my bash script , under GNU/Linux : I make the follow to save
# Resolution Fix
echo `xrandr --current | grep current | awk '{print $8}'` >> /tmp/width
echo `xrandr --current | grep current | awk '{print $10}'` >> /tmp/height
cat /tmp/height | sed -i 's/,//g' /tmp/height
WIDTH=$(cat /tmp/width)
HEIGHT=$(cat /tmp/height)
rm /tmp/width /tmp/height
echo "$WIDTH"'x'"$HEIGHT" >> /tmp/Resolution
Resolution=$(cat /tmp/Resolution)
rm /tmp/Resolution
# Resolution Fix
and the follow in the same script for restore after exit from some app / game
in some S.O
This its execute command directly
ResolutionRestore=$(xrandr -s $Resolution)
But if dont execute call the variable with this to execute the varible content
$($ResolutionRestore)
And the another way you can try its with the follow for example
RESOLUTION=$(xdpyinfo | grep -i dimensions: | sed 's/[^0-9]*pixels.*(.*).*//' | sed 's/[^0-9x]*//')
VRES=$(echo $RESOLUTION | sed 's/.*x//')
HRES=$(echo $RESOLUTION | sed 's/x.*//')

Update my.cnf auto_increment_offset with last character of hostname

I need to take the hostname of the machine and grab the last character. In this example the hostname is: web-01
I want to get the "1" from the hostname. This command will also be used on web-02, etc.
I have this working pretty well with:
hostname | awk '{print substr($0,length,1)}'
After I get that number I need to update a file. In this case I need to update the following line:
auto_increment_offset = 0
And it should become:
auto_increment_offset = <the last character of the hostname>
I was attempting to do this portion with:
sed -i "/^auto_increment_offset/s/0/$1/" /etc/mysql/conf.d/my.cnf;
Full command I am attempting to run:
hostname | awk '{print substr($0,length,1)}' | sed -i "/^auto_increment_offset/s/0/$1/" /etc/mysql/conf.d/my.cnf
For some reason it isn't working and I need to step-out for a bit, so I figured I would ask for help. That's it. Please inform me that I am an idiot and assist me in making this work. Thanks for your help.
Simplified your command a bit, this one works for me:
sed "/^auto_increment_offset/s/=.*/= ${HOSTNAME#${HOSTNAME%?}}/" /etc/mysql/conf.d/my.cnf;
This may be what you're looking for... I just took what you wrote, and wrote some sed inside sed. I often use this sort of trick to work around similar problems - even if it's not very succinct. Otherwise gergoerdosi's answer is nicer imo.
hostname | awk '{print substr($0,length,1)}' | sed -e "s%\(.*\)%sed -i \"/^auto_increment_offset/s/0/\1/\" /etc/mysql/conf.d/my.cnf %" | sh

Resources