将琴存诗
人生 可以不要那么 耀 ,只需要有 一个  平凡的梦想  足以 。—— loveincode -_^ RSS
Fork me on GitHub

linux 常用 掌握要点 详细终结

linux 命令大全

每个开发者应该了解的 10 个 Linux 命令

1、查看正在执行的进程(Process) 

ps命令 Process Status 进程状态

语法: ps  [option]  [--help]

  • -A    列出所有的行程
  • -w   显示加宽可以显示较多的资讯
  • -au  显示较详细的资讯
  • -aux   显示所有包含其他使用者的行程
  • au(x)  输出格式 :
  • USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • 名词解释:

  • USER: 行程拥有者
  • PID: pid
  • %CPU: 占用的 CPU 使用率
  • %MEM: 占用的记忆体使用率
  • VSZ: 占用的虚拟记忆体大小
  • RSS: 占用的记忆体大小
  • TTY: 终端的次要装置号码 (minor device number of tty)
  • STAT: 该行程的状态:START: 行程开始时间
    •   D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
    •   R: 正在执行中
    •   S: 静止状态
    •   T: 暂停执行
    •   Z: 不存在但暂时无法消除
    •   W: 没有足够的记忆体分页可分配
    •   <: 高优先序的行程
    •   N: 低优先序的行程
    •   L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
  • TIME: 执行的时间
  • COMMAND:所执行的指令

# ps -A 显示进程信息


# ps -u root //显示root进程用户信息

# ps -ef //显示所有命令,连带命令行 

2、查询指定的进程ID(PID) 打开的文件 

查看pid:pidof programe-name

方法 1)

  cd /proc/$PID/fd(会看见文件描述符)

  ls -l
       得到文件描述符指向的实际文件,即当前进程打开的文件 

方法 2)

  安装lsof (lsof(list open files)是一个列出当前系统打开文件的工具)

  lsof -g gid 显示归属gid的进程情况 

3、杀死指定PID的进程(PID为Process ID) 

kill -s 9 pid  

9代表强制终止

 

4、计算文件的行数、字数或字符数 

wc  [option]文件… (Word Count)

-c          统计字节数。 
-l         统计行数。 
-m       统计字符数。这个标志不能与 -c 标志一起使用。 
-w         统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。 
-L          打印最长行的长度。 
-help      显示帮助信息 
–version 显示版本信息

5、显示进程信息,并实时更新 

top

   -d 设置刷屏的时间         

   -p 指定需要监控的进程id 

   -u 指定需要监控的用户名称  

   -b 指定之后不能使用交互式的方式,如果不指定的话可以动态调整,一般用于输出到文件的时候使用  

   -H 指定这个可以显示每个线程的情况,否则就是进程的总的状态

   -i  不显示闲置和僵死的进程
   -c 显示全部命令参数

按q退出,按h进入帮助。

6、调用top命令的"-H"选项,该选项会列出所有Linux线程(Thread)

top -H:-H 指定这个可以显示每个线程的情况,否则就是进程的总的状态

7、查看用户username的进程所打开的文件

# ps -u username 

# ps -u root //显示root进程用户信息

8、在ps命令中,"-T"选项可以开启线程(Thread)查看,下面的命令列出了由进程号为pid的进程创建的所有线程 

ps -T

ps -T -p <pid>

 

方法二: Top

top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。

1.$ top -H

要让top输出某个特定进程<pid>并检查该进程内运行的线程状况:

2.$ top -H -p <pid>

 

方法三: Htop

一个对用户更加友好的方式是,通过htop查看单个进程的线程,它是一个基于ncurses的交互进程查看器。该程序允许你在树状视图中监控单个独立线程。

要在htop中启用线程查看,请开启htop,然后按<F2>来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按<F10>退出设置。

9、比较两个文件 

diff [options] file1 file2

该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。

如果用”-”表示file1或file2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。

[options]主要参数

-a:将所有文件当作文本文件来处理。

-b–ignore-space-change    忽略空格造成的不同。

-B–ignore-blank-lines    忽略空行造成的不同。

-c 使用纲要输出格式。

-H   利用试探法加速对大文件的搜索。

-I    忽略大小写的变化。

-n –rcs  输出RCS格式。

-N–new-file  在比较目录时,若文件A仅出现在某个目录中,会显示:Only in目录;文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

