=====================================================
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