zoukankan      html  css  js  c++  java
  • linux命令学习笔记

    1.   编辑命令行的快捷键

    Ctrl+U     :删除当前整行

    Ctrl+C     :终止当前正在执行的命令,并移动光标到下一行的开头

    2.   显示正在运行的shell

     命令:echo $SHELL   

     示例:

    heaad@ubuntu:~$ echo $SHELL

    /bin/bash

      

    3.   为shell命令创建别名

    命令:alias 

     例如:

    alias la='ls -A' 表示 la已经设置为’ls –A’的别名。

    在shell中输入alias将显示所有的别名设置:

    heaad@ubuntu:~$ alias

    alias egrep='egrep --color=auto'

    alias fgrep='fgrep --color=auto'

    alias grep='grep --color=auto'

    alias l='ls -CF'

    alias la='ls -A'

    alias ll='ls -alF'

    alias ls='ls --color=auto'

    另外:'ls -A’与’ls -a’的区别是'ls -a'显示所有目录与文件,而'ls -A'显示除“.”与“..”外的所有目录与文件。

    4.   删除或复制非空目录

    rmdir 命令只能删除空目录,而rm则可以删除非空目录。

    rm -r 目录名       (可删除非空目录及该目录下所有文件,rm命令删除的东西都不会放入trash中,切记!)

    cp -r 源目录名 目标目录名         (可复制非空目录)

    5.   确定文件类型

    命令:file 文件列表

    例如:

    heaad@ubuntu:/bin$ file /bin/bash

    /bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

    这表明/bin/bash文件是32位ELF可执行文件,使用了动态链接方式编译,运行的目标平台是80386,文件中不包含debug信息(stripped)

    6.   ">>"、">"与"<"

    “>>”:追加操作符,例如命令“cat  file1  >>  file2”将file1的内容追加到file2后面

    “>”:Linux输出重定向操作符,例如命令 “cat  file1  file2  file3  >  file4 ”将file1、file2、file3的内容合并到file4中(file4原来的内容将丢失)。

    “<”:Linux输入重定向操作符,例如命令“more < file1 ”。

    7.   diff与patch

    diff命令:比较两个目录或两个文件的差异,一般用于生成源代码补丁

    示例:

    diff  -urBNw  dir1  dir2  > patch.diff

    将目录dir1与目录dir2的差别记录于patch.diff 。

    各个选项的意义:

    -u   : 采用新版式上下文格式(使用“+”和“-”来表示有差别的地方,并显示前后相同的3行)

    -r   :对目录进行递归处理

    -B   :忽略对空行的比较

    -N   :将不存在的文件当作空文件处理

    -w   :忽略对空格的比较

    patch命令:用于打补丁

    示例:

    使用下面命令把我们刚才生成的补丁文件patch.diff应用于dir1,从而使dir1与dir2的内容完全一样。

    cd  dir1

    patch  -p1  < ../patch.diff

    8.   chown,chgrp,chmod命令

    这3个命令都需要有管理员权限才能使用。

        (1)chown命令用于改变文件的所有者

     示例:

    下面的命令将文件file1的所有者改为root:

    heaad@ubuntu:~/a$ ls -l

    total 0

    -rw-r--r-- 1 heaad heaad 0 2010-05-10 20:26 file1 (file1所有者是用户heaad)

    heaad@ubuntu:~/a$ sudo chown root file1

    heaad@ubuntu:~/a$ ls -l

    total 0

    -rw-r--r-- 1 root heaad 0 2010-05-10 20:26 file1 (file1所有者被修改为root)

    (2)chgrp命令用于修改文件所属用户组

    Linux中文件所属用户组的用户对该文件拥有不同于普通用户的权限。

    示例:

    下面的命令把file1文件所属用户组改变为root:

    heaad@ubuntu:~/a$ sudo chgrp root file1

    heaad@ubuntu:~/a$ ls -l

    total 0

    -rw-r--r-- 1 root root 0 2010-05-10 20:26 file1 (文件所属用户组被改变为root)

    (3)chmod命令用于改变文件访问权限

      示例:

    heaad@ubuntu:~/a$ ls -l

    total 0

    -rw-r--r-- 1 root root 0 2010-05-10 20:26 file1

    heaad@ubuntu:~/a$ sudo chmod a+w,u+x,o-r file1  (给所有用户(a)加上写权限,给文件所有者(u)加上执行权限,剥夺其他用户(o)的读权限)

     heaad@ubuntu:~/a$ ls -l

    total 0

    -rwxrw--w- 1 root root 0 2010-05-10 20:26 file1

       对于每个文件都有3种不同的用户级别:文件所有者(u)、所属用户组(g)、系统中其他用户(o)。

    命令“sudo chmod a+w,u+x,o-r file1”表示给所有用户加上file1文件的写权限,给文件所有者加上执行权限,删除其他用户的读权限。chmod命令使用“+”来增加权限,用“-”删除权限,“=”来设置权限。

    9.   ln命令

    ln命令用于建立链接。

    (1)使用带有-s选项的ln命令将建立软链接,而不带-s的ln命令建立的是硬链接。

             示例:

    在当前目录建立软链接link_to_file1,使其链接到file1:

             heaad@ubuntu:~/a/d$ ln -s  ../file1  ./link_to_file1

    建立硬链接hardlink_to_file2,使其链接到file2:

    heaad@ubuntu:~/a/d$ ln  ../file2  ./hardlink_to_file2

     (2)再来看看我们建立的软链接与硬链接的不同之处:

    heaad@ubuntu:~/a/d$ ls -l

    total 4

    -rwxrwxrwx 2 heaad heaad 20 2010-05-10 20:53 hardlink_to_file2  (硬链接的链接计数是2)

    lrwxrwxrwx 1 heaad heaad  8 2010-05-10 20:52 link_to_file1 -> ../file1  (软链接的链接计数仍然是1)

     

    再看看原文件file1的变化:

    -rwxrwxrwx 1 root  root    17 2010-05-10 20:51 file1 (对文件file1建立软链接后,文件的链接计数仍然是1)

    -rwxrwxrwx 2 heaad heaad   20 2010-05-10 20:53 file2  (对文件file2建立硬链接后,文件的链接计数变为2)

             可以看出:软链接并不增加链接计数,而硬链接增加链接计数。无论是软链接还是硬链接,都与原文件拥有相同的读写权限。

    (3)删除原文件后硬链接与软链接的不同表现

    删除原文件:

    heaad@ubuntu:~/a$ rm file1

     看看软链接的变化:

    heaad@ubuntu:~/a/d$ ls -l

    total 4

    -rwxrwxrwx 2 heaad heaad 20 2010-05-10 20:53 hardlink_to_file2

    lrwxrwxrwx 1 heaad heaad  8 2010-05-10 21:01 link2_to_file1 -> ../file1  ( 软链接link2_to_file1的链接计数仍然是1)

    由于原文件已经没有了,软链接就指向了一个无效的位置:

    heaad@ubuntu:~/a/d$ cat link2_to_file1

    cat: link2_to_file1: No such file or directory

    删除原文件后软链接并不删除,但是不再指向有效的文件。从这个角度看,软链接跟Windows中的快捷方式很类似。

    再来看看删除原文件后硬链接的变化:

    删除原文件:

    heaad@ubuntu:~/a$ rm file2

    看看硬链接的变化:

    heaad@ubuntu:~/a/d$ ls -l

    total 4

    -rwxrwxrwx 1 heaad heaad 20 2010-05-10 20:53 hardlink_to_file2 (硬链接文件的链接计数减少1)

    lrwxrwxrwx 1 heaad heaad  8 2010-05-10 21:01 link2_to_file1 -> ../file1

    删除原文件后硬链接并不删除,但是其链接计数减少了1。我认为可以从文件系统的角度解析:硬链接中保存了文件的inode号,每建立一个到原文件的硬链接就会将该文件的inode中的引用计数加1。Linux只有在某个文件的inode的引用计数值减少到0时才删除该文件。

    关于SUID,SGID,sticky

    了解这三个特殊访问位前先了解Linux文件访问特权位:

      

    15

    14

    13

    12

    11

    10

    9

    8

    7

    6

    5

    4

    3

    2

    1

    0

    SUID

    SGID

    sticky

    r

    w

    x

    r

    w

    x

    r

    w

    x

    文件类型位

    特殊访问位

    拥有者特权位

    同组特权位

    其他用户特权位

    10. SUID(set-user-ID)位

        SUID位的作用:若文件F设置SUID位为1,文件F的拥有者是用户A,而用户B拥有文件F的执行权限,则当用户B执行文件F时就以文件拥有者(用户A)的权限执行。

        SUID位的典型应用:修改Linux用户密码。Linux用户密码加密后存储在/etc/passwd文件中,用户使用passwd命令修改密码。而修改/etc/passwd文件需要root权限, 如下图:

    heaad@ubuntu:~$ ls -l /etc/passwd

    -rw-r--r-- 1 root root 1672 2010-04-30 03:22 /etc/passwd

    那么普通用户是如何修改自己的密码的呢?答案在/usr/bin/passwd文件中,如下图:

    heaad@ubuntu:~$ ls -l /usr/bin/passwd

    -rwsr-xr-x 1 root root 37140 2010-01-26 09:09 /usr/bin/passwd

    passwd命令的所有者特权位中的x变成了s,表示passwd文件设定了SUID特权位。那么其他用户执行passwd命令时将获得passwd文件的所有者(root)的权限,于是就有权限修改/etc/passwd文件了。

    设置SUID位:使用如下命令设置SUID位:

    $ sudo chmod 4xxx file

    $ sudo chmod u+s file

    其中的4xxx中的4是因为SUID位在特殊访问位中的第三位。

    执行完上面的两条命令中的其中一条后,file文件的权限可能变成了rwsr-xr-x

        若文件所有者也没有该文件的执行权限,则上面的两条命令可能使file的访问权限位变成了rwSr--r--,其中的S是大写的

    11. SGID(set-group-ID)位

        作用:SGID与SUID类似,但它是使执行的线程拥有所在组的权限。

        设置方式:

    $ sudo chmod 2xxx file

    $ sudo chmod g+s file

        执行完以上其中一条命令后,文件file的访问权限可能会变成rwxr-sr-x 。

    12. sticky位

        作用:若目录A设置了sticky位,则除了目录A的所有者和root用户外,其他用户均不能删除或重命名目录A下的文件。

        设置方法:

    $ sudo chmod +t file

    $ sudo chmod 1xxx file

    执行完以上其中一条命令,文件的访问权限位可能被改变为rwxr-xr-若文件所有者也没有执行权限,则访问权限位可能会变成rw-r--r-T 。

    13. 隐藏文件的方法

           Linux下隐藏的文件有如下3种:

    (1)    文件名以“.”开头的系统文件

    (2)    文件名以“~”结尾的备份文件

    (3)    在同一目录下名为“.hidden”的文件中记录着文件名的文件

           这3种文件在图形界面中都是是隐藏的。但第(2)和第(3)种文件在shell中用“ls”命令就可以看到,而第(1)种文件必须使用“ls -a”命令才能看到。

           在图形界面下可以通过 “ctrl+H” 快捷键来隐藏或显示隐藏文件。

    14. history命令

    作用:显示最近执行的命令

    shell环境变量HISTSIZE表示保存最近执行的多少条命令,HISTFILE用于设置保存的文件,而HISTFILESIZE则表示这个文件的行数限制。

    使用set命令可以查看这3个环境变量

    … …                                                                       

    HISTFILE=/home/heaad/.bash_history

    HISTFILESIZE=2000

    HISTSIZE=1000

    … …

    注意:shell中执行的命令并不会马上写进HISTFILE文件中。应该是shell关闭时,或缓冲区写满的时候再写进文件。

    15. top命令

           作用:Linux下的任务管理器,可以监视CPU,内存等的使用状况

    16. 命令在后台执行

    命令后面加上“&”符号,则该命令将在后台执行。

    17 .Command1 && Command2

    Command1执行成功才开始执行Command2,若Command1执行失败,则Command2不执行。

    18. Command1 || Command2

    Command1执行失败才开始执行Command2,Command1执行成功,则Command2不执行。

    19. pstree

    作用:显示Linux进程树

    类似功能的还有“ps -e f ”命令。

    20. 输入重定向和输出重定向

    (1)输入重定向

    语法:Command < input-file

    将命令输入重定向到文件输入,而不是默认的不是键盘输入。

    例如cat < input_file,将从文件input_file中读入数据而不是键盘。

    另外,cat < input_file与cat input_file区别:

    cat input_file :文件名input_file作为参数传给cat命令,并不影响cat的标准输入流。

    cat < input_file :暂时断开cat命令标准输入与键盘间的连接,并将input_file关联到cat的标准输入。

    (2)输出重定向

    语法:Command > output-file

    将输出重定向到文件,而不是输出到默认的屏幕。这与输入重定向类似,但影响的是输出流。

    (3)输入重定向与输出重定向的合并

    Command < input-file > output-file

    Command > output-file < input-file

    以上两种格式是等价的,都是将命令的输入重定向到input-file文件,输出重定向到output-file文件。

    例如:cat < file1 > file2,cat的输入来自file1,输出到file2。实质上就是将file1复制一个副本file2。

    (4)关于标准错误重定向

    Linux自动为每个命令打开3个文件,标准输入流、标准输出流、标准出错流,文件描述符分别是0,1 ,2 。

    请参考这段文字:

    重定向 1>&2 2>&1

    在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是:

    0: Standard Input (STDIN)

    1: Standard Output (STDOUT)

    2: Standard Error Output (STDERR)

    在标准情况下, 这些FD分别跟如下设备关联:

    stdin(0): keyboard  键盘输入,并返回在前端

    stdout(1): monitor  正确返回值 输出到前端

    stderr(2): monitor 错误返回值 输出到前端


    举例说明吧:

    当前目录只有一个文件 a.txt.

    [root@redhat box]# ls

    a.txt

    [root@redhat box]# ls a.txt b.txt         

    ls: b.txt: No such file or directory     由于没有b.txt这个文件, 于是返回错误值, 这就是所谓的2输出(错误出错)

    a.txt     而这个就是所谓的1输出(标准输出)


    再接着看:

    [root@redhat box]# ls a.txt b.txt  1>file.out 2>file.err

    执行后,没有任何返回值. 原因是, 返回值都重定向到相应的文件中了,而不再前端显示

    [root@redhat box]# cat file.out

    a.txt

    [root@redhat box]# cat file.err

    ls: b.txt: No such file or directory 

    一般来说, "1>" 通常可以省略成 ">".

    即可以把如上命令写成: ls a.txt b.txt  >file.out 2>file.err

    有了这些认识才能理解 "1>&2" 和 "2>&1".

    1>&2  正确返回值传递给2输出通道 &2表示2输出通道

    如果此处错写成 1>2, 就表示把1输出重定向到文件2中.

    2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道.

    举个例子.

    [root@redhat box]# ls a.txt b.txt 1>file.out 2>&1 (标准输出重定向到文件,然后标准出错重定向到跟标准输出同一通道)

    [root@redhat box]# cat file.out

    ls: b.txt: No such file or directory

    a.txt

    现在, 正确的输出和错误的输出都定向到了file.out这个文件中, 而不显示在前端.

    补充下, 输出不只1和2, 还有其他的类型, 这两种只是最常用和最基本的.

    21.批量删除文件 
    初衷:移植Linux时用gedit编辑代码,编辑后会留下以“~”号结尾的临时文件。我用diff命令制作内核补丁会将这些临时文件包含进去。因此需要找个方法删除这些垃圾。
     
    解决方法1:
      find -name *~
      然后将找到的一个个rm掉
      缺点是费时。
     
    解决方法2:
      自己写个shell脚本。感觉有点小题大作了
     
    解决方法3:
      find -name *~ | xargs rm

     


      参考资料:《Linux:The Textbook》 by Syed Mansoor Sarwar

  • 相关阅读:
    A计划
    edu_6_4_1
    edu_6_2_2
    edu_6_3_1
    hdu 1205 吃糖果【鸽巢原理】
    float 为什么不能用== ,或者大于等于,或者小于等于
    素数筛法及其优化
    hdu 1106 排序
    hdu 1164 Eddy's research I
    java 格式化输出 printf 总结
  • 原文地址:https://www.cnblogs.com/chengliu/p/3636328.html
Copyright © 2011-2022 走看看