Wu Kuan是一名狂热的Unix\Linux爱好者,并且十分痛恨GUI,觉得操作系统就应该是命令行下开发的,这样才有Geek的感觉。Wu Kuan当然不会放过任何机会来给大家洗脑关于Unix\Linux的哲学。
开发人员信条
-
l 小即是美
-
l 让每个程序只做好一件事情
-
l 尽快的建立原型
-
l 舍高效率而取可移植性
-
l 使用纯文本来存储数据
-
l 充分利用软件的杠杆效应
-
l 使用Shell脚本来提高杠杆效应和可移植性
-
l 避免强制性的用户界面
-
l 让每一个程序都成为过滤器
Unix\Linux次要准则
-
l 允许用户制定环境
-
l 尽量使操作系统内核小而轻巧
-
l 使用小写字母,并尽量保持简短
-
l 保护树木
-
l 沉默是金
-
l 并行思考
-
l 各部分之和大于整体
-
l 寻找90%的解决方案
-
l 更坏的就是更好
-
l 层次化思考
当然,今天更想讲的是关于层次化思考这个准则,如今在抽象的层次化基础上实现了各种功能繁多的应用程序,Unix\Linux用户和开发人员都喜欢分层次来组织事物,比如Unix的文件系统架构,而发展到现在Unix\Linux的层次思考已经拓展到其他领域,如网络服务命名器、窗口管理、面向对象开发。
接下来我们重点介绍下Unix\Linux的文件系统以及几个基本的Unix\Linux命令;)
Good Luck!
上图中用红色方框圈起来的是我们输入的命令,命令下方对应的是命令的执行情况。
总共出现了3个命令,我们依次解释下
-
l pwd(print working directory)输出当前工作目录
-
l ls(List files)列出文件下的所有文件
-
l cd(change directory)切换目录
解释下图中出现的几个目录
/ 根目录
home/aemonwk/ 某个用户目录
cd /home/aemonwk/ 就是从/ 目录进入到/home/aemonwk目录
.. 当前目录的上一级目录 比如cd.. 就是切换至当前目录的上一级目录。/home/aemonwk的上一级目录是/home
在选手们理解了上述说明后,接下来给出我们的问题。
首先,我们现在假定在Unix/Linux文件系统中的两个目录或文件之前每一层的距离为1
即/home 目录到/home/aemonwk 之间的层次认为是1。
/etc/vim/home/aemonwk/Documents
5
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 输入目录路径
String s1 = sc.nextLine();
String s2 = sc.nextLine();
s1.trim();
s2.trim();
// 情况1:有一个是根目录
// 情况2:两个都是根目录
// 情况3:两个都不是跟目录
// 根目录是 “/”
// 第一次做的时候忽略了根目录
if(s1.length()==1&&s2.length()==1){
System.out.println(0);
}
else if(s1.length()==1&&s2.length()!=1){
String[]s = s2.split("/");
System.out.println(s.length-1);
}
else if(s1.length()!=1&&s2.length()==1){
String[]s = s1.split("/");
System.out.println(s.length-1);
}
else{
String[] str1 = s1.split("/");
String[] str2 = s2.split("/");
int x =Math.min(str1.length, str2.length);
for(int i=0 ;i<x ;i++){
if(!str1[i].equals(str2[i])){
System.out.println(str1.length-i+str2.length-i);
break;
}
else if(i==x-1){
System.out.println(Math.abs(str1.length-str2.length));
break;
}
}
}
}
}