Linux Examination

This will help myself with the final examnation.

by QiaoGuangtong

Fundamental About Linux

  1. Partition.
    Generally, the partitions in linux, take the ubuntu for instance, four partitions are general, which including “/”, “/boot”, “/swap”, and “/home”, in which home is your users’ directory.

File Command

In linux, the file processing commands are pretty important because all your actions are about file processing. So next term, let us to learn about the commands for processing the files.
At first, you should know that the command is case sensitive, for which you should know which are upper case, and which are lowercase.

  1. ls -list directory contents
    List the files and directory from current directory order by the first case default.
Options Long Option Describe
-a -all List all files
-l -long Display results in long format
-t -time Display result order by time
  1. cp -copy
    This command can copy files or directories. It can be used two different ways.
    cp item1 item2
    to copy the file or directory from item1 to item2, and
    cp item… directory
    to copy multiple items (files or directories) into a directory.
    Example:
    cp -r item1 item2
    Recursively copy directories and their contents. This option is required when item1 is a directory.

  2. mv -move
    This command can move file or directory to a new directory and rename a file
    Example:
    mv item1… item2
    Like cp, move files or recursively move directories and their contents. item1 and item2 can be directory or file.

  3. rm -remove
    This command can remove the directed file or directory
    Example:
    rm -r item
    The same, recursively remove directories and their contents. This option is required when item is a directory.
    rm -f item
    This command will cancel warning when you remove a file or directory and its contents.
    rm -rf item
    This command combined two above.

  4. tar
    This command can zip or unzip the directed files or directories.
    Example:
    tar -czvf item1 item2….
    -czvf create zip visual file (new file name)
    This command can zip item2, which can be file or directory. item2 can be multiple items.
    tar -xvzf item
    This command can unzip item, a zip file.

  5. chmod -change mode
    This command can change permissions of a file or directory.
    Example:
    chmod u+x item add execute on item for current user
    chmod u+r item add read on item for current user
    chmod u+x item add write on item for current user
    chmod g+x item g is group add execute for all users in the same group with current user.
    chmod a+x item a is all add execute for all users

  6. touch
    This command can change the time for visiting and changing. If the file does not exists, create a new file.
    option:
    touch [filename]
    This command can create a new file filename.

  7. find
    This command is the most complex in my class that cannot remind me all the time.
    find ./ -size 5 -name *passwd* -ok cp {} /home ;

Directory Command

  1. mkdir
    This command can create a new directory
    Example:
    mkdir item
    This command creates a directory item in current directory.
  2. cd
    This command can change directory
    Example:
    cd item
    This command changes into item, which is a directory.

User Command

  1. su
    This command can change current user to another.
    Example:
    su sam
    This command change user to sam.
  2. passwd
    This command can update password for a user.
    Example:
    passwd sam
    This command can update password for sam.

Other Command

  1. cat
    This command can display the content of a file. E.g. cat a.txt
  2. echo
    This command can display the content of a string or environment variables and so on. E.g. echo java
  3. ps -ef
    This command can display the processes of current system.
  4. kill -9 [pid]
    This command can kill a process which number is pid.

Vi/Vim

vi is a screen-oriented text editor originally created for the Unix operating system.
vi is a modal editor: it operates in either insert mode (where typed text becomes part of the document) or command mode (where keystrokes are interpreted as commands that control the edit session). When you enter “:” , you will enter last-line mode.

change mode:
i from command mode to insert command
Command mode:
dd delete current line
yy copy current line to buffer
nyy copy n lines to buffer

Last-line mode:
:q quit with no action
:wq save write and quit
:q! force to quit
:x save and quit

. Shell Scripting

  1. Tips
    For a new shell scripting, you can make it according the following steps.
  2. Write your shell scripting file using vi/vim or other editors
  3. Change its permissions so that it can be executed
  4. Execute it
  5. Practice

copy files

  1. copy /etc/passwd, /etc/profile, /etc/shadow to current directory.
    cp /etc/passwd ./
    cp /etc/profile ./
    cp /etc/shadow ./

