Linux 学习笔记 六

关于查询命令使用方法的两总命令格式

man passwd

man -5 passwd

man passwd :/usr/bin/passwd 这个执行档的使用方法介绍

man -5 passwd:上参数 5 的时候,就自动的变成去查询 /etc/passwd 这个档案的设定功能了!

 

 

背景执行功能,也就是说后台运行功能 eg:cp  file1  file2  &

fg 叫回来屏幕上执行 eg:fg

[root @test /root ]# fg %number

[root @test /root ]# bg %number

参数说明:

%      :后面接数字,表示 jobs 的工作代号

number :就是工作代号

bg 是将『背景当中的程序由 stopped 变成 Running

 

 

[root @test /root ]# kill -sigal %number

参数说明:

%number :背景工作的代号,可使用 jobs 查询

signal

-1  :重新读取一次参数设定档(类似 reload )

-2  :使用者中断该工作,类似 [Ctrl]+c 来中断一个工作

-9  :立刻杀掉一个工作,不论该工作是否为僵尸程序

-15 :停止一个工作(这是默认值)

uptime 查看系统主机已经开机多久时间,还就是在过去 1 5 15分钟的负荷是多少

 

 

date -s 用于设定linux 主机时间的参数,

—R用于查看系统的时间

%a :星期几

%b:月份名称

%d:日期

%y:年份

eg:

修改日期  date -s 21/07/2013

 

 

关于编译.c文件的时候,当我们写了两个函数的时候,我们就得编译生成.o文件,然后再利用gcc 链接两个.o文件生成binary file 文件

还有当我们要使用系统的函数库时,我们直接编译是通不过的,这时我们需要动态的链接系统自带的库,

#include <stdio.h>

int main(void)

{

float value;

value = sin ( 3.14 / 2 );

printf(“%f\n”,value);

}

eg:

[guest@test guest]# gcc sin.c -lm -L/lib -L/usr/lib

# 特别注意,那个 -lm 可以拆开成两部份来看,

# -l 是『加入某个函式库(library)』的意思,而

# m 则是 libm.so 这个函式库,其中, lib 与附档名(.a 或 .so)不需要写

# 所以 -lm 表示使用 libm.so (或 libm.a) 这个函式库的意思~

# 至于那个 -L 后面接的路径呢?这表示:

#『我要的函式库 libm.so 请到 /lib 或 /usr/lib 里面搜寻!』

 

-I/path 后面接的路径( Path )就是设定要去搜寻相关的 include 档案的目录啦!

 

[root@test root]# md5sum [-bct] filename

[root@test root]# md5sum [–status|–warn] –check filename

参数说明:

-b :使用 binary 的读档方式,预设为 Windows/DOS 档案型态的读取方式;

-c :检验 md5sum 档案指纹;

-t :以文字型态来读取 md5sum 的档案指纹。

 

一般md5sum校验文件的正确性

 

 

RPM 全名是『 RedHat Package Manager 』RPM 是以一种数据库记录的方式来将你所需要的套件安装到你的 Linux 主机的一套管理程序。

 

 

rpm 安装

[root@test root]# rpm -ivh rp-pppoe-3.1-5.i386.rpm

Preparing…     ####################################### [100%]

1:rp-pppoe    ####################################### [100%]

# -i :install 的意思

# -v :察看更细部的安装信息画面

# -h :以安装信息列显示安装进度,例如上面的 # 字符号!

 

 

rpm反安装与重建数据库

[root@test root]# rpm -e logrotate  <==解安装 logrotate 套件

[root@test root]# rpm –rebuilddb   <==重建数据库

 

 

关于系统服务

 

如果你不想让 140.116.44.202 这个地址及 140.116.32.0/255.255.255.0 这个 C class 的网域进入你的主机的话,那么可以这样在 /etc/hosts.deny 里面设定:

[root @test root]# vi /etc/hosts.deny

telnetd:  140.116.44.202 : deny

telnetd:  140.116.32.0/255.255.255.0 : deny

 

如果想让某个IP 进入telnet进入你的主机,则设定/etc/hosts.allow

 

Linux 学习笔记 五

在douban.fm中有一点就是你永远也不会有可能上一曲,这也就是像生活中的我们一样,过了就是过了,你永远也是没有机会后悔后退的,过去了就只能下一曲,继续往前走

那么如果我是两个相关的指令,第一个 command1 如果执行结果有错误,第二个就不被执行,可以这样做吗?当然可以

command1 && command2

command1 || command2

[test @test test]# ls -al 1> list.txt 2> list.err

