Unix 学习笔记(二)

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

Unix 学习笔记

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

主讲:程欣



2) chsh

chsh 是提供使用者更换 login shell 的指令,你可经由此更换自己使用的 shell 。

四、 文件系统权限

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

权限 文件 目录

-------------------------------------------------------

r(read) cat读取文件内容 ls查看此目录

w (write) 修改文件内容 在此目录下删除,创建文件

x (execute) 执行此文件 cd进入此目录

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

实例:浙江移动的验证授权系统的实现

********************************************************************************

营业厅里有很多角色:

r 4 00000100

w 2 00000010

z 1 00000001

p 5 00000101

&(位于运算): 相同位置留下,不同取0

if(p&4==4)具有读权限

if(p&4==2)具有写权限

if(p&4==1)具有执行权限

p 如果营业员权限为p,如何判断此人具有读权限

浙江移动具如下权限:

登录 换卡 换号 换品牌补卡 授权 重起 出帐

1 2 4 8 16 32 64 128

if(p=a+b+c)如果a,b,c都是不重复的2的n次方,则p和a,b,c做&运算肯定等于a,b,c

营业员:

p=1+2+16=19(权重)

if(p&1==1)可以登录

if(p&2==2)可以换卡

if(p&4==4)可以换号

********************************************************************************

练习:

1.熟练掌握各个命令

2.用chmod控制你home目录下的每个文件和目录

验证一点:如果把目录权限封住了,是否可以操作目录下的文件内容(cat)--->验证结果:

不可以!

ls -la

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

五、软硬连接的区别

1.软连接可以连接目录,硬连接不可以;

2.软连接可以跨分区,而硬连接不可以;

3.软连接依赖原文件,而硬连接不依赖。

六、范例程序

1、King.java(金字塔):

/**

% vi King.java

% source /etc/.login

% javac King.java

% java King

*/

public class King{

public static void main(String args[]){

for(int i=0;i<10;i++){

for(int j=10;j>i;j--){

System.out.print(" ");

}

for(int j=0;j<i*2+1;j++){

System.out.print("$");

}

System.out.println();

}

}

}

2、Server.java(聊天室):

import java.io.*;

import java.net.*;

import java.util.*;

public class Server{

public static Vector users=new Vector();;

public static void main(String args[]){

int port=10000;

ServerSocket server=null;

try{

server=new ServerSocket(port);

System.out.println("server start up on port "+port);

while(true){

Socket s=server.accept();

User user=new User(s);

user.start();

}

}catch(Exception e){

e.printStackTrace();

}finally{

if(server!=null){

try{server.close();}catch(Exception e){}

}

}

}

}c

lass User extends Thread{

private String userName;

private InetAddress ip;

private Socket s;

public User(Socket s){

this.s=s;

}

public void run(){

InputStream input=null;

OutputStream output=null;

try{

input=s.getInputStream();

output=s.getOutputStream();

PrintWriter pw=new PrintWriter(

new OutputStreamWriter(output));

BufferedReader buf=new BufferedReader(new InputStreamReader(input));

pw.print("enter your name :");

pw.flush();

userName=buf.readLine();

ip=s.getInetAddress();

Server.users.add(this);

sendAll(userName+" has joid us");

long t=0;

while(true){

String line=buf.readLine();

if(line.equals("bye")){

sendAll(userName+" has leave us ");

Server.users.remove(this);

break;

}i

f(line.equals("users")){

Iterator it=Server.users.iterator();

while(it.hasNext()){

User user=(User)it.next();

String n=user.getUserName();

InetAddress i=user.getIp();

pw.println(i+"\t"+n);

}

pw.flush();

continue;

}

if(line==null||line.trim().length()==0)continue;

long s=System.currentTimeMillis();

if(t!=0&&(s-t)/1000<3){

pw.println("flush denied ");

pw.flush();

continue;

}t

=s;

if(line.startsWith("kill")){

try{

StringTokenizer stk=new StringTokenizer(line);

stk.nextElement();

String u=(String)stk.nextElement();

Iterator it=Server.users.iterator();

while(it.hasNext()){

User user=(User)it.next();

String n=user.getUserName();

if(n.equals(u)){

sendAll(n+" was killed by "+userName);

it.remove();

user.interrupt();

break;

}

}

}catch(Exception e){

}

}

if(line.equals(":)")) {

sendAll(userName+" 嘿嘿干笑了一声,统统告诉我密码");

continue;

}i

f(line.equals(":(")){

sendAll(userName+" 耷拉着脸说:我今天不太高兴,不要惹我 ");

continue;

}s

endAll(userName+" said : "+ line);

}

}catch(Exception e){

e.printStackTrace();

}finally{

if(s!=null)try{s.close();}catch(Exception e){}

}

}

public synchronized void sendMessage(String message){

OutputStream output=null;

try{

output=s.getOutputStream();

PrintWriter pw=new PrintWriter(

new OutputStreamWriter(output));

pw.println(message);

pw.flush();

}catch(Exception e){}

}

public void sendAll(String message){

Iterator it=Server.users.iterator();

while(it.hasNext()){

User user=(User)it.next();

user.sendMessage(message);

}

}

public String getUserName(){return userName;}

public InetAddress getIp(){return ip;}

}

