Linux多线程编程小结

Linux多线程编程小结
Linux多线程编程小结

Linux多线程编程小结

愤怒的小狐狸----博客专栏

前一段时间因为开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,很烦躁的说,现在抽个时间把之前所学的做个小节。文章内容主要总结于《Linux程序设计第3版》。

1.Linux进程与线程

Linux进程创建一个新线程时,线程将拥有自己的栈(因为线程有自己的局部变量),但与它的创建者共享全局变量、文件描述符、信号句柄和当前目录状态。

Linux通过fork创建子进程与创建线程之间是有区别的:fork创建出该进程的一份拷贝,这个新进程拥有自己的变量和自己的PID,它的时间调度是独立的,它的执行几乎完全独立于父进程。

进程可以看成一个资源的基本单位,而线程是程序调度的基本单位,一个进程内部的线程之间共享进程获得的时间片。

2._REENTRANT宏

在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的函数调用所改变。类似的问题还存在于fputs之类的函数中,这些函数通常用一个单独的全局性区域来缓存输出数据。

为解决这个问题,需要使用可重入的例程。可重入代码可以被多次调用而仍然工作正常。编写的多线程程序,通过定义宏_REENTRANT来告诉编译器我们需要可重入功能,这个宏的定义必须出现于程序中的任何#include语句之前。

_REENTRANT为我们做三件事情,并且做的非常优雅:

(1)它会对部分函数重新定义它们的可安全重入的版本,这些函数名字一般不会发生改变,只是会在函数名后面添加_r字符串,如函数名gethostbyname 变成gethostbyname_r。

(2)stdio.h中原来以宏的形式实现的一些函数将变成可安全重入函数。

(3)在error.h中定义的变量error现在将成为一个函数调用,它能够以一种安全的多线程方式来获取真正的errno的值。

3.线程的基本函数

大多数pthread_XXX系列的函数在失败时,并未遵循UNIX函数的惯例返回-1,这种情况在UNIX函数中属于一少部分。如果调用成功,则返回值是0,如果失败则返回错误代码。

1.线程创建:

#include

int pthread_create(pthread_t *thread, pthread_attr_t *attr, void

*(*start_routine)(void *), void *arg);

参数说明:

thread:指向pthread_create类型的指针,用于引用新创建的线程。

attr:用于设置线程的属性,一般不需要特殊的属性,所以可以简单地设置为NULL。

*(*start_routine)(void *):传递新线程所要执行的函数地址。

arg:新线程所要执行的函数的参数。

调用如果成功,则返回值是0,如果失败则返回错误代码。

2.线程终止

#include

void pthread_exit(void *retval);

参数说明:

retval:返回指针,指向线程向要返回的某个对象。

线程通过调用pthread_exit函数终止执行,并返回一个指向某对象的指针。注意:绝不能用它返回一个指向局部变量的指针,因为线程调用该函数后,这个局部变量就不存在了,这将引起严重的程序漏洞。

3.线程同步

#include

int pthread_join(pthread_t th, void **thread_return);

参数说明:

th:将要等待的张璐,线程通过pthread_create返回的标识符来指定。

thread_return:一个指针,指向另一个指针,而后者指向线程的返回值。

一个简单的多线程Demo(thread1.c):

[cpp]view plain copy

1.#include

2.#include

3.#include

4.#include

5.

6.void *thread_function(void *arg);

7.

8.char message[] = "Hello World";

9.

10.int main()

11.{

12.int res;

13. pthread_t a_thread;

14.void *thread_result;

15.

16. res = pthread_create(&a_thread, NULL, thread_function, (void *)message);

17.if (res != 0)

18. {

19. perror("Thread creation failed!");

20. exit(EXIT_FAILURE);

21. }

22.

23. printf("Waiting for thread to finish.../n");

24.

25. res = pthread_join(a_thread, &thread_result);

26.if (res != 0)

27. {

28. perror("Thread join failed!/n");

29. exit(EXIT_FAILURE);

30. }

31.

32. printf("Thread joined, it returned %s/n", (char *)thread_result);

33. printf("Message is now %s/n", message);

34.

35. exit(EXIT_FAILURE);

36.}

37.

38.void *thread_function(void *arg)

39.{

40. printf("thread_function is running. Argument was %s/n", (char *)arg);

41. sleep(3);

42. strcpy(message, "Bye!");

43. pthread_exit("Thank you for your CPU time!");

44.}

编译这个程序时,需要定义宏_REENTRANT:

gcc -D_REENTRANT thread1.c -o thread1 –lpthread

运行这个程序:

$ ./thread1输出:

thread_function is running. Argument was Hello World

Waiting for thread to finish...

Thread joined, it returned Thank you for your CPU time!

Message is now Bye!

这个例子值得我们去花时间理解,因为它将作为几个例子的基础。

pthread_exit(void *retval)本身返回的就是指向某个对象的指针,因此,pthread_join(pthread_t th, void **thread_return);中的thread_return是二级指针,指向线程返回值的指针。

可以看到,我们创建的新线程修改的数组message的值,而原先的线程也可以访问该数组。如果我们调用的是fork而不是pthread_create,就不会有这样的效果了。原因是fork创建子进程之后,子进程会拷贝父进程,两者分离,相互不干扰,而线程之间则是共享进程的相关资源。

4.线程的同时执行

接下来,我们来编写一个程序,以验证两个线程的执行是同时进行的。当然,如果是在一个单处理器系统上,线程的同时执行就需要靠CPU在线程之间的快速切换来实现了。

我们的程序需要利用一个原理:即除了局部变量外,所有其他的变量在一个进程中的所有线程之间是共享的。

在这个程序中,我们是在两个线程之间使用轮询技术,这种方式称为忙等待,所以它的效率会很低。在本文的后续部分,我们将介绍一种更好的解决办法。

下面的代码中,两个线程会不断的轮询判断flag的值是否满足各自的要求。[cpp]view plain copy

1.#include

2.#include

3.#include

4.

5.int flag = 1;

6.

7.void *thread_function(void *arg);

8.

9.int main()

10.{

11.int res;

12. pthread_t a_thread;

13.void *thread_result;

14.int count = 1;

15.

16. res = pthread_create(&a_thread, NULL, thread_function, NULL);

17.if (res != 0)

18. {

19. perror("Thread creation failed");

20. exit(EXIT_FAILURE);

21. }

22.

23.while (count++ <= 20)

24. {

25.if (flag == 1)

26. {

27. printf ("1");

28. flag = 2;

29. }

30.else

31. {

32. sleep(1);

33. }

34. }

35.

36. printf("/nWaiting for thread to finish.../n");

37. res = pthread_join(a_thread, &thread_result);

38.if (res != 0)

39. {

40. perror("Thread join failed");

41. exit(EXIT_FAILURE);

42. }

43.

44. exit(EXIT_SUCCESS);

45.}

46.

47.void *thread_function(void *arg)

48.{

49.int count = 1;

50.

51.while (count++ <= 20)

52. {

53.if (flag == 2)

54. {

55. printf("2");

56. flag = 1;

57. }

58.else

59. {

60. sleep(1);

61. }

62. }

63.}

编译这个程序:

gcc -D_REENTRANT thread2.c -o thread2 –lpthread

运行这个程序:

$ ./thread2

121212121212121212

Waiting for thread to finish...

5.线程的同步

在上述示例中,我们采用轮询的方式在两个线程之间不停地切换是非常笨拙且没有效率的实现方式,幸运的是,专门有一级设计好的函数为我们提供更好的控制线程执行和访问代码临界区的方法。

本小节将介绍两个线程同步的基本方法:信号量和互斥量。这两种方法很相似,事实上,它们可以互相通过对方来实现。但在实际的应用中,对于一些情况,可能使用信号量或互斥量中的一个更符合问题的语义,并且效果更好。

5.1用信号量进行同步

1.信号量创建

#include

int sem_init(sem_t *sem, int pshared, unsigned int value);

参数说明:

sem:信号量对象。

pshared:控制信号量的类型,0表示这个信号量是当前进程的局部信号量,否则,这个信号量就可以在多个进程之间共享。

value:信号量的初始值。

2.信号量控制

#include

int sem_wait(sem_t *sem);

int sem_post(sem_t *sem);

sem_post的作用是以原子操作的方式给信号量的值加1。

sem_wait的作用是以原子操作的方式给信号量的值减1,但它会等到信号量非0时才会开始减法操作。如果对值为0的信号量调用sem_wait,这个函数就会等待,直到有线程增加了该信号量的值使其不再为0。

3.信号量销毁

#include

int sem_destory(sem_t *sem);

这个函数的作用是,用完信号量后对它进行清理,清理该信号量所拥有的资源。如果你试图清理的信号量正被一些线程等待,就会收到一个错误。

与大多数Linux函数一样,这些函数在成功时都返回0。

下面编码实现输入字符串,统计每行的字符个数,以“end”结束输入:[cpp]view plain copy

1.#include

2.#include

3.#include

4.#include

5.#include

6.

7.#define SIZE 1024

8.

9.void *thread_function(void *arg);

10.

11.char buffer[SIZE];

12.sem_t sem;

13.

14.int main()

15.{

16.int res;

17. pthread_t a_thread;

18.void *thread_result;

19.

20. res = sem_init(&sem, 0, 0);

21.if (res != 0)

22. {

23. perror("Sem init failed");

24. exit(EXIT_FAILURE);

25. }

26.

27. res = pthread_create(&a_thread, NULL, thread_function, NULL);

28.if (res != 0)

29. {

30. perror("Thread create failed");

31. exit(EXIT_FAILURE);

32. }

33.

34. printf("Input some text. Enter 'end' to finish/n");

35.

36.while (scanf("%s", buffer))

37. {

38. sem_post(&sem);

39.if (strncmp("end", buffer, 3) == 0)

40.break;

41. }

42.

43. printf ("/nWaiting for thread to finish.../n");

44.

45. res = pthread_join(a_thread, &thread_result);

46.if (res != 0)

47. {

48. perror("Thread join failed");

49. exit(EXIT_FAILURE);

50. }

51.

52. printf ("Thread join/n");

53.

54. sem_destroy(&sem);

55.

56. exit(EXIT_SUCCESS);

57.}

58.

59.void *thread_function(void *arg)

60.{

61. sem_wait(&sem);

62.while (strncmp("end", buffer, 3) != 0)

63. {

64. printf("You input %d characters/n", strlen(buffer));

65. sem_wait(&sem);

66. }

67. pthread_exit(NULL);

68.}

编译这个程序:

gcc -D_REENTRANT thread2.c -o thread2 –lpthread

运行这个程序:

$ ./thread3

Input some text. Enter 'end' to finish

123

You input 3 characters

1234

You input 4 characters

12345

You input 5 characters

end

Waiting for thread to finish…

Thread join

通过使用信号量,我们阻塞了统计字符个数的线程,这个程序似乎对快速的文本输入和悠闲的暂停都很适用,比之前的轮询解决方案效率上有了本质的提高。

5.2用互斥量进行线程同步

另一种用在多线程程序中同步访问的方法是使用互斥量。它允许程序员锁住某个对象,使得每次只能有一个线程访问它。为了控制对关键代码的访问,必须在进入这段代码之前锁住一个互斥量,然后在完成操作之后解锁它。

用于互斥量的基本函数和用于信号量的函数非常相似:

#include

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t,

*mutexattr);

int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

int pthread_mutex_destory(pthread_mutex_t *mutex);

与其他函数一样,成功时返回0,失败时将返回错误代码,但这些函数并不设置errno,所以必须对函数的返回代码进行检查。互斥量的属性设置这里不讨论,因此设置成NULL。

我们用互斥量来重写刚才的代码如下:

[cpp]view plain copy

1.#include

2.#include

3.#include

4.#include

5.#include

6.

7.#define SIZE 1024

8.char buffer[SIZE];

9.

10.void *thread_function(void *arg);

11.pthread_mutex_t mutex;

12.

13.int main()

14.{

15.int res;

16. pthread_t a_thread;

17.void *thread_result;

18.

19. res = pthread_mutex_init(&mutex, NULL);

20.if (res != 0)

21. {

22. perror("Mutex init failed!");

23. exit(EXIT_FAILURE);

24. }

25.

26. res = pthread_create(&a_thread, NULL, thread_function, NULL);

27.if (res != 0)

28. {

29. perror("Thread create failed!");

30. exit(EXIT_FAILURE);

31. }

32.

33. printf("Input some text. Enter 'end' to finish/n");

34.

35.while (1)

36. {

37. pthread_mutex_lock(&mutex);

38. scanf("%s", buffer);

39. pthread_mutex_unlock(&mutex);

40.if (strncmp("end", buffer, 3) == 0)

41.break;

42. sleep(1);

43. }

44.

45. res = pthread_join(a_thread, &thread_result);

46.if (res != 0)

47. {

48. perror("Thread join failed!");

49. exit(EXIT_FAILURE);

50. }

51.

52. printf("Thread joined/n");

53.

54. pthread_mutex_destroy(&mutex);

55.

56. exit(EXIT_SUCCESS);

57.}

58.

59.void *thread_function(void *arg)

60.{

61. sleep(1);

62.

63.while (1)

64. {

65. pthread_mutex_lock(&mutex);

66. printf("You input %d characters/n", strlen(buffer));

67. pthread_mutex_unlock(&mutex);

68.if (strncmp("end", buffer, 3) == 0)

69.break;

70. sleep(1);

71. }

72.}

编译这个程序:

gcc -D_REENTRANT thread4.c -o thread4 –lpthread

运行这个程序:

$ ./thread4

Input some text. Enter 'end' to finish

123

You input 3 characters

1234

You input 4 characters

12345

You input 5 characters

end

You input 3 characters

Thread joined

6.线程的属性

之前我们并未谈及到线程的属性,可以控制的线程属性是非常多的,这里面只列举一些常用的。

如在前面的示例中,我们都使用的pthread_join同步线程,但其实有些情况下,我们并不需要。如:主线程为服务线程,而第二个线程为数据备份线程,备份工作完成之后,第二个线程可以直接终止了,它没有必要再返回到主线程中。因此,我们可以创建一个“脱离线程”。

下面介绍几个常用的函数:

(1)int pthread_attr_init (pthread_attr_t* attr);

功能:对线程属性变量的初始化。

attr:线程属性。

函数返回值:成功:0,失败:-1

(2) int pthread_attr_setscope (pthread_attr_t* attr, int scope);

功能:设置线程绑定属性。

