首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

1-AVI--Fragment基础使用

零、前言 [1].Fragment静态使用 [2].Fragment动态使用 一、Fragment静态使用 静态fragment.jpg 1.蓝色布局:blue.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorPrimary" android:orientation="vertical" > <TextView android:id="@+id/blue_tv" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="蓝色Fragment" /> </RelativeLayout> 2.黄色布局:yellow.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/yellow" android:orientation="vertical" > <TextView android:id="@+id/yellow_tv" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="黄色Fragment" /> </RelativeLayout> 3.黄色Fragment:YellowFragment.java /** * 作者:张风捷特烈<br/> * 时间:2018/8/28 0028:13:07<br/> * 邮箱:1981462002@qq.com<br/> * 说明:黄色Fragment */ public class YellowFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.yellow, container, false); } } 4.绿色Fragment:BlueFragment.java /** * 作者:张风捷特烈<br/> * 时间:2018/8/28 0028:13:07<br/> * 邮箱:1981462002@qq.com<br/> * 说明:绿色Fragment */ public class BlueFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_bottom, container, false); } } 5.主布局:layout/activity_static.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".activity.ActFragmentActivity"> <fragment android:id="@+id/yellow_fragment1" android:name="com.toly1994.avi_fragment.staticFg.YellowFragment" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <View android:background="@color/gray_8f" android:layout_width="match_parent" android:layout_height="1dp"/> <fragment android:id="@+id/yellow_fragment2" android:name="com.toly1994.avi_fragment.staticFg.YellowFragment" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <fragment android:id="@+id/blue_fragment" android:name="com.toly1994.avi_fragment.staticFg.BlueFragment" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="4"/> </LinearLayout> 6.使用:StaticFragmentActivity.java public class StaticFragmentActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_static); } } 二、动态使用 public class ActFragmentActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_acti); initFragment(); } /** * 动态加载Fragment */ private void initFragment() { FragmentManager fm = getFragmentManager();//1.获取FragmentManager FragmentTransaction ft = fm.beginTransaction();//2.fm开启事务 //3.动态添加 (控件id,fragment对象) ft.add(R.id.fl_title, new YellowFragment()); ft.add(R.id.fl_content, new BlueFragment()); ft.commit();//4.提交事务 } } 动态使用fragment.png 后记、 1.声明: [1]本文由张风捷特烈原创,转载请注明 [2]欢迎广大编程爱好者共同交流 [3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 [4]你的喜欢与支持将是我最大的动力 2.连接传送门: 更多安卓技术欢迎访问:安卓技术栈 我的github地址:欢迎star 简书首发,腾讯云+社区同步更新张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com 3.联系我 QQ:1981462002 邮箱:1981462002@qq.com 微信:zdl1994328 4.欢迎关注我的微信公众号,最新精彩文章,及时送达: 公众号.jpg

优秀的个人博客,低调大师

JavaScript 基础排序的实现(二)

继上一篇O(n^2)的排序算法后,这一篇主要记录O(n*logn)的排序算法 1.快排(快速排序) 这一算法的核心思想为,先随机选一个数作为标兵或者说是标记(这个数一般来说选择该无序数组的中间那个元素;此处笔者选取第一个实现算法,当选取完毕后以此标兵为参照将比这个数大的放到他的右边,比他小的放到左边.这样一趟排序过后就能让这个标记左边的数比他小,右边的数都比他大.下一趟排序则分别选取他的左半边数组和右半边数组重复之前的操作(此操作一般由递归实现)当传入的区间只有一个元素的时候那么开始返回不再继续调用函数自身(即为递归的终止条件)因为只有一个数字是必定有序的 递归实现代码如下: //快速排序(递归) function QuickSort(arr,start = 0,end = arr.length-1){ if(start<end){//递归结束条件 let [key,l,r] = [parseInt((start+end)/2),start,end];//key为标记的值,l和r 分别表示左边的下标和右边的下标 while(l<r){//当左右下标相遇即完成一趟排序,停止循环 while(l<r && arr[r] >= key){//从后往前找,如果对应下标的数比标记大则不做操作,下标继续前移 r--; }//循环完成此时arr[r] //而arr[l]的的值已经被key保存所以下一步则应该找出一个比key大却在key的左边的数放入arr[r]的位置 while(l<r && arr[l] <= key){ l++; } [arr[r],arr[l]] = [arr[l],arr[r]]; //这样一次循环就可以让一个在key左边比key大的数放到key的右边,比key小的放到左边 } QuickSort(arr,start,l-1);//递归调用 -1 是为了避免区间重复 QuickSort(arr,l+1,end); } } 下图为将十万倒序数组变为正序的耗费时间: 下面列出非递归版本的快排: function QuickSort2(arr,start = 0,end = arr.length-1){ let mid = [start,end];//建立一个数组用于存放需要快排的区间的参数,这样循环调用即可 if(start<end){ while(mid.length){//当参数数组中没有参数则停止循环 let [l,r] = [mid.shift(),mid.shift()];//取出数组中最前面的两个数,并对此区间上的数进行快排 let [low,height] = [l,r]; let key = arr[parseInt((l+r)/2)];//选取标兵 while(l<r){ while(l<r && arr[r] >= key){ r--; } arr[l] = arr[r]; while(l<r && arr[l] <= key){ l++; } arr[r] = arr[l]; arr[l] = key; } //当两个参数不相等,即该区间不止一个数时,则将下一个区间的参数存入参数数组 if(low<l) mid.push(low,l); if(l+1<height) mid.push(l+1,height); } } } 对十万逆序数组排序耗时如下: 由于非递归版本数组方法调用较多,故此花费时间略久于递归版本 2.希尔排序 希尔排序和快排一样都是不稳定排序,快速排序的不稳定是因为,标兵的选取并不能直接选取到刚好是区间中中间大小的数,所以当每个区间的第一个数刚好都是该区间最小的数,那么达到快排的最坏情况(以区间的第一个数为标兵为例).而希尔排序其核心是插入排序所以当数组刚好为逆序时其效率最低,此时也就是希尔排序的最坏情况但与快排不同的是最坏情况的希尔排序速率并不会下降明显. 希尔排序算法的和心在于,利用了当待排序数组基本有序的时候插入排序效率极高的原理,即选取不同的步长对其进行插排,当步长为一时则与普通的插排没有区别,而效率的提升在于经过前期数次的插排使数组基本有序 其代码如下: function ShellSort(arr) { let steep = parseInt(arr.length / 2);//计算步长 let length = arr.length; let tarr = [];//用于存放按步长分出的数组的临时数组 while (steep) { //只有步长大于1才分组 否则直接插排 if ( steep > 1) { for (let i = 0; i < steep; i++) { //此循环将数组分组 for (let j = i; j < length; j = j + steep) { tarr.push(arr[j]); } InsertionSort(tarr);//将分好组的数组进行插排 for (let j = i; j < length; j = j + steep) { arr[j] = tarr.shift(); } //排好序的数组映射回原数组 tarr.length = 0;//清空临时数组 } }else InsertionSort(arr); steep = parseInt(steep / 2); } } 普通插排耗时如下: 希尔排序耗时如下: 3.归并排序 与快排和希尔排序不同的是归并排序是稳定排序 其核心思想在于当数组只有一个数时肯定是有序的,所以现将数组拆分为一个一个的数,然后在合并的过程中对齐排序,其弊端在于需要占用一个与原数组等长的临时数组空间来存放变量 递归版代码如下: //归并排序(递归) function Merge(arr,start,mid,end,temp) {//此函数用于合并数组 let [l,r] = [start,mid+1];//l标示左边需合并数组的初始下标,r同理标示右边数组的初始下标 while(l<=mid && r <= end){ if(arr[l]<=arr[r]) temp.push(arr[l++]); else temp.push(arr[r++]); } while(l<=mid){ temp.push(arr[l++]); } while(r<=end){ temp.push(arr[r++]); } while(start<=end){//将排好的临时数组中的数据复制回原数组 arr[start++] = temp.shift(); } } function RecursiveSort(arr,start = 0,end = arr.length-1,temp = []){ if(start < end){ let mid = parseInt((start+end)/2);//将数组分为两半 RecursiveSort(arr,start,mid,temp); RecursiveSort(arr,mid+1,end,temp); Merge(arr,start,mid,end,temp);//递归的回调途中进行数组的合并 } } 递归版耗时: 非递归代码: function RecursiveSort2(arr,start = 0,end = arr.length-1){ let mid = [start,end]; let pra = []; while(mid.length){//获取参数列表 let [l,r] = [mid.shift(),mid.shift()]; pra.push(l,r); let m = parseInt((l+r)/2); if(m>l) mid.push(l,m); if(r>m+1) mid.push(m+1,r); } while(pra.length){ let [r,l] = [pra.pop(),pra.pop()]; let m = parseInt((l+r)/2); Merge(arr,l,m,r,[]); //此函数见上文 } } 非递归耗时如下: 总结: 快排在数据量大时的优势较为明显,希尔排序适用于中量数据,而当空间要求不限时归并也不失为一种选择

优秀的个人博客,低调大师

Python基础系列-copy和deepcopy

版权声明:如需转载,请注明转载地址。 https://blog.csdn.net/oJohnny123/article/details/81980698 #!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/23 下午1:41. """ # 简单来说,就是copy出来的对象cp1,如果demo改了他会跟着改。但是deepcopy 出来的 cp2还是原来的值 import copy demo2 = demo = [1, 2, [3, 4]] #origin 里#边有三个元素:1, 2,[3, 4] cp1 = copy.copy(demo) cp2 = copy.deepcopy(demo) print(id(demo)) print(id(cp1)) print(id(cp2)) print(cp1) print(cp2) print(cp1 == cp2) print(cp1 is cp2 ) print(cp1 is demo ) print(cp2 is demo ) print(demo2 is demo ) print('='*100) #cp1 和 co2 看上去相同,但#已不再是同一个object #把demo内的子list [3, 4] 改掉了#一个元素,观察到 cp1 和 #cp2的变化如下所示: demo2[2][0] = "hi" demo =[1, 2, ['hi', 4]] print(cp1) print(cp2)

优秀的个人博客,低调大师

Python字符串基础操作

找到我就是缘分,为技术一起努力! 格式符 # price_width = 10 item_width = width - price_width header_format = '%-*s%*s' format = '%-*s%*.2f' print '=' * width print header_format % (item_width, 'Item', price_width, 'Price') print '-' * width print format % (item_width,'Apples',price_width,0.4) print format %(item_width,'Pears', price_width,0.5) print format %(item_width,'Cantaloupes',price_width,1.92) find(str,start,end):从start开始end结束寻找与str相匹配的字符,找到返回匹配项index,找不到返回-1 a='With a moo-moo here. and a moo-moo there'.find('moo',7) >>> print(a) 7 >>> a='With a moo-moo here. and a moo-moo there'.find('moo',1,8) >>> print(a) -1 join():在字符序列之间加入分隔符 >>> seq = ['1','2','3','4','5'] >>> sep '+' >>> sep.join(seq) '1+2+3+4+5' lower():全部转为小写 >>> 'ZDF'.lower() 'zdf' title():首字母大写 >>> 'zdf'.title() 'Zdf' replace(oldstr , newstr):替换字符 >>> 'zdf is a clever boy!'.replace('clever','handsome') 'zdf is a handsome boy!' split(/PATTERN):以模式来分割,模式的意思就是REGEX >>> 'zdf+zdf+zdf'.split('+') ['zdf', 'zdf', 'zdf'] strip():去除两侧空格(不包括内部的) >>> ' zdf '.strip() 'zdf' strip('*'):也可指定去除两侧特定的字符 ,如* >>> '*********zdf****************'.strip('*') 'zdf'

优秀的个人博客,低调大师

Java 基础 之 continue和 break

http://www.verejava.com/?id=17159306674727 public class Test2 { public static void main(String[] args) { for (int i = 1; i <= 64; i++) { //如果 i==13 当前循环不执行, 继续执行后面的循环 if (i == 13) { continue; //终止当前循环, 继续后面的循环 } if (i == 20) { break; //终止退出循环, 后面的循环不会再执行 } System.out.print("*" + i); if (i % 8 == 0) { System.out.println(""); } } } } http://www.verejava.com/?id=17159306674727

优秀的个人博客,低调大师

Java 基础 之 do while 循环

http://www.verejava.com/?id=16992623980921 /** do{ }while(判断表达式) : 直到 while 判断表达式为 false 退出循环 */ import java.util.Scanner; public class Test1 { public static void main(String[] args) { // 模拟切水果游戏, 键盘输入 1:西瓜,2:香蕉,3:水蜜桃,-1:雷 //输入数字打印对应的水果, 如果输入-1 终止游戏输入 Scanner in = new Scanner(System.in); int num = 0; //定义了一个变量 do { num = in.nextInt();//变量的生命周期 if (num == 1) { System.out.println("您切到了西瓜"); } else if (num == 2) { System.out.println("您切到了香蕉"); } else if (num == 3) { System.out.println("您切到了水蜜桃"); } else if (num == -1) { System.out.println("您切到了 雷 游戏终止"); } } while (num != -1); //如果输入-1 终止游戏输入 } } http://www.verejava.com/?id=16992623980921

优秀的个人博客,低调大师

Java 基础 之 三目运算

http://www.verejava.com/?id=16992606159717 public class Operation6 { public static void main(String[] args) { //三目运算 int score=90; String result=score>=60?"及格":"不及格"; System.out.println(result); } } /* 回顾总结 运算分为: 1.算数运算 包括 +,-,*,/,%,++,-- 2.赋值运算 =,+=,-=,%=,/=,*= 3.逻辑运算 &&,||,! 4.关系运算 >,>=,<,<=,!=,== 5.位运算 &,|,~,^,<<,>>,>> 6.字符串连接 + 7.三目运算 ? : */ http://www.verejava.com/?id=16992606159717

优秀的个人博客,低调大师

Java 基础 之 逻辑运算

http://www.verejava.com/?id=16992598459515 public class Operation4 { public static void main(String[] args) { //逻辑运算 /* 包括: 与&&(and) ,或||(or) 非! 1. && 当操作两边都为true时返回结果为true,否则为false 2. || 当操作两边都为false时返回结果为false,否则为true; 3. ! 取反,操作为true返回结果false,否则为true */ System.out.println(true&&false); System.out.println(false&&true); System.out.println(false&&false); System.out.println(true&&true); System.out.println("---------------"); System.out.println(true||false); System.out.println(false||true); System.out.println(true||true); System.out.println(false||false); System.out.println("---------------"); System.out.println(!true); System.out.println(!false); // ! 是单目运算 //System.out.println(true!false); System.out.println("----------------"); boolean b=true; System.out.println(b); System.out.println(1>2&&(b=3>4)); System.out.println(b); System.out.println(2>1&&(b=3>4)); System.out.println(b); /* 注意: &&的短路特性: 因为程序是从上往下,从左往右执行的,当判断左边为false时 &&的返回结果就已经注定是false ,所以后面的判断计算机就不执行了. */ System.out.println("--------------"); boolean b1=true; System.out.println(b1); System.out.println(2>1||3>4); System.out.println(2>1||(b1=3>4)); System.out.println(b1); System.out.println(1>2||(b1=3>4)); System.out.println(b1); /* 注意: || 的短路特性:因为程序是从左往右执行,当判断左边为true时 返回结果就已经注定是 true, 所以后面的判断计算机不执行 */ } } http://www.verejava.com/?id=16992598459515

优秀的个人博客,低调大师

Java 基础 之 常量类型转换

http://www.verejava.com/?id=16992572054911 /* 类型转换分为以下几种情况 1. 整型类型转换 2. 浮点类型转换 3. 布尔类型转换 4. 字符类型转换 */ public class TypeConvert { public static void main(String[] args) { byte a1=1; int b1=2; //小整数类型转换成大整数类型, 直接转换 b1=a1; System.out.println(b1); byte a2=1; int b2=2; int b3=128; //大整数类型转换成小整数类型, 需要强制类型转换, 并且可能损失精度. 将会把高位切除. a2=(byte)b2; a2=(byte)b3; System.out.println(a2); byte c1=1; float c2=10.3f; //整数转浮点型,直接转换 c2=c1; System.out.println(c2); byte d1=1; float d2=10.3f; float d3=128.2f; //浮点类型转整型 直接去掉小数部分, 需要强制类型转换, 并且可能丢失精度 d1=(byte)d2; d1=(byte)d3; System.out.println(d1); //布尔类型不能转换成其他类型, 其他类型也不能转换成布尔类型 boolean e1=true; //e1=(boolean)1; char f1='a'; int f2=1; char f3='b'; int f4='b'+1; char f5='b'+1; //整型可以转换成 字符类型,需要强制类型转换,整型也可以转换成字符型,转换的规则为 ACSII 码表 f1=(char)f2; f2=f3; System.out.println(f1); System.out.println(f2); System.out.println(f4); System.out.println(f5); //字符串连接 + 转换 String str="hello"; String str2=str+1; String str3=str+2.5; String str4=str+true; String str5=str+'F'; //字符串跟其他基本类型相加 其他类型自动转换成字符串连接 System.out.println(str2); System.out.println(str3); System.out.println(str4); System.out.println(str5); } } /* 总结: 1. 类型转换小数值到大数值转换 byte<short<int<float<long<double 2. 整型 默认是 int 型, 浮点型 默认是 double 型 */ http://www.verejava.com/?id=16992572054911

优秀的个人博客,低调大师

Java 基础 之 数据类型

http://www.verejava.com/?id=1699255932129 /** java 分为4类8种基本数据类型 4类: 1. 整型(byte,short,int,long) 2. 浮点型(float,double) 3. 字符型(char) 4. 布尔型(boolean) */ public class BaseDataType { public static void main(String[] args) { //整型 byte, short, int ,long byte a1=1; //byte 占 1个字节=8位 -2^7~2^7-1(-128~127) short a2=10; //short 占 2个字节=16位 -2^15~2^15-1 int a3=100; //int 占 4个字节=32位 -2^31~2^31-1 long a4=1000; //long 占 8个字节=64位 -2^63~2^63-1 System.out.println(a1); System.out.println(a2); System.out.println(a3); System.out.println(a4); /*注意: 1. 整型赋值的时候如果超出了存储范围 编译报错 丢失精度 */ //浮点型 float , double double b1=10.1; //double 占8个字节=64位 float b2=12.2f; //float 占4个字节=32位 float b3=(float)13.3; System.out.println(b1); System.out.println(b2); System.out.println(b3); /* 注意: 1. 浮点型数据默认是 double 型, 如果要赋值给 float型必须经过强制类型转换, 对于浮点数强制类型转换两种方式 一种是: 直接在后面加f 一种是:在前面加(float) */ //字符型 char 是由单引号括起来的单个字符 char c1='a'; // char 占2个字节=16位 char c2='1'; char c3='好'; System.out.println(c1); System.out.println(c2); System.out.println(c3); /* 注意: 1. 在计算的存储中数字和字母占1个字节,而汉字占2个字节, java为了解决这个问题所以定义了char占2个字节来统一存储字母和汉字 2. char 跟 String的区别是 字符串是双引号括起来的多个字符 */ //布尔型 boolean boolean d1=true; //布尔型占1个字节=8位 boolean d2=false; System.out.println(d1); System.out.println(d2); /* 注意: 1. 布尔类型的true 不能等于1 , false 也不等于0,这个跟c语言要区分 */ } } /* 回顾总结: 1.按所属的数据类型划分 基本数据类型变量 : 8种基本数据类型(byte,short,int,long,float,double,boolean,char) 引用数据类型变量 : 除了8种基本数据类型的变量都是引用变量 2. String 不属于基本数据类型 属于引用数据类型 */ http://www.verejava.com/?id=1699255932129

优秀的个人博客,低调大师

Java 基础 之 标识符

http://www.verejava.com/?id=1699254299287 /* 标识符的命名规则: 1. 是以字母,数字,下滑线_和美元符号$ 组成 2. 不能以数字开头 3. 区分大小写 4. 不能是java的保留关键字 5. 最好是见名思意 */ public class Identifier { public static void main(String[] args) { //不能以数字开头 //int 1number=1; //标识符区分大小写 int b=2; int B=3; System.out.println(b); System.out.println(B); //不能是java 的保留关键字 //int class=4; //年龄最好见名思意 int age=30; //两个字符串相连接用加号 + System.out.println("年龄是:"+age); } } http://www.verejava.com/?id=1699254299287

优秀的个人博客,低调大师

Linux最常用的基础命令

1.目录 1.1切换目录 cd usr # 切换到该目录下usr目录 cd ../ # 切换到上一层目录 cd / #切换到系统根目录 cd ~ #切换到用户主目录 cd - #切换到上一个所在目录 1.2 目录的增删改查 (1)增加目录 命令: mkdir 目录名称 (2)删除目录 命令: rm -rf 目录名 -r 递归(删除) -f 强制不询问(删除) 注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用rm -rf 目录/文件/压缩包 (3)修改目录 1)修改目录的名称 命令: mv 目录名称 新目录名称 注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作 2)移动目录的位置—剪切 命令: mv 目录名称 目录的新位置 注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作 3)拷贝目录–复制 命令: cp -r 目录名称 目录拷贝的目标位置 -r代表递归(拷贝) 注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归 (4)查看目录 命令: ls [-al] 父目录 -a,可以看到该目录下的所有文件和目录,包括隐藏的 -l,可以看到该目录下的所有目录和文件的详细信息 注意:ls -l 可以缩写成ll (5)寻找目录 命令: find 目录 参数 示例:查找/root下的与test相关的目录(文件) find /root -name ‘test*’ 1.3显示当前所在位置 pwd 2.文件 2.1文件的创建 命令: touch 文件名称 - 此时创建了一个新的空文件 2.2删除文件 熟记rm -rf 文件即可 2.3修改文件的内容 命令: vi 文件名 此时不能编辑,因为此时处于命令模式, 输入 i 进入编辑模式 编辑完成后,按下Esc,退回命令模式 需输入冒号:进入底行模式,在底行模式下 输入wq代表写入内容并退出,即保存; 输入q!代表强制退出不保存。 文件只需修改某个地方时,可以采用这种方式, 文件需大面积修改时,见Notepad++ 连接 FTP 实现Windows环境下同步编辑 Linux单个文件 2.4文件的查看(查) 命令: cat/more/less/tail 文件 使用cat查看文件,只能显示最后一屏内容 使用more查看文件,可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看 使用less查看文件,可以使用键盘上的PgUp和PgDn向上和向下翻页,q结束查看 使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束 注意:命令 tail -f 文件 可以对某个文件进行动态监控, 例如 可以使用 tail -f catalina.out 监控tomcat的日志文件 最常用的是 tail -f catalina.out 监控tomcat的日志文件 cat 某一文件名 2.5 打包并压缩文件 Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的(只是为了方便区分是否为压缩文件) 命令: tar -zcvf 打包压缩后的文件名 要打包压缩的文件 z:调用gzip压缩命令进行压缩 c:打包文件 v:显示运行过程 f:指定文件名 2.6 解压压缩包 命令: tar -zxvf 压缩文件 tar -zxvf 压缩文件 -C 解压文件的位置 z:调用gzip压缩命令进行压缩 x:代表解压 v:显示运行过程 f:指定文件名 3.其他 3.1搜索命令(文件内部搜索) 命令: grep 要搜索的字符串 要搜索的文件 3.2 查看进程 命令: ps -ef 3.3 管道命令 命令: | 将前一个命令的输出作为本次目录的输入 常常与搜索命令结合使用,比如查看某个进程的情况: ps -ef | grep 某进程名 ps -ef | grep mysql ps -ef | grep tomcat 3.4 杀死进程 命令: kill -9 进程的pid 3.5网络通信命令 ifconfig # 查看当前系统的网卡信息 ping 某主机IP地址 # 查看与某台机器的连接情况 netstat -an #查看当前系统的端口使用 firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running) systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 3.6 关机重启 poweroff #关机 reboot #重启

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册