-r–recursive  比较子目录中的文件。

-u,-U<列数>或–unified=<列数>  以合并的方式来显示文件内容的不同。

10、后台执行,通过shell中输入exit来推出终端 

exit

11、查看正在执行的任务 

# ps aux | less 查看所有运行中的进程

12、多线程执行

Linux系统内核只提供了轻量级进程的支持,并未实现线程模型。

Linux是一种“多进程单线程”的操作系统,Linux本身只有进程的概念,而其所谓的“线程”本质上在内核里仍然是进程。

使用'&'+wait 实现“多进程”实现

待更新

13、查看进程和线程的树形结构关系 

pstree 命令,查看进程和线程的树形结构关系。

 

14、ps命令-L参数显示进程,并尽量显示其LWP(轻量级进程)(线程ID)和NMWP(线程的个数) 

ps -L

15、ps命令查看线程在哪个CPU上运行 

# ps -eo pid,args,psr

参数的含义:
pid   进程ID
args   该进程执行时传入的命令行参数
psr   分配给进程的CPU

16、取出文件的前面几行 

 查看 前 head -100  filename

 查看 后 tail -100  filename 或 tail -n 100  filename

 查看 中 sed -n '100,200p' filename 

 重定向 到文件中去  head -100  filename >a.txt

17、动态查看文件变化 

tail -f  filename

18、退出tail -f 

Ctrl + c (Mac Os : control + c)

19、tail程序放到后台去(Ctrl+z)等处理完其他事情,再用fg命令将tail命令转到前台来 

20、查看文件夹和子目录的大小 

du  Disk Usage 硬盘使用率
常用的选项:
  -h:以人类可读的方式显示
  -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
  -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
  -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
  --apparent-size:显示目录或文件自身的大小
  -l :统计硬链接占用磁盘空间的大小
  -L:统计符号链接所指向的文件占用的磁盘空间大小

