初学linux1

来源:互联网 发布:网络虚拟化技术 编辑:程序博客网 时间:2024/04/29 22:23

     linux系列的博客注定内容很杂,这些文章记录的都是我在学习过程中每天用到或者见到的一些知识,很琐碎,也算是我的一个备忘录吧。

Linux简介:

linux内核版本:目前最稳定的版本是2.16.8(2是主版本号,16是次版本号,8是末版本号);最新的版本是3.17.4.

linux发行版本比较多,比如ubuntu,redhat,centOS等等,他们都是依据相同或者不同版本的Linux内核开发出来的。ubuntu是图形界面比较炫,一般用于个人用户;redhat和centOS大致相同,都用于服务器端(因为其没有图形界面,旁支功能比较少,所以更加稳定和安全)。

Linux与Windows的区别:

a.Linux严格区分大小写。

b.Linux的一切都是以文件的形式存储,包括硬件。

c.Windows下的程序不能在Linux上直接运行。

d.Linux不靠扩展名区分文件,而是靠权限区分文件的。比如我们常见的shell文件,我们通常把其扩展名命名为sh,这是为了我们好识别这些文件,如果你命名为abc也没关系。

在linux命令模式下,若开头是$说明你是普通用户,若是#说明是root用户

如何创建一个shell脚本?

  在 bin 目录下,vi shellName.sh

这时进入该文件 ,若此前不存在该文件会提示 this  is new file.然后输入i,进入编辑模式,就可以进入脚本的编辑了。编辑完之后退出时要进入末行模式,方式是输入:wq(保存并且退出)。

vi下,几种退出方式:

首先进入末行模式(方式是:),保存是w,退出是q,保存并且退出是wq,强制退出不保存q!,强制退出保存wq!(这种用法还没理解)

运行一个shell脚本的方法:

方法一:转到uad.sh所在目录,chmod +x uad.sh   添加执行权限

       ./uad.sh  打开一个子shell,读取并且执行uad.sh里面的命令。

方法二:sh  uad.sh 以指定的bashshell来执行脚本。文件不必有执行权限。脚本也是在子shell中执行。

方法三: source  uad.sh等同于. uad.sh 以环境默认的shell来执行脚本。文件不必有执行权限

一些Linux命令

·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

find命令的参数;

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

-name   filename             #查找名为filename的文件
-perm                        #按执行权限来查找
-user    username             #按文件属主来查找
-group groupname            #按组来查找
-mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n               #按文件访问时间来查GIN: 0px">

-ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2              找文件,-n指n天以内,+n指n天以前 
-ctime    -n +n               #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                      #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2               #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                     #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                %;      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                        #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                       #忽略某个目录
示例:

查找当前目录下的addUser.sh文件

#find addUser.sh

addUser.sh

查找当前目录下的所有普通文件

# find . -type f -exec ls -l {} \; 
-rw-r–r–    1 root      root         34928 2003-02-25   ./conf/httpd.conf 
-rw-r–r–    1 root      root         12959 2003-02-25   ./conf/magic 
-rw-r–r–    1 root      root          180 2003-02-25   ./conf.d/README 
查当前目录下的所有普通文件,并在- e x e c选项中使用ls -l命令将它们列出

在/ l o g s目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec   -ok   rm {} \;

=================================================================================

ps

ps 是显示瞬间行程的状态,并不动态连续;如果想对进程运行时间监控,应该用 top 工具。

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有程序。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t<终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u  以用户为主的格式来显示程序状况。
13)ps x  显示所有程序,不以终端机来区分。

ps aux 或 lax 输出的解释

au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

USER: 进程所有者
PID: 进程ID

%CPU: 占用的 CPU 使用率
%MEM: 占用的内存使用率
VSZ: 占用的虚拟内存大小
RSS: 占用的内存大小

TTY: 终端的次要装置号码 (minor device number of tty)

STAT: 进程状态:

START: 启动进程的时间;
TIME: 进程消耗CPU的时间;
COMMAND:命令的名称和参数;

=================进程STAT状态====================

D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行,在可中断队列中;
S 处于休眠状态,静止状态;
T 停止或被追踪,暂停执行;
W 进入内存交换(从内核2.6开始无效);
X 死掉的进程;
Z 僵尸进程不存在但暂时无法消除;

W: 没有足够的记忆体分页可分配
WCHAN 正在等待的进程资源;

<: 高优先级进程
N: 低优先序进程
L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O),即,有些页被锁进内存

s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;

示例

PID TTY TIME COMMAND
5800 ttyp0 00:00:00 bash
5835 ttyp0 00:00:00 ps
可以看到,显示地项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)、COMMAND(该进程地命令行输入).

可以运用u选项来查看进程所有者及其他少许详细信息,如下所示:
$ ps u
USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND
test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash
test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u

在bash进程前面有条横线,意味着该进程便是用户地登录shell,所以对于一个登录用户来说带短横线地进程只有一个.还可以看到%CPU、%MEM两个选项,前者指该进程占用地CPU时间

和总时间地百分比;后者指该进程占用地内存和总内存地百分比.
在这种情况下看到了所有控制终端地进程;当然对于其他那些没有控制终端地进程还是没有观察到,所以这时就需要运用x选项.运用x选项可以观察到所有地进程情况.