Specific size

  1. Decide if a number is greater than 50
    if [ $1 -gt 50 ] ; then 
    	echo$1 > 50”
    else 
    	echo$1 <= 50”
    fi

Add 1-100

  1. Display the sum from 1 to 100
i=0
sum=0
while [ $i -lt 10 ] ; do 
	let i+=1
	let sum+=$i
done
echo “sum = $sum

Create Files

  1. Please create 100 files f1 to f100
i=0
while [ $i -lt 100 ] ; do 
	let i+=1
	touch $i
done

Re-Write cp

  1. Re-Write my copy using two arguments, and decide if the first argument is a directory
if [ -f $1 ] ; then
	cp $1 $2
else
	cp -r $1 $2
fi

Ten Score cp

  1. A perfect shell scripting for rewriting cp
if [ $# -gt 1 ] ; then
	if [ -f $1 ] ; then 
		cp $1 $2
	elif [ -d $1 ] ; then
		cp -r $1 $2
	else 
		echo “Source file or directory not found”
	fi
else
	echo “At least two arguments”
	echo “For example: ./mycp /etc/profile ./ ”
fi

Analyze String

  1. Print every part of the specified symbol split string
t=$IFS
IFS=”:”
data=”root:x:0:0:root:/root:/bin/bash”
for i in $data ; do
	echo $i
done
IFS=$t

Analyze String 2

  1. Print specific part using number of the specified symbol split string
t=$IFS
IFS=”:”
data=”root:x:0:0:root:/root:/bin/bash”
count=0
for i in $data ; do
	let count++
	[ $count -eq $1 ] && x=$i
done 
echo $x
IFS=$t

Analyze String 3

  1. Find the number of specified string in the specified symbol string
t=$IFS
IFS=”:”
data=”liming:wangming:daming:liming:lihua:liming”
count=0
for i in $data ; do 
	[ $i = “liming” ] && let count+=1
done
if [ $count -eq 0 ] ; then 
	echo “Not found”
else 
	echo “Count is $countfi
IFS=$t

Analyze String 4

  1. Search specific string and display its count, if it does not exist, append it at the end;
t=$IFS
IFS=”:”
data=”daming:xiaoming:xiaohong:dahong:lihua:zhanghua”
count=0
for i in $data ; do
	[ $i = $1 ] && let count++
done
if [ $count -eq 0 ] ; then
	echo “Not found $1”
	data = $data:$1
else
	echo “count is $countfi
echo “new data is $data”
IFS=$t

Read

read -s -p “Enter password: “ pass
if test$pass== “password”
then 
	echo “”
	echo “Password successful”
else 
	echo “”
	echo “Password failed”
fi

shell function

Like others programming language, shell has function, too.

Define:
[ function ] fun_name [()]
{
action;
[return int;]
}
So you can use function funName() {}, function funName{}, or funName(){} to define a function;
This is instance:

function add()
{
sum=$(($1+$2))
return $sum
}  
read -p "Enter number1: " item1
read -p "Enter number2: " item2
add $item1 $item2
echo "$item1 + $item2 is $?"

C Programming

GCC

Command gcc can do the work that compile, link, and create executed file.
gcc main.c -o main
This command can create a file main. It can be executed.
gcc main.c -c OR gcc -c main.c
These two commands are the same. They can compile C source file.

Makefile & make

If you write many c source files, you can use make to manage your code easily. Make can gain your time because it can only execute the command you have updated. You should write a file called Makefile, and then use the make command to execute it. And then, you get an executable file.
So, you can write a Makefile like the following:

    main: main.o max.o min.o
    	gcc main.o max.o min.o -o main
    main.o: main.c
    	gcc -c main.c
    max.o: max.c
    	gcc -c max.c
    min.o: min.c
    	gcc -c min.c
    clear:
    	rm *.o
/* common.h */
int max(int, int);
int min(int, int);

    /*main.c*/
    #include <stdio.h>
    #include “common.h>
    int main()
    {
    	int a, b;
    	printf(“Enter two numbers:);
    	scanf(%d %d”, &a, &b);
    	printf(“The max is %d, the min is %d”, max(a, b), min(a, b));
    	return 0;
    }
/* max.c */
int max(int a, int b)
{
	return a > b ? a : b;
}

/* min.c */
int min(int a, int b)
{
	return a < b ? a : b;
}

Programming Practice

Random

Write a c source file, output a random double-precision number from 0 to 0.999;

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	srand(time(0));
	int r = rand()%1000;
	double r1 = r / 1000.0;
	printf(%.3f\n”, r1);
	return 0;
}