attr:线程属性。

scope:PTHREAD_SCOPE_SYSTEM(绑定);

PTHREAD_SCOPE_PROCESS(非绑定)

函数返回值:成功:0,失败:-1

(3) int pthread_attr_setdetachstate (pthread_attr_t* attr, int detachstate);

功能:设置线程分离属性。

attr:线程属性。

detachstate:PTHREAD_CREATE_DETACHED(分离);

PTHREAD_CREATE_JOINABLE(非分离)

函数返回值:成功:0,失败:-1

(4) int pthread_attr_setschedpolicy(pthread_attr_t* attr, int policy);

功能:设置创建线程的调度策略。

attr:线程属性;

policy:线程调度策略:SCHED_FIFO、SCHED_RR和SCHED_OTHER。

函数返回值:成功:0,失败:-1

(5) int pthread_attr_setschedparam (pthread_attr_t* attr, struct sched_param* param);

功能:设置线程优先级。

attr:线程属性。

param:线程优先级。

函数返回值:成功:0,失败:-1

(6) int pthread_attr_destroy (pthread_attr_t* attr);

功能:对线程属性变量的销毁。

attr:线程属性。

函数返回值:成功:0,失败:-1

(7)其他

int pthread_attr_setguardsize(pthread_attr_t* attr,size_t guardsize);//设置新创建线程栈的保护区大小。

int pthread_attr_setinheritsched(pthread_attr_t* attr, int inheritsched);//决定怎样设置新创建线程的调度属性。

int pthread_attr_setstack(pthread_attr_t* attr, void* stackader,size_t stacksize);//两者共同决定了线程栈的基地址以及堆栈的最小尺寸(以字节为单位)。

int pthread_attr_setstackaddr(pthread_attr_t* attr, void* stackader);//决定了新创建线程的栈的基地址。

int pthread_attr_setstacksize(pthread_attr_t* attr, size_t stacksize);//决定了新创建线程的栈的最小尺寸(以字节为单位)。

例:创建优先级为10的线程。

pthread_attr_t attr;

struct sched_param param;

pthread_attr_init(&attr);

pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM); //绑定

pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); //分离pthread_attr_setschedpolicy(&attr, SCHED_RR);

param.sched_priority = 10;

pthread_attr_setschedparam(&attr, ¶m);

pthread_create(xxx, &attr, xxx, xxx);

pthread_attr_destroy(&attr);

下面实现一个脱离线程的程序,创建一个线程,其属性设置为脱离状态。子线程结束时,要使用pthread_exit,原来的主线程不再等待与子线程重新合并。代码如下:

[cpp]view plain copy

1.#include

2.#include

3.#include

4.#include

5.

6.void *thread_function(void *arg);

7.

8.char message[] = "Hello World";

9.int thread_finished = 0;

10.

11.int main()

12.{

13.int res;

14. pthread_t a_thread;

15. pthread_attr_t thread_attr;

16.

17. res = pthread_attr_init(&thread_attr);

18.if (res != 0)

19. {

20. perror("Attribute creation failed");

21. exit(EXIT_FAILURE);

22. }

23.

24. res = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED)

;

25.if (res != 0)

26. {

27. perror("Setting detached attribute failed");

28. exit(EXIT_FAILURE);

29. }

30.

31. res = pthread_create(&a_thread, &thread_attr, thread_function, (void*)me

ssage);

32.if (res != 0)

33. {

34. perror("Thread creation failed");

35. exit(EXIT_FAILURE);

36. }

37.

38. pthread_attr_destroy(&thread_attr);

39.while(!thread_finished)

40. {

41. printf("Waiting for thread to say it's finished.../n");

42. sleep(1);

43. }

44.

45. printf("Other thread finished, bye!/n");

46. exit(EXIT_SUCCESS);

47.}

48.

49.void *thread_function(void *arg)

50.{

51. printf("thread_function is running. Argument was %s/n", (char *)arg);

52. sleep(4);

53. printf("Second thread setting finished flag, and exiting now/n");

54. thread_finished = 1;

55. pthread_exit(NULL);

56.}

编译这个程序:

gcc -D_REENTRANT thread5.c -o thread5 –lpthread

运行这个程序:

$ ./thread5

thread_function is running. Argument: hello world!

Waiting for thread to finished...

Waiting for thread to finished...

Waiting for thread to finished...

Waiting for thread to finished...

Second thread setting finished flag, and exiting now

Other thread finished!

通过设置线程的属性,我们还可以控制线程的调试,其方式与设置脱离状态是一样的。

7.取消一个线程

有时,我们想让一个线程可以要求另一个线程终止,线程有方法做到这一点,与信号处理一样,线程可以在被要求终止时改变其行为。

先来看用于请求一个线程终止的函数:

#include

int pthread_cancel(pthread_t thread);

这个函数简单易懂,提供一个线程标识符,我们就可以发送请求来取消它。

线程可以用pthread_setcancelstate设置自己的取消状态。

#include

int pthread_setcancelstate(int state, int *oldstate);

参数说明:

state:可以是PTHREAD_CANCEL_ENABLE允许线程接收取消请求,也可以是PTHREAD_CANCEL_DISABLE忽略取消请求。

oldstate:获取先前的取消状态。如果对它没兴趣,可以简单地设置为NULL。如果取消请求被接受了,线程可以进入第二个控制层次,用pthread_setcanceltype 设置取消类型。

#include

int pthread_setcanceltype(int type, int *oldtype);

参数说明:

type:可以取PTHREAD_CANCEL_ASYNCHRONOUS,它将使得在接收到取消请求后立即采取行动;另一个是PTHREAD_CANCEL_DEFERRED,它将使得在接收到取消请求后,一直等待直到线程执行了下述函数之一后才采取行动:pthread_join、pthread_cond_wait、pthread_cond_timedwait、pthread_testcancel、sem_wait或sigwait。

oldtype:允许保存先前的状态,如果不想知道先前的状态,可以传递NULL。

默认情况下,线程在启动时的取消状态为PTHREAD_CANCEL_ENABLE,取消类型是PTHREAD_CANCEL_DEFERRED。

下面编写代码thread6.c,主线程向它创建的线程发送一个取消请求。

[cpp]view plain copy

1.#include

2.#include

3.#include

4.

5.void *thread_function(void *arg);

6.

7.int main()

8.{

9.int res;

10. pthread_t a_thread;

11.void *thread_result;

12.

13. res = pthread_create(&a_thread, NULL, thread_function, NULL);

14.if (res != 0)

15. {

16. perror("Thread create failed!");

17. exit(EXIT_FAILURE);

18. }

19.

20. sleep(4);

21. printf("Canceling thread.../n");

22.

23. res = pthread_cancel(a_thread);

24.if (res != 0)

25. {

26. perror("Thread cancel failed!");

27. exit(EXIT_FAILURE);

28. }

29.

30. printf ("Waiting for thread to finished.../n");

31.

32. res = pthread_join(a_thread, &thread_result);

33.if (res != 0)

34. {

35. perror ("Thread join failed!");

36. exit(EXIT_FAILURE);

37. }

38.

39. printf("Thread canceled!");

40.

41. exit(EXIT_FAILURE);

42.}

43.

44.void *thread_function(void *arg)

45.{

46.int i;

47.int res;

48.

49. res = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);

50.if (res != 0)