ps -l
FSUID PIDPPIDCPRINI ADDRSZWCHANTTYTIMECMD
0S0 588156540760 - 1303wait pts/000:00:00su
4S0 588258810750 - 1349wait pts/000:00:00bash
4R0 603758820760 - 1111- pts/000:00:00ps

 

# 上面这个信息其实很多喔!各相关信息的意义为:
# F 代表这个程序的旗标 (flag), 4 代表使用者为 super user;
# S 代表这个程序的状态 (STAT);
# PID 没问题吧!?就是这个程序的 ID 啊!底下的 PPID 则上父程序的 ID;
# C CPU 使用的资源百分比
# PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍;
# NI 这个是 Nice 值,在下一小节我们会持续介绍。
# ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running
# 的程序,一般就是『 - 』的啦!
# SZ 使用掉的内存大小;
# WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
# TTY 登入者的终端机位置啰;
# TIME 使用掉的 CPU 时间。
# CMD 所下达的指令为何!?
==========================================================================grepgrep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename选项与参数:-a :将 binary 文件以 text 文件的方式搜寻数据-c :计算找到 '搜寻字符串' 的次数-i :忽略大小写的不同,所以大小写视为相同-n :顺便输出行号-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!--color=auto :可以将找到的关键词部分加上颜色的显示喔!将/etc/passwd,有出现 root 的行取出来# grep root /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin或# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin
将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号
# grep -n root /etc/passwd1:root:x:0:0:root:/root:/bin/bash30:operator:x:11:0:operator:/root:/sbin/nologingrep与正则表达式的结合字符类的搜索:如果我想要搜寻 test 或 taste 这两个单字时,可以发现到,其实她们有共通的 't?st' 存在~这个时候,我可以这样来搜寻:
[root@www ~]# grep -n 't[ae]st' regular_express.txt8:I can't finish the test.9:Oh! The soup taste good.


其实 [] 里面不论有几个字节,他都谨代表某『一个』字节, 所以,上面的例子说明了,我需要的字串是『tast』或『test』两个字串而已!

字符类的反向选择 [^] :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g,如下

[root@www ~]# grep -n '[^g]oo' regular_express.txt2:apple is my favorite food.3:Football game is not use feet only.18:google is the best tools for search keyword.19:goooooogle yes!

第 2,3 行没有疑问,因为 foo 与 Foo 均可被接受!

但是第 18 行明明有 google 的 goo 啊~别忘记了,因为该行后面出现了 tool 的 too 啊!所以该行也被列出来~ 也就是说, 18 行里面虽然出现了我们所不要的项目 (goo) 但是由於有需要的项目 (too) , 因此,是符合字串搜寻的喔!

至於第 19 行,同样的,因为 goooooogle 里面的 oo 前面可能是 o ,例如: go(ooo)oogle ,所以,这一行也是符合需求的!

行首与行尾字节 ^ $
行首字符:如果我想要让 the 只在行首列出呢? 这个时候就得要使用定位字节了!我们可以这样做:

[root@www ~]# grep -n '^the' regular_express.txt12:the symbol '*' is represented as start.
此时,就只剩下第 12 行,因为只有第 12 行的行首是 the 开头啊~此外, 如果我想要开头是小写字节的那一行就列出呢?可以这样:
复制代码
[root@www ~]# grep -n '^[a-z]' regular_express.txt2:apple is my favorite food.4:this dress doesn't fit me.10:motorcycle is cheap than car.12:the symbol '*' is represented as start.18:google is the best tools for search keyword.19:goooooogle yes!20:go! go! Let's go.

如果我不想要开头是英文字母,则可以是这样:

[root@www ~]# grep -n '^[^a-zA-Z]' regular_express.txt1:"Open Source" is a good mechanism to develop programs.21:# I am VBird

^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义!

==============================================================================

uname
uname 是Linux命令,用于显示当前操作系统名称。
参  数:
-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
-m或–machine 显示主机的硬件(CPU)名
-n或-nodename 显示主机在网络节点上的名称或主机名称
-r或–release 显示linux操作系统内核版本号
-s或–sysname 显示linux内核名称
-v 显示显示操作系统是第几个 version 版本
-p 显示处理器类型或unknown
-i 显示硬件平台类型或unknown
-o 显示操作系统名
–help 获得帮助信息
–version   显示uname版本信息

最常用参数 uname -a
=================================================================================

set 显示当前shell的变量(范围比env多了当前系统shell相关的变量),
env 显示当前用户的变量(包括用户自定义的环境变量和系统自带的环境变量)
export 显示当前导出成环境变量的系统shell相关的变量

每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量

先介绍一下在Linux下常用的环境变量
HISTSIZE是指保存历史命令记录的条数。
PATH能够指定命令的搜索路径。
HOME当前用户的home路径。
LOGNAME当前用户的登录名。
HOSTNAME:主机的名称。
SHELL当前用户使用的shell的路径。
LANG/LANGUAGE和语言相关的环境变量。
PS1基本提示符,对于root用户来说是#,对于普通用户来说是$。

