idvoretskyi
3/18/2015 - 2:20 PM

Linux Tips&tricks.sh

Linux Tips&tricks.sh

########### Benchmark

wget -O- https://freevps.us/downloads/bench.sh | bash

########### User management

# allow superuser access without password

echo "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers
OR
echo 'debian ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/debian # where debian is the username
echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/ubuntu # where ubuntu is the username
echo 'centos ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/centos # where centos is the username

==== The following settings are useful for distinguishing the root prompt from non-root users.
# Regular user
# A green prompt for regular users:
echo "PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] '" >> ~/.bashrc
# Root
# A red prompt for root:
echo "PS1='\[\e[1;31m\][\u@\h \W]\$\[\e[0m\] '" >> ~/.bashrc

########## Dropbox inotify fix

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p

########## Pastebin CLI analoque #####
http://termbin.com/

# Sample
ls -la | nc termbin.com 9999

# Sprunge

curl -F 'sprunge=<-' http://sprunge.us

########### Docker ###################
# Install docker on Linux (depends on distribution) 
curl -sSL https://get.docker.com/ | sudo bash

# Allow non-root usage of docker
sudo usermod -a -G docker $USER
sudo usermod -aG docker ubuntu # e.g. with 'ubuntu' user

# Return IP address of container

docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}

# Return IP addresses of all containers

docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)

########### AWK #####################

# Print the first statement on first line of file:
cat file | awk 'NR==1{print $1}'

# Print the assigned IP addresses on network interface:
arp -n | grep eth0 | awk '{print $1}'

# Print all columns:
awk '{print $0}' file

# Print the 3rd column:
awk '{print $3}' file

# Print the 1st and the 3rd columns:
awk '{print $1 $3}' file

# Print all other columns but not the 3rd one:
awk '{$3=""; print $0}' file

# Print all other columns but not the 1st and the 2nd:
awk '{$1=$2=""; print $0}' file

########### Find #####################
# Find and change permissionsusermod -a -G docker `whoami`
# for directories
find . -type d -exec chmod 755 {} +
# for files
find . -type f -exec chmod 644 {} +
# ssh directory sample
find $HOME/.ssh/ -type f -exec chmod 600 {} +
# Find and change ownership of a directory
sudo find . -type d -user root -exec chown idv:idv {} \;
# Find and sort 10 biggest files
du -hsx * | sort -rh | head -10

########### Sed ######################

# GRUB to disable boot animation
sed -i 's/quiet splash//' /etc/default/grub && update-grub
# Locale correction
sed -i 's/uk_UA.UTF-8/en_US.UTF-8/' /etc/default/locale
# Replace hostname in /etc/hosts
sed -i "s/ubuntu1404/$(hostname)/" /etc/hosts

# text replace in some files

grep -rl "windows" . | xargs sed -i "s/windows/linux/g"

# find and replace smth in some files
find /path -type f -exec sed 's/example.com/superexample.com/g' {} +

more: https://rtcamp.com/tutorials/linux/search-replace-text-multiple-files/

########## ifconfig.me #############

# My external IP
curl ifconfig.co

# All
curl ifconfig.co/all

############# cat EOF #################

1. Passing multiline string to a variable:

$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)

The $sql variable now holds newlines as well, you can check it with echo -e "$sql" cmd.

2. Passing multiline string to a file:

$ cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF

The print.sh file now contains:

#!/bin/bash
echo $PWD
echo /home/user

3. Passing multiline string to a command/pipe:

$ cat <<EOF | grep 'b' | tee b.txt | grep 'r'
foo
bar
baz
EOF

This creates b.txt file with both bar and baz lines but prints only the bar.


######## SSH | ssh-add ###############

# error could not open a connection to your authentication

eval `ssh-agent`; echo $SSH_AUTH_SOCK

# A local port forward can be established from the CLI with the following syntax:
ssh -L <local_port>:<destination_server>:<destination_port> user@<ssh_server> -p <ssh_port>

# For instance, if your router's WAN IP address is 12.23.34.35, its remote administration SSH port is 9999 and its LAN-accessible 
# web interface is at port 80:
ssh -L 12345:localhost:80 root@12.23.34.45 -p 9999



######### Bash loop sample #############

for i in {1..10}; do command; done

for i in {18,20.21}; do sleep 10 && ssh node-$i "tar zcvf - /var/log/ceilometer | cat > /tmp/ceilometer-node$i.tar.gz"; done
for i in {18,20,21}; do scp node-$i:/tmp/ceilometer-node$i.tar.gz . ; done

######### Download a TAR archive and extract it in one-command

wget http://example.com/archive.tar -O - | tar -x
wget http://example.com/archive.tar.gz -O - | tar -xz
wget http://example.com/archive.tar.bz2 -O - | tar -xj

curl http://example.com/archive.tar | tar -x
curl http://example.com/archive.tar.gz | tar -xz
curl http://example.com/archive.tar.bz2 | tar -xj

###
# install pathogen plugins
while read plugin; do git clone https://github.com/$plugin; done < plugins