Ubuntu File System Commands
Jump to navigation
Jump to search
Xargs
Read a file.txt and create a directory for each line of the file file.txt contents = (each on a separate line) apple oranges pear cat file.txt | sort | uniq | xargs -I {} mkdir -p /var/www/fruits/{} find dir/ -type f -print0 | xargs -0 chmod 755 (print0 is used to make sure the null character will separate them and the -0 make sure xargs uses that null charcter find . -name "*fruit.txt" -print0 | xargs -0 -I {} cp {} /folder/{}.backup Find files in the current directory with fruit in the filename "{}"" is the place holder for the filename. Copy the {} to the specified folder find . -name "*fruit.txt" -depth 1 -print0 | xargs -0 -I {} rm find . -name "*invoice*" -print0 | xargs -0 grep -li 'outwater' | xargs -I {} cp {} /dir/{} Find all files with the word invoice then send it to grep to search in the files for the text outwater then copy those files to the dir
Diff Command
diff -y originalfile.txt revisedfile.txt
Cut Command, Can extract contiguious text from a file. eg charcters 2 - 10 of every line
cut -c 2-10 textfile.txt Will extract characters 2 through 10 on each line cut -c 2-10,30-35 filename.txt will extract 2-10 and 30-35 cut -f 2,6 -d "," filename.csv -f along with the -d option wil allow you to add a delimiter
TR (translate Function)
replace the , in a text file with a ; then pipe it back to the file tr ',' ';' < somefile.csv > somefile.csv
Standard Input and Standard Output
Send Sorted file to new file sort somefile.txt > newfilename.txt To Append use >> insted of > Supressing Output ls -la > /dev/null
How To Change Multiple File Extensions From The Terminal
1. Open a new terminal and create the following directory in you desktop. cd /home/oltjano/Desktop mkdir unixmen_tutorial 2. cd to unixmen_tutorial and create the following files. a.txt b.txt c.txt 3. Ok guys it is time for some action. Run the following piece of code in the terminal and see what happens. for i in *.txt; do echo $i; done 4. The following screenshot shows the result that you should get in your terminal. So what we are trying to do here is running a for loop and printing every filename with the .txt in the current directory. Ok, now run the following commands. It is used to strip the extension from a file. a=a.txt echo ${a/.txt} 5. Do you see the following result? 6. Ok, now run the following piece of code in your terminal. Have the file extensions changed? for i in *.txt; do mv "$i" "${i/.txt}".jpg; done
Wget Command
Download a single file $ wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz Download and store it with a different name. $ wget -O taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701 Download in the Background Using wget -b For a huge download, put the download in background using wget option -b as shown below. $ wget -b http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2 Mask User Agent and Display wget like Browser Using wget –user-agent Some websites can disallow you to download its page by identifying that the user agent is not a browser. So you can mask the user agent by using –user-agent options and show wget like a browser as shown below. wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" URL-TO-DOWNLOAD Download Multiple Files / URLs Using Wget -i First, store all the download files or URLs in a text file as: $ cat > download-file-list.txt URL1 URL2 URL3 URL4 Next, give the download-file-list.txt as argument to wget using -i option as shown below. $ wget -i download-file-list.txt Download a Full Website Using wget –mirror Following is the command line which you want to execute when you want to download a full website and made available for local viewing. $ wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL –mirror : turn on options suitable for mirroring. -p : download all files that are necessary to properly display a given HTML page. –convert-links : after the download, convert the links in document for local viewing. -P ./LOCAL-DIR : save all the files and directories to the specified directory. Reject Certain File Types while Downloading Using wget –reject You have found a website which is useful, but don’t want to download the images you can specify the following. $ wget --reject=gif WEBSITE-TO-BE-DOWNLOADED Download Only Certain File Types Using wget -r -A You can use this under following situations: Download all images from a website Download all videos from a website Download all PDF files from a website $ wget -r -A.pdf http://url-to-webpage-with-pdfs/ FTP Download With wget You can use wget to perform FTP download as shown below. Anonymous FTP download using Wget $ wget ftp-url FTP download using wget with username and password authentication. $ wget --ftp-user=USERNAME --ftp-password=PASSWORD DOWNLOAD-URL
Xargs Linux Command
Copy all images to external hard-drive # ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory Search all jpg images in the system and archive it. # find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz Download all the URLs mentioned in the url-list.txt file # cat url-list.txt | xargs wget –c
Move Multiple folders to another directory
mv -v /home/user1/Desktop/folder1/* /var/tmp/ This will move the contents of folder1 to tmp folde
Using Grep and find to search through eml files
Using Grep and Find to search through .eml files for a specific phrase go to the dir in question find . -exec grep -ils 'text to find' /dev/null {} \; | xargs -I {} cp -p {} /Users/homedir/Desktop/ above will find the files and copy them to specified folder find . -exec grep -ils 'text to find\|more text to find\|even more text' /dev/null {} \; | xargs -I {} cp -p {} /Users/homedir/Desktop/ Above will find multiple search strings find . -type f -name ".DS_Store" -exec rm -f {} \; Above will find Ds filese in current dir and subdir and delete them find . -exec grep -ls 'text to find' /dev/null {} \; find . -exec grep -H 'text to look for {} \; find . -exec grep -n 'text to look for' /dev/null {} \; find . -exec grep -n 'yuly' /dev/null {} \; -print >> /Volumes/RAIDset1/1share/text.txt list files that contain the name "out" ls -la | grep out Find files in a dir with a string. the -i is case insensitive -w is exact word find dirname | grep -i string
SED find and replace
sed -i (inplace) s (subsitute) /find/replace/ g (global). You can replce the / with any other delimiter eg | or :. eg. if you want to find text "/mac" then you would use : as the delimiter sed -i 's:/mac:mac:g' Find and Replace Multiple (add the -e switch sed -e 's/find/replace/g' -e 's/find/replace/g' Let us start off simple: Imagine you have a large file ( txt, php, html, anything ) and you want to replace all the words "ugly" with "beautiful" This is the command: CODE sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txt "sed" edits "-i in place ( on the spot ) and replaces the word "ugly with "beautiful" in the file "/home/bruno/old-friends/sue.txt" Imagine you have a whole lot of files in a directory and you want the same command to do all those files in one go Remember the find command ? We will combine the two: CODE $ find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} \; Sure in combination with the find command you can do all kind of nice tricks, even if you don't remember where the files are located ! Aditionally I did find a little script on the net for if you often have to find and replace multiple files at once: CODE #!/bin/bash for fl in *.php; do mv $fl $fl.old sed 's/FINDSTRING/REPLACESTRING/g' $fl.old > $fl rm -f $fl.old done just replace the "*.php", "FINDSTRING" and "REPLACESTRING" make it executable and you are set. I changed a www address in 183 .html files in one go with this little script . . . but note that you have to use "escape-signs" ( \ ) if there are slashes in the text you want to replace, so as an example: 's/www.search.yahoo.com\/images/www.google.com\/linux/g' to change www.search.yahoo.com/images to www.google.com/linux For the lovers of perl I also found this one: CODE # perl -e "s/old_string/new_string/g;" -pi.save $(find DirectoryName -type f)
Creating ISO File from a folder
If you want to make an iso file from a directory containing other files and sub-directories via the terminal, you can use the following command: mkisofs -o image.iso -R /path/to/folder/ If you wish to backup the home folder, use this command: mkisofs -o image.iso -R $HOME
Mount ftp server as local drive
1. Installation First install curlftpfs package. On Debian or Ubuntu it would simple as: apt-get install curlftpfs 2. Mount ftp directory What needs to be done next is to create a mount point: # mkdir /mnt/my_ftp next use curlftpfs to mount your remote ftp site. Suppose my access credentials are as follows: username: ftp-user password: ftp-pass host/IP: my-ftp-location.local the actual curlftpfs mount command would be: # curlftpfs ftp-user:ftp-pass@my-ftp-location.local /mnt/my_ftp/ Caution: ftp uses unencrypted passwords so anyone can intercept your password without much effort. Therefore use curlftpfs in combination with SSL certificates if your are not mounting some local LAN ftp server. On Debian you can mount ftp using curlftpfs as a root and this allows only root user to access ftp mount. No other users are allowed since by default only users that mounts has and access to mount directory. When mounting ftp as a non-root user you may get a following error message: fuse: failed to open /dev/fuse: Permission denied Rather that changing permissions of /dev/fuse you can allow other users to access ftp mount directory with an curlftpfs's option allow_other. The command will look similar to the one below: # curlftpfs -o allow_other ftp-user:ftp-pass@my-ftp-location.local /mnt/my_ftp/ 3. Mount ftp with curlftpfs using /etc/fstab Since we do not want put any passwords to /etc/fstab file we will first create a /root/.netrc file with a ftp username and password using this format: machine my-ftp-location.local login ftp-user password ftp-pass Now change permissions of this file to 600: # chmod 600 /root/.netrc Check uid and gid of your non-root user. This user will have a access to ftp mount directory: $ id In the next step add a following line to your /etc/fstab file ( change credentials for your ftp user ): curlftpfs#my-ftp-location.local /mnt/my_ftp fuse allow_other,uid=1000,gid=1000,umask=0022 0 0 Now mount ftp with: mount -a
Creating Aliases
2 . You can add more that one commands on a line in terminal if you follow it with a ; (semi-colan) eg cd etc; ls; cd / will change to the etc dir ls the dir and then cd to root. 3. Create a Temorary Alias your cammands. alias foo='cd /etc; ls; cd /' this will create an alias with the name foo. you can execute foo which will run the command. - to remove the command: unalias foo - display commands in an alias: type foo After shell is closed alias is gone 4. Permanent alias: edit the .bashrc file - nano .bashrc add your alias to this file. eg. alias foo='echo hello world' save and close file, then issue command source .bashrc // this will reload the changes in the .bashrc file For Mac the the .bashrc file is in the Home dir ~ and it's called .bash_profile
Find Command
Part I – Basic Find Commands for Finding Files with Names 1. Find Files Using Name in Current Directory Find all the files whose name is tecmint.txt in a current working directory. # find . -name tecmint.txt ./tecmint.txt 2. Find Files Under Home Directory Find all the files under /home directory with name tecmint.txt. # find /home -name tecmint.txt /home/tecmint.txt 3. Find Files Using Name and Ignoring Case Find all the files whose name is tecmint.txt and contains both capital and small letters in /homedirectory. # find /home -iname tecmint.txt ./tecmint.txt ./Tecmint.txt 4. Find Directories Using Name Find all directories whose name is Tecmint in / directory. # find / -type d -name Tecmint /Tecmint 5. Find PHP Files Using Name Find all php files whose name is tecmint.php in a current working directory. # find . -type f -name tecmint.php ./tecmint.php 6. Find all PHP Files in Directory Find all php files in a directory. # find . -type f -name "*.php" ./tecmint.php ./login.php ./index.php Part II – Find Files Based on their Permissions 7. Find Files With 777 Permissions Find all the files whose permissions are 777. # find . -type f -perm 0777 -print 8. Find Files Without 777 Permissions Find all the files without permission 777. # find / -type f ! -perm 777 9. Find SGID Files with 644 Permissions Find all the SGID bit files whose permissions set to 644. # find / -perm 2644 10. Find Sticky Bit Files with 551 Permissions Find all the Sticky Bit set files whose permission are 551. # find / -perm 1551 11. Find SUID Files Find all SUID set files. # find / -perm /u=s 12. Find SGID Files Find all SGID set files. # find / -perm /g+s 13. Find Read Only Files Find all Read Only files. # find / -perm /u=r 14. Find Executable Files Find all Executable files. # find / -perm /a=x 15. Find Files with 777 Permissions and Chmod to 644 Find all 777 permission files and use chmod command to set permissions to 644. # find / -type f -perm 0777 -print -exec chmod 644 {} \; 16. Find Directories with 777 Permissions and Chmod to 755 Find all 777 permission directories and use chmod command to set permissions to 755. # find / -type d -perm 777 -print -exec chmod 755 {} \; 17. Find and remove single File To find a single file called tecmint.txt and remove it. # find . -type f -name "tecmint.txt" -exec rm -f {} \; 18. Find and remove Multiple File To find and remove multiple files such as .mp3 or .txt, then use. # find . -type f -name "*.txt" -exec rm -f {} \; OR # find . -type f -name "*.mp3" -exec rm -f {} \; 19. Find all Empty Files To file all empty files under certain path. # find /tmp -type f -empty 20. Find all Empty Directories To file all empty directories under certain path. # find /tmp -type d -empty 21. File all Hidden Files To find all hidden files, use below command. # find /tmp -type f -name ".*" Part III – Search Files Based On Owners and Groups 22. Find Single File Based on User To find all or single file called tecmint.txt under /root directory of owner root. # find / -user root -name tecmint.txt 23. Find all Files Based on User To find all files that belongs to user Tecmint under /home directory. # find /home -user tecmint 24. Find all Files Based on Group To find all files that belongs to group Developer under /home directory. # find /home -group developer 25. Find Particular Files of User To find all .txt files of user Tecmint under /home directory. # find /home -user tecmint -iname "*.txt" Part IV – Find Files and Directories Based on Date and Time 26. Find Last 50 Days Modified Files To find all the files which are modified 50 days back. # find / -mtime 50 27. Find Last 50 Days Accessed Files To find all the files which are accessed 50 days back. # find / -atime 50 28. Find Last 50-100 Days Modified Files To find all the files which are modified more than 50 days back and less than 100 days. # find / -mtime +50 –mtime -100 29. Find Changed Files in Last 1 Hour To find all the files which are changed in last 1 hour. # find / -cmin -60 30. Find Modified Files in Last 1 Hour To find all the files which are modified in last 1 hour. # find / -mmin -60 31. Find Accessed Files in Last 1 Hour To find all the files which are accessed in last 1 hour. # find / -amin -60 Part V – Find Files and Directories Based on Size 32. Find 50MB Files To find all 50MB files, use. # find / -size 50M 33. Find Size between 50MB – 100MB To find all the files which are greater than 50MB and less than 100MB. # find / -size +50M -size -100M 34. Find and Delete 100MB Files To find all 100MB files and delete them using one single command. # find / -size +100M -exec rm -rf {} \; 35. Find Specific Files and Delete Find all .mp3 files with more than 10MB and delete them using one single command. # find / -type f -name *.mp3 -size +10M -exec ls -l {} \; That’s it, We are ending this post here, In our next article we will discuss more about other Linux commands in depth with practical examples. Let us know your opinions on this article using our comment section.