Linux && bash简介

xiaobaichen 2014-03-01

目的

便于大家了解linux bash,便于大家的trouble shooting~

linux 简介

(copied from wikipedia)
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux操作系统诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。

历史

创始人Linus Benedict Torvalds(1969年~),发展和成长过程始终依赖着五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。

  1. 1981 年IBM公司推出微型计算机IBM PC。
  2. 1991年,GNU计划已经开发出了许多工具软件,最受期盼的GNU C编译器已经出现,GNU的操作系统核心HURD一直处于实验阶段,没有任何可用性,实质上也没能开发出完整的GNU操作系统,但是GNU奠定了Linux用户基础和开发环境。
  3. 1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操作系统。1991年4月,林纳斯·托瓦兹开始酝酿并着手编制自己的操作系统。
  4. 1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。

内核

内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。使用linux内核的操作系统,统称为linux。linux内核主要包括以下功能:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

核心的开发和规范一直是由Linux社区控制着,版本也是唯一的。

目前内核版本是3.

发行版

Linux发布版指的就是通常所说的“Linux操作系统”,它可能是由一个组织,公司或者个人发布的。Linux主要作为Linux发布版(通常被称为"distro")的一部分而使用。通常来讲,一个Linux发布版包括Linux内核,将整个软件安装到计算机上的一套安装工具,各种GNU软件,其他的一些自由软件,在一些特定的Linux发布版中也有一些专有软件。发布版为许多不同的目的而制作,包括对不同计算机硬件结构的支持,对一个具体区域或语言的本地化,实时应用,和嵌入式系统。目前,超过三百个发布版被积极的开发,最普遍被使用的发布版有大约十二个。较为知名的有SUSE、RedHat、Fedora、Debian、Ubuntu、CentOS、Gentoo

一个典型的Linux发布版包括:Linux内核,一些GNU库和工具,命令行shell,图形界面的X窗口系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公包,编译器,文本编辑器,小游戏,儿童教育软件,到科学工具的应用软件。

bash介绍

Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。目前linux上默认的shell环境都是bash

兄弟们

/bin/sh (已經被 /bin/bash 所取代)
/bin/bash (就是 Linux 預設的 shell)
/bin/ksh (Kornshell 由 AT&T Bell lab. 發展出來的,相容於 bash)
/bin/tcsh (整合 C Shell ,提供更多的功能)
/bin/csh (已經被 /bin/tcsh 所取代)
/bin/zsh (基於 ksh 發展出來的,功能更強大的 shell)

文件权限

常见错误

[l-djb2c2][zhenbao.zhou][/home/q][20][0][15:30:31]
$ less nohup.out 
nohup.out: Permission denied
[l-djb2c2][zhenbao.zhou][/home/q][21][1][15:30:37]
$ ll nohup.out 
-rw------- 1 root root 5167 Nov 28  2012 nohup.out

User, Group及Others

在Linux里面,任何一个文件都具有『User, Group及Others』三种身份的个别权限.

Linux && bash简介

文件属性

 
  1. 第一个字符代表这个文件是『目录、文件或链接文件等等』:
    当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
    当为[ - ]则是文件,例如上表档名为『install.log』那一行;
    若是[ l ]则表示为连结档(link file);
    若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
  2. 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
  3. 第二栏表示有多少档名连结到此节点(i-node):
    每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去就是了。 关于i-node的相关数据我们会在第八章谈到文件系统时再加强介绍的。
  4. 第三栏表示这个文件(或目录)的『拥有者账号』
  5. 第四栏表示这个文件的所属群组
    在Linux系统下,你的账号会附属于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如图2.1.2所示(rwxrwx--), 则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。 但如果是不属于projecta的其他账号,对于此文件就不具有任何权限了。
  1. 第五栏为这个文件的容量大小,默认单位为bytes;
  2. 第六栏为这个文件的建档日期或者是最近的修改日期:

权限

r可获得这个文件的内容可以看到这个目录里的文件以及这些文件对应的权限
w可以编辑或者修改此文件内容(但不可以删除此文件)可以对目录的内容进行修改。(移动目录里的文件等 )
x可以被系统执行某个用户可以进入此目录