51. {

52. perror("Thread setcancelstate failed!");

53. exit(EXIT_FAILURE);

54. }

55.

56. res = pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);

57.if (res != 0)

58. {

59. perror("Thread setcanceltype failed!");

60. exit(EXIT_FAILURE);

61. }

62.

63. printf("thread_function is running.../n");

64.

65.for (i = 0; i < 10; i++)

66. {

67. printf("Thread is still running (%d).../n", i);

68. sleep(1);

69. }

70. pthread_exit(0);

71.}

编译这个程序:

gcc -D_REENTRANT thread6.c -o thread6 –lpthread

运行这个程序:

$ ./thread6

thread_function is running...

Thread is still running (0)...

Thread is still running (1)...

Thread is still running (2)...

Thread is still running (3)...

Canceling thread...

Waiting for thread to finished...

8.多线程

之前,我们所编写的代码里面都仅仅是创建了一个线程,现在我们来演示一下如何创建一个多线程的程序。

[cpp]view plain copy

1.#include

2.#include

3.#include

4.

5.#define NUM 6

6.

7.void *thread_function(void *arg);

8.

9.int main()

10.{

11.int res;

12. pthread_t a_thread[NUM];

13.void *thread_result;

14.int index;

15.

16.for (index = 0; index < NUM; ++index) {

17. res = pthread_create(&a_thread[index], NULL, thread_function, (void

*)index);

18.if (res != 0)

19. {

20. perror("Thread create failed!");

21. exit(EXIT_FAILURE);

22. }

23. sleep(1);

24. }

25.

26. printf("Waiting for threads to finished.../n");

27.

28.for (index = NUM - 1; index >= 0; --index)

29. {

30. res = pthread_join(a_thread[index], &thread_result);

31.if (res == 0)

32. {

33. printf("Picked up a thread:%d/n", index + 1);

34. }

35.else

36. {

37. perror("pthread_join failed/n");

38. }

39. }

40.

41. printf("All done/n");

42.

43. exit(EXIT_SUCCESS);

44.}

45.

46.void *thread_function(void *arg)

47.{

48.int my_number = (int)arg;

49.int rand_num;

50.

51. printf("thread_function is running. Argument was %d/n", my_number);

52. rand_num = 1 + (int)(9.0 * rand()/(RAND_MAX + 1.0));

53. sleep(rand_num);

54. printf("Bye from %d/n", my_number);

55. pthread_exit(NULL);

56.}

编译这个程序:

gcc -D_REENTRANT thread7.c -o thread7 –lpthread

运行这个程序:

$ ./thread7

thread_function is running. Argument was 0

Suse_Linux常用命令小结

1、Suse9下配置默认网关 a、在/etc/sysconfig/network/routes文件下添加如下行: default 网关IP地址 - - b、重启网络服务 # /etc/init.d/xinetd restart # rcnetwork restart c、查看路由 # netstat -r 2、Suse9下开启telnet服务 a、修改/etc/xinetd.d/telnet文件:disnable=no 如果/etc/xinetd.d下不存在telnet文件,可能是telnet服务包没有安装,需要通过光盘安装好。 b、修改/etc/pam.d/login文件,注释如下行,允许root用户telnet "auth required pam_securetty.so" c、编辑/etc/securetty文件 # vi /etc/securetty 在文件中增加下面的内容: pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9

d、重启网络服务 # /etc/init.d/xinetd restart # rcnetwork restart 3、Suse9下开启FTP服务 a、修改/etc/xinetd.d/vsftpd文件:disnable=no b、修改/etc/vsftpd.conf文件,取消如下行的注释: write_enable=YES local_enable=YES local_umask=022 ascii_upload_enable=YES ascii_download_enable=YES c、修改/etc/ftpusers,注释掉允许ftp的用户,如root d、重启网络服务 # /etc/init.d/xinetd restart 4、Suse9下配置rlogin a、配置用户$HOME目录下的.rhosts文件 # vi .rhosts 主机名1 用户名 主机名2 用户名 b、修改/etc/xinetd.d/rlogin文件:disnable=no c、修改/etc/pam.d/rlogin文件,注释如下行,允许root用户rlogin "auth required pam_securetty.so" d、重启网络服务 # /etc/init.d/xinetd restart 5、查看版本、内核 # cat /etc/issue Welcome to SUSE LINUX Enterprise Server 9 (i586) - Kernel \r (\l).

linux常用命令大全

& &命令可用在其他任何命令的后面,它用来通知计算机在后台运行某一命令。通过把作业放在后台,用户可以继续使用当前的shell来处理其他命令;如果命令在前台运行的话,那么用户在此进程结束前不能继续使用当前的shell。 adduser adduser命令由root或其他具有权限的管理员用来创建新用户,跟在adduser命令后面的是所要创建的帐号名,例如:adduser flying alias alias命令用来设置命令的别名或替代名。一般说来别名往往是实际命令名的缩写。例如用户为ls设置一个别名dir: alias dir=ls 若仅输入alias本身时,系统将显示当前所有的别名。 bg bg命令用来迫使被挂起的进程在后台运行。例如,当你已经在前台启动了一个命令时(没有在此命令后使用&),你才想到这一命令将运行较长一段时间,但你这时还需使用shell。在这种情况下,可通过ctrl+z挂起当前运行的进程。此时你既可以使它长期挂起,也可以通过输入bg把这一进程放到后台运行。这样shell就可以用来执行其他的命令了。 cat cat通常是用来在屏幕上滚动显示文件的内容。它的格式是: cat〈filename〉 cd cd用来改变目录。这一命令非常有用,它有三种典型的使用方法。 cd移到目录树的上一层 cd~移动到用户的主目录,与单独使用cd相同 cd directory name改变到指定的目录 cp cp用来拷贝对象。例如要把file1拷贝到file2,用如下命令: cp file1 file2 dd dd命令用来转换文件格式。 fg fg命令用来激活某个被挂起的进程并使它在前台运行。当有一个进程正在运行时,由于某种原因需要挂起它,在执行完其他任务后,需要重新把这一进程调到前台运行,这时便可用bg命令使这一进程继续运行。 find find命令用来查找指定目录的文件。当找到后将按照用户的要求对文件进行处理。语法是: find以它为起点进行搜索的目录想要查找的文件名或元字符对文件执行的操作 grep grep命令用来在指定的对象中搜索指定的文本。语法是:grep〈text〉〈file〉。它还可以和其他命令的结果联合使用,例如: ps -ef|grep-v root 这一命令要求grep接受ps命令的输出,并除去所有包含单词root的进程(-v的含义是显示与文本不匹配的内容)。在不使用-v选项时,这一命令将显示进程清单中所有包含单词root的进程。 halt halt命令用来通知内核关闭系统,它是一个只能由超级用户执行的命令。 hostname 既可以用来显示系统当前的主机名或域名,也可用来设置系统的主机名。 login 当向系统注册时,将使用login。login命令也可用来随时从这一用户改变到另一用户。 logout

linux常用的60个命令

Linux必学的60个命令 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。 ◆安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last; ◆文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln; ◆系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab; ◆网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup; ◆系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who; ◆其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。 本文以Mandrake Linux 9.1(Kenrel 2.4.21)为例,介绍Linux下的安装和登录命令。immortality按:请用ctrl+f在本页中查找某一部分的内容或某一命令的用法。

