=====================================================
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)來運行
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