[root@linux ~]# aaa=bbb

[root@linux ~]# echo $aaa
bbb

[root@linux ~]# set|grep aaa
aaa=bbb

[root@linux ~]# env|grep aaa

[root@linux ~]# export aaa

[root@linux ~]# env|grep aaa
aaa=bbb

显示所有环境变量
HOSTNAME=odcedwdev2
SELINUX_ROLE_REQUESTED=
TERM=vt100
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.1.45.208 50256 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib64/qt-3.3
AGENTAPPDIR=/veris/ss/agent/bin
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/12
AGENTDIR=/veris/ss/agent
USER=ss
MAIL=/var/spool/mail/ss
PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/Software/Netezza/linux/bin:/home/ss/bin:/opt/Software/Netezza/linux/bin
PWD=/home/ss
JAVA_HOME=/usr/java/default
AGENTTRACEDIR=/veris/ss/agent/trace
LANG=en_US.UTF-8
SELINUX_LEVEL_REQUESTED=
DS_SERVER_OPT=-server :31548
NZ_ODBC_INI_PATH=/veris/IBM/InformationServer/Server/DSEngine
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HISTCONTROL=ignoredups
SHLVL=1
HOME=/home/ss
LOGNAME=ss
QTLIB=/usr/lib64/qt-3.3/lib
CVS_RSH=ssh
CLASSPATH=:/usr/java/default/lib/dt.jar:/usr/java/default/lib/htmlconverter.jar:/usr/java/default/lib/tools.jar
SSH_CONNECTION=10.1.45.208 50256 10.1.249.126 22
SCHEDULE_SERVER_HOME=/veris/ss/server
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/bin/env
========================================================================
who 显示目前登入系统的用户信息。
who am i
ss       pts/12       2014-12-04 11:49 (10.1.45.208)
显示的信息的意思是
login name:登录用户名; terminal line:使用终端设备; login time:登录到系统的时间。
who
ss       pts/0        2014-10-14 17:45 (ad)
ss       pts/1        2014-12-04 09:49 (10.1.45.157)
ss       pts/2        2014-12-04 10:23 (10.1.45.207)
ss       pts/3        2014-12-04 12:58 (10.1.45.205)
ss       pts/5        2014-12-04 13:05 (10.1.45.178)
ss       pts/7        2014-12-03 15:11 (10.1.45.217)
ss       pts/9        2014-12-04 13:06 (10.1.45.178)
ss       pts/10       2014-12-04 14:28 (10.1.70.39)
ss       pts/11       2014-12-04 13:49 (10.1.72.39)
ss       pts/12       2014-12-04 11:49 (10.1.45.208)
ss       pts/13       2014-12-04 13:24 (10.1.70.19)
ss       pts/14       2014-12-04 13:57 (10.1.45.207)
dsadm    pts/15       2014-12-04 14:11 (10.1.72.37)
ss       pts/16       2014-12-04 14:46 (10.1.45.237)
================================================================
wc
wc命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

语法:wc [选项]文件...

说明:该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。下面让我们来简单的看一下其支持的参数及其代表的含义。

参数及含义

参数含义-c显示文件的Bytes数(字节数)及文件名输出到屏幕上-l将每个文件的行数及文件名输出到屏幕上-m将每个文件的字符数及文件名输出到屏幕上,如果当前系统不支持多字节字符其将显示与-c参数相同的结果-w将每个文件含有多少个词及文件名输出到屏幕上


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 痔疮手术后伤口不愈合怎么办 痔疮手术后伤口痒怎么办 肛瘘手术十五天后伤口疼怎么办 leep刀后hpv还是阳性怎么办 结肠息肉钳除后怎么办 痔疮手术后排便困难怎么办 住院未结账跑了怎么办 来月经痔疮犯了怎么办 安保压不下宫缩怎么办 肛周脓肿术后假性愈合怎么办 肛门的皱褶肿了怎么办 1月婴儿排便困难怎么办 吃完辣的痔疮肿了怎么办 肛裂怎么办兰州来医博.相信 胎儿脐带绕颈一周怎么办 郑大一附院怎么办合作医疗 痔疮包不消怎么办很疼 痔疮内扎手术后直肠窄小怎么办 2个月大的宝宝鼻塞怎么办 宝宝鼻屎比较深怎么办 来例假痔疮犯了怎么办 微医爽约过一次怎么办 炸完的薯条软了怎么办 学信网号码换了怎么办 学信网注册换手机了怎么办 学信网手机号码已被注册怎么办 学信网手机号码被注册了怎么办 去英国留学不会做饭怎么办 小米陶瓷刀钝了怎么办 橱柜的缝擦不到怎么办 悠悠球上油早了怎么办 买了没有esp的车怎么办 饥荒海难狗来了怎么办 饥荒海难拖网掉水里了怎么办 饥荒遇到了猪人怎么办 饥荒龙蝇赖在家不走怎么办 饥荒海难崩档了怎么办 gta5全是rpf文件怎么办 饥荒没有海象人营地怎么办 饥荒海滩猎犬来了怎么办 宝宝换牙门牙上长颗尖牙怎么办