将显示的数据,正确的输出到 list.txt 错误的数据输出到 list.err

[test @test test]# ls -al 1> list.txt 2>&1

将显示的数据,不论正确或错误均输出到 list.txt 当中!

/dev/null 代表空NULL

eg  find / -name testing 1>list_right 2>list_error

last  可以查看这个月的登录数据

tee 可以在查看了数据并把数据送出给下一个管道的时候还显示在屏幕上

 

tr [-ds] SET1

-d:删除SET1这个字符串

-s:   取代掉重复的字符

 

EG: cat list_right|tr -d testing

 

split

-l 以行数来分

eg:split -l 5 /etc/passwd test

会被分成五个

 

正规表示式 ( Regular Expression, 底下简称 RE )

 

grep [-acinv] ‘搜寻字符串’ filename

参数说明:

-a :将 binary 档案以 text 档案的方式搜寻数据

-c :计算找到 ‘搜寻字符串’ 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行!

 

宣告变量内容

[test @test test]# declare [-afirx]

参数说明:

-a  :定义为数组 array

-f  :定义为函数 function

-i  :定义为整数 integer

-r  :定义为『只读』

-x  :定义为透过环境输出变量

eg:

[test @test test]# declare -i a=3

[test @test test]# declare -i b=5

[test @test test]# declare -i c=$a*$b

[test @test test]# echo $c

15

 

myscript opt1 opt2 opt3

 

$0 myscript 也就是代表script这个档案

$1 opt1 代表是第一个附加参数,

$2 opt2  代表是第二个附加参数

也就是说script可以带参数运行

eg:

./sh pa1 pa2

则在sh的script里面取$1则是 pa1 $2则是 pa2 $0则是script本身

 

 

for (( 条件一; 条件二; 条件三 ))

for variable in variable1 variable2 …..

while [ condition1 ] && { || } [ condition2 ] …

until [ condition1 ] && { || } [ condition2 ] …

for 是已经知道有多少个 run 了,即是已经知道要跑几次了,至于 until 与 while 则分别是:

『until:直到条件相同的时候才离开程序』;

『while:当条件相同的时候,就继续做!』

 

记住在使用if 时 条件里面的都要使用空格间隔,不然条件将是无效的。

可以使用以下测试script测试脚本的执行情况

[test @test test]# sh [-nvx] scripts

-n :不要执行 scripts ,查询 scripts 内的语法,若有错误则予以列出!

-v :在执行 scripts 之前,先将 scripts 的内容显示在屏幕上;

-x :将有使用到的 scripts 内容显示在屏幕上,与 -v 稍微不同!

 

at : 这个工作仅执行一次就从 Linux 系统中的排程中取消;

crontab : 这个工作将持续例行性的作下去!

 

只要你编辑完 /etc/crontab 这个档案,并且将他储存之后,呵呵!那么 crontab 的设定就自动的会来执行了!

linux系统启动过程

第一阶段:

Boot loader(lilo或grub),内核启动前的一段引导程序,主要做三件事:

1.初始化芯片(最直接理解为CPU)

2.根据系统设置,初始化少量的外围设备(例如从U盘启动)

3.启动选择器(针对多操作系统),加载linux内核

 

 

第二阶段:

linux内核启动阶段

1.首先挂载initrd文件,形成我们linux的最小根文件系统(在内核的启动过程中,需要文件系统,而实际上的文件系统存在于硬盘上,linux解决这个问题的办法是,先挂载产生一个最小文件系统initrd,把它装入内存,然后以这个文件系统为依托,去读取完整的文件系统)

2.执行/sbin/init这个文件,产生1号进程(父进程是0号进程:内核)。

执行这一步非常重要,它生成1号进程后,大多数版本的linux内核都会利用1号进程直接或间接的产生其他进程。  而有些内核同时产生出2号进程,不同版本作用不一,我们这个内核2号进程作用是(在用户层面上)管理内存分页。

 

第三阶段:

1.execute /etc/init.d/*   执行/etc/init.d/目录下所有的程序

2.execute /sbin/getty     用来初始化标准输入输出标准错误,0,1,2

然后执行/bin/login,产生出登录界面

3.manger the orphen process管理孤儿进程(操作系统运行中一直都运行)

Linux 学习笔记 四

SHELL  编程

 

给你权限越高,就越危险,操作就越是要谨慎。

Shell 是一个用C语言编写的程序,是用户使用Linux的桥梁

Shll程序设计语言:编写SHELL脚本,用户系统管理工作

命令语言:交互解释和执行用户输入命令

种类:

Bourne shell (sh  bash)

C shell (csh tcsh)

Korn shell (ksh)

Shell命令的两种形式

内部命令: cd echo     实现功能比较简单,代码量比较少,占用资源少

外部命令: cp rm 实现功能比较复杂

查看命令类型 type command

系统加电–>

 

初始化文件

登录shell

交互式非登录shell   比如通过命令shell

非交互式shell

 

登录shell

首先登录shell 执行 /etc/profile  系统级配置文件

~/.bash_profile      ~/.bash_login       ~/.profile 执行用户配置文件,只要其中               之一一个被执行了,其余的就不执行了。

~/.bash_logout 退出时执行。

交互式非登录shell

我们使用的终端就是shell

并不执行登录shell 里面的文件,但是继承了登录shell,所以也就是相当于全部都执        行了

/etc/bashrc

~/.bashrc       改此文件可以修改我们的看见的终端的命令行的那提示符                                        ~/emsd1302/0715-0719/day05$

想改的内容:PS1=”youname”

 

非交互式shell

并不执行前面描述的初始化文件中的命令,继承了登录shell设置的shell变量

查找环境变量env, 并执行有该变量命名文件中的命令 eg:写一条脚本  然后执行                     bash first.sh  这样我们就执行了一个bash然后就退出了。这也就是说执行                   了之后就死掉了

shell 编程

只有弱类型,如字符型

局部变量:只在当前shell中存在的变量,而由其它的shell启动的程序不能使用该变                      量 新开一个终端是没用的,启动一个子shell也是没用的

环境变量:shell的任何子进程都能访问的变量,许多程序要正确运行都需要使用环境变                       量

shell变量:shell设置的特殊变量,也是shell正确运行所必须的

定义用户变量

变量名=变量值 var=hello

可包含、“字母”、”下划线“、”数字“ 以字母和数字开头 数字打头为shell默认                  使用

unset 释放变量,清楚变量

set 查看所有变量

readonly 制定变量为只读,unset不能释放

环境变量

一般用大写字母作为环境变量

系统设置像ls这样的命令一样,我们可以使用ls就是因为环境变量配置好了,如果不配        置好我们就得使用绝对路径看

shell 变量

例如 $$ 系统已经设置好了的。

 

环境变量设置

加上export 把其设置为环境变量   定义的是用户级别的      在另外一个shell也是可以查看的

可以用env查看所有的环境变量 清楚用unset

常用环境变量

HOME: 保存注册目录

PATH:保存用冒号分隔的目录路径名

TERM:终端了行Xterm 图形终端 linux 文本终端

UID:当前用户的标识符,取值是由数字构成的字符串

PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化

PS1:主提示符,# $

PS2:辅助提示符,在输入行末尾“\”输出该提示符 echo $PS2  =  >

IFS:shell制定的缺省域分隔符(默认是空格) IFS=:

LOGNAME:此变量保存用户登录名

SHELL:保存缺省的SHELL

RANDOM:产生随机数  产生的随机数在一定的范围

RANDOM(max-min+1)+min

Eg:echo $(($RANDOM%(10-1+1)+1))

bash 支持一维数组

var=(element1 element2…… elementn)

var=([2]=element3 [0]=element1)  对数组进行赋值进行修改

eg:array=([5]=change5 [2]=change2) 这样就只剩下两个元素了

var [2]=element3 修改指定数组变量的值 eg:array[5]=change

 

使用数组${name[n/*]}  eg:echo ${array[4]} 指定显示某一个

echo ${name[*]} 显示所有元素

echo ${#name[*]} 显示元素个数

echo ${name[@]} 和*基本一样 在使用echo ${array[*]}上

但是在整体赋值上array1=(“${array[*]}”)

array1=(“${array[*]}”) 赋值之后 array1的长度就是 1

array2=(“${array[@]}”)  赋值之后还是原来的长度

变量替换

文件名替换

变量替换

命令替换

算术替换

 

变量/参数 替换格式

变量=${参数:-word}——若参数为空或者未设置,用word代替参数进行替换,参数值不变

eg:

#!/bin/bash

#var1=hello

VAR=${var1:-“hello word”}

echo “The value of VAR is $VAR”

echo “The value of var $var1″

echo finished

变量=${参数:=word}——若参数为空或者未设置,用word代替参数进行替换,参数值为word

eg:

#!/bin/bash

#var1=hello

VAR=${var1:=”hello word”}

echo “The value of VAR is $var1”

echo “The value of var $VAR”

变量=${参数:? message}——若参数为空或者未设置,则message作为标准错误打印出来

eg:

#!/bin/bash

#var1=hello

VAR=${var1:?”hello word”}

echo “The value of VAR is $var1”

echo “The value of var $VAR”

变量=${参数:+word}——若参数设置了,用word代替参数进行替换,参数值不变

eg:

#!/bin/bash

var1=hello

VAR=${var1:+”hello word”}

echo “The value of VAR is $var1”

echo “The value of var $VAR”

 

查询匹配字符

* 匹配一个或者多个

? 匹配一个

[char] eg:[1-9] 匹配一个范围

eg:[!a]       显示不含a的文件

 

Linux 学习笔记 三

Finding Things on Linux

 

ID、显示跟用户相关的信息

id

id root

id -a root

w

who

查找

find + 路径 + 参数 + 参数内容

find . -mtime 10 -print  查找最后修改时间你=

 

atime 访问时间   acess

ctime 创建时间  create

mtime 最后修改时间          modification

+10 10天之前

-10  100天之内

 

find . -mtime 10 -print

find /etc -user 0 -size +400 -print              查找用户0 大小为400的快

 

 

查看当前系统的数据块的大小

df -l

sudo tune2fs -l /dev/sda1

 

-size +n 大小于N块

-n小于n块

-nc 大于n个字节

-nk 大于nk的文件

find ./ -name “*.txt”   查找当前目录下名字以.txt 结尾的文件

目录在linux中默认的大小是4096个字节

 

find ~ -perm 777 > ~/holes      查找家目录下 权限为777的文件 并重定向到~/holes

find /export/home -type f -atime +365 -exec rm {} \;    查找 /export/home 下类型为普通文件的,且最后访问时间在一年以上的文件 并把其删除掉  -exec 表示执行后面的操作

 

 

find . -type f -size 0c  -exec rm {} \; 表示删除当前目录下大小为0个字节的文件

 

find /export/home/html -name “*.html” -print | xargs\

perl -p -i.bak -e “s/Copyright 2004/Copyright 2005/g;”

 

查找/export/home/html 下后最为html的名字的文件打印列表 | 把前面的输出取到         xargsperl 把前面查找到的内容一个一个的交给后面的去处理  替换…2004 为..2005

 

-maxdpth 最大深度(目录)

mkdir -p dir1/dir2      eg:find ./ -maxdepth 1 -name “*.txt” 查找一级

 

grep 查找文件内容

大小写敏感

grep root /etc/passwd  查找有root关键字的行内容,以行为单位

-v反向 查找除了root以外的

-i 忽略大小写

 

ls -al |grep -i ‘sep 1’ 查找显示的文件的 含有sep1的文件

 

wc 显示行数词数字符数的统计

wc -l     统计行数

-w   统计词

-c    统计字符

grep wang /etc/passwd | wc -l 统计包行wang这个单词的行数

 

grep ‘/bin/bash’ /etc/passwd |wc -l  统计使用bash的用户数

grep ‘/bin/bash’ /etc/passwd | awk -F: ‘{print $1}’ | cat > ./bash.log

 

(grep ‘/bin/bash’ /etc/passwd | awk -F: ‘{print $1}’;date) | cat >     ./bash.log

查找使用bash 的用户,并把用户名写入bash.log文件里面,并追加时间戳

 

 

du 命令 统计磁盘的使用情况

du filename

du -sk

-s 信息汇总起来

-k 以K为大小来统计

 

df 查看分区挂载信息

df -k 以K 为大小查看 默认是字节

 

ps 命令 查看当前系统中正在运行的进程

ps -e 所有的进程全部显示出来

-f 显示显示的信息

-u 显示用户的uid

ps    -ef | grep telnet 过滤含有telnet的进程信息

UID 代表用户

PID 代表进程ID 唯一代表一个进程

PPID 父进程ID  1代表init进程 没有父进程就是孤儿进程,1号进程就是孤儿进程的父进程犹            如孤儿院院长,

tty 代表在哪一个终端被启动,有问号代表内核启动

TIME 代表当前运行持续的时间

 

kill 命令杀死进程,很多情况用来发信号,进程和进程之间利用信号来交流信息

kill -9 1232  9号信号代表终结进程

pkill sleep

 

sleep 睡眠命令

sleep 100 休眠100秒

sleep 100 &表示退到后台运行

 

 

job control 任务调度

前后太调度

sleep 100 &

jobs

fg %n 把一个任务调度到前台

bg %n 把一个任务调度到后台

stop %n挂起

kill %n

 

网络相命令

ping -s hostIP

ifconfig 查看linux下的IP 配置

netstat -rn 显示网络状态

traceroute     www.sina.com.cn              显示网络经过了多少级路由

 

远程登录命令

telnet hostnameIP 远程登录 在远程主机上只要符合posix标准的命令的都可以执行

rlogin

ssh  登录是通过密码加密的传输的,telnet 是明文的

 

FTP是一种文件共享机制,

ftp 219.225.211.200

cd 用来修改服务器当前命令

lcd 修改本机命令

dir 显示SERVER的目录信息

pwd 也是显示服务器路径

bye 退出 或者使用exit 退出

!clear 清屏

! 加!表示接下来的命令在本机执行 但是对于cd不起作用,应为其为内部名,!只使用与外部              命令。外部命令:写成程序,可被发现的命令。、内部命令:是通过文件变量来实现的。

bin 用于制定FTP 传输方式 一般分为两种

bin二进制形式 10 → 1010

asc文本形式 10 → ‘1’ ‘0’

上传,下载

get 下载,单个文件下载

put 上传,当个文件上传

mget      多个文件下载

mput      多个文件上传

hash 加密  以#的形式显示

prompt 命令提示功能

 

write 发送信息 一对一  只支持一台主机多个用户发送信息

mesg -y|-n 是否接收别人的信息

wall 广播式

 

eg: telnet hostIP

write contents pts/hostpts

 

 

 

 

 

script 脚本

#!/bin/sh

pwd

cal

date

 

crontab 计划任务

-l 列出已存在的计划任务

-e 编辑计划任务 –>选择一个文本编辑器 select -editor

-r 清空计划任务列表

m    分(0-59)

h     时(0-23)

dom       日(1-31)

mon       月(1-12)

dow       星期(1-7)

command     执行的命令

 

特殊的符号

*   满足任意条件

–      区间      9-17

,   或0,20,40

/   每隔多久时间  有些不支持

02***/tmp/a.txt每天凌晨亮点执行a.txt

