目的
便于大家了解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 网络。
- 1981 年IBM公司推出微型计算机IBM PC。
- 1991年,GNU计划已经开发出了许多工具软件,最受期盼的GNU C编译器已经出现,GNU的操作系统核心HURD一直处于实验阶段,没有任何可用性,实质上也没能开发出完整的GNU操作系统,但是GNU奠定了Linux用户基础和开发环境。
- 1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操作系统。1991年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』三种身份的个别权限.
文件属性
- 第一个字符代表这个文件是『目录、文件或链接文件等等』:
当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
当为[ - ]则是文件,例如上表档名为『install.log』那一行;
若是[ l ]则表示为连结档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。 - 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
- 第二栏表示有多少档名连结到此节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去就是了。 关于i-node的相关数据我们会在第八章谈到文件系统时再加强介绍的。 - 第三栏表示这个文件(或目录)的『拥有者账号』
- 第四栏表示这个文件的所属群组
在Linux系统下,你的账号会附属于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如图2.1.2所示(rwxrwx--), 则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。 但如果是不属于projecta的其他账号,对于此文件就不具有任何权限了。
- 第五栏为这个文件的容量大小,默认单位为bytes;
- 第六栏为这个文件的建档日期或者是最近的修改日期:
权限
r | 可获得这个文件的内容 | 可以看到这个目录里的文件以及这些文件对应的权限 |
w | 可以编辑或者修改此文件内容(但不可以删除此文件) | 可以对目录的内容进行修改。(移动目录里的文件等 ) |
x | 可以被系统执行 | 某个用户可以进入此目录 |
权限修改
- chown(需要root用户)
修改文件/目录的user - chgrp(需要root)
修改文件/目录的group$ sudo chgrp tomcat jenkins.war $ ll jenkins.war -rw-r--r-- 1 tomcat tomcat 49190379 Nov 28 2012 jenkins.war
- 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
查看方法
- 空格 向前一屏幕
- b 向回一屏幕
- q 退出less
- G 移动到末尾
- g 移动到开头
- h 帮助
- ? 往回查找
- / 向前查找
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
重定向
- > 输出重定向到一个文件或设备 覆盖原来的文件
- >! 输出重定向到一个文件或设备 强制覆盖原来的文件
- >> 输出重定向到一个文件或设备 追加原来的文件
- < 输入重定向到一个程序
- 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
相关推荐
linux shell scripting with bash,讲linux下shell编程,全英文版,喜欢的下
linux bash shell 实现源码
请注意: ... ... 一定要先下载完,再评论。如果先评论后下载,或者在下载的过程中评论,积分同样不会返还。...更多linux、ARM和C语言资源请参考: http://blog.csdn.net/arkofnoach/archive/2010/10/23/5960560.aspx
SuSE Linux Enterprise Server 10.3 Bash漏洞修复方案(含升级tar包),tar包集成最新的bash漏洞patch,直接按方案描述升级即可修复漏洞!
Bash中文手册,适合Linux shell入门级使用!
linux平台的bash shell开发帮助文档(手册),英文版,版本4.2。日常开发shell翻阅, 章节如下: Definitions:: Some definitions used i n the rest of this manual. Basic Shell Features:: The shell "building ...
linux shell bash 源码等等
Linux_theroy_bash、sh语法Linux_theroy_bash、sh语法Linux_theroy_bash、sh语法
和之前C++执行Linux Bash命令的方法 一样,Python依然支持system调用和popen()函数来执行linux bash命令。 方法一:system调用 #仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 import os os....
Linux命令行和bash脚本编程圣经 Linux命令行和bash脚本编程圣经
Linux的bash练习
linux系统修复之缺失bash
Linux bash基本语法笔记Linux bash基本语法笔记Linux bash基本语法笔记Linux bash基本语法笔记Linux bash基本语法笔记Linux bash基本语法笔记
Bash Shell 管理Linux
高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程!
以上就是小编为大家带来的解决ssh远程登陆linux显示-bash-4.1$的问题全部内容了,希望大家多多支持软件开发网~ 您可能感兴趣的文章:浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释php $_SERVER windows系统与linux...
linux bash vim配置文件,不错的配置,可以节省大家时间。
Linux Shell Scripting with Bash.rar
bashmanager - 迷你bash框架用于创建命令行工具