随笔-159  评论-114  文章-7  trackbacks-0
 

Core Java是核心竞争力。

一个.java文件中,只能有一个public class文件,因为Sun规定,Java文件名必须与public的类的名称一致(大小写)

如果没有public class,都是一个个class,编译完成,就会生成若干.class文件。

设置环境变量:

三个变量

JAVA_HOME  指向JDK目录,主要为其他工具能够找到JDK。

PATH 添加JAVA_HOME/bin,为了能找到javac ,java 命令

CLASSPATH .  找到.class文件。可以有多个,逐一路径寻找.class文件,找到第一个为止。好像Unix中,ps有两种具体实现,但是ps只能调出一个一个意思。

表示类路径,.为当前目录。

javac -d . HelloWorld.java
按照源文件包结构生成文件。

package lujl01;

/**
*
*
*/
public class HelloWorld{//类名称
    public static void main(String[] args)
    {
         System.out.println("My name is ");
    }
}

java lujl01.HelloWorld
My name is


byte 1一个字节
short 2个字节
int 4个字节
long 8个字节

int a = 030;
8进制

int a = 0x30
16进制

long l = 40l

byte a = 1;
byte b = 2;
byte c = a + b;

注意,一旦运算,就会变成int。int以下byte,short运算后,一律变为int型。系统对于整型的默认类型就是int。

char 2字节
与int类型互通,而不是short,上面已经说到没有字面值来区分short,byte,int,系统就按int来记整数。

Java中使用Unicode 2字节来进行字符编码。

float f = 1.3f;

末尾f必须写。

double d = 1.3d(或者1.3)

1.3E10,E表示10的为底。

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

System.out.println(2.0-1.1)
0.899999999999999999

为什么?
因为二进制的缺陷问题,在2进制表达方式下无法进行精确表示0.1,不信可以手算,会丢失精度。

 那么float和double决不能用作精确计算领域(金融,证券,银行),使用java.math.BigDecimal类。


========================
a+b 两个操作数进行计算,转换在Java中如何处理。

1.如果任意一个为字符串,有,结果为字符串
2.如果任意一个为double,有,结果为double
3.如果任意一个为float,有,结果为float
4.有无long,有,则结果为long
5.以上都不是,那么就是int







posted @ 2005-11-23 23:31 北国狼人的BloG 阅读(393) | 评论 (0)编辑 收藏

表的建立有4个步骤

1.表名
2.列名
3.主键,外键,非空,唯一约束
4.外键表,外键列
5.数据类型
6.数据


建表语句

create table lujl11
(id number(7),
start_date DATE DEFAULT SYSDATE)

在同一个用户表空间,不能有同名的表。


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


                                 RDBMS
---|---------------------------|-------------------|
DB1(TLAB1)
|-----------------------------|-------------------------|
Table Space(users)         T.S(temp)                    
|---------------------|
schema(s0510)         (j0510)其他用户的目录读权限
|---------|
s_emp    s_dept

为什么sqlplus,一登陆就是某个库,1个用户只能登陆一个库,那么这个库在.cshrc环境变量中,ORACLE_SID表明。在登录到对应用户,使用对应用户的表空间。

openlab上。

SQL> !more .cshrc
# @(#)cshrc 1.11 89/11/29 SMI
umask 022
setenv ORACLE_BASE /tarenadb
setenv ORACLE_HOME /tarenaora/software/9.0.1
setenv ORACLE_SID TARENADB

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

数据类型

VARCHAR2(size)
CHAR(size)
NUMBER(p,s)  p为有效位数,s为小数位数,那么NUMBER(5,2),整数位为3位。
DATE 日期与时间值。
LONG 大文本
RAW和LONG RAW 图像或者声音

约束类型

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

约束起名,如果不起名,系统会分配一个名字,SYS_Cxxxx。
约束 最好是 表名_列名_约束类型 
lujl11_dept_id_fk 外键
lujl11_id_pk主键
lujl11_name_nn非空
lujl11_title_uk唯一
lujl11_salary_ckCHECK约束

定义,有列一级定义也有表一级定义,但是效果完全一样。

约束与数据是一对矛盾。谁先存在,谁有理,数据已存在,那么得添加约束要符合数据情况。

非空约束,列级约束。

create table friend
(phone varchar2(15) constraint friend_phone_nn NOT NULL,
)

create table lujl04
(
id number(5) constraint lujl04_id_uk unique,
last_name varchar2(10),
first_name varchar2(20),
salary number(10,2),
constraint lujl04_first_last_name_uk
unique(last_name,first_name)
);

表一级约束,constraint开头。

constraint lujl11_dept_id_fk
foreign key(dept_id)
references s_dept(id)
on delete cascade
级联删除
没有级联更新。


create table emp_41
as
select id,last_name..
from s_emp
where..

除了非空约束存在,其他丢失。



数据字典

user                               users
all     ------->_-------->views
dba                                indexs
                                     constraints

user_tables
user_views
user_indexs
user_constraints
user_sequeces

DML

insert into table
values (102,null,....)

insert into table(id)
values(102)

时间问题,依然要重视

insert into s_emp(id,first_name,last_name,start_date)
values
(25,'Donna','Smith',TO_DATE('01-JAN-99 09:00','DD-MON-YY HH:MI'));

update s_emp
set dept_id = 100
where id = 2;


delete from s_emp;

delele from s_emp
where start_date>TO_DATE('01.01.1996','DD.MM.YYYY')

Transaction 事务

一个事务
多个DML语句
但是一旦遇到DCL(grant),DDL(alter,drop)就会自动提交事物

或者COMMIT提交,

或者ROLLBACK回滚到事物开始。

也就是说,如果先插入了很多记录,再删很多记录,没有commit或者退出,或者DCL,DDL,那么ROLLBACK可以回滚到插入数据之前。

sqlplus--->另外的buff保存着,当前事务涉及到的行,这是操作修改的是buff中的数据,但是这些行记录被锁定,行级所,所以可以rollback,一旦提交,就更新到数据库中了。

除非实时修复DBA能恢复数据。

可以SAVEPOINT,保存事物中间某个标志为,回滚到该标志地方。




ALTER table s_emp
ADD
MODIFY
DROP

约束只能添加和删除,不能修改(除了alter table jerry03 modify (id null))。

ALTER TABLE s_dept
DROP PRIMARY KEY CASCADE

一个表一个主键约束,可以不指定列。正常有外键关联主键,主键约束不能删除,除非CASCADE。

ALTER TABLE s_emp
ENABLE CONSTRAINT s_emp_id_pk;

恢复需要一个一个将外键的表恢复外键约束。

DROP TABLE table CASCADE CONSTRAINTS

Truncate table s_emp;
删除所有数据,不同于delete from s_emp;,它释放了表占据的空间。磁盘空间。

建Sequences,序列独立于表,没关系,,谁都能用该序列。

create sequence lujl11_id
increment by 1
start with 54
maxvalue 9999999
nocache
nocycle

user_sequences

drop sequence lujl11_id;




View

一面墙上有一幅画(数据),前面是一面墙,墙上有窗,那就是视图,不是数据本身,就是select语句,

两类,简单视图(可以DML),复杂视图(不能DML)。

CREATE OR REPLACE VIEW empvu45
(id_number,employee,job)
as select id,last_name,title
from s_emp
where dept_id = 45


CREATE OR REPLACE VIEW empvu44
AS SELECT *
FROM s_emp
WHERE dept_id = 41
WITH CHECK OPTION CONSTRAINT empvu41_ck;一个约束!

就是条件中(where)出现的列不能修改。

WITH READ ONLY 只读


INDEX

B*Tree,就是平分法排序,实现快速查找。

索引会提高查询速度,但会降低插入速度。

1.值分散
2.空值多
3.多列
4.表大
5.更多索引不能提速更多。


  1  select rowid,s_dept.*
  2* from s_dept
SQL> /

ROWID                      ID NAME                       REGION_ID
------------------ ---------- ------------------------- ----------
AAAIlTAAIAAABeqAAA         10 Finance                            1
AAAIlTAAIAAABeqAAB         31 Sales                              1
AAAIlTAAIAAABeqAAC         32 Sales                              2
AAAIlTAAIAAABeqAAD         33 Sales                              3
AAAIlTAAIAAABeqAAE         34 Sales                              4
AAAIlTAAIAAABeqAAF         35 Sales                              5

rowid是地址,天生的主键。非空,唯一。


posted @ 2005-11-22 22:57 北国狼人的BloG 阅读(428) | 评论 (0)编辑 收藏

上回,Select DISTINCT dept_id,title from s_emp,注意DISTINCT是作用于两列的组合。

Group Functions

分组函数

SELECT column,group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

AVG(DISTINCT|ALL|n)
COUNT(DISTINCT|ALL|expr|*)
MAX(DISTINCT|ALL|expr)
MIN(DISTINCT|ALL|expr)
SUM(DISTINCT|ALL|n)


SQL> select AVG(salary),MAX(salary),
  2  MIN(salary),SUM(salary)
  3  from s_emp
  4  where UPPER(title) LIKE 'SALES%';

AVG(SALARY) MAX(SALARY) MIN(SALARY) SUM(SALARY)
----------- ----------- ----------- -----------
    1463.75        1515        1400        5855


SQL> select count(*)
  2  from s_emp
  3  where dept_id=31
  4  ;

  COUNT(*)
----------
         1

SQL> select count(commission_pct)
  2  from s_emp
  3  where dept_id = 31;

COUNT(COMMISSION_PCT)
---------------------
                    1

注意,count具体列,只统计非空数目。

  1  select dept_id,Count(*) "Number"
  2  from s_emp
  3* group by dept_id
SQL> /

   DEPT_ID     Number
---------- ----------
        31          1
        32          1
        33          1
        34          1
        35          1
        41          2
        42          2
        43          2
        44          2
        45          3
                      8

不写Group by,只是一组,

加了Group by,多组。

出现在Select中,非组函数的值,必须出现加在Group by中。可以不Select某列,但是group by该列,但结果当然也没有这一列,只是按照它来分组显示其他组函数数据。


组函数的判断不能在Where子句中,必须是在Having中。

SELECT title,12*AVG(salary) "ANNUAL SALARY",COUNT(*) "NUMBER OF EMPLOYEES"
FROM s_emp
GROUP BY title
HAVING COUNT(*)>2;

第一步,分组
第二步,应用组函数
第三步,匹配Having子句的组函数

select title,sum(salary) PALALL
FROM s_emp
WHERE title NOT LIKE "VP%"
GROUP BY title
HAVING SUM(salary) > 5000
ORDER BY SUM(salary);

Subqueries 子查询

select last_name,title
from s_emp
where title=
(select title
from s_emp
where last_name='Smith');

select last_name,title,salary
from s_emp
where salary<
(select avg(salary)
from s_emp);

自查询有多值返回时,使用IN关键字

select last_name,first_name,title
from s_emp
where dept_id IN
(select id
from s_dept
where name = 'Finance' or region_id = 2);

子查询也可以出现在Having中

Select dept_id,AVG(salary)
from s_emp
group by dept_id
having avg(salary)>
(select avg(salary)
from s_emp
where dept_id=32);

子查询有效率问题,既能够用连接又能用子查询时,请使用连接,一次查询快!

设置变量

SQL> select id,last_name,salary
  2  from s_emp
  3  where dept_id=&department_number;
Enter value for department_number:

where title = '&job_title';

一般用于插入数据时,进行定义。

可以保存一个.sql文件,在文件的开头设定变量,在执行insert,但sqlplus中,只保存sql命令,不保存sqlplus命令,DEFINE和ACCEPT是sqlplus命令。

DEFINE did=105(CHAR) 都是字符型。

insert into lujl11
values (&did,'&address',&salary);

使用ACCEPT命令来进行变量定义,可以区分类型,和添加提示符

ACCEPT p_dname PROMPT 'Provide the department name'
ACCEPT p_salary NUMBER PROMPT 'Salary amoount:'
ACCEPT pswd CHAR PROMPT 'Password:' HIDE

UNDEFINE或者退出sqlplus,会清楚变量。



SET VERIFY ON
察看新旧值开关。


数据库建模

立项
----〉需求分析
----------------〉设计,设计细化
----------------------------------〉建表,测试(逻辑测试,需求满足否,物理测试,数据量承受力),优化
--------------------------------------------〉真实数据,产品。

实线---必然的联系

虚线---可能的联系

范式

第一范式 解决单值问题。
第二范式 解决依赖性。
第三范式 解决非传递性问题。

例子:一想就明白了

经过需求分析,整理出下列属性。

product#,order#,name,date,price,quantity,customer#,customer_name,customer_address(Province,city,address))

INF分析后

(product#,order#,name,date,price,quantity,customer#,customer_name,Province,City,Address)

2NF分析后

(product#,name,price)
(order#,date,customer#,customer_name,Province,City,Address)
(product#,order#,quantity)

3NF分析后

(product#,name,price)
(order#,date,customer#)
(product#,order#,quantitiy)
(customer#,customer_name,Province,City,Address)





今天安装FC3,费了些时间,为能够在自己机器上也跑上Redhat,安装了Fedora Core 3,http://fedora.linuxsir.org/main/
不错的网站,我就是照着装上的,以后就可以研究一下了。哈哈











 

posted @ 2005-11-22 00:05 北国狼人的BloG 阅读(391) | 评论 (0)编辑 收藏

Data retrieval
-Select

Data manipulation language (DML)
-INSERT,UPDATE,DELETE

Data definition language(DDL
-CREATE,ALTER,DROP,RENAME,TRUNCATE

Transacation control
-COMMIT, ROLLBACK,SAVEPOINT

Data control language(DCL)
-GRANT,REVOKE

使用SQL *Plus进行数据库操作。

openlab.tarena.ca% sqlplus tarena/tarena@TARENADB

用户名/密码

注意这样登录是强烈不推荐的,因为这样别人能看到你的用户名和密码。

SQL> !ps -ef|grep sqlplus
    lujl   966   955  0 08:43:17 pts/1    0:00 sqlplus tarena/tarena@TARENADB
    lujl   969   966  1 08:45:45 pts/1    0:00 /bin/csh -c ps -ef|grep sqlplus
    lujl   971   969  0 08:45:45 pts/1    0:00 grep sqlplus

由于本人已有很多编写SQL语句的经验,所以只记录重点信息。

SQL中可以使用数学表达式

+
-
*
/

先乘除后加减。

SQL> select last_name,salary, 12*salary + 100
  2  from s_emp

注意每一个子句最好单独占一行。这样以便以后的修改,要想写完就执行,最后添加  ‘;’

1。可以给列取别名 Aliase,
2。可以级联两列,作为整体,输出结果。

SQL> select first_name||last_name "Employees"
  2  from s_emp;

Employees
------------------------------
benqu
hui
lgf
liganfeng
lgf
BenDumas
AntoinetteDumas


使用单引号,将字符括起来。

select first_name||' '||last_name
from s_emp;

NULL是一个不确定的值!

对空的任何操作,返回都是空。

使用nvl函数,处理空值,为空就使用默认值。

NVL(salary,1000)

select distinct name
from s_dept;



sqlplus有很多命令。


SQL> help index

Enter Help [topic] for help.

 @             COPY         PAUSE                    SHUTDOWN
 @@            DEFINE       PRINT                    SPOOL
 /             DEL          PROMPT                   SQLPLUS
 ACCEPT        DESCRIBE     QUIT                     START
 APPEND        DISCONNECT   RECOVER                  STARTUP
 ARCHIVE LOG   EDIT         REMARK                   STORE
 ATTRIBUTE     EXECUTE      REPFOOTER                TIMING
 BREAK         EXIT         REPHEADER                TTITLE
 BTITLE        GET          RESERVED WORDS (SQL)     UNDEFINE
 CHANGE        HELP         RESERVED WORDS (PL/SQL)  VARIABLE
 CLEAR         HOST         RUN                      WHENEVER OSERROR
 COLUMN        INPUT        SAVE                     WHENEVER SQLERROR
 COMPUTE       LIST         SET
 CONNECT       PASSWORD     SHOW


DESCRIBE s_dept

SQL> describe s_dept
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(7)
 NAME                                      NOT NULL VARCHAR2(25)
 REGION_ID 

NUMBER(p,s)p为整数位,s为小数位数
VARCHAR2(s)
DATE  (Oracle中只有一种日期格式!)
CHAR(s)

SQL Plus  提供了很强的编辑SQL语句的能力。

SQL> l 
  1  select first_name||last_name "Employees"
  2* from s_emp
SQL> 1
  1* select first_name||last_name "Employees"
SQL>

list(简写l)
列出缓存中的SQL语句。

1(数字)就是将当前编辑行

看前面有*的,为当前编辑行,再才使用行编辑命令,就需要确定是否是想编辑的行。

A[PPEND] text
C[HANGE] /old/new
CL[EAR]BUFF[ER]
DEL
I[NPUT] text
L[IST] n
n text

由于有时会查出很多记录,这时,需要分页停顿。

SET PAUSE {[OFF|ON] text}

SAVE file写缓存到文件
GET file读入缓存

START filename读文件到缓存,并执行。
@filename = START filename
EDIT filename
SPOOL filename 开始记录,并将执行的命令和结果都写入相应文件。
SPOOL OFF,这时会写入文件。EXIT,正常退出,也会写入文件。

关键命令

COL[UNM] [{column|alias} [option]]

FOR[MAT] format

9
0
$
L
.
,

col last_name format a15   调整last_name为15字符长度,默认为last_name数据类型的长度。(VARCHAR2(35),那就是35),调整列宽。


HEA[DING] text
设置表头

JUS[TIFY] {align}
left center right

column last_name HEADING 'Employee|Name' FORMAT A15
column salary JUSTIFY LEFT FORMAT $099,999,99    保证位数,$012,345,00
column start_date FORMAT A8 NULL 'Not hired'    等同于nvl函数

column last_name
显示某列的格式

column last_name CLEAR





select last_name
from s_emp
order by last_name;
升序默认

desc降序

select last_name,salary*12
from s_emp
order by 2;

按照select子句中的第二项 排序

select last_name,dept_id,salary
from s_emp
order by dept_id,salary DESC;

先按部门排序,如果相同,再按salary降序排。

-------------------------------------------------
where 子句,last_name='Megee',单引号!

日期格式默认为日日-月月月-年年  DD-MON-RR(RR不同于YY,它只取1950到2049年的年,是为解决千年虫问题设定的)

逻辑比较符
= > >= < <=

SQL比较符
BETWEEN...AND...
IN(LIST)  IN(1,3) 1和3
LIKE
IS NULL

逻辑操作符
AND
OR
NOT

不等于!= <> ^=

NOT BETWEEN
NOT IN
NOTLIKE
ISNOTNULL

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

LIKE

select last_name from s_emp where last_name like '_M%'

'_' 代表有且只有一格字符

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

这时,老师发现缓存不够,察看老师的几条命令,应用性很强哦。记下来,以后自己用!

du -sk *|sort
当前目录按照大小的数字排序,

df -k .
察看当前目录的文件系统使用情况。

rm -rf *
不提示删除文件

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

select table_name
from user_tables
where table_name like 'S\_%' ESCAPE '\';

以S_开头的表名,escape定义了转义字符\


IS NULL  

IS NOT NULL

不要 = null    不出错,但是逻辑不对!

执行顺序

比较操作符〉AND〉OR



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

函数

单行函数,输入一个值,输出一个值

多行函数,多输入,单输出。

LOWER('SQL Course')=sqlcourse

UPPER

INITCAP('SqL COurse')=SqL COurse

CONCAT级联

SUBSTR('String',1,3)=Str

LENGTH

NVL


ROUND(45.923,2)=45.92
ROUND(45.923,-1)=50

TRUNC(45.923,2)=45.92
TRUNC(45.923,-1)=50

MOD(1600,300)=100  余数

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

Oracle Date Format是重点

日期包括世纪、年、月、日、小时、分钟、秒几类数

Oracle时间可以保存10负9次方妙

默认显示日期格式为DD-MON-RR

SYSDATE一个能返回当前系统时间的函数

select sysdate from dual;

dual是了保证select语句完整性,设置的,没有实际意义。我认为是个测试函数的好帮手。

YY   05
YYYY   2005
RR   05
RRRR   2005
YEAR   two thousand and five
MM   12
MON   NOV
MONTH   NOVEMBER
DD   18
DDTH   18TH
DDSP   EIGHTEEN
DDSPTH   EIGHTEENTH
HH   03   (12小时)
HH24   15
MI   31   分钟
SS   48   秒
AM   PM
D   5
DY   FRI
DAY   FRIDAY


SQL> select to_char(sysdate,'yyyy mm ddhh miss')
  2  from dual;

TO_CHAR(SYSDATE,'
-----------------
2005 11 1904 1946



时期+/-数字,可以得到一个新的日期。(加在日子上)
两个日期相减,得到一个数字。
如果想加小时到日期上,必须先除以24,在与对应日期相加。

  1  select to_char(sysdate+0.25,'yyyy mm dd hh miss')
  2* from dual

当前时间+6小时的时间。

日期相关函数

MONTHS_BETWEEN('01-SEP-95','11-JAN-94')
19.774194

1  select ROUND(MONTHS_BETWEEN('01-SEP-95','11-JAN-94'))
  2* from dual
  3  ;

20

返回两个日期之间的月差值。

ADD_MONTHS('11-JAN-94',6)

NEXT_DAY('01-SEP-95','FRIDAY')

注意:下一个星期几,但不一定下一周的星期几,找到第一个为准。

LAST_DAY('01-SEP-98')

'30-SEP-98'

ROUND('25-MAY-95','MONTH')
01-JUN-95

TRUNC('25-MAY-95','MONTH')
01-MAY-95




TO_CHAR(date,'fmt')

fm是一个去除前置0或者空格的开关,fm....fm....

fm作用域,是从当前到下一个fm之间的范围。第二个fm后面表示不去除前置0,奇偶变。


TO_CHAR(number,'fmt')

9
0
$
L
.
,


TO_NUMBER(char)

char必须是一个‘数字’



TO_DATE(char[,'fmt'])
不给定日期转换格式,就按照默认的dd-mon-rr,进行转换。



函数可以嵌套

  1  select last_name,
  2  NVL(TO_CHAR(MANAGER_ID),'No Manager')
  3  from s_emp
  4* where manager_id IS NULL




Join方法

等值
非等值
外连接
自连接


必须有连接键,否则就是迪卡尔连接。

  1  select s.last_name,s.dept_id,d.id,d.name
  2  from s_emp s,s_dept d
  3* where s.dept_id=d.id

LAST_NAME          DEPT_ID         ID NAME
--------------- ---------- ---------- -------------------------
Dumas                   31         31 Sales
Dumas                   32         32 Sales
Dumas                   33         33 Sales
payn                      34         34 Sales

外连接是一种特殊的等值连接,用于有空值出现时,寻找到所有记录。

  1  select s.last_name,s.id,c.sal,c.name
  2  from s_emp s,s_customer c
  3* where s.id(+) = c.sal

LAST_NAME        ID        SAL      NAME
--------------- ---------- ---------- -------------------------
Dumas                   12         12         athletes attic
Dumas                   12         12         great athletes
Dumas                   12         12         bj athletics
Dumas                   12         12         athletic for all
Dumas                   12         12         sports,inc
                                          14         athletics two
                                          14         athletics one
                                          14         shhes for sports
                                          14         athletic attire
那个+ 表示有一侧可能没有对应数据。

表示有部分客户没有销售代表。

如果+ 在另外一侧,表示查找所有销售的客户情况。


posted @ 2005-11-19 16:29 北国狼人的BloG 阅读(670) | 评论 (0)编辑 收藏
复习,
Solaris上,比如ftp rusers finger,等都是需要开启服务,才能用的。

需要在/etc/inet/inetd.conf配置才有效。

inetd为超级监听进程,相当于“客户代表”,需要具体工程师来完成任务,比如in.telnetd。

CShell 在执行命令时,实际上是将自己复制一份,再在这个子进程中执行,完成后,就终结了。

后面source ~/.cshrc,这条命令是由C Shell本身来执行的。

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

Shell 脚本编程基础。B Shell

那么第一行都是

#!/bin/sh

告诉下面为B Shell下的脚本。

#!/bin/sh
#lowercase any filenames with uppercase chars
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

sh,很严格。

exec ls

是用当前Shell来执行ls,最后会退出的!

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

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

crontab是另外一种执行程序的手段

crontab -l

croutab是另外一种执行程序的方式,叫做自动调度程序。

crontab -e

      该命令用来编辑cront的执行任务列表,需要设置环境变量EDITOR,来编辑,

      setenv EDITOR vi

crontab -r

      取消cront

0 2 * * * /tmp/a.sh
第一位是分钟,第二位是小事,第三位是天,第四位是月,第五位是星期几 最后是执行哪个文件

13 5 13 * 5 /tmp/b.sh
每月13号并且是星期5的5点13分,执行b.sh

0,30 8-17 * * 1-5 /tmp/c.sh
每月每天并且是周一到周五之间,8点到17点,每半小时执行一次。

/var/spool/cron/crontabs

可以查看mail来查看,执行结果,执行成功或者失败都会 发mail

%mailx

---------------------------
列出目录中隐含文件

ls -al|awk '{print $9}'|grep '^\.'

awk很有用
---------------------------

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

环境变量

两类环境变量

系统的环境变量

应用环境变量

setenv LANG C
setenv LANG zh.GBK

用户主目录下.cshrc

echo $LANG

--------------------------------
setenv AA something

这是临时设置变量,不能永久保存。

想永久保存,需要在配置文件中写入。

C Shell

     /etc/.login ------> $HOME/.cshrc ---> $HOME/.login ----> $HOME/.logout

一般情况下,useradd 命令执行后,会将系统的local.profile local.login local.cshrc拷贝到$HOME/ 下。

而实际做法是,将同组人的配置文件,考到自己主目录,做相应修改,最有效率。



初始化文件的内容,有几个方面

umask,就是创建文件或者目录的默认权限,777-umask 666-umask(文件)

缺省提示符

$path

TERM 终端类型

别名

vi .cshrc 或者 cp ~hiloo/.cshrc
source .cshrc

注意source是当前Shell本身来执行的。


临时
setenv AA abc
unsetenv AA

set bb=abc
局部变量,作用域不同,切换Shell后,失效。

B Shell

AA=abc这是还是局部变量
export AA 将局部变量提升为全局变量

.profile永久,需要自己先行建立。

unset

env 查看所有环境变量



setenv WHO `uname -n`

可以将一个命令执行结果作为环境变量的值

setenv USERCOUNT `who|wc -l`

注意`是飘号,不是引号'

单引号,是字符串
echo '$WTO'
\斜杠,为转义
echo \$WTO
就是表达$WTO的本来面目




$PATH与$path同步更新,一个是全局,一个是局部变量。
因为它太重要了

寻找命令,在PATH中找到第一个的为主。

有时,编写了一个脚本,在当前目录下加入执行权限,但是a.sh不能执行,Command not found!

那是因为环境变量中,没有. ,没有当前目录. ,作为寻找的路径,这也是./a.sh可以执行的原因,强制本地执行命令。

which ps,查看使用的ps命令的路径
whereis ps 查看有哪些ps,路径。





set history=30

alias h history

!!上一条
!n  以开头最近的命令,或者数字 第几条
!48



薛老师的课程结束了,回味无穷,很多以前每天敲很多变的命令变得更有意,老师讲的很到位!对于日后深入学习UNIX,打下良好基础。

==================================================================================
Oracle SQL 张靖老师的口头语为,这说的清楚么?比较亲近
==================================================================================

DML Data manipulation language

DDL Data definition language
         TRUNCATE
         删除数据

DCL GRANT REVOKE


select salary+salary*nvl(commission_pet,0)/100 totalsalary from s_emp;

select first_name||' '||last_name||','||title "Employees" From s_emp;

双引号,大小写敏感。

sqlplus username/password

edit ed
list l

! 临时切换

posted @ 2005-11-17 23:16 北国狼人的BloG 阅读(539) | 评论 (0)编辑 收藏

补充两点

echo 反显命令
可以用来创建文件

echo aaa>a.txt
echo bbb>>a.txt追加

users 查看在线用户
比who看到的信息少,但是同时刻用户数一样

统计当前在线用户数

openlab.tarena.ca% users
xiaoyao lujl xiaoyao tanjh
openlab.tarena.ca% users|wc -w
       4

等价于

openlab.tarena.ca% who|wc -l
       4

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

find / -name file
find . -mtime 10 -print 修改时间距现在正好10天
find /etc -user 0 -size +400 -print /etc目录下 user为0,也就是root为owner的文件,并大小大于400的文件
      注意两个条件为与关系,并且大于400,是data block。

      1data block = 512bytes   也就是 400 data block = 200K

find ~ -perm 777 > ~/holes
      权限为777的
find /export/home -type f atime +365 -exec rm {} \;

      注意后面,-exec空格rm空格{}空格\;  一个都不能少,才可执行删除,删除目录-exec rm -r {} \;

可以用于删除文件名为rm某参数的不可删除文件

例如
      echo aaa>-i 为形成-i的文件

      openlab.tarena.ca% rm -i
      usage: rm [-fiRr] file ...

那么就需要这样来删除
      find . -name '-i' -exec rm {} \;

grep -i  不区分大小写
grep -v 过滤不匹配后面的串

ls -l|grep ^d
      那么就是列出该目录中的子目录

ls -l|grep -v ^d
      列出文件了,因为是-v
与li -l|grep ^-等价

grep file *
到每个文件中寻找"file"串
         
more file*
可以同时查看多个file1,file2,file3。。。的内容。

diff file1 file2

openlab.tarena.ca% echo aaa>file1
openlab.tarena.ca% echo bbb>file2
openlab.tarena.ca% diff file1 file2
1c1
< aaa
---
> bbb

提示说明,将第一个文件的第一行修改成为bbb

openlab.tarena.ca% more file*
::::::::::::::
file1
::::::::::::::
aaa
ccc
::::::::::::::
file2
::::::::::::::
bbb
openlab.tarena.ca% diff file1 file2
1,2c1
< aaa
< ccc
---
> bbb

提示,第一、二两行都变成bbb



openlab.tarena.ca% more file*
::::::::::::::
file1
::::::::::::::
aaa
ccc
::::::::::::::
file2
::::::::::::::
aaa
ccc
zzz
openlab.tarena.ca% diff file1 file2
2a3
> zzz

在第一个文件的第二行后,加入第二个文件的第三行的内容

openlab.tarena.ca% more file*
::::::::::::::
file1
::::::::::::::
aaa
ccc
::::::::::::::
file2
::::::::::::::
aaa
ccc


zzz
openlab.tarena.ca% diff file1 file2
2a3,5
>
>
> zzz

第一个文件第二行,加入第二个文件中的3到5行内容。

openlab.tarena.ca% diff file1 file2
6d5
< xxx

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

openlab.tarena.ca% more file1 file2
::::::::::::::
file1
::::::::::::::
aaa
ccc

zzz

xxx
::::::::::::::
file2
::::::::::::::
aaa
ccc

zzz
openlab.tarena.ca% diff file1 file2
5,6d4
<
< xxx

注意是将第一个文件的5到6行删除,到第二个文件的第四行。


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

ps -ef

e所有进程 f详细列表方式

PID 进程号
PPID 父进程号

任何进程最后都能追踪到inetd

sh -> csh -> in.telnetd -> inet -> init(1) -> sched(0)

ps -ef|grep inetd|grep -v grep|wc -l



ps -ef|more 有各列表头

STIME进程开始时间

TTY 终端 Console
?表示与终端脱离关系的进程,应该是daemon

TIME 累计占用时间

CMD进程名称


/usr/ucb/ps -auwx|more

ps的另外一个实现版本



进程有几种状态,运行,就绪,挂起,僵尸进程。

<default>,由于父进程出现问题,当子进程已经没有了,告诉父,但是父没有消除它,这样造成任在进程表中保留一项,累计多后,对系统造成影响。

上述情况,由程序员造成。解决,杀死父进程。

kill -9 12487

-9表示无条件杀死

pkill sleep
      不需要进程号

-------------------------------------
sleep 100 前台运行,不释放终端控制
sleep 100& 后台运行

jobs -l 列任务

bg 任务号
fg 任务号


stop 进程号 挂起后台进程
Control -z挂起前台进程。
Control -c放弃前台进程。


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

ls file*|xargs grep file

分解输入

grep file file1 file2

查内容了,不等同于ls file*|grep file,将结果给grep,而是分解file*为file1 file2再给grep

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

/etc/hosts
ip与主机名的对应表
/etc/netmasks
/etc/defaultrouter
默认网关
/etc/hostname.hme0
主机名称

/etc/resolv.conf
DNS

/etc/nodename
网卡对应的名称,一台机器有可能有多个网卡,而主机名只有一个,与/etc/hostname.hme0不同。


ping 127.0.0.1(loop back地址),是检查逻辑地址有效否?也就是检查TCP/IP是否安装好?

netstat -rn 查看硬件

rusers -l tarenalab3
远程看lab3上的在线用户。

traceroute www.sina.com.cn

finger user1@tarenalab1



telnet

rlogin hostname -l lujl

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

ftp hostname

lcd 显示本地目录,和设置本地目录

hash 打#每1024

prompt交互信息开关

mget mput

mdelete

rename  可以移动文件!!!!!!!

wall 广播 Ctrl + D

write

talk

mesg -y|-n

posted @ 2005-11-16 22:47 北国狼人的BloG 阅读(317) | 评论 (0)编辑 收藏

touch命令

如果文件不存在,创建新文件。
文件存在,同时更新访问和修改时间。

注意文件的更新时间和访问时间不一样。

touch file1
vi file1

添加内容。

ls -lt 会看到该文件的最后修改时间。
过一些时候,执行more file参看一下该文件,也就是访问一下。
ls -lu会看到该文件最后访问的时间。

这是再touch file1,ls -lt和ls -lu会看到同样的时间。


做不了事(执行不了动作),你要检查几件事!

1.你是谁 (id命令)

openlab.tarena.ca% id
uid=25791 gid=103(tarena)

2.你在哪(pwd),你对某个文件的关系(owner group同组者 other)

3.你是否能在某目录里做事(读ls 写创建文件 执行cd),看看这个目录的权限
   
      在该目录下,执行 ls -ld,查看该目录
      注意:回上一级,执行ls -l lujl,是查看该目录下文件和子目录的权限。

ls -al lujl 可以查看隐藏文件。

ls -R 将该目录下所有文件夹递归展开

su - somebody 就是将环境变量也更换为somebody的,否则不更新,cd时回原来的用户的主目录。



一些基本命令。

mkdir -p dir6/dir7/dir8 可创建层级目录

cp -i beans apple 文件存在,会提示,-i作用

===============================
openlab.tarena.ca% cp -r dir3 dir4

注意:如果dir4不存在,那么就先建立dir4,在将dir3中内容拷贝过去,如果dir4存在,则是将整个dir3包括dir3本身,整个目录结构拷贝过去。

openlab.tarena.ca% ls
dir3   file1
openlab.tarena.ca% cp -r dir3 dir4
openlab.tarena.ca% ls -R
.:
dir3   dir4   file1

./dir3:
a.txt

./dir4:
a.txt
openlab.tarena.ca% cd dir4   
openlab.tarena.ca% rm *
openlab.tarena.ca% cd
openlab.tarena.ca% ls
dir3   dir4   file1
openlab.tarena.ca% cp -r dir3 dir4
openlab.tarena.ca% ls -R
.:
dir3   dir4   file1

./dir3:
a.txt

./dir4:
dir3

./dir4/dir3:
a.txt


mv 命令相当于给文件改名称

mv 源 目标

目标不存在,相当于给源改名称

目标存在,对于文件,覆盖
                    对于目录,移动整个目录结构到目标目录中。

openlab.tarena.ca% ls
dir3   file2
openlab.tarena.ca% mkdir dir4
openlab.tarena.ca% ls
dir3   dir4   file2
openlab.tarena.ca% mv dir3 dir4
openlab.tarena.ca% ls -R
.:
dir4   file2

./dir4:
dir3

./dir4/dir3:
a.txt

rm -r[i] directory_name(s)
rmdir只能删除空目录

题外话

      /tmp 每个系统根下都有一个临时文件夹,查看该目录权限,

      openlab.tarena.ca% cd /tmp
      openlab.tarena.ca% ls -ld
      total 64
      drwxrwxrwt   4 0        sys          753 11月 15 20:06 .
      openlab.tarena.ca% 

     看好了,那不是777,而是后面有个t,1777,它表示/tmp里,谁都能写,读,删。但是必须是该文件的owner。

     chmod 1777 dir



ln

两种链接,

硬连接和符号连接(软连接)

openlab.tarena.ca% ls -l
total 4
drwxr-xr-x   3 25791    tarena       512 11月 15 20:03 dir4
-rw-r--r--   1 25791    tarena        13 11月 15 19:38 file2

兰色表示硬链接数,对于目录,那个数字表示该目录下文件和子目录数总和。

openlab.tarena.ca% cp file2 file2.bak
openlab.tarena.ca% ln file2 file2.ln
openlab.tarena.ca% ls -il
total 8
    858670 drwxr-xr-x   3 25791    tarena       512 11月 15 20:03 dir4
    409639 -rw-r--r--   2 25791    tarena        13 11月 15 19:38 file2
    409792 -rw-r--r--   1 25791    tarena        13 11月 15 20:23 file2.bak
    409639 -rw-r--r--   2 25791    tarena        13 11月 15 19:38 file2.ln
openlab.tarena.ca%

注意硬链接后,被链接文件和链接文件的inode号,是相同的,他们是同一个inode,硬链接号加1。

=================================================
inode i节点 关键概念

   touch beans这个命令执行时,创建一个文件时到系统中申请一个i节点,如果申请不到,就不会创建成功。

  i节点保存这除文件名以外的关于这个文件的所有属性。大小,属主,属组,权限,数据块指针。

那么那个数据块(data block)指针,指向一个数据块。

一个目录也有inode,inode中数据块指针指向的数据块保存着该目录的文件名与inode的对应信息。

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

软链接

ln -s beans beans.sln

openlab.tarena.ca% ls -il beans*
total 10
    409793 -rw-r--r--   1 25791    tarena         0 11月 15 20:52 beans
    409794 lrwxrwxrwx   1 25791    tarena         5 11月 15 20:53 beans.sln -> beans
openlab.tarena.ca%

注意,beans和beans.sln的inode号不同,说明是两个文件。那么beans.sln的大小是5,基本可以理解为保存着beans的名称,以便能够找到它。

这时,more beans.sln实际上 先找到beans.sln的inode-〉数据块-〉5个字母beans->more beans

系统中就有软链接的例子,

openlab.tarena.ca% cd /
openlab.tarena.ca% ls -l|grep bin
lrwxrwxrwx   1 0        root           9  5月 28  2002 bin -> ./usr/bin
drwxr-xr-x   2 0        sys         1024  5月 16  2004 sbin
openlab.tarena.ca%

可以看到 bin就是./usr/bin的软链接。



man name 查看命令
man -k function 查看函数    man -k setuid

空格
b back
f forward
q
/string search
n 查找一个

ls d??=ls dat
ls [a-f]b*

cd;ls

标准输出重定向
cal 5 2007>a.txt
cal 5 2007>>a.txt追加

ls -l /etc|more

cal 5 2007|tee cal.lst
tee是个3向头,既显示,又重定向到cal.lst文件中。

cal 5 2007|tee -a cal.lst
追加

cat /dev/null > ~/b.txt
清空文件,回收datablock

cat /etc/passwd | awk -F: '{print $1 "\t" $6}' \
|sort >~/userinfo

\是指要换行继续写命令
然后就是awk和sed有很强的文本处理能力。


tail -30 a.txt
head -30 a.txt
tail -f ServiceStartupLog.txt

more filename(s)操作和man一样!

openlab.tarena.ca% who am i
lujl       pts/2        11月 15 19:27   (219.236.137.165)

查看登陆用户

whoami显示有效用户。su后,会看到结果。

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

 VI

  底行模式 :/? 命令模式 i a o 输入模式(Esc退出)

kljh 上右下左

i插入
a后
o当前行下插入新行 大写O当前行上插入新行

vi file1

i

some words

Esc

:w!

直接输入vi

编辑到最后

Esc
:wq! file2

保存file2,并退出

不保存直接退
:q!

保存后直接退
:wq!
:x!
ZZ


命令模式下

G 最后一行
1G第一行,输入没有时间限制

当前屏幕

Shift +L 最下
Shift +H 嘴上
Shift +M中间

Ctrl D 滚下半屏
Ctrl U 滚上半屏
Ctrl F 滚下整屏
Ctrl B 滚上整屏

r 修改一个字母
cw 修改某个单词
cc 整行
C 替换光标到行尾

yw
yy
p
:1,8co6
:1,6m8

x
dw
dd
5dd
:5,10d

u UNDO

~
大小写
J 连接下一行
:set nu
:21=21G
/
?
n 继续查找
:r file2

:1,$/要替换/新串/g
g表示全部替换

:1,19/^/#/
表示1到19行开头加入#,注释掉


^表示行首,这也是为什么Shift +6回到当前行行首,(Shift+4行尾)















posted @ 2005-11-15 21:51 北国狼人的BloG 阅读(436) | 评论 (0)编辑 收藏

hanlj给我们做了精要的开学典礼。

1,时刻想想1万3千8可不是小数字对于没毕业的自己,所以当你在能听讲的时候,走神;能练习的时候发呆;能复习的时候,看电视,那你就是在浪费1万多块钱!

2,对自己执行归零操作,如果权限不够,请使用ROOT强制执行,把你原来那点东西收起来吧,重新输入正统功力,至少让达内精英帮你自己原有内功重新梳理,理顺吧!

3,专注(专心学习,学好了,挑战到高薪,才是对关爱你的人最大回报,而不是嘴上说,身边陪。)

      勤劳(多用功,学习容量很大哦)
   
      积极(用最大的热情去学习每一个知识点,没有漏洞)

      沟通(应该有很多人能够认识)

4,安排时间,培养好习惯。

学习流程:

      [Core Java]JDBC[Core C++][C++ 高级][Java 高级][Web实战][J2EE OO OA OD][IP计费项目实战]

今天正题:

[Unix基础] 老师用最易懂的方式将我看了很多书或者帖子都没弄懂的问题,搞懂了,印象很深刻。

学习路径

登录、登出Solaris系统
漫游Solaris文件系统
建立文件和文件夹,并且改变权限
操作文本文件,并使用vi编辑器
使用命令来查找目录以及文件
使用基本网络命令
识别和改变初始化文件,环境变量的设置*(不同Shell)


Solaris = SunOS + CDE

Solaris 2.5 = SunOS 5.5

Solaris 在1980,由Berkeley加入了VM(虚拟存储)支持,TCP/IP网络,vi,csh等

三大概念

Kernel

Kernel管理设备,内存,进程,控制系统程序/工具和系统硬件,管理交换去,精灵进程,文件系统和其他功能。

Shell

File System

C Shell和文件系统比较重要对于开发者。

A shell is an interface between the user and the kernel,which acts as an interpreter or translator.

Shell实质上是一个程序,一登录,系统帮你运行的。

B Shell
K Shell
*C Shell
ba Shell

B Shell系统管理员比较喜欢用,很多启动脚本中,都是B Shell写的。

C Shell是B Shell的扩展,支持history,并且编程环境与C类似,每个Shell脚本都是C语言风格。与B Shell的语法不兼容,例如设置环境变量不同的句法不同。

tcsh是csh的增强扩展版本。

ps命令,查看当前用户使用的Shell。

从csh进入sh,那么csh是sh的父Shell。exit退出子Shell,回到上一级Shell。

进入系统的默认Shell,叫做登录Shell,在/etc/passwd中记录。

bash有保存命令历史的作用,支持 上 下 键。

$su进入超级用户root。

Solaris文件系统

命令df -k,查看目录,与文件系统关系以及使用情况。

会发现,

/dev/dsk/c0t0d0
/dev/dsk/c0t1d0

如果c0t0d0部分不完全相同,表示两块硬盘,那么上面的是两块物理硬盘。

c控制位,t目标位,d磁盘位。

那么对于一个5G的磁盘,要进行分区,那么分出来的叫做Slice:片

c0t0d0s0~c0t0d0s7,一共是8个,但是c0t0d0s2表示整个磁盘不能分,也就不能表示。所以一块磁盘最多分7个Slice。

/c0t0d0     ------>   format -------> s0 2G大小 s1 3G大小。

/c0t0d0s0   -------> newfs 做文件系统,那么文件系统是建立在Slice上的。那么newfs实质上是在分数据块block.

那么最后新的文件系统要挂接到(mount)到根上,那么就是钩在目录上。

挂接命令mount  /dev/dsk/c0t0d0s0 /opt

那么可以仔细看一下文件系统了。

/dev/dsk/c0t1d0s0 8260757 4269347 3908803 /newusers

8260757 由于是以kbytes为单位,三位一分,基本上是8G总大小。

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

/sbin/ifconfig -a 查看ip地址。

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

more /etc/passwd
   
   luolu:x:30662:10::/newusers/sd0510/luolu:/bin/csh

用户名:密码位(密码信息存在在/etc/shadow中,密文保存):UID:GID::主目录:登陆Shell。

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

pwd - print working directory

cd ~hiloo 表示进入hiloo的主目录。cd直接空格和cd ~表示自己的主目录。
cd ../.. 退两级

查看文件类型的三种方式

ls -l

- 文件 d 目录

file 文件名

ls -F

显示文件类型


目录的读权限,是否可以查看文件列表
目录的写权限,是否可以生成文件和子目录或者删除文件与子目录
执行权限,就是指是否可以'cd 该目录'

rw-          r--                      r--
对owner  对同组其他人  对其他人
可以看成由9个0和1组成,所以000到111,对每类用户的权限是8种变化,值为0到7。

rwx r-x r-w 755
rw- r-- r-- 644

只有root和某文件的owner才能修改该文件的权限。

改变文件权限的两种方式:

chmod 644 file
chmod 755 file

chmod g-r file1
chmod u+x,go+r file1在原有权限基础上,给文件owner加执行权限,给同组和其他人加读权限。
chmod a=rw file1 (表示让所有用户,都是rw权限,那么就是666)

touch filename(s)

posted @ 2005-11-14 21:55 北国狼人的BloG 阅读(517) | 评论 (0)编辑 收藏

今天终于有时间去听课了,高兴。

今天最重要的收获,了解了衡量自己的几个基本方面。

1,就是知识结构层次,教育程度
2,技术技能,实际的应用
3,经验,那么做过某项工作,和没做过肯定是不一样的。
4,阅历,阅历主要是指正确知识或者认知,在遇到很多事情时,得到验证,而获得的新的体会。

还有人成功的几点

1,品德,
2,毅力,
3,抓住每次机遇,不一是享福,好的机遇,很多吃苦的机会,也是很重要的。比如三伏天对着电脑,汉流夹背的编程,编一天。或者其他吃苦的机会。为什么?!其实很简单,人类的潜意识会告诉你答案,当你在人生路上再遇到很难过的时候,你会想到之前那么苦,那么累都能支撑过来,这算什么!所以任何机会都是锻炼人的!
4,积累人脉,


posted @ 2005-11-12 17:18 北国狼人的BloG 阅读(741) | 评论 (0)编辑 收藏
2个月前,一个老朋友(发小)让我帮他老板制作网站,那时的我兴致很高,以为很简单的一个商务网站,我就直接信用卡买了空间,就做。

中间,也没有什么需求,就照着经验制作。当然也连老板都没见到就做完了。自己还梦想着拿钱。

结果,人家根本不是这么想的,找了另外的人负责网站的人,一个女人。失败,说界面不行,重新修改。

又说¥……%¥—…………%74#%……¥#·……¥·#

反正需求跟我做的基本不大一样。

我当时恨不得。。。


我正好已经辞职了,所以有功夫,改吧,我就重新设计,重新做网页,重新做程序。

原来的网站,还用Web标准做的,DIV+CSS,其实在我看来都是扯淡,还不够累得呢,脑子全用在CSS上了。还是Table定位方便,几个Table一套。OK。以前的经验让我在短短一周重做了一个新网站。


昨天,又去谈了谈,其实人家老板还是很爽快的,我说支付一部分费用,等都改好了,再支付另外的。

拿到1500,唉,累。。。。


这件事以后,记住不做朋友介绍的活,其实也是不做私活,因为如果拿着高新,您把工作做到家,会有更大利益,私活没有保证阿!!!!

做项目,一定不要先投入太多,把需求谈好,初稿定了,然后拿到定金,再投入。记住了朋友。
posted @ 2005-11-12 08:08 北国狼人的BloG 阅读(712) | 评论 (1)编辑 收藏
仅列出标题
共17页: First 上一页 9 10 11 12 13 14 15 16 17 下一页