权限修改

  1. chown(需要root用户)
    修改文件/目录的user
     
  2. chgrp(需要root)
    修改文件/目录的group
    $ sudo chgrp tomcat jenkins.war 
    
    $ ll jenkins.war 
    -rw-r--r-- 1 tomcat tomcat 49190379 Nov 28  2012 jenkins.war
  3. chmod
    修改文件属性
    $ ll jenkins.war 
    -rw-r--r-- 1 zhenbao.zhou tomcat 49190379 Nov 28  2012 jenkins.war
    
    $ chmod 755 jenkins.war 
    
    $ ll jenkins.war 
    -rwxr-xr-x 1 zhenbao.zhou tomcat 49190379 Nov 28  2012 jenkins.war*

好用的命令

帮助命令

help

grep --help

man

查询manual页

man grep

info

某些软件会有info页,也可以用这个查看

文件查看命令

cat

查看文件

tail

查看文件末尾

tail -f filename

less

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 pageup pagedown 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

ps aux|grep less

查看方法

  1. 空格 向前一屏幕
  2. b 向回一屏幕
  3. q 退出less
  4. G 移动到末尾
  5. g 移动到开头
  6. h 帮助
  7. ? 往回查找
  8. /  向前查找

grep/zgrep

grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.
zgrep 可以直接扫描 gzip文件

vim / emacs

文本编辑工具

rm

删除文件

查找文件

which

查造某个可执行文件的路径

[l-djb2c2][zhenbao.zhou][/home/q/zhenbao.zhou][69][0][16:07:06]
$ which java
/usr/bin/which: no java in (/opt/qt/bin/:/usr/local/pgsql/bin/:/home/zhenbao.zhou/apache-ant-1.8.4/bin:/opt/perl/bin/:/usr/lib64/qt-3.3/bin:/opt/pg92/bin:/home/q/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/opt/pg90/bin/:/home/zhenbao.zhou/emacs/bin:/usr/local/apache-maven-2.2.1/bin/:/home/zhenbao.zhou/bin)

find

强大的查找工具

$ find . -name "*.java"
./emacs-lib/sqlformat/SqlBeautify.java
./emacs-lib/cedet-1.0pre7/semantic/tests/scopetest.java
./emacs-lib/cedet-1.0pre7/semantic/tests/testjavacomp.java

locate / updatedb

更强大的搜索工具

$ locate zhenbao.zhou123123123
[l-djb2c2][zhenbao.zhou][/home/q/zhenbao.zhou][77][1][16:09:11]

查看系统状态

ps

查看目前进程

ps auxxx|grep java

top

展示系统信息

netstat

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

$ netstat -anlp | grep 8000
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN     

$ sudo netstat -alnp | grep 8000
tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      13575/java

lsof

命令的原始功能是列出打开的文件的进程,但LINUX下,所有的设备都是以文件的行式存在的,所以,lsof的功能很强大!

$ sudo lsof

$ sudo lsof -i :8000
COMMAND   PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
java    13575 tomcat   29u  IPv4 156048599      0t0  TCP *:irdmi (LISTEN

$ sudo lsof tts.sh
COMMAND   PID         USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
less    32288 zhenbao.zhou    4r   REG  252,7    35677 1712552 tts.sh

free

查看系统目前内存情况

df

查看系统磁盘大小

du

统计某一个目录的情况

w

查看登录情况

uname 

查看系统的内核、机器类型等等

$ uname -a
Linux l-djb2c2.vc.dev.cn6 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux

网络命令

scp/rsync

文件传输

curl / wget

 

在当前环境启动一个web服务器

( 这是bash范畴的命令)

python -mSimpleHTTPServer  8912

重定向 

  1. > 输出重定向到一个文件或设备 覆盖原来的文件
  2. >! 输出重定向到一个文件或设备 强制覆盖原来的文件
  3. >> 输出重定向到一个文件或设备 追加原来的文件
  4. < 输入重定向到一个程序
  5. 2> 将一个标准错误输出重定向到一个文件或设备
ls > /tmp/4
ls aasdfasd > /tmp/4
ls asdfasdf 2> /tmp/12
ls asdf > /dev/null

管道

使用 "|"连接各个命令的输出

ls | less

脚本调试方法

echo

打印变量名

echo $AAA

sh

执行某个文件

sh -x aaa.sh

附录

  1. linux简介--wikipedia
  2. 百度百科上的介绍
  3. linux命令简介

相关推荐