常用总结linux命令

Linux与unix对比: 1. Unix的历史久于linux. Linux的思想源于Unix 2. UNIX是商业软件,而Linux是自由软件,免费、公开源代码。 3. linux的核心是免费,核心开放自由使用.而unix的核心并不公开。 Linux的应用领域: 服务端,嵌入式,家庭信息的系统 网络嵌入式:虚拟私有网络(VPN),路由器(Router) 家电生活:影像电话、数字监视系统 服务端:web服务器,Linux系统 Linux有哪些版本: Febora,ubuntu,redhat(中国),debian,centOS Vmware虚拟机的介绍: 虚拟机的定义:是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。 虚拟机的特点: 1.基于一台电脑 2.虚拟多台计算机 3.便于安装和删除 Vmware虚拟机操作 1.虚拟机界面布局 2.虚拟机操作功能 3.新建虚拟机系统 虚拟机与物理机的异同: 虚拟机使用的技术:虚拟技术 虚拟机与物理机异同 1. 保证主机的快速运行,减少不必要的垃圾安装程序 2.安全性高:保密比较好的,单独在一个环境下面运行 3.使用方便:在虚拟机中随便安装和彻底删除 4.费用便宜:维护降低,降低软硬件设备的成本 1.2 安装Linux时最少需要两个分区硬盘分区(至少分/、swap(Swap交换分区设为物理内存的二倍), 可多分一个/home作为练习) Linux的安装步骤: 1、载入系统数据 2、系统分区划分 3、系统初始配置 Linux的系统目录: / 根目录,存放系统命令和用户数据等 /boot 存放与Linux启动相关的程序 /home 用户目录,存放普通用户的数据 /tmp 临时文件 /usr 是存放软件的地方,如有可能应将最大空间分给它 /usr/local 自已安装程序安装在此

Linux常用命令详解(配合示例说明,清晰易懂)

Linux常用命令详解 (常用、详细) BISTU 自动化学院 刷碗小工(frisen.imtm) 2010年11月 开源社区,造福大家,版权所有,翻录不究(初次接触Linux命令可能对以下说明有不少疑问,可待看完一遍后再回头细看) (配合Ctrl + F可快速查找你想了解的命令)

索引:(待完善) 文件说明:Linux命令很多,但最常用的80个左右 文档内容充实,用示例说明命令如何使用笔者力求语言简洁,清晰易懂 由于忙于其他事情,改进排版的工作只能搁置了 最后,望此文档能为大家Linux学习之路献微薄之力 一、路径: 执行命令前必须要考虑的一步是命令的路径,若是路径错误或是没有正确的指定,可能导致错误的执行或是找不到该命令。要知道设置的路径,可执行以下命令: 一般而言,本书的命令位于/bin、usr/bin、/sbin、/usr/sbin之中。若读者执行了命令却出现“command not find”或是“命令不存在”的字样,就必须要确定该命令的位置是否在命令的路径中,或是系统上根本没有安装该套件。 二、命令顺序: 若在shell内置的命令/bin以及/usr/bin之下都出现了命令pwd,那当我们执行该命令时,会执行哪一个?答案是第一优先执行shell内置的命令,再执行路径中的设置;因此若有相同名称的命令时,必须要注意顺序设置,或是直接输入完整路径。 三、参数(或称选项)顺序: 一般除了特殊情况,参数是没有顺序的。举例而言,输入“–a –v”与输入“–v –a”以及“–av”的执行效果是相同的。但若该参数后指定了要接的文件或特殊对象,如“–a cmd1 –v cmd2”,则不能任意改变选项顺序。 四、常用参数: 下面所列的是常见的参数(选项)意义: --help,-h 显示帮助信息 --version,-V 显示版本信息 -v 繁琐模式(显示命令完整的执行过程) -i 交谈模式(指定界面) -l 长列表输出格式 -q,-s 安静模式(不显示任何输出或错误信息) -R 递归模式(连同目录下所有文件和子目录一起处理) -z 压缩 五、命令的结合与定向: 命令中除了一般命令外,还有管道(或称途径)(|)与定向(>或>>)。 管道(途径)的用法: “命令一[选项]”| “命令二[选项]”,也就是将“命令一[选项]”的输出结果传到“命令二[选项]”,通过命令二的处理之后才输出到标准输出(屏幕)上。比如“ls /etc”会列出etc下的所有文件,若加上“| less”,也就是“ls /etc | less”,则会将“ls /etc”的结果通过less分页输出。 定向的用法: 将结果定向到命令的输出设备,一般不加文件名意为将结果输出到屏幕,若是在定向后加上文件名,则会将命令的执行结果输出到定向的文件,例如“ls > temp.txt”,就会将ls 的结果输出到文件temp.txt中。“>”与“>>”的差异在于前者是覆盖,而后者是附加。 六、命令中的命令: 许多命令在执行后,会进入该命令的操作模式,如fdisk、pine、top等,进入后我们必须要使用该命令中的命令,才能正确执行;而一般要退出该命令,可以输入exit、q、quit或是按【Ctrl+C】组合

Suse_Linux常用命令小结

Suse Linux常用命令 目录 1、Suse9下配置默认网关 (1) 2、Suse9下开启telnet服务 (1) 3、Suse9下开启FTP服务 (2) 4、Suse9下配置rlogin (2) 5、查看版本、内核 (2) 6、查看CPU、MEM (3) 7、查看操作系统位数 (3) 8、查看VCS双机软件版本 (3) 9、主机名修改 (3) 10、检查系统分区 (4) 11、检查内存空间 (4) 12、检查时区设置 (4) 13、修改时区设置 (4) 14、系统时间设置 (4) 15、重新设置光纤驱动 (4) 16、检查磁盘分区信息 (4) 17、创建物理卷 (4) 18、查看已经创建的PV (5) 19、创建卷组 (5) 20、创建逻辑卷 (5) 21、查看创建的卷组和逻辑卷 (5) 22、创建文件系统 (5) 23、激活/去激活卷组 (5) 24、查找卷组信息 (5) 25、IP地址配置(临时生效,系统重启后会丢失) (5) 26、IP地址配置(永久生效) (6) 27、配置IP地址与节点名映射关系 (7) 28、激活/去激活网卡 (7) 29、配置双机ssh信任关系(两个节点上都要执行该操作) (7) 30、配置用户的.rhosts文件 (8) 31、配置心跳网卡信息 (8) 32、修改主机名 (9) 33、VCS涉及主机名的修改 (10) 34、XDM配置 (10) 35、Suse10sp1下开启FTP服务 (11) 36、查看操作系统补丁 (12) 37、查看操作版本 (12)

1、Suse9下配置默认网关 a、在/etc/sysconfig/network/routes文件下添加如下行: default 网关IP地址 - - b、重启网络服务 # /etc/init.d/xinetd restart # rcnetwork restart c、查看路由 # netstat -r 2、Suse9下开启telnet服务 a、修改/etc/xinetd.d/telnet文件:disnable=no 如果/etc/xinetd.d下不存在telnet文件,可能是telnet服务包没有安装,需要通过光盘安装好。 b、修改/etc/pam.d/login文件,注释如下行,允许root用户telnet "auth required pam_securetty.so" c、编辑/etc/securetty文件 # vi /etc/securetty 在文件中增加下面的内容: pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9 d、重启网络服务

Linux常用命令分类汇总

初学Linux时最让人觉得困惑的是有太多太多的命令需要去记,往往会出现想执行一个操作不知道用什么命令,知道命令却不知道该怎么用的时候,这里对Linux系统中的常用命令做一个简单的汇总,希望对初学的朋友有所帮助。 Linux命令的基本格式: command option parameter(object) command就是要执行的操作,option指出怎么执行这个操作,parameter则是要操作的对象。例如想查看一个目录的内容,“查看”是动作,“目录”是对象,如果加一个“详细”的话,那么“详细”就是选项了。 #ls -l /root ls: command -l: option /root:parameter 了解了这一点之后,我们即可知道:所有的命令都有其操作对象,也就是说命令的作用范围是有限的;同是,对于同一种对象,能在其上进行的操作也是特定的。因此,我们可以根据对象的不同而对Linux中的常用命令进行分类.(没有给出具体的用法,有时间再添加:-) ) 目录文件类命令: cd切换目录 dir显示目录内容 ls显示目录内容 cat显示文件内容,适合小文件 less分屏显示文件内容,可前后翻阅 more分屏显示文件内容,不可向前翻阅 head显示文件头部内容 tail显示文件尾部内容 touch创建文件或更新文件访问时间 mkdir创建目录 rmdir删除目录 rm删除文件或目录(-r) cp复制文件或目录 mv移动或改名 chown修改文件所有者 chgrp修改文件所属组 chmod修改文件目录权限 find查找文件或目录 tar打包工具 gzip/gunzip压缩工具 bzip2/bunzip2压缩工具 vi文本编辑工具 用户类命令: useradd添加用户

软件测试常用的Linux命令总结

软件测试常用的Linux命令总结 软件测试人员要跟系统软件经常打交道,所以掌握多一点linux命令是非常有必要的。下面由小编整理了软件侧市场有的Linux命令总结,希望对你有帮助。 软件测试常用的Linux命令总结——初级篇 1 目录与文件操作 1.1 ls(初级) 使用权限:所有人 功能: 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。 参数: -a 显示所有档案及目录(ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)

-l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出 -r 将档案以相反次序显示(原定依英文字母次序) -t 将档案依建立时间之先后次序列出 -A 同-a ,但不列出"." (目前目录) 及".." (父目录) -F 在列出的档案名称后加一符号;例如可执行档则加"*", 目录则加"/" -R 若目录下有档案,则以下之档案亦皆依序列出 范例: 列出目前工作目录下所有名称是s 开头的档案,愈新的排愈后面: ls -ltr s*

将/bin 目录以下所有目录及档案详细资料列出: ls -lR /bin 列出目前工作目录下所有档案及目录;目录于名称后加"/", 可执行档于名称后加"*" ls –AF常用方式及使用技巧:ls –l 以列表形式输出当前目录中存在的文件ls –lt 按照修改时间倒序排序,即最新的在最上面展示 1.2 ll(初级) ls –l的缩写形式 cd(初级) 使用权限: 所有使用者 使用方式: cd [dirName]

Linux常用命令小结

Linux常用命令小结 scp 远程文件复制 主机A:192.168.1.240, 主机B:192.168.1.102,其ssh都允许root登录,要把A上的/root/abc.zip复制到B的/persistent目录, 可在A机上使用命令: scp /root/abc.zip root@192.168.102:/persistent/ 若端口非22,比如8022,则加-P参数: scp -P 8022 /root/abc.zip root@192.168.1.102:/persistent/ 也可在B机上使用命令: scp root@192.168.1.240:/root/abc.zip /persistent/

vi 文件编辑 vi file 编辑或创建文件file vi分为编辑状态和命令状态。输入i进入编辑状态,按ESC键退出编辑状态。 命令状态下,常用命令有: :q(退出) :q!(不保存退出,强制退出) :w(保存文件) :w!(不询问方式写入文件) :1,20w ! tmp (第1行到第20行保存到文件tmp) :r file(读文件file) :%s/oldchars/newchars/g(将所有字串oldchars换成newchars) :0,$s/string1/string2/g(0,$:替换范围从第0行到最后一行) :%s/^[ ]\+/^I/ (将一行开头的若干空格替换成Tab) /string(查找string字符串) ?string(向上查找string字符串) :1,8d (删除第1行到第8行) :%s/^.\{5}//gic (删除每行的前5个字符) :%s/^M/ /g (删除^M) :g/^$/d (删除空行(只含有回车)) :g/^[^I| ]*$/d (删除所有空行(^I表示Tab,(空行中含有空格或Tab或者只有回车或者既有空格又有Tab)))

Linux常用命令实验报告

实验二 姓名:陈辉龙学号:201407010201 班级:14计科(1)一.实验目的: 掌握Linux常见命令,为今后的实验打下良好的基础。 二.实验内容 1.新建用户为chenhuilong,配置密码为passwd: 2.切换到chenhuilong用户,并在/home/chenhuilong目录下新建文件夹dir: 3.在文件夹dir下新建文件hello(内容为"printf hello world!"),并将其拷贝至/home/user目录: 4.统计/home/user目录下文件的个数,包括子目录里的首字符为-的普通文件:

5.统计/home下目录的个数,包括子目录里的目录: 6.显示/home/user目录下名为hello的文件的行数、字数以及字符数(使用输入重定向): 7.将上步的结果输出重定向到名为cnt_hello的文件: 8.删除/home/user目录下的hello文件: 9.进入/home/user/dir文件夹,将hello文件属性变为-rwxrw-r--(使用符号标记方式),并为hello文件在/home/user目录下建立软链接,链接文件名为link_hello:

10.查看/home/user/dir/hello文件的详细信息: 11.切换至根目录下查找hello文件: 12.打包home/user/dir/hello文件,并进行压缩,然后再进行解压缩解包: 13.退出user用户,删除/home/user文件夹:

14.将文件夹/home的所有者改为user用户,并删除user用户: 三.实验总结: 本实验旨在熟悉Unix的常用命令,实验较简单,操作起来还算顺利,做了一遍感觉还不是很熟悉,因此做了两遍,第二遍就很得心顺手。通过这次实验,熟悉了一些常用的命令操作,为以后的学习打下坚实的基础,提高自己的动手能力。

Linux 操作系统Shell常用命令总结 (linux系统)

Linux 操作系统Shell常用命令总结(linux系统) linux软件开发 1. find find pathnam e -options [-print -exec -ok] 让我们来看看该命令的参数: pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print find命令将匹配的文件输出到标准输出。 -exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格,同时两个{}之间没有空格, 注意一定有分号结尾。 0) -ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行 find . -name "datafile" -ctime -1 -exec ls -l {} \; 找到文件名为datafile*, 同时创建实际为1天之内的文件, 然后显示他们的明细. find . -name "datafile" -ctime -1 -exec rm -f {} \; 找到文件名为datafile*, 同时创建实际为1天之内的文件, 然后删除他们. find . -name "datafile" -ctime -1 -ok ls -l {} \; 这两个例子和上面的唯一区别就是-ok会在每个文件被执行命令时提示用户, 更加安全. find . -name "datafile" -ctime -1 -ok rm -f {} \; 1) find . -name 基于文件名查找,但是文件名的大小写敏感. find . -name "datafile*" 2) find . -iname 基于文件名查找,但是文件名的大小写不敏感. find . -iname "datafile*"

