`
干宝周
  • 浏览: 14266 次
社区版块
存档分类
最新评论

Linux && bash简介

阅读更多

目的

便于大家了解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』三种身份的个别权限.

文件属性

 
  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命令简介
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics