08 03 20 Unix 笔记
============================
daemon :
name PID PPID
init 1
B 1001 1
僵死进程: 子进程结束,
父进程未回收子进程的资源,子进程为僵死进程
孤儿进程: 父进程结束,子进程还存在,则子进程为孤儿进程
daemon (精灵进程): 网站,数据库,email大部分都是daemon
1:必须是孤儿进程
2:必须脱离终端setsid();
3:必须chdir("/");
将程序本身的运行目录挂到根目录,
防止本文件系统不能被卸载
telnet 192.168.1.200
login : briup
passwd: briup
root
bourne sh csh bash 区别在什么地方?
单条命令都可以使用,无明显区别
两台服务器,任意选择一个
telnet 192.168.1.200
login : zhangsan (张三)
zhangsf (张三丰)
zhangsf (张山丰)
passwd :
1: 6-8位
2: 必须包含至少两个字母+
(一个数字或者一个特殊符号)
帐户:
/etc/passwd 用户帐户信息
% cat /etc/passwd 查看/etc/passwd文件内容
lianglin:x:945:127::/u2/students/ajd0804/lianglin:/bin/csh
/etc/shadow 用户密码信息
id 用户的id信息
$cd /usr/local/bin
$pwd
/usr/local/bin
$cd http://www.cnblogs.com/bin
$pwd
/usr/bin
$cd ././../bin/./
$pwd
/usr/bin
$cd /
$ls
Desktop etc oracle temp.dat
Documents export platform temp.txt
TT_DB home proc tmp
abc kernel quotas u
bin lib rmdisk u1
boot lost+found sbin u2
core mnt summit2.sql usr
dev net system var
devices opt temp vol
ls 显示普通文件
ls -a 显示所有文件,
包含隐藏文件(文件名以.开头的文件)
$ls
local.cshrc local.login local.profile
$ls -a
. .profile local.login
.. local.cshrc local.profile
$
$ touch apple
$ ls -l apple
-rw-r--r-- 1 chengx other 0 Mar 20 15:41 apple
$ chmod o-r apple
$ ls -l apple
-rw-r----- 1 chengx other 0 Mar 20 15:41 apple
$ chmod u-r,u+x,g-r,go+wx apple
$ ls -l apple
--wx-wx-wx 1 chengx other 0 Mar 20 15:41 apple
$
$ chmod g-rx .
$ ls -la
total 12
drwx---r-x 2 chengx other 512 Mar 20 15:41 .
drwxr-xr-x 10 root root 512 Mar 20 14:55 ..
-rw-r--r-- 1 chengx other 144 Mar 20 09:49 .profile
--wx-wx-wx 1 chengx other 0 Mar 20 15:41 apple
-rw-r--r-- 1 chengx other 136 Mar 20 09:49 local.cshrc
-rw-r--r-- 1 chengx other 157 Mar 20 09:49 local.login
-rw-r--r-- 1 chengx other 174 Mar 20 09:49 local.profile
$
briupserver4% chmod u-rwx .
briupserver4% ls
.: Permission denied
briupserver4% pwd
pwd: cannot determine current directory!
briupserver4% cd
cd: Can't change to home directory
briupserver4% cd /
briupserver4% chmod u+rwx ~
briupserver4% cd
briupserver4% ls
apple local.login
local.cshrc local.profile
briupserver4%
对方的home目录 ~zhangsan
自己的home目录 ~
cd =cd ~
briupserver4% chmod 700 ~
briupserver4% chmod 000 ~
briupserver4% cd /
briupserver4% chmod 755 ~
briupserver4% cd
briupserver4% pwd
/u1/chengx
briupserver4%
5 00000101
r 00000100
w 00000010
x 00000001
& 相同留下,不同的取0
if(5&r==r) 具有r权限
if(5&w==w) 具有w权限
if(5&x==x) 具有x权限
5=r+x
浙江移动营业厅里有n种角色,做一个验证授权系统比较复杂。
0 1 2 3 4 5 6 7
开户 销户 换卡 换号 换品牌 转帐 授权 缴费
1 2 4 8 16 32 64 128
大堂副理 p= 1+2+32=35(权重,权值)
if(p&1==1) 可以开户
if(p&64==64) 可以授权
briupserver4% touch a b c
briupserver4% ls
a c local.profile
apple local.cshrc
b local.login
briupserver4%
briupserver4% touch apple
briupserver4% ls
apple
briupserver4% cp apple beans
briupserver4% ls
apple beans
briupserver4% cp apple beans
briupserver4% ls
apple beans
briupserver4% cp -i apple beans
cp: overwrite beans (yes/no)? y
briupserver4% mkdir abc
briupserver4% cp apple beans abc
briupserver4% ls abc
apple beans
briupserver4%
briupserver4% ls abc
apple beans
briupserver4% cp -r abc aaa
briupserver4% ls aaa
apple beans
briupserver4%
briupserver4% ls
aaa abc apple beans
briupserver4% mv aaa bbb
briupserver4% ls
abc apple bbb beans
briupserver4% mv apple beans
briupserver4% ls
abc bbb beans
briupserver4% touch apple
briupserver4% mv -i apple beans
mv: overwrite beans (yes/no)? y
briupserver4%
briupserver4% ls
abc bbb beans
briupserver4% rm beans
briupserver4% mkdir aaa
briupserver4% rmdir aaa
briupserver4% rmdir abc
rmdir: directory "abc": Directory not empty
briupserver4% rm -r abc
briupserver4% ls
bbb
briupserver4% touch nuts
briupserver4% chmod 000 nuts
briupserver4% rm nuts
rm: nuts: override protection 0 (yes/no)? n
briupserver4% rm -f nuts
briupserver4%
如果用户对文件没有权限删除,
但是用户是文件的拥有者,这时rm 文件会提示,
如果文件比较多,则对每个文件都回答提示,比较麻烦
rm -f 强制删除,不提示
rm -rf 强制删除连目录带文件
$ mdkir dir3 dir4 dir5
mdkir: not found
$ mkdir dir3 dir4 dir5
$ cp -r dir3 dir4 dir5
$ cd dir5
$ ls
dir3 dir4
$ mkdir dir5
$ ls
dir3 dir4 dir5
$ mv dir3 dir4 dir5
$ ls
dir5
$
$ touch apple
$ chmod 000 apple
$ ls -l apple
---------- 1 chengx other 0 Mar 21 10:00 apple
$ rm apple
rm: apple: override protection 0 (yes/no)? n
$ rm -rf apple
$ ls
dir5
$
软硬连接
$ touch a
$ ls -l a
-rw-r--r-- 1 chengx other 0 Mar 21 10:10 a
$ ln -s a b
$ ls -l a b
-rw-r--r-- 1 chengx other 0 Mar 21 10:10 a
lrwxrwxrwx 1 chengx other 1 Mar 21 10:11 b -> a
$ ln a c
$ ls -l
total 2
-rw-r--r-- 2 chengx other 0 Mar 21 10:10 a
lrwxrwxrwx 1 chengx other 1 Mar 21 10:11 b -> a
-rw-r--r-- 2 chengx other 0 Mar 21 10:10 c
$
软硬连接的区别
1:软连接可以连接目录,硬连接不可以
2:软连接可以跨分区,硬连接不可以
3:软连接依赖原文件,硬连接不依赖
$ ln -s / root
$ ls
a b c root
$ ls -l root
lrwxrwxrwx 1 chengx other 1 Mar 21 10:23 root -> /
$ cd root
$ pwd
/
$ df -k 查看分区信息
Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1d0s0 30258542 4052949 25903008 14% /
/devices 0 0 0 0% /devices
ctfs 0 0 0 0% /system/contract
proc 0 0 0 0% /proc
mnttab 0 0 0 0% /etc/mnttab
swap 4497952 884 4497068 1% /etc/svc/volatile
objfs 0 0 0 0% /system/object
/usr/lib/libc/libc_hwcap2.so.1
30258542 4052949 25903008 14% /lib/libc.so.1
fd 0 0 0 0% /dev/fd
swap 4497140 80 4497060 1% /tmp
swap 4497092 32 4497060 1% /var/run
/dev/dsk/c1d0s3 50423874 2917244 47002392 6% /u1
/dev/dsk/c1d0s4 222967160 47718597 173018892 22% /u2
$ cd
$ ln /var/adm/wtmpx abc
ln: abc is on a different file system
$ ln -s /var/adm/wtmpx abc
$ ls
a abc b c root
$ ls -l abc
lrwxrwxrwx 1 chengx other 14 Mar 21 10:31 abc -> /var/adm/wtmpx
$ mkdir test
$ cd test
$ touch a ab ac ad ba bc de tf ai nab cba wnab woss boss zz
$ ls
a ac ai bc cba nab wnab zz
ab ad ba boss de tf woss
$ ls a*
a ab ac ad ai
$ ls a?
ab ac ad ai
$ ls [a-b]?
ab ac ad ai ba bc
$ ls [ad]?
ab ac ad ai de
$ ls [c-z]*
cba de nab tf wnab woss zz
$
$ date
Fri Mar 21 10:57:10 CST 2008
$ cal
March 2008
S M Tu W Th F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
$ date;cal
Fri Mar 21 10:57:49 CST 2008
March 2008
S M Tu W Th F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
$
$ cal 1 1 > a.txt
$ cat a.txt
January 1
S M Tu W Th F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
$ date > a.txt
$ cat a.txt
Fri Mar 21 11:24:43 CST 2008
$ date >> a.txt
$ cat a.txt
Fri Mar 21 11:24:43 CST 2008
Fri Mar 21 11:24:52 CST 2008
cat /etc/passwd | awk -F: '{print $1 "\t" $6}' \
> | sort > a.txt
awk -F:[按:分隔] '{表达式}'
print $1 "\t" $6 打印第一列第六列,中间按照"\t"分割
sort 按首字母排序 > a.txt
编译步骤
% vi King.java (将下面的程序输入,保存,退出)
% 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();
}
}
}
=============================$
$ id
uid=107(chengx) gid=1(other)
$ id root
uid=0(root) gid=0(root)
$ id -a root
uid=0(root) gid=0(root) groups=1(other),2(bin),3(sys),4(adm),5(uucp),6(mail),7(tty),8(lp),9(nuucp),12(daemon)
$ id -a briup
uid=100(briup) gid=1(other) groups=1(other)
$
find /u1/students -type f -atime +1
$ find . -type f | xargs rm
xargs 作用,将第一个命令的结果一条一条循环交给rm
$ ls
Exercises.txt King.java
King.class vi.txt
$ find . -type f | xargs rm
$ ls
$ touch a b c
$ find . -type f
./a
./b
./c
$ find . -type f |rm
usage: rm [-fiRr] file ...
$ find . -type f |xargs rm
$ ls
$
$ grep root /etc/passwd
root:x:0:0:Super-User:/:/sbin/sh
$ grep chengx /etc/passwd
chengx:x:107:1::/u1/chengx:/bin/sh
$ grep -i CHENGx /etc/passwd
chengx:x:107:1::/u1/chengx:/bin/sh
$ grep -v chengx /etc/passwd
$ who |grep wusong
wusong pts/125 Mar 21 15:29 (192.168.4.147)
wusong pts/39 Mar 21 16:07 (briupserver4)
$
$ grep wang /etc/passwd |wc -l
9
$
=================================================
一个聊天室程序Server.java
1: vi Server.java (输入下列代码)
2: javac Server.java (编译)
3: java Server (运行聊天室)
4: telnet 192.168.1.250 10000 (邀请同桌输入名字开始聊天)
import java.net.*;
import java.io.*;
import java.util.*;
public class Server {
private static int port=10000;
public static Vector users=new Vector();
public static void main(String args[]){
ServerSocket server=null;
System.out.println("Server start on port "+port);
try{
server=new ServerSocket(port);
while(true){
Socket s=server.accept();
MyThread mt=new MyThread(s);
mt.start();
users.add(mt);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
class MyThread extends Thread{
private Socket s=null;
public MyThread(Socket s){
this.s=s;
}
public void run(){
PrintWriter pw=null;
BufferedReader reader=null;
try{
pw=new PrintWriter(new
OutputStreamWriter(
s.getOutputStream()));
reader=new BufferedReader(
new InputStreamReader(s.getInputStream()));
pw.println("hello , welcome you , enter your name : ");
pw.flush();
String name=reader.readLine();
sendAll(name+" joined us ");
String old_line="";
while(true){
String line=reader.readLine();
if(line!=null||line.trim().length()!=0){
if(line.equals("bye")){
sendAll(name +" leave us" );
Server.users.remove(this);
break;
}
if(line.equals(old_line)){
pw.println("flush denied ");
pw.flush();
sleep(2000);
continue;
}
old_line=line;
sendAll(name+" said :"+ line);
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(s!=null)try{s.close();}catch(Exception e){}
}
}
public synchronized void sendMessage(String line){
PrintWriter pw=null;
BufferedReader reader=null;
try{
pw=new PrintWriter(new
OutputStreamWriter(
s.getOutputStream()));
pw.println(line);
pw.flush();
}catch(Exception e){
}
}
public static void sendAll(String line){
Iterator it=Server.users.iterator();
while(it.hasNext()){
MyThread mt=(MyThread)it.next();
mt.sendMessage(line);
}
}
}
=================结束======================
job
briupserver4% sleep 1000
^Z
Stopped (user)
briupserver4% jobs
[1] + Stopped (user) sleep 1000
briupserver4% sleep 2000 &
[2] 12358
briupserver4% jobs
[1] - Stopped (user) sleep 1000
[2] + Running sleep 2000
briupserver4% sleep 3000 &
[3] 12459
briupserver4% jobs
[1] Stopped (user) sleep 1000
[2] - Running sleep 2000
[3] + Running sleep 3000
briupserver4% bg %1
[1] + sleep 1000 &
briupserver4%
briupserver4% jobs
[1] + Running sleep 1000
[2] Running sleep 2000
[3] - Running sleep 3000
briupserver4% fg %2
sleep 2000
^Z
Stopped (user)
briupserver4% bg
[2] + sleep 2000 &
briupserver4% jobs
[1] - Running sleep 1000
[2] + Running sleep 2000
[3] Running sleep 3000
briupserver4%
briupserver4% jobs
[1] - Running sleep 1000
[2] + Running sleep 2000
[3] Running sleep 3000
briupserver4% stop %1
[1] + Stopped (signal) sleep 1000
briupserver4% jobs
[1] + Stopped (signal) sleep 1000
[2] - Running sleep 2000
[3] Running sleep 3000
briupserver4% kill %2
briupserver4%
[2] Terminated sleep 2000
briupserver4%
briupserver4% jobs
[1] + Stopped (signal) sleep 1000
[3] - Running sleep 3000
briupserver4%
briupserver4% /usr/sbin/ping 192.168.1.200
192.168.1.200 is alive
briupserver4% /usr/sbin/ping 192.168.1.22
no answer from 192.168.1.22
briupserver4%
briupserver4% /sbin/ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
nfo0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.168.1.250 netmask ffff0000 broadcast 192.168.255.255
briupserver4%
netstat -a 查看本系统所有的网络服务和连接
$ rlogin -l briup 192.168.1.200
Password:
No directory! Logging in with home=/
Last login: Mon Mar 24 11:35:17 from 192.168.3.58
$ ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
nge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.168.1.200 netmask ffff0000 broadcast 192.168.255.255
$
cd 服务器目录
lcd 切换本地目录
dir 查看服务器文件
bye 退出
bin 传输二进制文件
asc 传输文本文件
get 下载
put 上传
mget 批量下载
mput 批量上传
hash 进度条
prompt 提示信息
从本地什么位置ftp连接的服务器,将下载到本地什么位置
/home/briup ftp 192.168.1.250 下载到/home/briup
ftp> cd /u1/chengx
ftp> bin
ftp> hash
ftp> prompt 是否提示
ftp> mget a.mp3 sweetchild.wmv
1. vi /tmp/a.txt
#!/bin/sh //声明本脚本采用的是哪种shell语法
pwd
cal
date
2. chmod +x /tmp/a.txt
briupserver4% set A=HELLO
briupserver4% echo $A
HELLO
briupserver4% echo A
A
briupserver4%
echo 屏显 回声
A=`echo hi` A是 hi
B='echo HI' B是echo hi
briupserver4% set A=`echo hi`
briupserver4% set B='echo hi'
briupserver4% echo $A
hi
briupserver4% echo $B
echo hi
briupserver4%
briupserver4% tr '[A-Z]' '[a-z]'
hello
hello
world
world
ABC
abc
^Cbriupserver4%
briupserver4% echo HELLO|tr '[A-Z]' '[a-z]'
hello
lcf.sh
briupserver4% chmod u+x lcf.sh
briupserver4% ls
lcf.sh
briupserver4% touch A B C
briupserver4% ls
A B C lcf.sh
briupserver4% lcf.sh A B C
briupserver4% ls
a b c lcf.sh
briupserver4% cat lcf.sh
#!/bin/sh
for oldname in $*
do
if [ -f $oldname ]
then
newname=`echo $oldname|tr '[A-Z]' '[a-z]'`
if [ $oldname != $newname ]
then
mv $oldname $newname
fi
fi
done
briupserver4%
crontab –l 列出当前用户所有的计划任务
crontab –e 编辑当前用户的计划任务
setenv EDITOR vi //设置默认编辑器为vi
crontab –r 删除所有的计划任务
0 8 1 6 * mail
tail -f 可以跟踪某个文件的增长
briupserver4% cp /etc/skel/* ~
briupserver4% ls
local.cshrc local.login local.profile
briupserver4% mv local.cshrc .cshrc
briupserver4% mv local.login .login
briupserver4% mv local.profile .profile
briupserver4% ls -a
. .bash_history .login
.. .cshrc .profile
设置环境变量
briupserver4% setenv A hello 推荐使用的方式
briupserver4% echo $A
hello
briupserver4% set B=hello
briupserver4% echo $B
hello
briupserver4%
briupserver4% echo $PATH 打印系统环境变量PATH
/bin:/usr/bin:/usr/ucb:/etc:.
briupserver4%
双引号代表引号引住的部分是一个整体
briupserver4% touch "a b"
briupserver4% ls
a b
briupserver4% rm a
a: No such file or directory
briupserver4% rm b
b: No such file or directory
briupserver4% rm "a b"
briupserver4% ls
briupserver4%
briupserver4% setenv WTO `uname -n`
briupserver4% echo $WTO
briupserver4
briupserver4% echo "$WTO"
briupserver4
briupserver4% echo '$WTO'
$WTO
briupserver4% echo \$WTO
$WTO
briupserver4%
briupserver4% setenv H "banner hello"
briupserver4% $H
# # ###### # # ####
# # # # # # #
###### ##### # # # #
# # # # # # #
# # # # # # #
# # ###### ###### ###### ####
briupserver4%
briupserver4% ping
ping: Command not found
briupserver4% set path=($path /usr/sbin )
briupserver4% ping
usage: ping host [timeout]
usage: ping -s [-l | U] [adLnRrv] [-A addr_family] [-c traffic_class]
[-g gateway [-g gateway ...]] [-F flow_label] [-I interval]
[-i interface] [-P tos] [-p port] [-t ttl] host [data_size] [npackets]
briupserver4%
briupserver4% chmod u+x ls
briupserver4% echo $path
/bin /usr/bin /usr/ucb /etc . /usr/sbin /usr/local/bin
briupserver4% ls
ls
briupserver4% ./ls
# ####
# #
# ####
# #
# # #
###### ####
briupserver4% set path=(. $path)
briupserver4% echo $path
. /bin /usr/bin /usr/ucb /etc . /usr/sbin /usr/local/bin
briupserver4% ls
# ####
# #
# ####
# #
# # #
###### ####
briupserver4%
which ls 显示当前用的哪个ls
which命令先执行.cshrc&.login
根据用户配置的环境变量path来查找
whereis 显示所有man手册的系统命令
briupserver4% echo $path
/bin /usr/bin /usr/ucb /etc .
briupserver4% which ls
# # ###### # #### #### # # ######
# # # # # # # # ## ## #
# # ##### # # # # # ## # #####
# ## # # # # # # # # #
## ## # # # # # # # # #
# # ###### ###### #### #### # # ######
/bin/ls
briupserver4% set path=(. $path)
briupserver4% which ls
# # ###### # #### #### # # ######
# # # # # # # # ## ## #
# # ##### # # # # # ## # #####
# ## # # # # # # # # #
## ## # # # # # # # # #
# # ###### ###### #### #### # # ######
./ls
briupserver4% set history=1000
briupserver4% date
Mon Mar 24 16:18:18 CST 2008
briupserver4% banner hi
# # #
# # #
###### #
# # #
# # #
# # #
briupserver4% pwd
/u1/chengx
briupserver4% history
1 clear
2 echo $path
3 which ls
4 set path= ( . $path )
5 which ls
6 clear
7 whereis ls
8 clear
9 set history=1000
10 date
11 banner hi
12 pwd
13 history
briupserver4% !10
date
Mon Mar 24 16:19:31 CST 2008
briupserver4%
briupserver4% !l
ls
# ####
# #
# ####
# #
# # #
###### ####
briupserver4%
briupserver4% alias
h banner hi;date;pwd;cal
briupserver4% alias java "banner java"
briupserver4% alias
h banner hi;date;pwd;cal
java banner java
briupserver4% unalias java
briupserver4% alias
h banner hi;date;pwd;cal
briupserver4%
briupserver4% set prompt="^_^ : "
^_^ :
^_^ : set prompt="briup%"
briup%
briup%
briup%set prompt="chengx > "
chengx >
chengx >
chengx > set prompt="java $$ "
java 6333
java 6333
set 和setenv的区别
如果设置环境变量,请使用setenv
setenv EDITOR vi
setenv ORACLE_HOME $ORACLE_BASE/oracle10g
setenv ABC "echo ABC"
如果设置csh特有的命令参数,请使用set
set path=(..)
set prompt=...
set history=....
umask 掩码 默认为022
权限 777
umask 011
文件夹 766
文件 666 去掉执行权限
hp面试题目: umask 033 问touch abc 权限多少?
644
.cshrc 例子
#ident "@(#)local.cshrc 1.2 00/05/01 SMI"
umask 022
set path=(/bin /usr/sbin /usr/local/bin /usr/ccs/bin /usr/
bin /usr/ucb /etc .)
set history=100
banner welcome
如果你不小心改错了.cshrc文件,导致你什么命令都不好用
briupserver4% set path=(/usr/bin .)
briupserver4% rm ~/.cshrc 重新登陆,重新设置
让刚刚修改的.cshrc文件立刻生效
briupserver4%source .cshrc
briupserver4%env 查看所有环境变量
浙公网安备 33010602011771号