初学linux1

     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
FS UID PIDPPIDCPRI NI ADDRSZWCHANTTYTIME CMD
0S 0 58815654076 0 - 1303wait pts/000:00:00su
4S 0 58825881075 0 - 1349wait pts/000:00:00bash
4R 0 60375882076 0 - 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 所下达的指令为何!?
==========================================================================
grep
grep (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/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
或
# cat /etc/passwd | grep root 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号
# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
30:operator:x:11:0:operator:/root:/sbin/nologin
grep与正则表达式的结合
字符类的搜索:如果我想要搜寻 test 或 taste 这两个单字时,可以发现到,其实她们有共通的 't?st' 存在~这个时候,我可以这样来搜寻:

  
  
[root@www ~]# grep -n 't[ae]st' regular_express.txt
8: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.txt
2: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.txt
12:the symbol '*' is represented as start.
此时,就只剩下第 12 行,因为只有第 12 行的行首是 the 开头啊~此外, 如果我想要开头是小写字节的那一行就列出呢?可以这样:
复制代码
[root@www ~]# grep -n '^[a-z]' regular_express.txt
2: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.txt
1:"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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值