This will help myself with the final examnation.
by QiaoGuangtong
Fundamental About Linux
- 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.
- 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 |
-
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. -
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. -
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. -
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. -
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 -
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. -
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
- mkdir
This command can create a new directory
Example:
mkdir item
This command creates a directory item in current directory. - cd
This command can change directory
Example:
cd item
This command changes into item, which is a directory.
User Command
- su
This command can change current user to another.
Example:
su sam
This command change user to sam. - passwd
This command can update password for a user.
Example:
passwd sam
This command can update password for sam.
Other Command
- cat
This command can display the content of a file. E.g. cat a.txt - echo
This command can display the content of a string or environment variables and so on. E.g. echo java - ps -ef
This command can display the processes of current system. - 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
- Tips
For a new shell scripting, you can make it according the following steps. - Write your shell scripting file using vi/vim or other editors
- Change its permissions so that it can be executed
- Execute it
- Practice
copy files
- copy /etc/passwd, /etc/profile, /etc/shadow to current directory.
cp /etc/passwd ./
cp /etc/profile ./
cp /etc/shadow ./
Specific size
- Decide if a number is greater than 50
if [ $1 -gt 50 ] ; then
echo “$1 > 50”
else
echo “$1 <= 50”
fi
Add 1-100
- 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
- Please create 100 files f1 to f100
i=0
while [ $i -lt 100 ] ; do
let i+=1
touch $i
done
Re-Write cp
- 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
- 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
- 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
- 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
- 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 $count”
fi
IFS=$t
Analyze String 4
- 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 $count”
fi
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/