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 [email protected]

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章