13 5 13 * 5 /tmp/a.txt       每月的13日的5:13分执行,有冲突时任意满足一个也执行

0,30 8-17**1-5/tmp/a.txt      八点到17点每隔半个小时 周一到周五 执行

 

设置初始文件

修改环境变量

PATH=/

%WTO=uname -n   把里面的命令的执行结果付给WTO

whereis  会查看所有与之相关的信息

history 记录你敲过的所有命令

history 5       记录最近敲的几条

!!        重复执行前一条命令

!n        重复执行在history里面的第几条

alias h=history 表示定义h为history的简写

unalias   撤销

 

umask    文件创建权限掩码

普通文件     666-umask=实际权限

目录文件     777-umask=实际权限

t 权限位      粘着位     用来当你对一个目录+t权限时。此目录下的文件只能由三类人删除

1.root

2.目录拥有者

3.文件拥有者

粘着位为     1777      rwxrwxrw t

s位        2777 rwxrwsrwx

s位        4777 rwxrwxrwx

PS1=表示修改一个环境变量

PS1=’${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ‘

注意修改对。PS1有多行

\u用户名

\h 计算机名

\w当前工作路径  W显示最后一级路径

\$表示用户级别

 

source + 配置文件    表示重新加载配置文件

 

用户组管理

groupadd -g GID 制定的GID的值

groups 查看当前用户所属的组

groupdel       删除组

groupmod 修改组信息

-n 修改组名

-g 修改组ID

gpasswd

-a +用户名+ 组名  向指定组添加用户

-d+用户名+组名       删除用户

 

用户管理

useradd [参数] username

-u 指定用户的UID

-g 制定所属的组,如果不指定则添加到默认当前用户所属的组

-d 指定用户的主目录

-s 指定用户的SHELL类型

-m 建立用户主目录 不存在则自动创建

每个用户有一个默认的组。创建用户后,默认是没有密码的,这样也就是没有注册用户,这时需要添加密码。Sudo passwd student    其中在修改密码时sudo passwd 是修改root密码,passwd 是修改当前用户密码 sudo passwd user 是修改制定用户密码

 

usermod [] 用户名

-l 修改用户名  sudo usermod -l zhangsan student

-d 修改用户主目录

userdel

-r 删除用户主目录

chown [] +用户名+文件名            修改文件拥有者,文件过户只能由root进行

sudo chown student a.txt

chown -R 递归改变

sudo chown -R student dir2

chgrp [] 组名 文件名 同样需要root权限过户

sudo chgrp emsd1302 dir2

-R 递归修改

sudo chown -R student:student dir  表示同时修改所属用户和组别同样需要                   root权限执行

 

30 17 18 7 * /home/arts/emsd1302/0715-0719/day04/findtest/a.sh

1 2 3 4