Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 22
Lab Cycles
Lab Cycle -1 (Practicing UNIX Commands)
UNIX Commands Exercise-1 UNIX Commands Exercise-2 Lab Cycle -2 (Essential Shell Programming) Bash Shell Environment Exercise-1(Assignment) Shell Programming Exercises-1 Lab Cycle -3 (Advanced Shell Programming) Shell Programming Exercises-2 Shell Programming Exercises-3 Lab Cycle -4 (Files) UNIX File Subsystem Programming Exercises-1 UNIX File Subsystem Programming Exercises-2 UNIX File Subsystem Programming Exercises-3 Lab Cycle -5 (Process, Signals) UNIX Process Subsystem Programming Exercises-1 UNIX Process Subsystem Programming Exercises-2 Lab Cycle -6 (IPC, Advanced I/O, Terminal I/O) UNIX IPC Programming Exercises-1 UNIX I/O Programming Exercises-1 References: 1. Advanced Programming in the UNIX® Environment: Second Edition by W. Richard Stevens, Stephen A. Rago Publisher: Addison Wesley Professional/ Pearson 2. UNIX Systems Programming: Communication, Concurrency, and Threads by Kay A. Robbins, Steven Robbins Publisher: Prentice Hall PTR 3. Beginning Linux® Programming Third Edition by Neil Matthew, Richard Stones Publisher: Wiley Publishing, Inc. 4. Advanced Unix Programming, Second Edition by Mac J. Rochkind Publisher: Addison Wesley Professional/ Pearson 5. Advanced Linux Programming, First Edition by Mark Mitchell, Jeffrey Oldham, and Alex Samuel Publisher: New Riders Lab Cycle -1 UNIX Commands Exercises-1 Refer Sample Question 1, Commands and Special Characteristics at the end of this document. 1. Copy the file /etc/passwd and /etc/group into your home directory and Perform Sort Command on the passwd file o sorting on field 3 based on the numeric order o reverse sort using the -r switch on field 3 o store out put in a file name OUTPUT o Perform sort by ignore case using –f switch on name field( Create a new file name INPUT with Tab as a Delimiter ) o outputs only unique lines using –u switch 2. Create a file that have sorted list of only UID’S 3. Sort the group file. Swap fields 2 and 3 of it. Call it group1. Display the n ew file. 4. Merge two sorted files ( file1=UID’S, file2=GID’S) 5. Perform sort on the 2 and 4 fields (Create a new file name INPUT with Tab as a Delimiter and having repetition of data in the fields) 6. Create a file that have list of UID’S, GID’S and Home Directory 7. Combine the contents of the file with the input from the keyboard and then ca rry out sorting 8. Sort only the input from the standard input (keyboard) 9. List unique shells that are currently being used on your system 10. List username, the userid and the shell (fields 1,3 and 7 from /etc/passwd). 11. What is the alternate method of specifying the delimter apart from “ “. How do you check whether the table is sorted or not. 12. Write a Grep command to search for a word Either Rebbaca or rebbaca in a fil e 13. Write a Grep command to search for a four letter word whose first letter is a ‘b’ and last letter ‘k’ 14. Write a Grep command that will returns only filenames containing a match 15. Write a Grep command that will returns only number of matches. 16. Write a Grep command that will dsiplay 5 lines before the matched string 17. Using cat command how can we create a file and enter the text 18. How can we Create 3 empty files using touch command in single step 19. How can we Concatenate the contents of two files and store them in the third file 20. How can we Concatenate the contents of two files and append them in the thir d file 21. Display the current login users 22. What is the difference between listing the contents of directory play with l s -l and ls -L? 23. Create a file called hello.txt that contains the words "hello world". Can yo u use "cp" using "terminal" as the source file to achieve the same effect? 24. Copy hello.txt to terminal. What happens? 25. Use grep to isolate the line in /etc/passwd that contains your login details . 26. What does the cut command do? Can you use it together with w to produce a li st of login names and CPU times corresponding to each active process? Can you now (all on the same command line) use sort and head or tail to find the user whose process is using the most CPU? 27. Multiple jobs can be issued from the same command line using the operators ; , && and ||. Try combining the commands cat nonexistent and echo hello using each of these operators. Reverse the order of the commands and try again. What are the rules about when the commands will be executed? 28. Use ps, w and top to show all processes that are executing. 29. Use finger or who to get a list of users on the machine. 30. Create a new Directory LABTEMP and Copy the files from /var/log in to it and display the files a. whose first alphabet is consonant b. that do not begin with uppercase letters c. that has an extension of exactly three characters 31. Display all the files including files in the subdirectories 32. List all files with a trailing symbol showing their type 33. Long listing of all the files in the order of their last access time 34. Display machine details 35. Change the file Access Date to older date for a group of files 36. Change the file modified Date to future date 37. Use the date and who commands in sequence (in one line) such that the output of the date will display on the screen and the output of who will be redirected to a file called myfile2.Use the more command to check thee contents of myfile2. 38. Print your user-id and group id s 39. Display Disk Usage for a particular directory 40. Show who is logged on and what they are doing. 41. How to find out what kind of file it is. 42. Explore linux Directories /home, /proc, /sbin and find out their purposes 43. how To see the permissions on a file 44. Just login with your common user ID. 45. Which release are you running? 46. How many hours has the system been running? 47. Use the cut command on the output of a long directory listing in order to di splay only the file permissions. Then pipe this output to sort and uniq to filter out any double lines. Then use the wc to count the different permission types in this directory. 48. Try F option for ls on /dev Directory. Which is your identify your tty (term inal) device? Is your tty character-oriented or block-oriented? Who is the owner of your tty? 49. Create a Link for the file and display its inode number 50. What command can be used to display the current memory usage? 51. Why Cal 9 1752 give abnormal result 52. Try ln -s /etc/passwd passwords and check with ls-l. Have you found any thin g extra? 53. Display first 15 lines of a file 54. Display list 15 lines of a file 55. Echo the string with white spaces Sample Question: 1 Use the cat command to create a file containing the following data. Call it myta ble. Sort the mytable. Swap fields 2 and 3 of mytable. Call it mytable. Print the new file mytable. Ans) a) Creating the file mytable. Use tabs to separate the fields. $ cat > mytable 1425 Ravi 15.65 4320 Ram 26.27 6830 Raj 36.15 1450 Sita 21.86 ^d b) Displaying the file mytable contents: $ cat mytable c) Sorting the file mytable: $ sort mytable d) Swaping the fields 2 and 3 $ cut –f 1 mytsble >file1 $ cut -f 2 mytable >fie2 $ cut -f 3 mytable >file3 $ cut -f 4 mytable >file4 $ paste file1 file3 file2 file4 >mytable $ cat mytable f) Printing the file mytable: $ lpr mytable Informational Commands Display Commands: Special Characteristics: Lab Cycle -1 UNIX Commands Exercises-2 1. Count the number of users who logged in and display the result. 2. Count the number of files in the current directory 3. Count the number of differences( in term of lines) between two files 4. Display the file /etc/passwd from the 45th line using the more command and st art the vi editor on the current file and current line. Hint: Press h or ? Button while vie wing the file with more command to get the help 5. Open the file /etc/passwd using more command and display the file backwards ( i.e., from the last line).What sub command should be pressed to know the line number 6. Display the contents of the file /etc/passwd one screen at a time and Search a pattern in it 7. How can we change the prompt of the more command 8. How can we suppress contiguous multiple blank lines present in the file with a single blank 9. If more is used to display multiple files what sub command is required o To Display the current file name and file number o Switch to the next file o Switch to the Previous file o Scroll n lines in the current file o Skip k lines in the current file 10. How an ordinary shell command can be executed while viewing the file with mo re command. Try date command 11. Perform the Following o Change the file access and modification time to the current time o Change the file access and modification time to the specified time o Change the file access and modification time to the specified time of the spec ified file with the one specified as file, rather than the current time 12. Display the details of the user by using the user name Hint: finger 13. What is the best and fastest way to know the location of the program or comm and that system will execute? Hint: Type 14. Perform the Following o Display May 05 using the date command o Display DATE: todaydate using the date command TIME: time 15. Which options are required for who command to display the column headers and more details list? 16. How do you know your machine’s name? 17. How do you spell check a file and display the mistakes Hint: ispell 18. Calculate sum of two numbers using expr 19. Perform the Following o How to copy entire directory using cp command o How to remove a directory using rm command o How to rename a directory o How do you determine the type of the file prog.c 20. Create a file using cat and find the number of lines, words and characters i n it. 21. Perform the Following o How do you split a file in to multiple files? Hint: split o How do you compare files? o How do you display \ using echo command? 22. Use escape sequences \t, \n, \a and \f in the sample text and display it usi ng echo command. Hint: The ^G character ring a bell its corresponding escape sequences i s \a 23. Which special character the shell uses to remove the special meaning of any Meta character placed after it. List the inode of the files chap*, chap[1] Hint: chap* chap[1] are the files created by you. 24. What happens when you enter a shell metacharacter * with the echo command. 25. How do you know your terminal name? 26. Check whether the output is similar for both $ wc < infile and $ wc infile 27. Perform the Following o Cat the input first from file1, then standard input, and then file2 o Cat the input first from standard input, and then from file1 o Echo a message on someone’s terminal screen o Echo a message on your terminal screen Hint: use tty 28. Two or more commands can be combined, and the aggregate output can send to a n output file. How to perform it 29. How do we save both standard output and error streams in the same file using the stream merging mechanism 30. Display the contents of the recent modified file using vi where vi’s argument is given by command substitution 31. Display the size of all the files in KB, MB, GB using ls command 32. Display the contents of the directory using ls command 33. Display the contents of the directory in long list having uid and gid using ls command 34. Write a unix command to compare a file with standard input 35. How do you redirect the standard output to a file that will incinerate? Give example 36. compare two files in which one of them is the output of the other command 37. Find the following forms are equivalent are not Cat > foo and Cat - > foo Cat >> foo and Cat - >> foo 38. Perform the Following o Check $ > newfile < infile wc and give result o Redirect error message to file ERROR on cat command for non existent file o Redirect standard output and standard error streams for cat command with an example in one step. 39. Save the output of the who command in a file, as well as display it 40. Save the output of the who command in a file, display it, display lines coun t on the terminal. 41. Display the text There are n files in the current directory Here: n=count or number of files in your current directory 42. Display calendar for the year 1980 where this argument is given by date comm and 43. Display the text The date today is current date 44. When will wc < chap0[1-5] work? Create a file chap0[1-7] 45. How will you mark the completion of a command with a beep? 46. Change the permissions of your file infile with only execution, read permiss ion to others and execution permission to group. 47. Display all filenames available in your home directory beginning with an alp habet, irrespective of case 48. Perform the following a. Copy recursively three directories to the other directory in a single step b. Copy all files from three directories to the other directory in a single step c. Copy all .c files from a directory to the other directory in a single step 49. Create a shareable directory where any one can use it but cannot delete it. 50. Perform the Following o Create a file with sticky bit and view its permissions by ls –l o Check whether sticky bit is there for Vi editor or not o Make a directory in such a way that all the files and sub-directories in the d irectory executable by all users 51. Display the umask value 52. Change the umask value and identify the difference with the earlier using to uch, ls –l 53. Logout and see whether the umask hold the new value or not 54. How can we create a link for a directory? Is it hard or soft link? 55. Display data of the file containing nonprinting characters in ASCII octal va lue 56. Perform the following o Compress and uncompress a file ERROR o Zip a group of files (ERROR, newfile, infile, passwd, group) and unzip them o Gzip a group of files and gunzip them o Bzip2 a group of files and bunzip2 them 57. How can we View the contents of the compressed file and how can we redirect? 58. Using the tar archival command perform the following o Create an archive o Extract files from archive o Display files form archive o Specify the archive 59. Convert a file from ASCII to EBCDIC and alphabetic characters to lower case 60. How do we create a image of your floppy on disk using dd command 61. Request for a printout and cancel it and Check who are in the queue 62. Explore /proc. Display the contents of the files interrupts, devices, cpuinf o, meminfo and uptime using cat. Can you see why we say /proc is a pseudo-filesystem which allo ws access to kernel data structures? 63. Create a new file1 and perform the following using chmod command with relati ve permissions o Give executable permission only to the owner o Give executable permission to all o Assign the same set of permissions to a group of files o Restore the original permissions to the new file1. hint: chmod also accepts multiple expressions delimited by commas o Give write and execute permissions for others 64. Imagine you were working on a system and someone accidentally deleted the ls command (/bin/ls). How could you get a list of the files in the current director y? Try it. 65. Create a new file2 and perform the following using chmod command with absolu te permissions o Assign read and write permissions to all categories o Give executable permission to all o Restore the original permissions to the new file2 o Assign all permissions to the owner, read and write permissions to the group, and only execute permission to the others 66. Write a UNIX command to descend a directory hierarchy and apply the executab le permission to all for every file and subdirectory it finds a. including hidden files b. not including hidden files 67. Describe three different ways of setting the permissions on a file or direct ory to r--r--r--. Create a file and see if this works. 68. How do we change File Owner and Group Owner for a file? 69. Type umask 000 and then create a file called world.txt containing the words "hello world". Look at the permissions on the file. What s happened? Now type umask 022 and create a file called world2.txt. When might this feature be useful? 70. How do we set SUID to a file 71. How do we set GUID to a file 72. Perform the following o Display the lines from the file /etc/passwd that start with f. o Display the lines from the file /etc/passwd that end with h. o Use the grep command to display the lines from the file /etc/hosts.deny that a re NOT comment lines (the comment lines are the lines that start with #). o Use the grep command to display all lines from any file in /etc/init.d that st art with echo. o Which files in /etc/init.d contain the word tr? Note: use the man command to lookup option for grep that searches for the word " tr" instead of the string "tr". Lab Cycle -2 Bash Shell Exercises-1 1. Execute the following shell variables o $HOME o $PATH o Which variable instructs the shell about the route it should follow to locate any shell command? o To include a directory /usr/xpg4/bin in your search list how you will reassign the PATH variable o $MAIL o $MAILCHECK o $IFS o $LOGNAME o $TERM o $SHELL o How you can confirm the contents of $IFS Variable by taking its octal dump Hint: od –bc o To customize our shell environment how do you set, unset, and display options 2. Perform the following for your login o Disallow ctrl+d to exit the shell for your login o Does not allow redirection to clobber exiting file o Use Vi for command-line editing and history file o Disable wildcard expansion o Change the interrupt key ^c to ^l o How do you assign short-names for commands you may be using quite frequently? Perform it on ls -l. o Change the end of file key to ^a o Display cal and your current directory every time you login 3. How do you edit the current and previous command lines? o Perform with an example by deleting a character, 3 characters and a word. o How do you paste this word elsewhere in the line? o How do you recall a previous command? o How do you recall fifth-most recent command? o How do you get the line you are looking for if you over shoot? 4. Perform the following o How do you Increase the size of your History to 20000? Hint: HISTSIZE o How do you executes the previous to previous command o Repeat the command with event number 33 and execute it o Repeat the command with event number 33 with out executing it 5. Perform the following o How do you search history list for previous commands. How do you repeat the search? If you over shoot how do you come back o Execute the command prior to the previous one o How do you perform a substitution on the immediately previous command? o List out the last 5 commands you used in your computer o Repeat the last command beginning with v o How do you perform substitution in recalled command ls 6. Perform the following o How do you change or revert to your most recent previous directory? o Which variable is used to store the last argument of the last command? Perform it with an example. o How do you display Event number in prompt? o How do you display PWD in prompt? o How do you display hostname of your computer in prompt? 7. Perform the following o How do you list alias available in your shell? o How do you incorporate positional parameters in an alias? Perform it on cd. o How do you redefine and unset an alias? Perform it with an example. 8. How do you display all the current settings of the terminal? 9. How do you overwrite the protection feature noclobber? 10. Which file simply incinerates all output written to it and accepts any strea m with out growing its size? Perform with an example 11. How a variable can also be assigned the value of another variable? Perform w ith an example 12. How do you concatenate two shell variables? Perform with an example 13. Create a local variable in the parent shell then run a Bash sub-shell with s h and check whether you can see the variable there or not 14. Using expr perform four basic arithmetic operations as well as the modulus 15. How to change echoe: Whether backspacing should erase the character using st ty 16. How to change echo: Entering a password through a shell script using stty 17. Perform the following o Display all the variables available in the current shell o Display all the environment variables available in the current shell 18. Write a shell script that displays the calendar for the current month, date and shell. 19. Write an interactive shell script to search a pattern in the file 20. Write a shell script to search a pattern in the file using command line argu ments 21. Write a shell script that will display Exit Status 0, 1, 2 and 3 as output 22. Write a shell script that will use logical operators Try using test or [ ] 23. Using numeric comparison operators compare two numbers and display the exit status on o Equal to o Not equal to o Greater than o Lesser than or Equal to o Greater than or Equal to o Lesser than 24. Using string tests Compare two strings or a single one for a null value and display the exit status on o Equal to o Not equal to o Str is Not a null string o Str is a null string o Str is assigned and not null 25. Using file-related tests Checks a file’s attributes and display the exit statu s on o Is regular file o Is readable o Is writable o Is executable o Is a directory o Has a size greater than zero o Exists o SUIB bit set o Sticky bit set o Symbolic link o f1 is newer than f2 o f1 is older than f2 o f1 is linked to f2 Lab Cycle -2 Shell Programming Exercises-2 Refer sample c code at the end of this document. 1. Write a shell script to find the sum of first N natural numbers 2. Write a shell script to read n numbers from the user and display its sum 3. Write a shell script to read n numbers from the user from the command line an d display its sum 4. Write a shell script to read 10 numbers from the user and to find the sum and average of the numbers. 5. Write a shell script to generate even numbers and to calculate its sum 6. Write a shell script for swapping two numbers (using only two variables) 7. Write a shell script to find the count and sum of even and odd numbers separa tely 8. Write a shell script to calculate the value of Xn 9. Write a shell script to find the factorial of a given number 10. Write a shell script to find the sum of digits in an integer 11. Write a shell script to count the number of digits in an integer 12. Write a shell script to find whether the given number is Armstrong or not 13. Write a shell script to print the multiplication table of the given number 14. Write a shell script to print all divisors of a given integer 15. Write a shell script to generate Fibonacci series. a) Program to find Fibonacci number #include<stdio.h> main() { int n,f1,f2,f3; f1=1; f2=1; printf("enter the no. upto which fibonacci series is to be displayed"); scanf("%d",&n); if(n!=0) printf("%d ",f1); if(n>1) printf("%d ",f2); while((f3=f1+f2)<=n) { f1=f2; f2=f3; printf("%d ",f3); } printf("\n"); } OUT PUT: [unixlab@klce-cse2 ~]$ cc fib.c [unixlab@klce-cse2 ~]$ ./a.out Enter no of numbers6 0 1 1 2 3 5 b) Program to find Factorial of a given number #include<stdio.h> main( ) { int n,i; long int fact=1; printf("enter the no.for which factorial is to be obtained"); scanf("%d",&n); for(i=1;i<=n;++i) fact=fact*i; printf("factorial of %d is %ld\n",n,fact); } output: [unixlab@klce-cse2 ~]$ cc facto.c [unixlab@klce-cse2 ~]$ ./a.out Enter a number5 Factorial of given number=120 Lab Cycle -3 SHELL Programming Exercises-2 Refer: Sample Questions at end of this document 1. Write a shell script to determine whether the given number is prime or not 2. Write a shell script to find the sum of negative numbers given by the user an d discarding the positive ones 3. a. Write a shell script to find the length of the string Refer: Sample Questi ons = echo $str Hint: var | wc –c len = exp $var – 1 b. Write a shell script to convert lowercase letters to its uppercase Hint: var = echo $str | tr [a-z] [A-Z] or var = echo $str | tr ‘[a-z]’ ‘[A-Z]’ 4. Write a shell script to copy a string into another string, character by chara cter Refer: Sample Questions Hint: in order to cut a single character use var = echo $str | cut –c 1 Hint: Concatenate of two shell variables z=$x$y 5. Write a shell script to reverse the string 6. Write a shell script to count the number of vowels in the string 7. Write a shell script to count the number of occurrence of a particular charac ter in the string 8. Write a shell script to replace a particular character in the string 9. Write a shell script to display Good Morning, Good Afternoon, Good Evening an d Good Night as appropriate when this shell script is executed. Hint: OR or AND between two conditions is possible with test [ var –op var –o var –op var ], [ var –op var –a var –op var ] 10. Write a shell script to read a user name and to find whether the user is cur rently logged in or not 11. Write a shell script to find whether the file is a directory or an ordinary file (Without using test command) and using test command Hint: ls –l > temp If (grep $name temp > temp1); then Line = cat temp1 | tr –s “ “ | cut –d “ “ –c 1 fi 12. Write a shell script to find whether the file is a directory or an ordinary file (With and without using test command) by reading any number of filenames from th e command line Sample Questions 1. How to calculate the length of the string: see the example Method 1: $ expr “abcdefghijkl” : ‘.*’ space on either side of : required $ 12 or $ str = abcdefghijkl $ expr “$str” : ‘.*’ $ 12 Method 2: $ str = “abcd all” $ echo ${#str} $ 8 2. How to extract a substring: See the example (here 2 digit year from a 4-digit string) $ str = 2009 $ expr “$str” : ‘..\(..\)’ $ 09 3. How to locate the position of a character: expr can also return the location of the first occurrence of a character inside a string. See the example: to locate the position of the character d in the string value o f $stg, you have to count the number of characters which are not d ([^d]*d), followed by d $ str = abcdefghijkl ; expr “$str” : ‘[^d]*d’ $ 4 4. Extracting a string by pattern matching See the example #is used to match at the beginning % is used to match at the end ${var#pattern} Shortest statement that matches pattern at the beginning of $var ${var%pattern} Shortest statement that matches pattern at the endof $var ${var##pattern} Longest statement that matches pattern at the beginning of $var ${var%%pattern} Longest statement that matches pattern at the end of $var a) To remove a extension from a file name $ filename=quotation.txt $ echo ${filename%txt} $ quotation txt stripped off b) To delete a string that matches the pattern */ but at the beginning (here * i s meta character) $ filename=”/var/mail/henry” $ echo ${filename##*/} $ henry /var/mail/ stripped off 5. We can use ${str} in side the if control structure such as If [ ${#str} –gt 20 ] ; then Lab Cycle -3 SHELL Programming Exercises-3 Refer: Sample Questions at end of this document Write a shell script to find whether the file is a directory or an ordinary file (Without using test command) and using test command Hint: ls –l > temp If (grep $name temp > temp1); then Line = cat temp1 | tr –s “ “ | cut –d “ “ –c 1 fi 1. Write a shell script to count the number of ordinary files and directory file s in the current working directory 2. Write a shell script that accepts an alphabet from the user and displays all filenames starting with that alphabet in the current working directory 3. Write a shell script to find whether the file has execute permission or not ( without using test command) 4. Write a shell script to find the file with the maximum size in the current wo rking directory (without using the sort command) 5. Write a shell script, which reads file names from the current working directo ry and to display the names of files to which you have read, write and execute permissions 6. a. Write a shell script to read a filename from the user and to display the o wner of the file b. Write a shell script to read a filename from the user and to display its file permission. 7. Write a shell script, which reads a filename and assigns read, write and exec ute permissions for the file by asking a question. If the answer is “Y” then it should d o so else it should abort the operation. 8. Write a shell script to calculate the time taken by the user since logged in 9. Create a shell script for a telephone book application. Display a menu for th e following functions. 1. Add an entry 2. Display all matches to a string 3. Sort and display the file 4. Delete all entries that match a string 5. exit the program o Using the phone list below: o Add a new name to the phone book file o Display all matches to a name or phone number o Sort the phone book file by last name o Delete an entry Print the results from each sequence of commands Data File (tabs between fields) Gene Smith 732 946-4691 Henry Brown 908 922-5820 Harry Crown 609 566-4515 Jim Zark 732 842-1910 Tom Mann 908 264-5321 Jack Spratt 908 264-4816 Joe Bram 609 521-4841 10. Create a simple menu program that will display the following options and con tinue until the exit option is chosen. Catch all input errors issue an error message and con tinue. The menu options are: a. Display the time and date b. Display the contents of the user directory c. Display that processes that are running d. Display who is on the system e. Exit the program 11. Write a script called leap_year.sh that takes a year as input and determines if it’s a leap year. If the user does not enter a correct leap year then the script should comp ute the next leap year after the date entered as an argument. The script command line and its response should look like the following: $Enter the year $201 $201 is not a leap year. $The closet leap year after that year is 204 $Enter the year $2008 $2008 is a leap year. Pseudocode to determine whether a year is a leap year or not: if year modulo 400 is 0 then leap else if year modulo 100 is 0 then no_leap else if year modulo 4 is 0 then leap else no_leap 12. Write a script called count_linesinfiles.sh that counts the number of ordina ry files (not directories) in the current working directory and its sub-directories. For each ordinary file found your script could count the number of lines in file and print the total nu mber of lines for files in the directory tree rooted at the current working directory. Counting lines of all files... 23 ./count.sh 1 ./a.java 24 Total ************************* Number of files found: 6 ************************* 13. Write a scripted called birthday_match.sh that take two birthdays (or in the general case any two dates in history) of the form MM/DD/YYYY (e.g., 05/15/1959) and returns whether there is a match if the two people where born on the same day of the wee k (e.g., Friday). It should be fun to see if any of you are born on the same day of the w eek. The input and output to/from the script should follow this format: $birthday_match.sh 12/01/1984 12/02/1984 The first person was born on: Sat The second person was born on: Sun Therefore, you are not born on the same day. $birthday_match.sh 11/25/1984 12/02/1984 The first person was born on: Sun The second person was born on: Sun Jackpot: You were both born on the same day! Sample Questions 1. How to calculate the length of the string: see the example Method 1: $ expr “abcdefghijkl” : ‘.*’ space on either side of : required $ 12 or $ str = abcdefghijkl $ expr “$str” : ‘.*’ $ 12 Method 2: $ str = “abcd all” $ echo ${#str} $ 8 2. How to extract a substring: See the example (here 2 digit year from a 4-digit string) $ str = 2009 $ expr “$str” : ‘..\(..\)’ $ 09 3. How to locate the position of a character: expr can also return the location of the first occurrence of a character inside a string. See the example: to locate the position of the character d in the string value o f $stg, you have to count the number of characters which are not d ([^d]*d), followed by d $ str = abcdefghijkl ; expr “$str” : ‘[^d]*d’ $ 4 4. Extracting a string by pattern matching See the example #is used to match at the beginning % is used to match at the end ${var#pattern} Shortest statement that matches pattern at the beginning of $var ${var%pattern} Shortest statement that matches pattern at the endof $var ${var##pattern} Longest statement that matches pattern at the beginning of $var ${var%%pattern} Longest statement that matches pattern at the end of $var a) To remove a extension from a file name $ filename=quotation.txt $ echo ${filename%txt} $ quotation txt stripped off b) To delete a string that matches the pattern */ but at the beginning (here * i s meta character) $ filename=”/var/mail/henry” $ echo ${filename##*/} $ henry /var/mail/ stripped off 5. We can use ${str} in side the if control structure such as If [ ${#str} –gt 20 ] ; then 6. The bash shell also supports the C-style for statements: for (( variable assignment ; condition ; iteration process )) do ...statements... done Example: #!/bin/sh for (( i=1; $i <= 10; i++ )) do echo $i done 7. All of the shells support one-dimensional numeric arrays: $ mytest=(one two three four five) $ echo $mytest one $ echo ${mytest[2]} three $ echo ${mytest[*]} one two three four five 8. break Exit from a for, while, select, or until loop. 9. Continue Resume the next iteration of a for, while, select, or until loop. 10. printf Display text using formatted strings. $ printf “%s\n” hello hello $ printf “%s %d\t%s” “Hi There” 15 people Hi There 15 people 11. Syntax for "function" is: <name of function> () { # start of function statements } # end of function Example: #!/bin/sh sumcalc () { sum=$[$1 + $2] } echo "Enter the first number:" read num1 echo "Enter the second number:" read num2 sumcalc $num1 $num2 echo "Output from function sumcalc: $sum" 12. Return Force a function to exit with a value that can be retrieved by the ca lling script. The return command causes functions to return. Return takes a single numeric par ameter that is available to the script calling the function. If no parameter is specifi ed, return defaults to the exit code of the last command. Lab Cycle -4 Refer System Call prototypes at the end of this document $man 2 systemcall name to get help Ex: $man 2 open 1. Write a unix system program to copy standard input to standard output Hint: while ((n= read ( 0, buf, sizeof(buf) ) ))>0) 2. Write a unix system program to read slow from the standard input and write to standard output Hint: for (;;) ------- Sleep (3); 3. Write a unix system program to copy data from one file /etc/passwd to other f ile pass.bak 4. Write a unix system program to copy data from one file to other file where fi les were given as command line arguments 5. Write a unix system program to copy data from one file and append to other fi le 6. Write a unix system program to read a file in reverse 7. Write a unix system program that tests its standard input to see whether it i s capable of seeking. 8. Write a unix system program that creates a file with a hole in it. 9. Write a unix system program that creates two files, one with a umask of 0 and one with a umask that disables all the group and other permission bits. System call prototypes: open Function: A file is opened or created by calling the open function. #include <fcntl.h> int open(const char *pathname, int oflag, ... /* mode_t mode */ ); Returns: file descriptor if OK, -1 on error creat Function: A new file can also be created by calling the creat function #include <fcntl.h> int creat(const char *pathname, mode_t mode); Returns: file descriptor opened for write-only if OK, -1 on error close Function: An open file is closed by calling the close function #include <unistd.h> int close(int filedes); Returns: 0 if OK, -1 on error lseek Function: An open file s offset can be set explicitly by calling lseek #include <unistd.h> off_t lseek(int filedes, off_t offset, int whence); UNIX Systems Programming Exercises-1 Returns: new file offset if OK, -1 on error read Function: Data is read from an open file with the read function. #include <unistd.h> ssize_t read(int filedes, void *buf, size_t nbytes); Returns: number of bytes read, 0 if end of file, -1 on error write Function: Data is written to an open file with the write function. #include <unistd.h> ssize_t write(int filedes, const void *buf, size_t nbytes); Returns: number of bytes written if OK, -1 on error umask Function: umask system call sets the mask to the value specified as argument, but it also returns the previous value of the mask. #include <sys/stat.h> mode_t umask(mode_t cmask); Returns: previous file mode creation mask truncate Function: The truncate and ftruncate calls can truncate a file to any desired length #include <unistd.h> int truncate(const char *pathname, off_t length); int ftruncate(int filedes, off_t length); Reference: Advanced Programming in the UNIX® Environment: Second Edition by W. Richard Stevens, Stephen A. Rago Publisher: Addison Wesley Professional Lab Cycle -4 $man 2 systemcall name to get help Ex: $man 2 open 1. Write a unix system program using umask that will change file permissions twi ce 2. Write a program to print all error messages used by your system 3. Write a program that displays system call errors with perror 4. Write a program that will perform copy on command line arguments with error handling (Three types of error handling techniques and five exit points) 5. Write a unix system program to read a file in reverse with error handling (Three types of error handling techniques and five exit points) 6. Write a unix system program to navigate a directory using chdir and getcwd 7. Write a system program that list files names and inode numbers in a given directory( ls – ia) 8. Write a system program that prints the type of file for command line argument UNIX Systems Programming Exercises-2 Lab Cycle -4 Refer System Call prototypes and sample programs at the end of this document $man 2 systemcall name to get help Ex: $man 2 open 1. Write a system program to display some file attributes of a particular file 2. Write a system program that list only inode numbers of all files in a given d irectory 3. Write a system program that prints the type of file for each command line arg ument 4. Write a system program to list only directories – uses S_IFMT and S_ISDIR macro s 5. Write a system program to truncate a file to a particular offset using ftrunc ate system call 6. a. Write a system program to remove a file using remove system call b. Write a system program to rename a file using rename system call 7. a. Write a system program to link a file using link system call b. Write a system program to open a file and unlink it 8. a. Write a system program to change the permissions of a file using chmod sys tem call b. Write a system program to change the groupId using chown system call 9. Write a system program using dup and dup2 called "test.c" in which entries of file sub system data structures are · The first file descriptor was the original descriptor, allocated in slot 3 · The second descriptor was a copy of the first, allocated in slot 4. · The third descriptor was a copy of the first, allocated in slot 0 that was freed by the close (0) statement (the standard input channel). · The fourth descriptor was a copy of descriptor 3, copied over the existing descr iptor in slot 2 (the standard error channel). · Use three write system calls o write (fd1, "what s", 6); o write (fd2, " up", 3); o write (0, " doc", 4); Finally by executing the last write system call the out put must be what s up do c? 10. Write a system program to find whether the file is a directory or an ordinar y file 11. Write a system program to count the number of ordinary files and directory f iles in the current working directory 12. Write a system program to find whether the file has 755 permission or not 13. Write a system program to display the files in the current directory whose s ticky bit is set 14. Write a system program to find the file with the maximum size in the current working directory Solution to program :4 /* Program: lsdir.c --Lists only directories - Uses S_IFMT and S_ISDIR macros */ #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <dirent.h> int main(int argc, char *argv[]) { DIR *dir; struct dirent *direntry; /* Returned by readdir() */ struct stat statbuf; /* Address of statbuf used by lstat() */ UNIX Systems Programming Exercises-3 mode_t file_type, file_perm; if ((dir = opendir(argv[1])) == NULL) quit("Couldn t open directory", 1); if ((chdir(argv[1]) == -1)) /* Change to the directory before */ quit("chdir", 2); /* you starting reading its entries */ while ((direntry = readdir(dir)) != NULL) { /* Read each entry in directory*/ if (lstat(direntry->d_name, &statbuf) < 0) { /* dname must be in */ perror("lstat"); /* current directory */ continue; } if (S_ISDIR(statbuf.st_mode)) { /* If file is a directory */ file_type = statbuf.st_mode & S_IFMT; file_perm = statbuf.st_mode & ~S_IFMT; printf("%o %4o %s\n", file_type, file_perm, direntry->d_name); } } exit(0); } unlink int unlink (const char* fileName) unlink () removes the hard link from the name fileName to its file. If fileName is the last link to the file, the file s resources are deallocated. stat int stat (const char* name, struct stat* buf) struct stat { mode_t st_mode; /* file type & mode (permissions) */ ino_t st_ino; /* i-node number (serial number) */ dev_t st_dev; /* device number (file system) */ dev_t st_rdev; /* device number for special files */ nlink_t st_nlink; /* number of links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ off_t st_size; /* size in bytes, for regular files */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last file status change */ blksize_t st_blksize; /* best I/O block size */ blkcnt_t st_blocks; /* number of disk blocks allocated */ }; There are some predefined macros defined in "/usr/include/sys/stat.h" that take st_mode as their argument and return true (1) for the following file types: MACRO RETURNS TRUE FOR FILE TYPE S_ISDIR directory S_ISCHR character-oriented special device S_ISBLK block-oriented special device S_ISREG regular file S_ISFIFO pipe Masks to interpret the st_mode flags include S_IFMT: File type S_IRWXU: User read/write/execute permissions S_IRWXG: Group read/write/execute permissions S_IRWXO: Others’ read/write/execute permissions Reading Directory Information: opendir (), readdir (), and closedir () DIR * opendir (char * fileName) struct dirent * readdir (DIR *dir) int closedir (DIR *dir) opendir () opens a directory file for reading and returns a pointer to a stream descriptor which is used as the argument to readdir () and closedir (). readdir () returns a pointer to a di rent structure containing information about the next directory entry each time it is called. closedir () i s used to close the directory. The dirent structure is defined in the system header file "/usr/include/dirent.h " NAME MEANING d_ino the inode number d_off the offset of the next directory entry d_reclen the length of the directory entry structure d_name the filename opendir () returns the directory stream pointer when successful, NULL when not s uccessful. readdir () returns 1 when a directory entry has been successfully read, 0 when the last dir ectory entry has already been read, and -1 in the case of an error. closedir () returns 0 on success, -1 on failure. chown int chown (const char* fileName, uid_t ownerId, gid_t groupId) chown () causes the owner and group IDs of fileName to be changed to ownerId and groupId, respectively. A value of -1 in a particular field means that its associated valu e should remain unchanged. Only a super-user can change the ownership of a file, and a user may change the group only to another group that he/she is a member of. If fileName is a symbolic link, the owner and group of the link are changed instead of the file that the link is referencing. #include <unistd.h> main () { int flag; flag = chown ("test.txt", -1, 62); /* Leave user ID unchanged */ if (flag == -1) perror("mychown.c"); } chmod int chmod (const char* fileName, int mode) chmod () changes the mode of fileName to mode, where mode is usually supplied as an octal number. The "set user ID" and "set group ID" flags have the octal values 4000 and 2000, resp ectively. To change a file s mode, you must either own it or be a super-user. #include <sys/stat.h> main () { int flag; flag = chmod ("test.txt", 0600); /* Use an octal encoding */ if (flag == -1) perror ("mychmod.c"); } dup int dup (int oldFd) int dup2 (int oldFd, int newFd) dup () finds the smallest free file descriptor entry and points it to the same f ile as oldFd. dup2 () closes newFd if it s currently active and then points it to the same file as oldFd. In both cases, the original and copied file descriptors share the same file pointer and access mode. They both return the index of the new file descriptor if successful, and -1 othe rwise. link int link (const char* oldPath, const char* newPath) link () creates a new label newPath and links it to the same file as the label o ldPath. The hard link count of the associated file is incremented by one. If oldPath and newPath reside on d ifferent physical devices, a hard link cannot be made and link () fails. #include <unistd.h> main () { link ("original.txt", "another.txt"); } truncate int truncate (const char* fileName, off_t length) int ftruncate (int fd, off_t length) truncate () sets the length of the file fileName to be length bytes. If the file is longer than length, it is truncated. If it is shorter than length, it is padded with ASCII nulls. #include <unistd.h> main () { truncate ("file1.txt", 10); truncate ("file2.txt", 10); } remove We can also unlink a file or a directory with the remove function. For a file, r emove is identical to unlink. For a directory, remove is identical to rmdir. #include <stdio.h> int remove(const char *pathname); rename A file or a directory is renamed with the rename function. #include <stdio.h> int rename(const char *oldname, const char *newname); Lab Cycle -5 UNIX Systems Programming Exercises-1 1. Write a system program that lists process and user credentials (pid, ppid, ui d, euid gid and egid) 2. Write a system program that creates a child using fork() system call 3. Write a system program that creates a Orphan 4. Write a system program that creates a Zombie 5. Write a system program that waits for its child to terminate using wait() sys tem call 6. Write a system program using dup2 to execute sort command 7. Write a system program which will opens files in the parent and uses dup2 in the child to reassign the descriptors 8. Write a system program that shares a pipe between two process 9. Write a system program that shows the pipe use in a single process 10. Write a system program that runs two programs in a pipeline such a way that child runs cat, parent runs tr. 11. Write a system program that runs two programs in a pipeline such a way that child runs wc -l, parent runs who. 12. Write a system program that displays a small message and then replaced its c ode with “ls” executable file 13. Write a system program that demonstrates Named pipe 14. Write a system program to implement $ls > ls.out and $ls >> ls.out 15. Write a system program to implement $ wc sample.txt > newfile 16. Write a system program to implement $sort < ls.out 17. Write a system program to implement $cat – foo.txt 18. Write a system program to implement $cat foo – bar 19. Write a system program to implement $(ls –l ; cal ; date) > all.txt 2> error.t xt 20. Write a system program to implement $ cat foo 2> error.txt and $ cat foo 2 > > error.txt 21. Write a system program to implement $ ls | wc –l > result.txt 22. Write a system program to implement $who | tee user.txt 23. Write a system program to implement $who | tee /dev/tty | user.txt Lab Cycle -5 UNIX Systems Programming Exercises-2 $kill –l to display available signals 1. Write a unix system program using alaram() 2. Write a unix system program using alaram() and signal() that has a handler specified 3. Write a unix system program that demonstrates SIGSYS and display signal number 4. Write a unix system program that changes default disposition to ignore 5. Write a unix system program that demonstrates SIGILL and display signal number 6. Write a unix system program that demonstrates SIGHUP, SIGQUIT, SIGTSTP and display signals numbers 7. Write a unix system program that restores the default disposition by avoiding the own handler 8. Write a unix system program that protects critical code and chain interrupt handlers using kill() 9. Write a unix system program that demonstrates SIGUSR1, SIGUSR2 using kill() 10. Write a unix system program that demonstrates SIGCHLD using kill() 11. Write a unix system program that demonstrates SIGSTOP, SIGCONT using kill() 12. Write a unix system program that demonstrates setpgid() using kill() 13. Write a unix system program that demonstrates SIGINT and setpgid() using kill() 14. Write a unix system program that demonstrates SIGTTIN using kill() 15. Write a unix system program that uses fork and exec to run a user-defined program and kills it if it doesn’t complete in 5 seconds 16. Write a unix system program with a shell-like capability ( accepts user inpu t as a command to be executed . uses the strtok library function for parsing command line ) Lab Cycle -6 UNIX Systems Programming Exercises-1 1. Write UNIX system program or programs to demonstrate the IPC mechanism semaphores-oriented system calls. 2. Write UNIX system program or programs to demonstrate the IPC mechanism shared memory-oriented system calls. 3. Write UNIX system program or programs to demonstrate the IPC mechanism Message queues-oriented system calls. 4. Write UNIX system program or programs to demonstrate the socket-oriented system calls around a small client/server example. Lab Cycle -6 UNIX Systems Programming Exercises-2 1. Write a UNIX system program that will read disk data using block and raw interface 2. Write a UNIX system program that will flood standard output with data 3. Write a UNIX system program that will contend for terminal input data 4. Write a UNIX system program that demonstrates the terminal driver in raw mode – Reading 5-character bursts 5. Write a UNIX system program that demonstrates the terminal polling 6. Write UNIX system program or programs that demonstrates a general-purpose system call ioctl for controlling character devices 7. Write UNIX system program or programs that demonstrate the STREAMS mechanism provided by the System V as a general way to interface communication drivers into the kernel (only Solaris provides native support for STREAMS. A STREAMS subsystem is available for Linux, but you need to add it yourself. It is not usually included by default) 8. Write UNIX system program or programs that demonstrate three functions poll, pselect, and select which allow us to perform I/O multiplexing. 9. Write a UNIX system program that demonstrates nice system call 10. Write a UNIX system program that demonstrates alarm system call 11. Write a UNIX system program that demonstrates profil system call 12. Write UNIX system program or programs that demonstrates Times and Timersorie nted system calls