Welcome to my personal copy/paste crib sheet for everything I use on Linux. I am far from a guru and it is not my full time job, so sometimes I can’t remember the command and its switches exactly. This is primarily CentOS 6.x. Your mileage may vary.
See anything I should add? Comment below!
Add user and add them to sudoers CentOS as root
adduser username
passwd username
usermod -aG wheel username (case matters)
Full time sudo (you will need to enter the PW again). Why this is isn’t used more often is a mystery.
sudo -i
OS Version (centOS)
cat /etc/centos-release
Get a file (to current dir)
wget http://www.somesite.com/image.jpg wget http://www.someothersite.com/zipfile.zip
TAR a directory
tar -zcvf [/dir]/[filename].tar.gz [/dir]/[folder-name]
Exclude directory/ies example
tar -zcvf name-of-tar.tar.gz /var/www/dir1 --exclude=/var/www/html/dir1/subdir1 --exclude=/var/www/html/dir1/subdir2 --exclude='*.log' etc.
- z: compresses the files and directories using gzip
- c: creates a new archive file
- v: verbosely lists the files and directories processed
- f: allows us to specify a filename for the archive created
- No end slash for directories
- exclude: excludes folder/s or file/s when creating the archive
- exclude alternative: –exclude={“file1.txt”, “file2.txt”}
- exclude-backups: excludes all backup and lock files
- exclude-caches: excludes all directories with a CACHEDIR.TAG, except for the tag itself
- exclude-vcs: excludes all version control system files
- exclude-vcs-ignores: excludes files that match patterns of specific ignore files from version control systems. For example, files, directories, and file extensions listed in a .gitignore file will be skipped, plus the .gitignore file itself
View what’s in the tar
tar -tf backup.tar.gz
Extract to a directory
tar -zxvf [/dir]/[filename].tar.gz -C [/dir]
tar: Exiting with failure status due to previous errors
- Common problem: tar -zxvf. Note the f which takes the next string as the name of file. If you do tar -zxfv it will try to name the file “v”.
Unzip (ubuntu)
sudo apt-get install unzip unzip file.zip -d destination_folder
Copy directory
cp -ar [/origin-dir] [/destination-dir] (add -p to preserve dates/auth on files/folders) cp -apr [/origin-dir/] [/destination-dir/]
Remove directory and files, no prompt
rm -rf mydir delete the folder, then recreate it rm -rf dir_name && mkdir dir_name
Move a file/dir
mv -i [/dir/][file] [/dir/][file] mv -i [file] [file-newname] mv -f [file] [file-newname] No confirmation prompt
Files (like DIR in Windows)
ls -lh [basic DIR command] add -p to add a / to the end of directories - very useful ls -lh -p SORT: ls --sort=extension ls --sort=size ls --sort=time ls --sort=version ls --sort=none [default] ls -lth | head -5 (find 5 latest files in dir, replace head with tail to see earliest) or ll FIND SYMBLOC LINKS find . -type l -ls Folder sizes and numbered permissions instead of letters, e.g. 755 not drwxrwx-x du -sh /folder-name/ (single folder) du -h /folder-name/ | sort -rh | head -5 (subfolders) stat -c '%A %a %n' folder-name/ FIND STRING in Files grep -rnw '/path/to/somewhere/' -e 'pattern' -r or -R = recursive -n = display line number -w = match whole word -e = use pattern -l (lower-case L) display just filename instead of pattern Also: --exclude, --include, --exclude-dir or --include-dir Example: grep --exclude *.php will exclude files ending in .php grep --exclude *.{php,doc} will exclude files ending in .php and .doc
Cron (CentOS)
crontab -e less /etc/crontab ls -la /etc/cron* less /etc/cron.daily/filename
Viewing log content (adjust to your needs)
cat access.log | awk '{if ($4 ~ /2017:14/) print $1 }' | sort | uniq -c | sort -nr | head -20
See HDD size, space, and partitions
df -h du -sh [folder] shows disk usage of that folder
Total HDD size
fdisk -l | grep Disk
View services, Service Stop/Start service, etc, e.g. Apache
chkconfig --list service --status-all or chkconfig --list service [name] start/restart/stop service httpd restart service [service] status service httpd status service --status all
Versions of stuff
php -v php -i [verbose output]
Ouput into a text file example (can be use for many commands)
php -i > [filename].txt echo "<?php phpinfo(); ?>" | php > phpinfo.txt
Reboot immediately (kill everything)
shutdown -r now shutdown -h now (shut down the machine and turn it off - DANGEROUS!)
Basic system info
free [RAM info] free -g [Shows in GB] top top -u [username] top -u apache [not the service name: httpd]
More RAM/Memory commands/tools
Install htop, a better top yum -y install htop free -m vmstat cat /proc/meminfo
Network
ifconfig -a ifconfig eth0 [up][down] start/stop an interface - remember: you could kill your SSH connection
Get your external IP address from command line
dig +short myip.opendns.com @resolver1.opendns.com
Viewing large file contents
less [filename] once viewing the file: CTRL+F – forward one window CTRL+B – backward one window
Connect to MySQL
mysql -u root -p -h [IP address if remote]
Dump & Restore MySQL DBs
mysqldump –all-databases > [dbname].sql mysqldump [dbname] > [dbname].sql Restore: mysql -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]
Dump all DBS
Use bash for loop script to loop over all the dbs. Don’t forget the -p needs to be immediately followed by the password – no space. Also, this means you’re going to add your pw to your bash history. You can just put in “-p” but you will then have to enter the password each time mysqldump gets to each db. Make sure the below is a single line when pasting it.
#for DB in $(mysql -u [user] -p[password] -e 'show databases' -s --skip-column-names); do mysqldump -u [user] -p[password] $DB > "$ DB.sql";done
Handy MySQL command list
http://g2pc1.bu.edu/~qzpeng/manual/MySQL%20Commands.htm
MySQLDump no create database
You were looking for this because you forgot to remove the create db statement and overwrote a live db, didn’t you? We’ve all been there.
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_no-create-db
mysqldump --no-create-db [soucedb] > [backupfile].sql or mysqldump --n [soucedb] > [backupfile].sql check your work: head -20 [dumpdb].sql (you might need to increase the number of lines)
Finding files with certain permissions (in this case 0777)
find / -name [filename] -or- find /-name *php* (wildcard) find / -type f -perm 0777 [f=files] find / -type d -perm 0777 [d=directories] find /var/www/html -type f -perm 0777 > find777files.txt [make a txt file with file list] find /var/www/html -type d -perm 0777 > find777dirs.txt [make a txt file with dir list]
Update permissions with find
[For Dirs] find /[path]/ -type d -exec chmod 755 {} \; [For Files] find /[path]/ -type f -exec chmod 644 {} \;
Yum
yum history [outputs list of updates with IDs] yum history undo 8 [this will undo ID 8's updates] yum -x 'kernel*' update (excludes doing a kernel update)
head
View top n lines of a file. Change “-10” to “-15” or however many lines you want to read
head -10 bar.txt WINDOWS: cmd > more +10 bar.txt (then use Enter for line by line, space bar page by page) CTRL-C to exit
View end of log with tail
tail [logfile] tail -f [logfile] (view the logfile in real time. ctrl+c to exit)
Create symlink file/folder
ln -s source_file myfile
Folder:
ln -s <source folder no end slash> <folder to add symlink folder to no end slash>
Here’s what the directory looks like:
/var/more-images
/var/www/images
ln -s /var/more-images /var/www/images
In the example above, “more-images” will be added as a symlink to /www/images, so it will become /var/www/images/more-images
Apache Vhosts (view configured vhosts and their files)
CentOS/RHEL
httpd -S apachectl -S
Ubuntu/Debian/Mint/etc
apache2 -S apache2ctl -S
Users
adduser username passwd username usermod -aG wheel username
Require password change on logon:
chage -d 0 username
SCP
Transfer Directory Local to Remote Server
scp -r /opt/mydir [email protected]:/opt/
Transfer Directory Remote Server to Local
scp -r [email protected]:/opt/mydir /opt/
Permissions management
List users
cat /etc/passwd
Show numerical permissions instead of letters
stat -c '%a - %n' *
Or make an alias.
alias perms="stat -c '%a - %n'"
Example: perms * will show everything in that folder
List php modules
php -m
php -m > phpmodules.txt
php -m | grep -i reflection