登录命令:telnet 192.168.1.250 10000

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

七、网络基本命令

1、/etc/inet/inetd.conf 是solaris10以前的配置方式,现在已经作废(vi /etc/inet/inetd.conf)

2、输入命令:vi /etc/services

"/etc/services" [Read only] 119 lines, 4228 characters

swat 901/tcp # Samba Web Adm.Tool

#

# The following customer-specific entries were found in the services file

# prior to an upgrade. Note that service names and their corresponding

# port numbers must be registered with IANA, http://www.iana.org, and

# entries not registered as such may not be preserved automatically by

# future upgrades.

#t

cpmux 1/tcp

echo 7/tcp

echo 7/udp

discard 9/tcp sink null

discard 9/udp sink null

systat 11/tcp users

daytime 13/tcp

daytime 13/udp

netstat 15/tcp

chargen 19/tcp ttytst source

chargen 19/udp ttytst source

ftp-data 20/tcp

ftp 21/tcp

ssh 22/tcp # Secure Shell

telnet 23/tcp

"/etc/services" [Read only] 119 lines, 4228 characters

解释:20口传命令,21口传文件

3、新版本的solaris中,靠svcs命令来管理所有的服务

svcs 列出所有的服务

svcadm enable telnet

svcadm disable telnet

svcadm disable ftp

svcadm enable ftp

svcadm disable ssh

svcamd enable ssh

ftp-data 20

ftp 21

ssh 22

telnet 23

smtp 25

web 80

pop3 110

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

常见应用软件:

oracle 1521

tomcat 8080

resin 8080

weblogic 7001

pointbase 9092

mysql 3306

1000口内的程序默认是为超级用户准备的

1000内的端口默认是为系统服务准备的

自定义的程序必须大于1000口,如果小于1000,

则必须用超级用户(root,Administrator)来运行

ssh briup@192.168.1.250

yes

3、查看所经历的路由:

/usr/sbin/traceroute 192.168.1.1

/usr/sbin/traceroute 61.129.57.158

traceroute to 61.129.57.158 (61.129.57.158), 30 hops max, 40 byte packets

1 192.168.1.1 (192.168.1.1) 0.198 ms 0.094 ms 0.085 ms

2 * * *

3 *^C$

telnet:

apache web服务器

resin/tomcat java 应用服务器

squid 缓存服务器 就是给图片和网页在内存中缓存起来

rlogin 192.168.1.250 -l briup

Password:

Last login: Wed Apr 30 10:43:43 from 192.168.3.74

Sun Microsystems Inc. SunOS 5.10 Generic January 2005

You have new mail.

4、ftp:下载和上传文件

ftp 192.168.1.250

user : briup

pass: briup

cd 切换服务器上的目录

lcd 切换本地目录

dir/ls 查看服务器上的文件列表

bye 断开,退出

bin 传输二进制文件(图片,电影,doc,ppt都是)

asc 传输文本文件 (.txt .java 写字板打开肉眼能识别的)

用bin模式肯定不会错的

get 下载

put 上传

mget 下载多个

mput 上传多个

hash 打印进度条

prompt 下载,上传前是否提示

八、Shell scripts:脚本编程

1、脚本

.sh 意味着本脚本是用sh的语法

.csh cshell的语法

.bash bash的语法

注意:95%的脚本是用sh写的,比较通用

#!/bins/sh 声明本shell遵守bourne shell 的格式

2、在shell中

$* 代表命令行传进来的多个参数

$1 第一

$2 第二个

`命令率先执行,将结果赋值给等号左边` 点

'字符串赋值给等号左边' 单引号

A=`echo hello` A是hello

B='echo hello' B是echo hello

3、lcf.sh

vi lcf.sh

#!/bin/sh

for oldname in $*

do

if [ -f $oldname ]

then

newname=`echo $oldname |tr '[A-Z]' '[a-z]'`

if [ -f $oldname != $newname ]

then

mv $oldname $newname

fi

fi

done

:wq

# chmod u+x lcf.sh

# touch A B C

# lcf.sh A B C

# ls

4.crontab:定时调用

/etc/cron.d/cron.allow

/etc/cron.d/cron.deny 两个文件用于对crontab进行访问控制

我喜欢的用法:

$crontab -l > a

$vi a //编辑a文件

$crontab a 重新初始化crontab 列表

另外的用法:

$crontab -e //然后对crontab文件进行编辑,最后保存。

当第一次使用crontab的时候可能会报一个错误,告诉你没有临时文件

$crontab a //随便找个文件初始化一下就可以

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

crontab 文件格式

* * * * * /bin/ls

分钟 小时 天 月 星期几 /bin/ls 可执行程序

briupserver4% setenv EDITOR vi

briupserver4% crontab -e

"/tmp/crontabo8aGOk" 0 lines, 0 characters

* * * * * date >> /temp/xuxiang.txt

briupserver4% tail -f /temp/xuxiang.txt

tail: cannot open input

briupserver4% crontab -l

* * * * * date >> /temp/xuxiang.txt

briupserver4% tail -f /temp/xuxiang.txt

tail: cannot open input

briupserver4% crontab -r

briupserver4% rm /temp/xuxiang,txt

/temp/xuxiang,txt: No such file or directory

briupserver4% crontab -l

crontab: can't open your crontab file.

crontab是超级用户运行的,所以你在脚本中打印是看不到结果的,应该把结果>>某个文件

中,文件也要全路径,不能使用~

crontab中加载的顺序:

登录

1. /etc/.login

2.~/.cschr

3.~/.login

登出

1、~/ .logout

这些文件如何产生?

1. cp /etc/skel/* ~

2.mv ~/local.cshrc ~/.cshrc

3.vi ~/ .cshrc

加入自定义命令

4.立即生效: source ~/.cshrc

或者重新登录

source是csh专有命令

在环境变量中,$具有特殊的含义:

“$...”中$是带有含义的

‘$...’中就是一个字符而已,没有任何含义

path 是查找命令的位置和顺序

briupserver4%echo $path

/bin/usr/bin /usr/ucb /etc .

briupserver4%ping

ping:Command not found

briupserver4%set path=($path /usr/sbin)

briupserver4%echo $path

/bin/usr/bin /usr/ucb /etc . /usr/sbin

777-033=744-执行权限=644

%ls -ludir

udir: Nosuch file or directory

%umask

22

%umask 255

%mkdir abc

%ls -laabc

total 4

dr-x-w--w-2 xuxiang ajd0805 512 Apr 30 15:59 .

drwxrwxrwx3 xuxiang ajd0805 512 Apr 30 15:59 ..

%touchbeans

%ls -labeans

-r---w--w-1 xuxiang ajd0805 0 Apr 30 15:59 beans


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值