Fork1

Before showing the practice, I should tell you something else. There is a process, which has a parent process, and when its parent process was killed but itself exists, it became an orphan process. (The orphan process will be re-parentage by kthreadd).

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
	pid_t pid;
	pid = fork();
	
	if (pid < 0)
		printf(“ERROR…\n”);
	if (pid ==0)
		printf(“I am a child process..\n”);
	if (pid > 0)
		printf(“I am a parent process..\n”);
	return 0;
}

Fork2

Show pids of the parent process and child process

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main()
    {
            pid_t pid;
            pid = fork();
            if(pid < 0)
                    printf("ERROR..\n");
            if(pid == 0)
            {
                    printf("I am a child proces.., and my pid is %d, ", getpid());
                    printf("and my parent's pid is %d\n", getppid());
                    sleep(4);
                    printf("I am a child proces.., and my pid is %d, ", getpid());
                    printf("and my parent's pid is %d\n", getppid());
            }
            if(pid > 0)
            {
                    sleep(3);
                    printf("I am a parent process, and my pid is %d \n", getpid());
            }
            return 0;
    }

Philosopher’s dining problem

    #include <stdio.h>
    #include <stdlib.h>
    #include <signal.h>
    #include <unistd.h>
    #include "mysemop.h"
    
    #define c_num 5
    #define p_num 5
    
    int main()
    {
            int room_sem_id;
            int chopstick_sem_id[c_num];
            int i;
            room_sem_id = CreateSem(c_num - 1);
            for(i = 0; i < c_num; i++)
                    chopstick_sem_id[i] = CreateSem(1);
    
            pid_t pid;
            pid_t pids[p_num];
            for(i = 0; i < p_num; i++)
            {
                    pid = fork();
                    if(pid < 0)
                            printf("ERROR...\n");
                    if(pid > 0)
                            pids[i] = pid;
                    if(pid == 0)
                    {
                            while(1)
                            {
                                    printf("%d is thinking...\n", i);
                                    sleep(2);
                                    printf("%d is hungry...,so he enter room\n", i);
                                    Psem(room_sem_id);
                                    Psem(chopstick_sem_id[i]);
                                    Psem(chopstick_sem_id[(i + 1) % c_num]);
                                    printf("%d is eating....\n", i);
                                    sleep(c_num - i);
                                    printf("%d finished...\n", i);
                                    Vsem(chopstick_sem_id[(i + 1) % c_num]);
                                    Vsem(chopstick_sem_id[i]);
                                    Vsem(room_sem_id);
                            }
                    }
    
            }
            char c;
            do
            {
                    c = getchar();
                    if(c == 'q')
                    {
                            for(i = 0; i < p_num; i++)
                                    kill(pids[i], 9);
                    }
            } while(c != 'q');
            return 0;
    }

Binding signal

    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>
    
    pid_t x;
    
    void f1()
    {
    	printf("Child catched..\n");
    	sleep(1);
    	kill(x,14);
    }
    
    void f2()
    {
    	printf("Parent catched..\n");
    }
    
    int main()
    {
    	pid_t pid;
    	pid = fork();
    	if(pid < 0)
    		printf("ERROR...\n");
    	if(pid == 0)
    	{
    		signal(14, f1);
    		pause();
    	}
    	if(pid > 0)
    	{
    		signal(14, f2);
    		sleep(3);
    		kill(pid, 14);
    		pause();
    	}
    	return 0;
    }

Summary

This file just service for the Linux final examination. More about Linux, please go to the other, and maybe you can get some answers from the following.

A Website:

https://www.w3cschool.cn/linux/

Books:

鏈接:https://pan.baidu.com/s/1nLjdO5prkofEgcXU1Y5hjg
提取碼:1u5a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章