- 浏览: 415255 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (760)
- 股票日志 (26)
- Selenium (0)
- selenium 2 环境的搭建 (1)
- 并发 (7)
- 框架开发 (1)
- 动态代理 (2)
- Struts2 (2)
- POI (2)
- jdk (3)
- maven (31)
- spring (35)
- mysql (31)
- 工作机会 (3)
- xtream (1)
- oracle dbms_metadata GET_DDL (0)
- SSI (1)
- DB (61)
- powermock (4)
- java 基础 (25)
- 多线程 (11)
- 高手 (2)
- java 底层 (2)
- 专业网站 (1)
- 开发联想 (1)
- 开发联想 (1)
- bat文件 (2)
- 清queue 语句 (1)
- 清queue 语句 (1)
- jquery (7)
- html5 (1)
- Jenkins (10)
- Linux (17)
- 工作issue (2)
- tomcat log (3)
- jvm (23)
- 项目细节 (0)
- oracle (41)
- 泛型 (3)
- 新知识点 (1)
- 数据库ddl 语句 (0)
- AQ (2)
- jms (0)
- 网络资源 (6)
- github (6)
- Easymock (1)
- Dom 解析XML (1)
- windows命令 (2)
- java (7)
- 正则表达式 (5)
- sequence (1)
- oracle 表meta信息 (1)
- 小工具技巧 (1)
- 辅助工具 (1)
- Junit (1)
- 泛型 generic (2)
- Java程序设计 (1)
- cglib (2)
- 架构师之路 (1)
- 数据库连接池 (5)
- c3p0 (1)
- eclipse使用 (1)
- oracle sql plus (1)
- 码农人生 (3)
- SVN (15)
- sqlplus (2)
- jsoup (1)
- 网络爬虫 (2)
- 新技能 (1)
- zookeeper (4)
- hadoop (1)
- SVNKIT (1)
- 从工具到知识点的整理 (1)
- log4j (13)
- 读文件 (0)
- 转义字符 (1)
- command (1)
- web service (3)
- 锁 (1)
- shell 脚本 (1)
- 遇到的错误 (2)
- tomcat (14)
- 房产 (5)
- bootstrap jquery ui (1)
- easyui (2)
- 个人征信 (1)
- 读写分离 (1)
- 备份 (1)
- rmi (6)
- webservice (1)
- JMX (4)
- 内存管理 (3)
- java设计 (1)
- timer (1)
- lock (2)
- concurrent (2)
- collection (1)
- tns (1)
- java基础 (15)
- File (1)
- 本机资源 (1)
- bat (1)
- windows (4)
- 数据结构 (3)
- 代码安全 (1)
- 作用域 (1)
- 图 (2)
- jvm内存结构 (1)
- 计算机思想 (1)
- quartz (6)
- Mongo DB (2)
- Nosql (4)
- sql (5)
- 第三方Java 工具 jar 项目 (2)
- drools (1)
- java swing (2)
- 调用console (1)
- runtime (1)
- process (1)
- swing (2)
- grouplayout (1)
- dubbo (0)
- bootstrap (0)
- nodejs (2)
- SVN hooks (1)
- jdbc (3)
- jdbc error (1)
- precedure (1)
- partition_key (1)
- active mq (1)
- blob (2)
- Eclipse (6)
- web server (1)
- bootstrapt (2)
- struts (1)
- ajax (1)
- js call back (1)
- 思想境界拓展 (1)
- JIRA (1)
- log (1)
- jaxb (3)
- xml java互相转换 (1)
- 装修 (2)
- 互联网 (2)
- threadlocal (3)
- mybatis (22)
- xstream (1)
- 排序 (1)
- 股票资源 (1)
- RPC (2)
- NIO (3)
- http client (6)
- 他人博客 (1)
- 代理服务器 (1)
- 网络 (2)
- web (1)
- 股票 (5)
- deadlock (1)
- JConsole (2)
- activemq (3)
- oralce (1)
- 游标 (1)
- 12月13日道富内部培训 (0)
- grant (1)
- 速查 (2)
- classloader (4)
- netty (4)
- 设计模式 (2)
- 缓存 (2)
- ehcache (2)
- framework (1)
- 内存分析 (2)
- dump (1)
- memory (2)
- 多高线程,并发 (1)
- hbase (2)
- 分布式系统 (1)
- socket (3)
- socket (1)
- 面试问题 (1)
- jetty (2)
- http (2)
- 源码 (1)
- 日志 (2)
- jni (1)
- 编码约定 (1)
- memorycache (1)
- redis (13)
- 杂谈 (1)
- drool (1)
- blockingqueue (1)
- ScheduledExecutorService (1)
- 网页爬虫 (1)
- httpclient (4)
- httpparser (1)
- map (1)
- 单例 (1)
- synchronized (2)
- thread (1)
- job (1)
- hashcode (1)
- copyonwriteArrayList (2)
- 录制声音 (1)
- java 标准 (2)
- SSL/TLS (1)
- itext (1)
- pdf (1)
- 钻石 (2)
- sonar (1)
- unicode (1)
- 编码 (4)
- html (1)
- SecurityManager (1)
- 坑 (1)
- Restful (2)
- svn hook (1)
- concurrentHashMap (1)
- 垃圾回收 (1)
- vbs (8)
- visual svn (2)
- power shell (1)
- wmi (3)
- mof (2)
- c# (1)
- concurrency (1)
- 劳动法 (1)
- 三国志游戏 (2)
- 三国 (1)
- 洪榕 (2)
- 金融投资知识 (1)
- motan (1)
- tkmybatis mapper (1)
- 工商注册信息查询 (1)
- consul (1)
- 支付业务知识 (2)
- 数据库备份 (1)
- 字段设计 (1)
- 字段 (1)
- dba (1)
- 插件 (2)
- PropEdit插件 (1)
- web工程 (1)
- 银行业知识 (2)
- 国内托管银行 (1)
- 数据库 (1)
- 事务 (2)
- git (18)
- component-scan (1)
- 私人 (0)
- db2 (14)
- alias (1)
- 住房 (1)
- 户口 (1)
- fastjson (1)
- test (6)
- RSA (2)
- 密钥 (1)
- putty (1)
- sftp (1)
- 加密 (1)
- 公钥私钥 (3)
- markdown (1)
- sweet (1)
- sourcetree (1)
- 好工具 (1)
- cmd (1)
- scp (1)
- notepad++ (1)
- ssh免密登录 (1)
- https (1)
- ssl (2)
- js (2)
- h2 (1)
- 内存 (2)
- 浏览器 (1)
- js特效 (1)
- io (1)
- 乱码 (1)
- 小工具 (1)
- 每周技术任务 (1)
- mongodb (7)
- 内存泄漏 (1)
- 码云 (2)
- 如何搭建java 视频服务器 tomcat (1)
- 资源 (1)
- 书 (1)
- 四色建模法 (1)
- 建模 (1)
- 配置 (1)
- 职位 (1)
- nginx (1)
- excel (1)
- log4j2 (2)
- 做菜 (1)
- jmap (1)
- jspwiki (1)
- activiti (1)
- 工作流引擎 (1)
- 安卓 (1)
- acitviti 例子 (1)
- 二维码 (1)
- 工作流 (1)
- powerdesign (2)
- 软件设计 (1)
- 乐观锁 (1)
- 王者荣耀 (1)
- session (2)
- token (5)
- cookie (4)
- springboot (24)
- jwt (2)
- 项目路径 (1)
- magicbook (1)
- requestType (1)
- json (2)
- swagger (1)
- eolinker (1)
- springdata (1)
- springmvc (1)
- controlleradvice (1)
- profile (1)
- 银行四要素 (1)
- 支付人员资源 (1)
- 支付渠道 (1)
- yaml (1)
- 中文编码 (1)
- mongo (2)
- serializable (1)
- 序列化 (1)
- zyd (1)
- unittest (1)
- 工具 (1)
- Something (1)
- 通达信 (1)
- protobuf (1)
- 算法 (1)
- springcloud (2)
- hikari (1)
- rocketmq (7)
- cachecloud (1)
- serfj (1)
- axure (1)
- lombok (1)
- 分布式锁 (1)
- 线程 (2)
- 同步代码块 (1)
- cobar (1)
- mq (1)
- rabbitmq (1)
- 定时执行 (1)
- 支付系统 (3)
- 唱歌 (1)
- elasticjob (1)
- 定时任务 (1)
- 界面 (1)
- flink (2)
- 大数据 (1)
- 接私活 (0)
- 内部培训 (2)
最新评论
-
dannyhz:
做股票从短线 试水,然后 慢慢发现 波段和 中期的故事可挖, ...
搭台唱戏 -
dannyhz:
http://developer.51cto.com/art/ ...
如何自己开发框架 它的注意点是什么
create or replace
PROCEDURE gce_kill_machine (p_machine IN VARCHAR2, p_timeout_minutes IN NUMBER DEFAULT 30)
IS
l_inst_id NUMBER;
l_sid NUMBER;
l_serial NUMBER;
lv_login_minutes NUMBER;
l_sql VARCHAR2 (32000);
l_session_user VARCHAR2 (64);
l_status VARCHAR2(8);
l_osuser VARCHAR2(30);
l_process VARCHAR2(24);
l_machine VARCHAR2(64);
l_port NUMBER;
l_program VARCHAR2(48);
l_module VARCHAR2(64);
l_logon_time date;
l_event VARCHAR2(64);
l_sql_id VARCHAR2(13);
l_prev_sql_id VARCHAR2(13);
l_sql_text VARCHAR2(1000);
l_prev_sql_text VARCHAR2(1000);
l_kill_user VARCHAR2(30);
l_kill_os_user VARCHAR2(30);
l_kill_machine VARCHAR2(64);
l_kill_program VARCHAR2(48);
cur_sessions sys_refcursor;
BEGIN
l_kill_user := sys_context('USERENV','SESSION_USER');
l_kill_os_user := sys_context('USERENV','OS_USER');
l_kill_machine := sys_context('USERENV','HOST');
l_kill_program := sys_context('USERENV','MODULE');
-- query the information of the session to be killed
open cur_sessions for
SELECT inst_id,sid,serial#,username,status,osuser,process,machine,port,program,module,logon_time,
event,sql_id,prev_sql_id
FROM gv$session gs
WHERE username='OPGCEP2'
AND machine=p_machine
AND STATUS!='KILLED'
AND audsid!=USERENV('SESSIONID')
AND not exists (select distinct inst_id, sid
from gv$mystat gm
where gm.inst_id=gs.inst_id and gm.sid=gs.sid
);
LOOP
FETCH cur_sessions
INTO l_inst_id,l_sid,l_serial,l_session_user,l_status,l_osuser,l_process,l_machine,l_port,l_program,
l_module,l_logon_time,l_event,l_sql_id,l_prev_sql_id;
EXIT WHEN cur_sessions%NOTFOUND;
if l_sql_id is not null then
begin
SELECT sql_text into l_sql_text
FROM gv$sql
WHERE child_number = 0
AND inst_id = l_inst_id
AND sql_id = l_sql_id;
exception
when others then
l_sql_text := '';
end;
end if;
if l_prev_sql_id is not null then
begin
SELECT sql_text into l_prev_sql_text
FROM gv$sql
WHERE child_number = 0
AND inst_id = l_inst_id
AND sql_id = l_prev_sql_id;
exception
when others then
l_prev_sql_text := '';
end;
end if;
-- ONLY ALLOW sessions which logged in p_timeout_minutes(such as 30) minutes ago to be killed
lv_login_minutes := (sysdate - l_logon_time)*24*60;
IF lv_login_minutes > p_timeout_minutes
THEN
merge into GCE_MAINT.KILL_SESSION_LOG T0
using(select l_inst_id inst_id,l_sid sid,l_serial serial#,l_kill_user kill_user,l_kill_os_user kill_os_user,l_kill_machine kill_machine,l_kill_program kill_program
,sysdate kill_time,l_session_user session_user,l_status status,l_osuser os_user,l_process process,l_machine machine,l_port port,l_program program,l_module module
,l_logon_time logon_time,l_event event,l_sql_id sql_id,l_prev_sql_id prev_sql_id,l_sql_text sql_text,l_prev_sql_text prev_sql_text from dual) T1
on (T0.inst_id=T1.inst_id and T0.sid=T1.sid and T0.serial#=T1.serial# and T0.logon_time=T1.logon_time)
when matched then
update set t0.kill_user=t1.kill_user, t0.kill_os_user=t1.kill_os_user, t0.kill_machine=t1.kill_machine
, t0.kill_program=t1.kill_program, t0.kill_time=t1.kill_time, t0.username=t1.session_user, t0.status=t1.status
, t0.osuser=t1.os_user, t0.process=t1.process, t0.machine=t1.machine, t0.port=t1.port, t0.program=t1.program
, t0.module=t1.module, t0.event=t1.event, t0.sql_id=t1.sql_id
, t0.prev_sql_id=t1.prev_sql_id, t0.sql_text=t1.sql_text, t0.prev_sql_text=t1.prev_sql_text
when not matched then
insert(
INST_ID
,SID
,SERIAL#
,KILL_USER
,KILL_OS_USER
,KILL_MACHINE
,KILL_PROGRAM
,KILL_TIME
,USERNAME
,STATUS
,OSUSER
,PROCESS
,MACHINE
,PORT
,PROGRAM
,MODULE
,LOGON_TIME
,EVENT
,SQL_ID
,PREV_SQL_ID
,SQL_TEXT
,PREV_SQL_TEXT
)
values(
l_inst_id
,l_sid
,l_serial
,l_kill_user
,l_kill_os_user
,l_kill_machine
,l_kill_program
,sysdate
,l_session_user
,l_status
,l_osuser
,l_process
,l_machine
,l_port
,l_program
,l_module
,l_logon_time
,l_event
,l_sql_id
,l_prev_sql_id
,l_sql_text
,l_prev_sql_text
);
COMMIT;
-- FORMAT OF KILL SESSION statement
-- e.g. -- alter system kill session '18,21349,@3' immediate;
l_sql :=
'alter system kill session '''
|| TO_CHAR (l_sid)
|| ', '
|| TO_CHAR (l_serial)
|| ', @'
|| TO_CHAR (l_inst_id)
|| ''' immediate';
DBMS_OUTPUT.PUT_LINE (l_sql);
-- Actually KILL session now: e.g. alter system kill session '4, 47438, @1' immediate
EXECUTE IMMEDIATE (l_sql);
ELSE
DBMS_OUTPUT.
PUT_LINE ('*** ERROR: Cannot KILL session ('||to_char(l_sid)||','||to_char(l_serial)||',@'||to_char(l_inst_id)||') since it just logged in '|| to_char(lv_login_minutes) ||' minutes! ***');
END IF;
END LOOP;
CLOSE cur_sessions;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE ('ERROR: No such session');
ROLLBACK;
RAISE;
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('ERROR: '||substr(SQLERRM,1,1000));
ROLLBACK;
RAISE;
END;
PROCEDURE gce_kill_machine (p_machine IN VARCHAR2, p_timeout_minutes IN NUMBER DEFAULT 30)
IS
l_inst_id NUMBER;
l_sid NUMBER;
l_serial NUMBER;
lv_login_minutes NUMBER;
l_sql VARCHAR2 (32000);
l_session_user VARCHAR2 (64);
l_status VARCHAR2(8);
l_osuser VARCHAR2(30);
l_process VARCHAR2(24);
l_machine VARCHAR2(64);
l_port NUMBER;
l_program VARCHAR2(48);
l_module VARCHAR2(64);
l_logon_time date;
l_event VARCHAR2(64);
l_sql_id VARCHAR2(13);
l_prev_sql_id VARCHAR2(13);
l_sql_text VARCHAR2(1000);
l_prev_sql_text VARCHAR2(1000);
l_kill_user VARCHAR2(30);
l_kill_os_user VARCHAR2(30);
l_kill_machine VARCHAR2(64);
l_kill_program VARCHAR2(48);
cur_sessions sys_refcursor;
BEGIN
l_kill_user := sys_context('USERENV','SESSION_USER');
l_kill_os_user := sys_context('USERENV','OS_USER');
l_kill_machine := sys_context('USERENV','HOST');
l_kill_program := sys_context('USERENV','MODULE');
-- query the information of the session to be killed
open cur_sessions for
SELECT inst_id,sid,serial#,username,status,osuser,process,machine,port,program,module,logon_time,
event,sql_id,prev_sql_id
FROM gv$session gs
WHERE username='OPGCEP2'
AND machine=p_machine
AND STATUS!='KILLED'
AND audsid!=USERENV('SESSIONID')
AND not exists (select distinct inst_id, sid
from gv$mystat gm
where gm.inst_id=gs.inst_id and gm.sid=gs.sid
);
LOOP
FETCH cur_sessions
INTO l_inst_id,l_sid,l_serial,l_session_user,l_status,l_osuser,l_process,l_machine,l_port,l_program,
l_module,l_logon_time,l_event,l_sql_id,l_prev_sql_id;
EXIT WHEN cur_sessions%NOTFOUND;
if l_sql_id is not null then
begin
SELECT sql_text into l_sql_text
FROM gv$sql
WHERE child_number = 0
AND inst_id = l_inst_id
AND sql_id = l_sql_id;
exception
when others then
l_sql_text := '';
end;
end if;
if l_prev_sql_id is not null then
begin
SELECT sql_text into l_prev_sql_text
FROM gv$sql
WHERE child_number = 0
AND inst_id = l_inst_id
AND sql_id = l_prev_sql_id;
exception
when others then
l_prev_sql_text := '';
end;
end if;
-- ONLY ALLOW sessions which logged in p_timeout_minutes(such as 30) minutes ago to be killed
lv_login_minutes := (sysdate - l_logon_time)*24*60;
IF lv_login_minutes > p_timeout_minutes
THEN
merge into GCE_MAINT.KILL_SESSION_LOG T0
using(select l_inst_id inst_id,l_sid sid,l_serial serial#,l_kill_user kill_user,l_kill_os_user kill_os_user,l_kill_machine kill_machine,l_kill_program kill_program
,sysdate kill_time,l_session_user session_user,l_status status,l_osuser os_user,l_process process,l_machine machine,l_port port,l_program program,l_module module
,l_logon_time logon_time,l_event event,l_sql_id sql_id,l_prev_sql_id prev_sql_id,l_sql_text sql_text,l_prev_sql_text prev_sql_text from dual) T1
on (T0.inst_id=T1.inst_id and T0.sid=T1.sid and T0.serial#=T1.serial# and T0.logon_time=T1.logon_time)
when matched then
update set t0.kill_user=t1.kill_user, t0.kill_os_user=t1.kill_os_user, t0.kill_machine=t1.kill_machine
, t0.kill_program=t1.kill_program, t0.kill_time=t1.kill_time, t0.username=t1.session_user, t0.status=t1.status
, t0.osuser=t1.os_user, t0.process=t1.process, t0.machine=t1.machine, t0.port=t1.port, t0.program=t1.program
, t0.module=t1.module, t0.event=t1.event, t0.sql_id=t1.sql_id
, t0.prev_sql_id=t1.prev_sql_id, t0.sql_text=t1.sql_text, t0.prev_sql_text=t1.prev_sql_text
when not matched then
insert(
INST_ID
,SID
,SERIAL#
,KILL_USER
,KILL_OS_USER
,KILL_MACHINE
,KILL_PROGRAM
,KILL_TIME
,USERNAME
,STATUS
,OSUSER
,PROCESS
,MACHINE
,PORT
,PROGRAM
,MODULE
,LOGON_TIME
,EVENT
,SQL_ID
,PREV_SQL_ID
,SQL_TEXT
,PREV_SQL_TEXT
)
values(
l_inst_id
,l_sid
,l_serial
,l_kill_user
,l_kill_os_user
,l_kill_machine
,l_kill_program
,sysdate
,l_session_user
,l_status
,l_osuser
,l_process
,l_machine
,l_port
,l_program
,l_module
,l_logon_time
,l_event
,l_sql_id
,l_prev_sql_id
,l_sql_text
,l_prev_sql_text
);
COMMIT;
-- FORMAT OF KILL SESSION statement
-- e.g. -- alter system kill session '18,21349,@3' immediate;
l_sql :=
'alter system kill session '''
|| TO_CHAR (l_sid)
|| ', '
|| TO_CHAR (l_serial)
|| ', @'
|| TO_CHAR (l_inst_id)
|| ''' immediate';
DBMS_OUTPUT.PUT_LINE (l_sql);
-- Actually KILL session now: e.g. alter system kill session '4, 47438, @1' immediate
EXECUTE IMMEDIATE (l_sql);
ELSE
DBMS_OUTPUT.
PUT_LINE ('*** ERROR: Cannot KILL session ('||to_char(l_sid)||','||to_char(l_serial)||',@'||to_char(l_inst_id)||') since it just logged in '|| to_char(lv_login_minutes) ||' minutes! ***');
END IF;
END LOOP;
CLOSE cur_sessions;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE ('ERROR: No such session');
ROLLBACK;
RAISE;
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('ERROR: '||substr(SQLERRM,1,1000));
ROLLBACK;
RAISE;
END;
发表评论
-
MySQL的内存表
2017-12-05 14:33 379引用 “内存表”顾名 ... -
处理数据库百万级数据的注意点
2017-12-05 14:31 660引用 最近的项目需 ... -
mongodb客户端
2017-10-02 13:25 452D:\Lib\dev_tool\MongoVUE 1.5.3 -
db2 命令行模式操作详细
2017-09-20 09:43 441http://blog.csdn.net/sunrier/ar ... -
DB2 的表在删除字段后 表会挂起 需要执行 reorg命令
2017-09-19 17:24 1053DB2 的表在删除字段后 表会挂起 需要执行 reorg命令 ... -
jdbc访问mysql数据库急速
2017-09-09 15:20 413http://blog.csdn.net/whucyl/art ... -
DB2 报SQLCODE204,SQLSTATE42704错误解决方法 实际上是因为没有建alias
2017-07-13 17:36 3824jdbc链接DB2时报SQLCODE204,SQLSTATE4 ... -
mongo db 简单操作
2017-07-07 02:13 414引用 本地操作数据库 1,在第一个窗口 指定mongo的数据 ... -
外键的必要性
2017-06-26 11:22 448引用 平常需要使用外 ... -
为啥需要nosql
2017-03-13 17:32 432http://www.infoq.com/cn/news/20 ... -
Hbase 实例 java操作
2017-02-17 03:38 382http://blog.csdn.net/syb1881010 ... -
关于数据库HBase的分析 与传统数据库
2017-02-17 03:23 470http://www.ithao123.cn/content- ... -
存储过程的优点 并不一定完全只用sql来一条条执行
2017-02-08 15:26 398引用 存储过程天天用,关于使用存储过程的sql语句的争论也一直 ... -
oracle blob 字段的解析
2017-02-06 10:48 781oracle.sql.BLOB data = (oracle. ... -
查询执行过的sql语句的方法
2017-01-20 13:25 642select * from v$sql where lower ... -
检查一个对象的权限
2017-01-13 10:47 392先看这个对象在对象库里是否存在 select * from ... -
竖变横 oracle group by 方式
2017-01-10 11:43 777SELECT DCC.CONSTRAINT_NAME ... -
参考写queue赋权限
2016-12-22 22:08 371引用 DBMS_AQADM.CREATE_QUEUE_TA ... -
oracle plsql 游标的使用
2016-12-07 18:19 517set serveroutput on; DECLA ... -
oracle replace 语句使用 ,另外还有句 regexp_replace
2016-12-06 16:36 765update buat_meta.gcal_data_sour ...
相关推荐
You must install 'makeinfo' on your build machine makeinfo is usually part of the texinfo package in your distribution make: *** [dependencies] 错误 1 make:离开目录“/home/wwt/linux_r16/lichee/...
- `sudo squid3 -k function`:执行一些管理功能,如`parse`(解析squid.conf)、`shutdown`(关闭squid进程)、`interrupt`(立即关闭squid)、`kill`(发送kill信号给squid)等。 - `sudo squid3 -D`:禁用启动时...
Using kill to Control Processes Section 5.4. Using apachectl to Control the Server Section 5.5. Validating Server Configuration Section 5.6. Setuid root Startup Scripts Section ...
SQL>select object_name,status from user_objects where object_type='FUNCTION'; SQL>select object_name,status from user_objects where object_type='PROCEDURE'; 查看函数和过程的源代码 SQL>select text...
Use Kill to remove the original file and then use Name to give the temporary file the old file name."<END><br>8 , cpyfile.zip This will copy a specified file to a directory. It also shows its ...