21、设置定时任务

  启动crontab服务 

      一般启动服务用  /sbin/service crond start 若是根用户的cron服务可以用 sudo service crond start, 这里还是要注意  下 不同版本linux系统启动的服务的命令也不同 ,像我的虚拟机里只需用 sudo service cron restart 即可,若是在根用下直接键入service cron start就能启动服务

  查看服务是否已经运行用 

  ps -ax | grep cron 

 

  crontab -u    //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数  
  crontab -l    //列出某个用户cron服务的详细内容
  crontab -r   //删除没个用户的cron服务
  crontab -e  //编辑某个用户的cron服务

  vi  /etc/crontab

    minute    - 从0到59的整数 
    hour       - 从0到23的整数 
    day        - 从1到31的整数 (必须是指定月份的有效日期)
    month    - 从1到12的整数 (或如Jan或Feb简写的月份)
    dayofweek  - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
    command   - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)

  可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
     具体格式如下 例

     Minute Hour Day Month Dayofweek   command
     分钟    小时   天     月       天每星期       命令

      5       *       *        *           *          ls             指定每小时的第5分钟执行一次ls命令
      30     5       *        *           *          ls             指定每天的 5:30 执行ls命令
      30     7       8        *           *        ls             指定每月8号的7:30分执行ls命令
      30     5       8        6          *         ls             指定每年的6月8日5:30执行ls命令
      30     6       *        *          0           ls             指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,

  

     30     3     10,20     *       *          ls        每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

     25     8-11   *         *       *          ls          每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

     */15   *       *         *       *          ls            每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

     30     6     */10       *       *        ls            每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

    每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

     50   7       *             *     *     root     run-parts     /etc/cron.daily   [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

    新增调度任务可用两种方法:
    1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
    2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。

 查看调度任务
    crontab -l //列出当前的所有调度任务
    crontab -l -u jp   //列出用户jp的所有调度任务

 删除任务调度工作
    crontab -r   //删除所有任务调度工作

22、重命名文件和文件夹 

mv 和剪切是一个命令

将目录A重命名为B : mv A B

将/a目录移动到/b下,并重命名为c :mv /a /b/c

23、复制、剪切、清空和删除 

创建文件夹 :mkdir  (Make directory  建立目录)

文件夹复制:cp (Copy file  复制文件)

1.把/home/file1里面的文件和文件夹等复制到home/file2目录下

cp -rf /home/file1/* /home/file2

2.把/home/file1目录复制到/home/file2目录下,即把file1复制变成file2的子目录,变成/home/file2/file1的路径

cp -rf /home/file1 /home/file2

剪切:  mv (Move file  移动文件)

1.使用mv命令剪切文件。

如需要将/home/file1/目录下的1.txt文件剪切到/home/file2目录下,执行下面的命令即可:

# mv /home/file1/1.txt /home/file2

2.使用mv命令剪切文件夹。

把/home/file/soft文件夹剪切到/home/file/abc目录下

# mv /home/file/soft /home/file/abc

3.使用mv命令剪切文件夹和文件

把/home/file/下的文件夹和文件剪切到/home/file2目录下

# mv /home/file/* /home/file2

清空 

清空文件夹实例:

rm -rf /home/file/*

将会强制删除/home/file目录下所有文件、文件夹,保留/home/file目录

删除 rm( Remove file  删除文件)

rm -rf   目录名字

-r 就是向下递归,不管有多少级目录,一并删除

-f 就是直接强行删除,不作任何提示的意思 

24、Linux通信

Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量(semaphore),信号(signal),套接字(Socket)
    (1) 管道(pipe):管道允许一个进程和另一个与它有共同祖先的进程之间进行通信;
    (2) 命名管道(FIFO):类似于管道,但是它可以用于任何两个进程之间的通信,命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建;
    (3) 信号(signal):信号是比较复杂的通信方式,用于通知接收进程有某种事情发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持UNIX早期信号语义函数signal外,还支持语义符合POSIX.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD即能实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数的功能);
    (4) 内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它;
    (5) 消息队列(message queue):消息队列是消息的连接表,包括POSIX消息对和System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能成该无格式字节流以及缓冲区大小受限等缺点;
    (6) 信号量(semaphore):信号量主要作为进程间以及同进程不同线程之间的同步手段;
    (7) 共享内存 (shared memory):它使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。这是针对其他通信机制运行效率较低而设计的。它往往与其他通信机制,如信号量结合使用,以达到进程间的同步及互斥;
    (8) 套接字(Socket):它是更为通用的进程间通信机制,可用于不同机器之间的进程间通信。起初是由UNIX系统的BSD分支开发出来的,但现在一般可以移植到其他类UNIX系统上:Linux和System V的变种都支持套接字。

25、 常用 

watch 命令会重复运行您给出的任何命令,并显示输出。

look 命令用于搜索以某个特定字符串开头的单词。

stat 命令用于显示文件的大小、所有者、用户组、索引节点号、权限、修改和访问时间等重要的统计信息。这是一个非常有用的命令,可以显示比 ls -l 更多的细节。

1. tar

创建一个新的tar文件

$ tar cvf archive_name.tar dirname/

解压tar文件

$ tar xvf archive_name.tar

查看tar文件

$ tar tvf archive_name.tar

更多示例:The Ultimate Tar Command Tutorial with 10 Practical Examples

2. grep

在文件中查找字符串(不区分大小写)

$ grep -i "the" demo_file

输出成功匹配的行,以及该行之后的三行

$ grep -A 3 -i "example" demo_text

在一个文件夹中递归查询包含指定字符串的文件

$ grep -r "ramesh" *

更多示例:Get a Grip on the Grep! – 15 Practical Grep Command Examples

3. find

查找指定文件名的文件(不区分大小写)

$ find -iname "MyProgram.c"

对找到的文件执行某个命令

$ find -iname "MyProgram.c" -exec md5sum {} \;

查找home目录下的所有空文件

$ find ~ -empty

更多示例:Mommy, I found it! — 15 Practical Linux Find Command Examples

4. ssh

登录到远程主机

$ ssh -l jsmith remotehost.example.com

调试ssh客户端

$ ssh -v -l jsmith remotehost.example.com

显示ssh客户端版本

$ ssh -V

更多示例:5 Basic Linux SSH Client Commands

5. sed

当你将Dos系统中的文件复制到Unix/Linux后,这个文件每行都会以\r\n结尾,sed可以轻易将其转换为Unix格式的文件,使用\n结尾的文件

$ sed 's/.$//' filename

反转文件内容并输出

$ sed -n '1!G; h; p' filename

为非空行添加行号

$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'

更多示例:Advanced Sed Substitution Examples

6. awk

删除重复行

$ awk '!($0 in array) { array[$0]; print}' temp

打印/etc/passwd中所有包含同样的uid和gid的行

$ awk -F ':' '$3=$4' /etc/passwd

打印文件中的指定部分的字段

$ awk '{print $2,$5;}' employee.txt

更多示例:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

7. vim

打开文件并跳到第10行

$ vim +10 filename.txt

打开文件跳到第一个匹配的行

$ vim +/search-term filename.txt

以只读模式打开文件

$ vim -R /etc/passwd

更多示例:How To Record and Play in Vim Editor

8. diff

比较的时候忽略空白符

$ diff -w name_list.txt name_list_new.txt

9. sort

以升序对文件内容排序

$ sort names.txt

以降序对文件内容排序

$ sort -r names.txt

以第三个字段对/etc/passwd的内容排序

$ sort -t: -k 3n /etc/passwd | more

10. export

输出跟字符串oracle匹配的环境变量

$ export | grep ORCALE
declare -x ORACLE_BASE="/u01/app/oracle"
declare -x ORACLE_HOME="/u01/app/oracle/product/10.2.0"
declare -x ORACLE_SID="med"
declare -x ORACLE_TERM="xterm"

设置全局环境变量

$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0

11. xargs

将所有图片文件拷贝到外部驱动器

$ ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory

将系统中所有jpd文件压缩打包

$ find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

下载文件中列出的所有url对应的页面

$ cat url-list.txt | xargs wget –c

12. ls

以易读的方式显示文件大小(显示为MB,GB...)

$ ls -lh
-rw-r----- 1 ramesh team-dev 8.9M Jun 12 15:27 arch-linux.txt.gz

以最后修改时间升序列出文件

$ ls -ltr

在文件名后面显示文件类型

$ ls -F

更多示例:Unix LS Command: 15 Practical Examples

13. pwd

输出当前工作目录

14. cd

cd -可以在最近工作的两个目录间切换

使用shopt -s cdspell可以设置自动对cd命令进行拼写检查

更多示例:6 Awesome Linux cd command Hacks

15. gzip

创建一个*.gz的压缩文件

$ gzip test.txt

解压*.gz文件

$ gzip -d test.txt.gz

显示压缩的比率

$ gzip -l *.gz
     compressed        uncompressed  ratio uncompressed_name
          23709               97975  75.8% asp-patch-rpms.txt

16. bzip2

创建*.bz2压缩文件

$ bzip2 test.txt

解压*.bz2文件

bzip2 -d test.txt.bz2

更多示例:BZ is Eazy! bzip2, bzgrep, bzcmp, bzdiff, bzcat, bzless, bzmore examples

17. uzip

解压*.zip文件

$ unzip test.zip

查看*.zip文件的内容

$ unzip -l jasper.zip
Archive:  jasper.zip
Length     Date   Time    Name
--------    ----   ----    ----
40995  11-30-98 23:50   META-INF/MANIFEST.MF
32169  08-25-98 21:07   classes_
15964  08-25-98 21:07   classes_names
10542  08-25-98 21:07   classes_ncomp

18. shutdown

关闭系统并立即关机

$ shutdown -h now

10分钟后关机

$ shutdown -h +10

重启

$ shutdown -r now

重启期间强制进行系统检查

$ shutdown -Fr now

19. ftp

ftp命令和sftp命令的用法基本相似连接ftp服务器并下载多个文件

$ ftp IP/hostname
ftp> mget *.html

显示远程主机上文件列表

ftp> mls *.html -
/ftptest/features.html
/ftptest/index.html
/ftptest/othertools.html
/ftptest/samplereport.html
/ftptest/usage.html

更多示例:FTP and SFTP Beginners Guide with 10 Examples

20. crontab

查看某个用户的crontab入口

$ crontab -u john -l

设置一个每十分钟执行一次的计划任务

*/10 * * * * /home/ramesh/check-disk-space

更多示例:Linux Crontab: 15 Awesome Cron Job Examples

21. service

service命令用于运行System V init脚本,这些脚本一般位于/etc/init.d文件下,这个命令可以直接运行这个文件夹里面的脚本,而不用加上路径

查看服务状态

$ service ssh status

查看所有服务状态

$ service --status-all

重启服务

$ service ssh restart

22. ps

ps命令用于显示正在运行中的进程的信息,ps命令有很多选项,这里只列出了几个

查看当前正在运行的所有进程

$ ps -ef | more

以树状结构显示当前正在运行的进程,H选项表示显示进程的层次结构

$ ps -efH | more

23. free

这个命令用于显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况

默认情况下free会以字节为单位输出内存的使用量

$ free
             total       used       free     shared    buffers     cached
Mem:       3566408    1580220    1986188          0     203988     902960
-/+ buffers/cache:     473272    3093136
Swap:      4000176          0    4000176

如果你想以其他单位输出内存的使用量,需要加一个选项,-g为GB,-m为MB,-k为KB,-b为字节

$ free -g
             total       used       free     shared    buffers     cached
Mem:             3          1          1          0          0          0
-/+ buffers/cache:          0          2
Swap:            3          0          3

如果你想查看所有内存的汇总,请使用-t选项,使用这个选项会在输出中加一个汇总行

ramesh@ramesh-laptop:~$ free -t
             total       used       free     shared    buffers     cached
Mem:       3566408    1592148    1974260          0     204260     912556
-/+ buffers/cache:     475332    3091076
Swap:      4000176          0    4000176
Total:     7566584    1592148    5974436

24. top

top命令会显示当前系统中占用资源最多的一些进程(默认以CPU占用率排序)如果你想改变排序方式,可以在结果列表中点击O(大写字母O)会显示所有可用于排序的列,这个时候你就可以选择你想排序的列

Current Sort Field:  P  for window 1:Def
Select sort field via field letter, type any other key to return

  a: PID        = Process Id              v: nDRT       = Dirty Pages count
  d: UID        = User Id                 y: WCHAN      = Sleeping in Function
  e: USER       = User Name               z: Flags      = Task Flags
  ........

如果只想显示某个特定用户的进程,可以使用-u选项

$ top -u oracle

更多示例:Can You Top This? 15 Practical Linux Top Command Examples

25. df

显示文件系统的磁盘使用情况,默认情况下df -k 将以字节为单位输出磁盘的使用量

$ df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             29530400   3233104  24797232  12% /
/dev/sda2            120367992  50171596  64082060  44% /home

使用-h选项可以以更符合阅读习惯的方式显示磁盘使用量

$ df -h
Filesystem                  Size   Used  Avail Capacity  iused      ifree %iused  Mounted on
/dev/disk0s2               232Gi   84Gi  148Gi    37% 21998562   38864868   36%   /
devfs                      187Ki  187Ki    0Bi   100%      648          0  100%   /dev
map -hosts                   0Bi    0Bi    0Bi   100%        0          0  100%   /net
map auto_home                0Bi    0Bi    0Bi   100%        0          0  100%   /home
/dev/disk0s4               466Gi   45Gi  421Gi    10%   112774  440997174    0%   /Volumes/BOOTCAMP
//app@izenesoft.cn/public  2.7Ti  1.3Ti  1.4Ti    48%        0 18446744073709551615    0%   /Volumes/public

使用-T选项显示文件系统类型

$ df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda1     ext4    29530400   3233120  24797216  12% /
/dev/sda2     ext4   120367992  50171596  64082060  44% /home

26. kill

kill用于终止一个进程。一般我们会先用ps -ef查找某个进程得到它的进程号,然后再使用kill -9 进程号终止该进程。你还可以使用killall、pkill、xkill来终止进程

$ ps -ef | grep vim
ramesh    7243  7222  9 22:43 pts/2    00:00:00 vim

$ kill -9 7243

更多示例:4 Ways to Kill a Process – kill, killall, pkill, xkill

27. rm

删除文件前先确认

$ rm -i filename.txt

在文件名中使用shell的元字符会非常有用。删除文件前先打印文件名并进行确认

$ rm -i file*

递归删除文件夹下所有文件,并删除该文件夹

$ rm -r example

28. cp

拷贝文件1到文件2,并保持文件的权限、属主和时间戳

$ cp -p file1 file2

拷贝file1到file2,如果file2存在会提示是否覆盖

$ cp -i file1 file2

29. mv

将文件名file1重命名为file2,如果file2存在则提示是否覆盖

$ mv -i file1 file2

注意如果使用-f选项则不会进行提示

-v会输出重命名的过程,当文件名中包含通配符时,这个选项会非常方便

$ mv -v file1 file2

30. cat

你可以一次查看多个文件的内容,下面的命令会先打印file1的内容,然后打印file2的内容

$ cat file1 file2

-n命令可以在每行的前面加上行号

$ cat -n /etc/logrotate.conf
/var/log/btmp {
missingok
3	    monthly
4	    create 0660 root utmp
5	    rotate 1
6 }

31. mount

如果要挂载一个文件系统,需要先创建一个目录,然后将这个文件系统挂载到这个目录上

# mkdir /u01

# mount /dev/sdb1 /u01

也可以把它添加到fstab中进行自动挂载,这样任何时候系统重启的时候,文件系统都会被加载

/dev/sdb1 /u01 ext2 defaults 0 2

32. chmod

chmod用于改变文件和目录的权限

给指定文件的属主和属组所有权限(包括读、写、执行)

$ chmod ug+rwx file.txt

删除指定文件的属组的所有权限

$ chmod g-rwx file.txt

修改目录的权限,以及递归修改目录下面所有文件和子目录的权限

$ chmod -R ug+rwx file.txt

更多示例:7 Chmod Command Examples for Beginners

33. chown

chown用于改变文件属主和属组

同时将某个文件的属主改为oracle,属组改为db

$ chown oracle:dba dbora.sh

使用-R选项对目录和目录下的文件进行递归修改

$ chown -R oracle:dba /home/oracle

34. passwd

passwd用于在命令行修改密码,使用这个命令会要求你先输入旧密码,然后输入新密码

$ passwd

超级用户可以用这个命令修改其他用户的密码,这个时候不需要输入用户的密码

# passwd USERNAME

passwd还可以删除某个用户的密码,这个命令只有root用户才能操作,删除密码后,这个用户不需要输入密码就可以登录到系统

# passwd -d USERNAME

35. mkdir

在home目录下创建一个名为temp的目录

$ mkdir ~/temp

使用-p选项可以创建一个路径上所有不存在的目录

$ mkdir -p dir1/dir2/dir3/dir4/

36. ifconfig

ifconfig用于查看和配置Linux系统的网络接口

查看所有网络接口及其状态

$ ifconfig -a

使用up和down命令启动或停止某个接口

$ ifconfig eth0 up

$ ifconfig eth0 down

更多示例:Ifconfig: 7 Examples To Configure Network Interface

37. uname

uname可以显示一些重要的系统信息,例如内核名称、主机名、内核版本号、处理器类型之类的信息

$ uname -a
Linux john-laptop 2.6.32-24-generic #41-Ubuntu SMP Thu Aug 19 01:12:52 UTC 2010 i686 GNU/Linux

38. whereis

当你不知道某个命令的位置时可以使用whereis命令,下面使用whereis查找ls的位置

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

当你想查找某个可执行程序的位置,但这个程序又不在whereis的默认目录下,你可以使用-B选项,并指定目录作为这个选项的参数。下面的命令在/tmp目录下查找lsmk命令

$ whereis -u -B /tmp -f lsmk
lsmk: /tmp/lsmk

39. whatis

wathis显示某个命令的描述信息

$ whatis ls
ls		(1)  - list directory contents

$ whatis ifconfig
ifconfig (8)         - configure a network interface

40. locate

locate命名可以显示某个指定文件(或一组文件)的路径,它会使用由updatedb创建的数据库

下面的命令会显示系统中所有包含crontab字符串的文件

$ locate crontab
/etc/anacrontab
/etc/crontab
/usr/bin/crontab
/usr/share/doc/cron/examples/crontab2english.pl.gz
/usr/share/man/man1/crontab.1.gz
/usr/share/man/man5/anacrontab.5.gz
/usr/share/man/man5/crontab.5.gz
/usr/share/vim/vim72/syntax/crontab.vim

41. man

显示某个命令的man页面

$ man crontab

有些命令可能会有多个man页面,每个man页面对应一种命令类型

$ man SECTION-NUMBER commandname

man页面一般可以分为8种命令类型

  1. 用户命令
  2. 系统调用
  3. c库函数
  4. 设备与网络接口
  5. 文件格式
  6. 游戏与屏保
  7. 环境、表、宏
  8. 系统管理员命令和后台运行命令

例如,我们执行whatis crontab,你可以看到crontab有两个命令类型1和5,所以我们可以通过下面的命令查看命令类型5的man页面

$ whatis crontab
crontab (1)          - maintain crontab files for individual users (V3)
crontab (5)          - tables for driving cron

$ man 5 crontab

42. tail

tail命令默认显示文件最后的10行文本

$ tail filename.txt

你可以使用-n选项指定要显示的行数

$ tail -n N filename.txt

你也可以使用-f选项进行实时查看,这个命令执行后会等待,如果有新行添加到文件尾部,它会继续输出新的行,在查看日志时这个选项会非常有用。你可以通过CTRL-C终止命令的执行

$ tail -f log-file

更多示例:3 Methods To View tail -f output of Multiple Log Files in One Terminal

43. less

这个命名可以在不加载整个文件的前提下显示文件内容,在查看大型日志文件的时候这个命令会非常有用

$ less huge-log-file.log

当你用less命令打开某个文件时,下面两个按键会给你带来很多帮助,他们用于向前和向后滚屏

CTRL+F – forward one window
CTRL+B – backward one window

更多示例:Unix Less Command: 10 Tips for Effective Navigation

44. su

su命令用于切换用户账号,超级用户使用这个命令可以切换到任何其他用户而不用输入密码

$ su - USERNAME

用另外一个用户名执行一个命令下面的示例中用户john使用raj用户名执行ls命令,执行完后返回john的账号

[john@dev-server]$ su - raj -c 'ls'

[john@dev-server]$

用指定用户登录,并且使用指定的shell程序,而不用默认的

$ su -s 'SHELLNAME' USERNAME

45. mysql

mysql可能是Linux上使用最广泛的数据库,即使你没有在你的服务器上安装mysql,你也可以使用mysql客户端连接到远程的mysql服务器

连接一个远程数据库,需要输入密码

$ mysql -u root -p -h 192.168.1.2

连接本地数据库

$ mysql -u root -p

你也可以在命令行中输入数据库密码,只需要在-p后面加上密码作为参数,可以直接写在p后面而不用加空格

46. yum

使用yum安装apache

$ yum install httpd

更新apache

$ yum update httpd

卸载/删除apache

$ yum remove httpd

47. rpm

使用rpm安装apache

# rpm -ivh httpd-2.2.3-22.0.1.el5.i386.rpm

更新apache

# rpm -uvh httpd-2.2.3-22.0.1.el5.i386.rpm

卸载/删除apache

# rpm -ev httpd

更多示例:RPM Command: 15 Examples to Install, Uninstall, Upgrade, Query RPM Packages

48. ping

ping一个远程主机,只发5个数据包

$ ping -c 5 gmail.com

更多示例:Ping Tutorial: 15 Effective Ping Command Examples

49. date

设置系统日期

# date -s "01/31/2010 23:59:53"

当你修改了系统时间,你需要同步硬件时间和系统时间

# hwclock –systohc

# hwclock --systohc –utc

50. wget

使用wget从网上下载软件、音乐、视频

$ wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz

下载文件并以指定的文件名保存文件

$ wget -O taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701

更多示例:The Ultimate Wget Download Guide With 15 Awesome Examples

51. Curl 

  Curl 是一个命令行工具,用来通过 HTTP(s),FTP 等其它几十种你可能尚未听说过的协议来发起网络请求。它可以下载文件,检查响应消息头以及方便地访问远程数据。

在 Web 开发中, Curl 经常被用来测试连接,还有调用 REST 风格的 API。

# Fetch the headers of a URL.
curl -I http://google.com
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Location: http://www.google.com/?gfe_rd=cr&ei=0fCKWe6HCZTd8AfCoIWYBQ
Content-Length: 258
Date: Wed, 09 Aug 2017 11:24:01 GMT

# Make a GET request to a remote API.
curl http://numbersapi.com/random/trivia
29 is the number of days it takes Saturn to orbit the Sun.

Curl 的用法还可以比这更复杂。它有许多选项可以用来控制消息头,Cookie,身份验证等等这些要素。你可以通过 Everything curl 这本优秀的电子书来了解更多。

 52. du

运行 du 命令会生成相关文件和有关目录的空间使用情况的报告。它很容易使用,也可以递归地运行,会遍历每个子目录并且返回每个文件的单个大小。

du 通常在你发现某个驱动器的空间不足,但不知道是因为什么造成的时候使用。使用此命令可以快速查看每个文件夹所占用的存储空间,从而把耗费存储的大户给找出来。

# Running this will show the space usage of each folder in the current directory.
# The -h option makes the report easier to read.
# -s prevents recursiveness and shows the total size of a folder.
# The star wildcard (*) will run du on each file/folder in current directory.

du -sh *

1.2G    Desktop
4.0K    Documents
40G     Downloads
4.0K    Music
4.9M    Pictures
844K    Public
4.0K    Templates
6.9M    Videos

还有一个用途类似的命令 df(Disk Free),它会返回关于可用磁盘空间的各种信息(与 du 正好相反)。

53. md5sum

Unix 内置了一些像 md5sumsha1sum 这样的命令行工具,它们在编程中有各自的作用,但最重要的是它们可以用来检查文件的完整性。

譬如,如果你从不受信的网络下载了一个 .iso 文件,这个文件中存在恶意脚本的风险。为了确认这个 .iso 是安全的,你可以生成它的 md5 或者其它摘要信息。

md5sum ubuntu-16.04.3-desktop-amd64.iso 

0d9fe8e1ea408a5895cbbe3431989295  ubuntu-16.04.3-desktop-amd64.iso

然后将生成的字符串与原作者提供的(比如 UbuntuHashes)进行比较。

54. Ln

  Unix 里面的链接同 Windows 中的快捷方式类似,允许你快速地访问到一个特定的文件。链接可以通过 ln 命令创建出来,而且可以有两种类型 : 硬的(hard) 或者符号的(symbolic)。每种类型都有不同的属性而且各有其用途 (了解更多)。

这里有一个示例,展示了使用链接的最常见方式。假如说我们在桌面上有一个目录叫做 Scripts,里面整齐的摆放着我们最常用的 bash 脚本。每次我们想要调用其中的一个脚本的时候,我们会这样做:

~/Desktop/Scripts/git-scripts/git-cleanup

显然,这样做并不方便,每次我们都得写绝对路径。其实我们可以创建一个 symlink,将 Scripts  文件夹链接到 /usr/local/bin,这样就能让脚本在所有的目录下面都可以执行。

sudo ln -s ~/Desktop/Scripts/git-scripts/git-cleanup /usr/local/bin/

有了这个创建好的 symlink,我们现在就可以简单地通过其名称在任意一个打开的终端中执行脚本了。

git-cleanup

 55. ssh

使用 ssh 命令,用户可以快速地连接到一个远程主机,然后登录进入其 Unix shell。这就使得通过自己本地机器的终端在服务器上提交指令成为了可能。

要定位一个连接,你只需要指定正确的 IP 地址或者 url 就行了。在你第一次连接到一台新的服务器的时候,会需要某种形式的认证。

ssh username@remote_host

如果你需要快速地在服务器上面执行一条命令,但又不想登录,在 url 之后加上一条命令就可以了。命令将会在服务器上执行,而执行结果也会从它那里返回。

ssh username@remote_host ls /var/www

some-website.com
some-other-website.com

你还可以用 SHH 做更多事情,像创建代理或者隧道,用私钥来保护你的连接,传输文件等。在这里的一个指南中你可以了解到更多信息。

 56. alias 

许多的 Unix 命令,包括本文中提到的一些,在你加上许多选项之后,看起来都相当的长了。为了能更加容易记忆,你可以使用 alias 这个 bash 内置的命令来为它们创建一个短别名:

# Create an alias for starting a local web server.
alias server="python -m SimpleHTTPServer 9000"

# Instead of typing the whole command simply use the alias.
server 

Serving HTTP on 0.0.0.0 port 9000 ...

只要你保持终端一直是打开的状态, 别名就一直会是可用的。如果想永久使用的话,你可以将 alias  命令操作写到你的 .bashrc 文件中去。

 
posted @ 2017-07-09 15:06  loveincode  阅读(565)  评论(0编辑  收藏  举报
最简单即最美
有了信仰,自己要坚持努力 2017.07.09 21:34