Linux操作系统及常用命令

Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。 下面我将比较常用的命令,按照系统中的作用分成以下6个部分 安装和登录命令:shutdown、reboot、install、mount、umount、exit、last; 文件处理命令:file、mkdir、grep、find、mv、ls、diff、cat; 系统管理相关命令:df、top、free、adduser、groupadd、kill、crontab; 网络操作命令:ifconfig、ping、netstat、telnet、ftp、route、scp、finger; 系统安全相关命令:passwd、su、chmod、chown、sudo、ps、who; 其它命令:tar、unzip、unarj、man 安装与登陆命令 shutdown 1.作用 shutdown命令的作用是关闭计算机,它的使用权限是超级用户root。 2.格式 shutdown [-h][-i][-k][-m][-t] 3.重要参数 -t:在改变到其它运行级别之前,告诉init程序多久以后关机。 -k:并不真正关机,只是送警告信号给每位登录者。 -h:关机后关闭电源。 -c:cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。 -F:在重启计算机时强迫fsck。 -time:设定关机前的时间。 -m: 将系统改为单用户模式。 -i:关机时显示系统信息。 -r:重启。 4.实用例子 远程重启满天星服务器192.168.0.25 shutdown -m \\192.168.0.25 -r -f -t 0 远程重启兴通博服务器192.168.0.41 shutdown -m \\192.168.0.41 -r -f -t 0 reboot 1.作用 reboot命令的作用是重新启动计算机,它的使用权限是系统管理者root。 2.格式

Linux Shell常用命令总结

1. find find pathname -options [-print -exec -ok] 让我们来看看该命令的参数: pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print find命令将匹配的文件输出到标准输出。 -exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格,同时两个{}之间没有空格, 注意一定有分号结尾。 0) -ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行 find . -name "datafile" -ctime -1 -exec ls -l {} \; 找到文件名为datafile*, 同时创建实际为1天之内的文件, 然后显示他们的明细. find . -name "datafile" -ctime -1 -exec rm -f {} \; 找到文件名为datafile*, 同时创建实际 为1天之内的文件, 然后删除他们. find . -name "datafile" -ctime -1 -ok ls -l {} \; 这两个例子和上面的唯一区别就是-ok会在每个文件被执行命令时提示用户, 更加安全. find . -name "datafile" -ctime -1 -ok rm -f {} \; 1) find . -name 基于文件名查找,但是文件名的大小写敏感. find . -name "datafile*" 2) find . -iname 基于文件名查找,但是文件名的大小写不敏感. find . -iname "datafile*" 3) find . -maxdepth 2 -name fred 找出文件名为fred,其中find搜索的目录深度为2(距当前目录), 其中当前目录被视为第一层. 4) find . -perm 644 -maxdepth 3 -name "datafile*" (表示权限为644的, 搜索的目录深度为3, 名字为datafile*的文件) 5) find . -path "./rw" -prune -o -name "datafile*" 列出所有不在./rw及其子目录下文件名为datafile*的文件。 find . -path "./dir*" 列出所有符合dir*的目录及其目录的文件. find . \( -path "./d1" -o -path "./d2" \) -prune -o -name "datafile*" 列出所有不在./d1和d2及其子目录下文件名为datafile*的文件。 6) find . -user ydev 找出所有属主用户为ydev的文件。 find . ! -user ydev 找出所有属主用户不为ydev的文件,注意!和-user之间的空格。 7) find . -nouser 找出所有没有属主用户的文件,换句话就是,主用户可能已经被删除。 8) find . -group ydev 找出所有属主用户组为ydev的文件。

Red_Hat_Linux常用命令汇总

[资料] Red Hat Linux常用命令汇总 Linux 常用命令汇总 ls命令: 1. ls //列出当前目录的文件和文件夹 2. ls –a //列出当前目录的文件和文件夹,包含隐藏文件 3. ls –l //列出详细信息 4. ls 目录 //列出某目录下的文件 pwd命令 //查看当前所在位置 du 命令 1. du 目录 //查看目录的总容量以及子目录的容量 2. du –s 目录 //查看目录总容量 cd 命令 1.cd .. //回上一级目录 2.cd / //回根目录 3. cd //回用户主目录 4.cd 目录路径 //去某目录 mkdir 目录名 //创建目录 rmdir 空目录名 //删除空目录 rm 文件名 //删除文件 rm –rf 目录名 //删除目录以及目录下所有文件 mount 命令 1.mount /dev/cdrom /mnt/cdrom //挂载光驱到 /mnt/cdrom目录下2.mount -t vfat /dev/sda1 /mnt/u //挂载U盘到 /mnt/u目录下

3. umount /mnt/cdrom //卸载光驱 fdisk –l //查看本机存储设备 file 文件名 //查看文件类型 find 目录名–name “*.c” //在某目录下查找文件为*.c的文件 whereis 文件名 //查找文件在哪些目录下 cat 文件名 //显示文件内容 cat 文件名 | grep 文字 //只显示包含文字相关的内容 cat 文件名 | more //分页显示文件内容 tail 文件名 //查看文件末尾 head 文件名 //从头查看文件 cp 命令: cp 文件1 文件2 //复制文件1 到文件2 cp 文件1 目录1 //复制文件1到目录1下 cp 目录1/文件1 目录2 //复制目录1下的文件1到目录2下 cp –r 目录1 目录2 //复制目录1下所有内容到目录2 mv 命令: mv 文件1 文件2 //重命名文件1为文件2 mv 文件1 目录1 //移动文件1到目录1下 mv 目录1/文件1 目录2 //移动目录1下的文件1到目录2下 mv –r 目录1 目录2 //移动目录1下所有内容到目录2 chmod 命令: chmod u+x g+r o-w 文件名 //为文件设置权限(用户,组,其他人)chmod 744 文件名 //为文件设置权限(1-执行,2-写,4-读) chown 命令: chown 用户文件名 //把文件改为用户所有

Linux常用命令个人总结

Linux学习计划 一、Linux的安装配置 目标: 1)掌握Linux常用版本的安装配置 2)熟悉Linux的主要目录结构及其作用 3)了解操作系统的分类 二、基本使用方法 command not found:命令无法运行 目标:掌握Linux常用命令使用方法 1)磁盘操作 ●df:查看磁盘空间 ●du:查看指定目录下每个文件占用空间 ●fdisk:磁盘分区 ●sfdisk:为硬盘分区工具程序,可显示分区的设置信息,并检查分区 是否正常。 ●mount:挂载命令 ●umount:卸载命令 umount命令是mount命令的逆操作,它的参数和使用方法和mount 命令是一样的。Linux挂装CD-ROM后,会锁定CD—ROM,这样就不能用CD-ROM面板上的Eject按钮弹出它。但是,当不再需要光盘时,如果已将/cdrom作为符号链接,请使用umount/cdrom来卸装它。仅当无用户正在使用光盘时,该命令才会成功。该命令包括了将带有当前工 作目录当作该光盘中的目录的终端窗口。 ●sync: 将内存缓冲区内的数据写入磁盘。 ●fsck: 检查文件系统并尝试修复错误。 ●mkfs 功能说明:建立各种文件系统。 语法:mkfs [-vV][fs][-f <文件系统类型>][设备名称][区块数] 补充说明:mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。 参数: fs 指定建立文件系统时的参数。 -t<文件系统类型> 指定要建立何种文件系统。 -v 显示版本信息与详细的使用方法。 -V 显示简要的使用方法。 2)用户管理 #gpasswd -a 用户名组名//同-G

