Lecture 2 Linux Basic Commands,Shell and Make September 6, 2016 Kyu Ho Park
Linux Basics
root 계정 전환 ubuntu@omap:~$ sudo passwd root [sudo] password for ubuntu: temppwd Enter new UNIX password: temppwd (또는 원하는 패스워드) Retype new UNIX password: temppwd (또는 원하는 패스워드를 다시 입력) passwd: password updated successfully ubuntu@omap:~$ su root Password: temppwd (또는 위에서 입력한 패스워드) root@omap:/home/ubuntu#
Linux commands File related: ls , cd, mkdir, rm, df, du, mount, unmount, mkfs touch, chmod, chown, tar, cp, mv, Process related: clear, whoami, whereis, su, pwd
Shell -command interpreter ‘User’ Linux Shell Linux
Shell programming -script : it is a file that contains shell command and it is a shell program. -Creating a Script #!/bin/bash # An example of a shell script that replaces the command ‘ls –l > output.txt’ ls –l > output.txt exit 0
Shell Syntax Variables Conditions Program control: if, elif, for, while, until, case Functions Lists
Project1-Task1
$tree . ├── Algol │ ├── Ch1 │ │ ├── c1p1 │ │ ├── c1p1.c │ │ ├── c1p2 │ │ ├── data │ │ ├── data.txt │ │ ├── ex03-01 │ │ ├── ex03-01.c │ │ ├── ex04-01 │ │ ├── ex04-01.c │ │ ├── ex10-01.c │ │ ├── ex12-01c │ │ ├── ex12-01c.c │ │ ├── ex12-01s │ │ ├── ex12-01s.c │ │ ├── fifo │ │ ├── honor │ │ ├── honor.c │ │ ├── newdata1.txt │ │ ├── newdata.txt │ │ ├── newname.txt │ │ ├── test.txt │ │ └── test.txt.soft -> test.txt │ ├── Ch2 │ │ ├── mem-region │ │ └── mem-region.c │ ├── fileTest │ │ └── data │ ├── infile │ ├── outfile │ ├── pipewr │ ├── pipewr.c │ ├── testWelcom │ ├── testWelcom.c │ └── testWelcom.s ├── clone ├── clone.c ├── DDriver │ ├── Makefile │ ├── P301 │ ├── P301.c │ ├── P303 │ ├── P303.c │ └── test.c ├── express ├── fork ├── fork.c ├── sh1 ├── shQuot ├── traverse └── treesearch
Tree search
Interactive program
Making a script executable
Shell script( commands in a file )
variables
Quoting
if~fi if [ -d $directory ]; then ---- fi if[ -d $directory ] then ---
if~fi -d file //True if the file is a directory -e file //True if the file exists -f file //True if the file is a regular file -x file //True if the file is executable ----
‘if~fi’ control structure if condition then statements else fi
forSample script
for
while while condition do statements done
functions function( ) { statements }
function example
Task 2 Simple C programing Basic Linux System Calls open(),read(),write(),lseek(),close()
Basic Linux System Calls open(),read(),write(),lseek(),close() #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int open(const char *path, int oflags); int open(const char *path, int oflags, mode_t mode); Open with oflag=O_CREATE, we must use the three-parameter form with mode. mode: S_IRUSER: Read permission, owner S_IWGRP:Write permission, group S_IXOTH: Execute permission, others oflag={O_RDONLY,O_WRONLY,O_RDWR} ored with{O_APPEND, O_TRUNC, O_CREATE, O_EXCL}
read(), write() read() #include <unistd.h> size_t read(int fildes, void *buf, size_t nbytes); write() size_t write(int fildes, const void *buf, size_t nbytes);
lseek() lseek() #include <unistd.h> #include <sys/types.h> off_t lseek(int fildes, off_t offset, int whence); //lseek() system call sets the read/write pointer of a file descriptor fildes. whence: SEEK_SET: offset is an absolute position, SEEK_CUR:offset is relative to the current position, SEEK_END:offset is relative to the end of the file.
rand( ) rand( ) #include <stdlib.h> #define RAND_MAX 0x7ff rand() //it will generate a number of [0, 0x7ff]
memalign() memalign() allocates size bytes and returns a pointer to the allocated memory. The memory address will be a multiple of boundary, which must be a power of two.
make and makefile
make [-f filename] % make [-f filename] - if you don’t use –f option, the default file is Makefile or makefile. -if there are Makefile and makefile at the same time, Makefile will be selected.
example /*file: test.h*/ /*file: main.c*/ #include <stdio.h> #include “test.h” int main(void) { test1(); test2(); printf(“Hello world!\n”); return 0; } /*file: test.h*/ void test1(void); void test2(void); /*file: test1.c*/ void test1(void) { } /*file: test2.c*/ void test2(void)
Without ‘make’ %gcc –c main.c %gcc –c test1.c %gcc –c test2.c %gcc –o test main.o test1.o test2.o
With ‘make’ -Makefile %vi Makefile test : main.o test1.o test2.o gcc –o test main.o test1.o test2.o main.o : test.h main.c gcc –c main.c test1.o : test.h test1.c gcc –c test1.c test2.o : test.h test2.c gcc –c test2.c %make gcc –c main.c gcc –c test1.c gcc –c test2.c gcc –o test main.o test1.o test2.o
test2.c is modified %vi test2.c /*file:test2.c*/ #include <stdio.h> void test2(void) { printf(“This is test2.c\n”); } %make gcc –c test2.c gcc -0 test main.o test1.o test2.o
Macros in a makefile
Label Makefile2:
make clean
Typical MACRO var. #Which compiler CC =gcc #Option flags CFLAGS = -g –Wall #Program source files SRCS = main.c test1.c test2.c #object files OBJS #Library files LIBS #Library directories LIBDIRS
Implicit rule $@ #Name of the current target $? # List of prerequisites(files the target depends on) #changed more recently than the current target $< #Name of the current prerequisite $* #Name of the prerequisite, without any suffix
Kernel Compile 1.Kernel Configuration to give the information of current H/W, Kernel, Network characteristics to the newly made kernel. -make config, make menuconfig, make xconfig 2.Kernel compile -make bzImage or make zImage( for a small sized kernel) - make( after Linux version 2.6) 3.Kernel install -make install