Linux常见的基本命令的面试题总结

Linux常见的基本命令的面试题总结 相信很多小伙伴在面试时都遇到过或多或少的linux命令相关题目。 Linux常见的基本命令面试题总结 Linux命令面试题1、显示目录和文件的命令 Ls:用于查看所有文件夹的命令。 Dir:用于显示指定文件夹和目录的命令Tree:以树状图列出目录内容 Du:显示目录或文件大小 Linux命令面试题2、修改目录,文件权限和属主及数组命令 Chmod:用于改变指定文件的权限命令。 Chown:用于改变文件拥有属性的命令。 Chgrp:用于改变文件群组的命令。 Chattr:用于设置文件具有不可删除和修改权限。 Lsattr:用于显示文件或目录的隐藏属性。 Linux命令面试题3、创建和删除目录的命令 Mkdir:用于创建目录 Rmdir:用于删除空的目录 Rm -f:用于删除不为空的目录 Linux命令面试题4、创建和删除,重命名,复制文件的命令

Touch:创建一个新的文件 Vi:创建一个新的文件 Rm:删除文件或目录 Mv:重命名或移动文件的命令 Cp:复制命令 Linux命令面试题5、显示文件内容的命令 Cat:用于显示指定文件的全部内容 More:用分页的形式显示指定文件的内容 Less:用分页的形式显示指定文件的内容,区别是more和less翻页使用的操作键不同。 Head:用于显示文件的前n行内容。 Tail:用于显示文件的后n行内容。 Tail -f:用于自动刷新的显示文件后n行数据内容。 Linux命令面试题6、查找命令 Find:查找指定的文件。 Whereis:查找指定的文件源和二进制文件和手册等 Which:用于查询命令或别名的位置。 Locate:快速查找系统数据库中指定的内容。 Grep:查找文件里符合条件的字符串。 Linux命令面试题7、关机和重启计算机的命令 Shutdown:-r 关机后立即重启 -k 并不真正的关机,而只是发出警告信息给所有用户

linux常用命令总结

Linux的常用命令 <1>文件目录操作命令 1. 命令提示符 [root@localhost ~]# root :用户名 @localhost:主机名 ~ :表示路径,表示当前用户的根目录 普通用户的根目录:/home/用户名XX/ 超级管理员:/root/ #:表示超级管理员 $:普通用户 2. 查看当前的工作目录:pwd : print working directory 3. 显示文件或者目录列表:ls :list -a :列出当前目录所有文件,显示隐藏文件 -l :列出文件的详细参数,简写:ll -h :显示文件大小的单位 -d :显示文件目录本身的属性 -alhd :参数可以组合使用 4. 切换目录:cd : change directory 相对路径:参考当前目录,进行切换,先确认当前所在的位置绝对路径:从根目录开始切换,在任何目录下,都可以使用 cd 目录(相对、绝对) cd . :进入当前目录(刷新当前目录) cd .. :进入上一级目录 cd ~ :回到家目录 cd :回到家目录 cd - :回到上次所在的目录 5. 创建新的目录:mkdir:make directories mkdir 目录名称 -p : 创建多级目录 6. 删除空目录:rmdir :remove empty directory 7. 删除文件:rm : remove rm 文件 -r : 同时删除文件或目录 -f : 强制删除文件或目录(-rf,谨慎使用) -i : 询问的方式删除文件

8. 创建一个空文件:touch,摸一下 不会覆盖原数据,刷新访问时间 9. 显示文件中的内容:cat/tac ,瞄一眼 10. 以分屏的方式查看文件信息:more 空格:下一页 b:上一页 q:退出 分行查看文件信息:less 空格:下一页 b:上一页 q:退出 ↓:向下显示一行 ↑:向上显示一行 -m :显示和more命令显示百分比的方式 head:默认显示文件头部的信息,默认实现10行数据tail:默认显示文件尾部的信息,默认实现10行数据-n 条数文件 ctrl+c:终止命令 ctrl+l/clear:清屏 11. 复制文件或者目录:cp : copy cp 源文件目标文件 -a : 复制目录 12. 剪切、改名:mv : move mv 源文件目标文件 13. 统计文档的信息:wc : work count wc 文件名 14. 查找指定的数据:grep 15. 创建链接文件:ln :link ln -s 源文件目标文件 <2>文件的权限管理 1. 权限的分类 属主:user , u 属组:group , g 其他:other , o

工作中常用的linux命令总结(80个左右)

ls ==list 查看目录列表 -l(long) -d(directory目录) -F 给不同的文件类型结尾加标识 -p给目录加/ -r reverse 反转排序 -t 按修改时间排序 --color=auto 给输出的不同类型文件加不同的颜色 man ==命令的复杂帮助 help ==命令的帮助(bash的内置命令 mkdir ==make directory 作用是闯将目录,例如:mkdir /data -p 递归创建目录 cd ==change directory 作用是切换路径例如:cd / touch ==摸一下,作用是创建文件,例如: touch oldboy.txt vi ==编辑器,相当于记事本,有编辑功能但很弱 vim ==复杂编辑器,相当于,emeditor,editplus, notepad++ 快捷键:TAB 命令,路径补全 :wq 保存退出:q退出:q!强制退出 echo ==打印输出命令,配合>或者>>可以为文件覆盖及追加内容如:echo "oldboy oldgirl" >>lodboy.txt cat == 查看文件内容 -n查看行号 特效用法:增加多行内容 cat >>/data/oldboy.txt<

linux最常用的20个命令介绍

linux最常用的20个命令介绍 Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯托瓦兹在1991年10月5日首次发布。,在加上用户空间的应用程序之后,成为Linux 操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU 通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。大多数Linux系统还包括像提供GUI界面的X Window之类的程序。除了一部分专家之外,大多数人都是直接使用Linux发布版,而不是自己选择每一样组件或自行设置。 严格来讲,术语Linux只表示操作系统内核本身,但通常采用Linux内核来表达该意思。Linux则常用来指基于Linux内核的完整操作系统,包括GUI组件和许多其他实用工具。由于这些支持用户空间的系统工具和库主要由理查德斯托曼于1983年发起的GNU计划提供,自由软件基金会提议将该组合系统命名为GNU/Linux,但Linux不属于GNU计划。Linux最初是作为支持英特尔x86架构的个人电脑的一个自由操作系统。目前Linux已经被移植到更多的计算机硬件平台,远远超出其他任何操作系统。Linux可以运行在服务器和其他大型平台之上,如大型主机和超级计算机。世界上500个最快的超级计算机90%以上运行Linux发行版或变种,包括最快的前10名超级电脑运行的都是基于Linux内核的操作系统。Linux也广泛应用在嵌入式系统上,如手机(Mobile Phone)、平板电脑Tablet、路由器Router、电视TV和电子游戏机等。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上。 linux最常用的20个命令介绍玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了。当然你也可以在使用时去找一下man,他会帮你解决不少的问题。然而每个人玩Linux的目的都不同,所以他们常用的命令也就差异非常大,而我主要是用Linux进行C/C++和shell程序编写的,所以常用到的命令可以就会跟一个管理Linux

相关文档
最新文档