tonglin0325的个人主页

Android学习笔记——download

1.该工程的功能是实现从网上的链接下载一个lrc文件和一个mp3文件

以下代码是MainActivity.java中的代码

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
32
33
34
35
36
37
38
39
40
41
42
43
package com.example.download;


import com.example.utils.HttpDownloader;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
/** Called when the activity is first created. */
private Button downloadTxtButton;
private Button downloadMp3Button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
downloadTxtButton = (Button)findViewById(R.id.downloadTxt);
downloadTxtButton.setOnClickListener(new DownloadTxtListener());
downloadMp3Button = (Button)findViewById(R.id.downloadMp3);
downloadMp3Button.setOnClickListener(new DownloadMp3Listener());
}

class DownloadTxtListener implements OnClickListener{
public void onClick(View v) {
HttpDownloader httpDownloader = new HttpDownloader();
int lrc = httpDownloader.downFile("http://play.baidu.com/data2/lrc/121017633/121017633.lrc", "voa/", "1201250291414036861128.lrc");
System.out.println(lrc);
}
}

class DownloadMp3Listener implements OnClickListener{
public void onClick(View v) {
// TODO Auto-generated method stub
HttpDownloader httpDownloader = new HttpDownloader();
int result = httpDownloader.downFile("http://cdn.y.baidu.com/yinyueren/532bfdb43a336a584533ff61a7289503.mp3", "voa/", "江南.mp3");
System.out.println(result);
}
}

}

全文 >>

CDH5.16安装flink1.10.0

1.采用parcels包的方式来安装flink

编译parcels请参考:制作Flink的Parcel包和csd文件

CDH5.16.1 集成 Flink-1.10.0

cdh5.15.1集成flink说明

2.将parcels包拷贝到对应目录

1
2
3
4
lintong@master:/opt/cloudera/parcel-repo$ ls | grep FLINK
FLINK-1.10.0-BIN-SCALA_2.11-xenial.parcel
FLINK-1.10.0-BIN-SCALA_2.11-xenial.parcel.sha

csd包

1
2
3
lintong@master:/opt/cloudera/csd$ ls
FLINK_ON_YARN-1.10.0.jar

3.安装

配置主机

配置flink集群参数

部署成功

flink集群部署后会在YARN上启动一个以flink用户运行的flink session,注意此时在此flink session中是不能认证成其他用户的,只能是flink用户,可以参考:Flink on Yarn with Kerberos

比如使用flink-scala-shell就会运行在此flink session中,而在里面认证是不会生效

部署成功

参考:Cloudera Manager中安装部署Flink服务

全文 >>

Android常用命令

1.查看Android手机的CPU架构#

1
2
3
$ getprop ro.product.cpu.abi
arm64-v8a

armeabi:第5代第6代的ARM处理器,早期手机用的比较多。

armeabi-v7a:第七代及以上的ARM处理器。

arm64-v8a:第8代64位ARM处理器。比如 ``2016年 之后中高端的手机,比如 骁龙8系列麒麟9系列联发科1000+ 等。

x86:32位的桌面PC电脑CPU。平板模拟器用得比较多。

x86_64:64位桌面PC电脑CPU。64 位的平板。

2.termux更换源#

1
2
termux-change-repo

参考:https://mirrors.tuna.tsinghua.edu.cn/help/termux/

YARN学习笔记——调度器

YARN有3种调度器:FIFO Scheduler,Capacity Scheduler(容器调度器) 和 FairS cheduler(公平调度器)。cloudera官方推荐使用Capacity Scheduler,而且在cloudera的CDP中,只保留了Capacity Scheduler这一种调度器。

1.FIFO Scheduler:FIFO Scheduler把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。在FIFO 调度器中,小任务会被大任务阻塞。

2.Capacity Scheduler(容量调度器)而对于Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。

  1. 多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略。
  2. 容量保证:管理员可为每个队列设置资源最低保证和资源使用上限。
  3. 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用 程序提交,则其他队列借调的资源会归还给该队列。
  4. 多租户:支持多用户共享集群(如图中queueC,配置租户ss、cls)和多应用程序同时运行;为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。

参考:hadoop3 Yarn容量(Capacity Scheduler)调度器和公平(Fair Scheduler)调度器配置

全文 >>

mac挂载linux的磁盘

到了2022年,已经不能使用brew安装sshfs来挂载linux的磁盘了,但是可以通过安装包的方式来安装,会报错

1
2
error: sshfs has been disabled because it requires closed-source macFUSE!

首先需要安装sshfs,版本是SSHFS 2.5.0

1
2
https://osxfuse.github.io/2014/02/03/SSHFS-2.5.0.html

其次需要安装macFUSE

1
2
https://osxfuse.github.io/2022/08/19/macFUSE-4.4.1.html

然后就能挂载linux的硬盘了

首先创建目录

1
2
mkdir /Users/xxx/data01

挂载linux的/data01目录到刚刚创建的目录

1
2
sshfs -C -o reconnect master:/data01 /Users/xxx/data01

然后就能在Finder中查看挂载的linux目录

也可以固定到侧边栏

要卸载可以使用命令或者直接右键

1
2
umount /Users/xxx/data01

全文 >>

Linux学习笔记

  1. 1.重启或者关机
  2. 2.查看本机的IP地址
  3. 3.查看内存磁盘CPU
    1. 查看内存
    2. 查看磁盘容量
    3. 查看磁盘iotop
    4. 清理buffer/caches
    5. 查看机器物理CPU个数
    6. 查看单个物理CPU中core的个数(即核数)
    7. 查看逻辑CPU的个数
    8. 排查cpu 100%
  4. 4.查看服务是否是开机自动启动
    1. 配置开机自启动
  5. 5.Linux文件系统
    1. 常用目录结构
    2. Linux账号与用户组
    3. 修改linux文件夹权限
  6. 6.配置机器的DNS服务器
  7. 7.防火墙
    1. 1.查询防火墙状态
    2. 2.关闭防火墙
    3. 3.开启防火墙
    4. 4.配置防火墙
  8. 8.init命令
  9. 9.history命令
  10. 10.tcp/ip命令
    1. ping命令
    2. traceroute命令
    3. netstat命令** **
    4. lsof命令
    5. route命令
    6. mtr命令
    7. dig命令
    8. wget命令
    9. 检测tcp和udp端口
  11. 11.任务调度命令crontab
  12. 12.Linux进程管理
    1. 子程序与父程序
    2. ps -aux命令
    3. top命令
    4. pstree命令
    5. centos清理僵尸进程
  13. 13.作业管理
    1. **&**命令
    2. Ctrl-z
    3. jobs命令
    4. fg命令
    5. bg命令
    6. 管理后台作业命令
  14. 14.用w查看有哪些用户登陆
    1. 切换控制台
  15. 15.tar命令
  16. 16.linux下进程和线程
  17. 17.重定向命令
  18. 18.more命令
  19. 19.搜索命令
  20. 20.修改环境变量命令
  21. 21.alias用法
  22. 22.在文件夹下面获得root权限
  23. 23.挂载磁盘或者ISO文件
  24. 24.创建软链接
  25. 25.端口转发
  26. 26.linux命令并发执行
  27. 27.linux防止恶意ssh登录脚本
  28. 28.定制登录motd图案
  29. 29.如何挂载硬盘
  30. 30.查看linux内核版本
  31. 31.修改主机名
  32. 32.测网速
  33. 33.ubuntu下交换键位
  34. 34.linux下网络配置
  35. 35.无法获得锁 /var/lib/dpkg/lock
  36. 36.ubuntu下gedit闪退,遇到问题:ERROR:../../gi/pygi-argument.c:1583:_pygi_argument_to_object: code should not be reached 已放弃 (核心已转储)
  37. 37.ubuntu更换源
  38. 38.ubuntu右上角时间不显示
  39. 39.mac下制作ubuntu启动盘
  40. 40.Ubuntu在命令行下将默认语言改为英语
  41. 41.linux用户设置免密root
  42. 42.ubuntu14.04安装了im-switch后系统设置中不见了语言支持
  43. 43.删除ibus之后导致系统设置进不了
  44. 44.ubuntu16.04固定ip
  45. 45./etc/profile、/etc/bashrc、/.bash_profile、/.bashrc的区别
  46. 46.Ubuntu bash的几个初始化文件
  47. #

1.重启或者关机#

1
2
shutdown -h now  #立刻进行关机
shutdown -r now或者reboor  #现在重新启动计算机

2.查看本机的IP地址#

1
2
ifconfig -a

ubuntu修改IP地址和网关

参考:ubuntu修改IP地址和网关的方法

3.查看内存磁盘CPU#

查看内存#

1
2
free -m

查看内存及cpu使用情况的命令

1
2
top

也可以安装htop工具,这样更直观,安装命令如下

1
2
sudo apt-get install htop

安装完后,直接输入命令:htop,就可以看到内存或cpu的使用情况了。

查看磁盘容量#

查看磁盘使用情况

1
2
df -hT

查看linux系统分区具体情况    

1
fdisk -l

查看磁盘iotop#

1
2
sudo iotop -oPa<!--more-->
&nbsp;

清理buffer/caches#

1
2
echo 3 > /proc/sys/vm/drop_caches

查看机器物理CPU个数#

1
2
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

查看单个物理CPU中core的个数(即核数)#

1
2
cat /proc/cpuinfo| grep "cpu cores"| uniq

查看逻辑CPU的个数#

1
2
cat /proc/cpuinfo| grep "processor"| wc -l

排查cpu 100%#

参考:线上服务 CPU 100%?一键定位 so easy!

4.查看服务是否是开机自动启动#

1
2
3
systemctl is-enabled nginx
enabled

 其他相关命令

1
2
3
4
5
6
7
8
systemctl enable *.service #开机运行服务
systemctl disable *.service #取消开机运行
systemctl start *.service #启动服务
systemctl stop *.service #停止服务
systemctl restart *.service #重启服务
systemctl reload *.service #重新加载服务配置文件
systemctl status *.service #查询服务运行状态

配置开机自启动#

1
2
3
4
# 添加开机自启动服务
chkconfig --add haproxy
chkconfig haproxy on

参考

1
2
https://docs.cloudera.com/documentation/enterprise/5-15-x/topics/admin_ha_hiveserver2.html

5.Linux文件系统#

常用目录结构#

1
2
3
4
5
6
7
8
9
10
11
/bin  存放常用命令
/boot  存放启动程序
/dev 存放设备文件
/etc 存放启动,关闭,配置程序与文件
/home 用户工作根目录
/lib 存放共享链接库
/root 超级用户的工作目录
/sbin 系统管理员的常用管理程序
/tmp 存放临时文件
/lost+found 系统出现异常时,用于保存部分资料

Linux账号与用户组#

用户识别:UID和GID

/etc/passwd记录这用户的账号

1
2
3
4
5
6
cat /etc/passwd    #查看用户

root:x:0:0:root:/root:/bin/bash #UID是0表示这个账号是&rdquo;系统管理员&ldquo;,1~499保留给系统使用的ID,500~65535给一般用户使用
...
common:x:1000:1000:common,,,:/home/common:/bin/bash

/etc/shadow保存的是用户的密码

关于用户组:有效与初始用户组、groups、newgrp

1
2
cat /etc/group    #输出用户组名称和支持的账号名称(有多个)

 每个用户可以拥有多个支持的用户组,在/etc/passwd里的GID就是”初始用户组(initial group)“,当用户登录系统,立刻就拥有这个用户组的相关权限

1
2
3
4
5
groups    #输出当前登录的用户所在的群组,可以有多个,且第一个是有效用户组
adm cdrom sudo dip plugdev lpadmin sambashare common wireshark lantern

newgrp adm #切换当前用户的有效用户组为adm

新增与删除用户

-u:接UID  -g:接初始用户组  -G:接这个账号还可以支持的用户组  -Mm:强制不要(要)建立home  -c:说明内容  

-d:制定某个目录成为home目录  -r:建立一个系统账号,这个账号的UID会有限制  -s:后面接一个shell,默认是/bin/bash

1
2
useradd [-u UID] [-g initial_group] [-G other_group] [-Mm] [-c 说明栏] [-d home] [-s shell] username

passwd命令

设置密码命令

1
2
3
sudo passwd common    #使用root帮其他用户修改密码
passwd #某个用户自己修改密码

usermod命令

进行账号相关数据的修改

userdel命令 

删除用户

1
2
userdel -r common    #连同用户的home目录一起删除

finger命令/id命令/w命令/who命令

查看用户的信息

新增与删除用户组

groupadd命令

1
2
groupadd [-g GID] [-r]    #没有参数建立用户组,-g后面接特定的GID,-r建立系统用户组

groupmod命令

1
2
groupmod [-g GID] [-n group_name] group    #把group用户组的名字改成group_name,id改成GID

groupdel命令

1
2
groupdel [groupname]    #删除用户组

gpasswd命令

1
2
gpasswd [-ad] user groupname    #在group中加入/删除user

newgrp命令

1
2
newgrp common    #把当前用户的有效用户组修改成common

修改linux文件夹权限#

如果要将drwxrwxrwx的目录改成drwxrwxr-x

1
2
3
chmod 755 -R ./collections/
chmod g+w -R ./collections/

6.配置机器的DNS服务器#

配置文件地址为 /etc/resolv.conf

1
2
vim /etc/resolv.conf

7.防火墙#

1.查询防火墙状态#

1
2
3
sudo service ufw status # 防火墙服务进程
sudo ufw status

输出

1
2
3
4
5
6
7
8
9
状态: 激活

至 动作 来自
- -- --
389 ALLOW Anywhere
22/tcp ALLOW Anywhere
389 (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)

2.关闭防火墙#

1
2
sudo service ufw stop

3.开启防火墙#

运行以下两条命令后,开启了防火墙,并在系统启动时自动开启

1
2
3
sudo ufw enable  # 启动防火墙服务进程后,启用防火墙
sudo ufw default deny # 关闭所有外部对本机的访问,但本机访问外部正常

4.配置防火墙#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#开启和禁用
sudo ufw allow|deny [service]

#打开或关闭某个端口,例如:
sudo ufw allow smtp   #允许所有的外部IP访问本机的25/tcp (smtp)端口
sudo ufw allow 22/tcp   #允许所有的外部IP访问本机的22/tcp (ssh)端口
sudo ufw allow 53   #允许外部访问53端口(tcp/udp)
sudo ufw allow 11200:11299/tcp
sudo ufw allow from 192.168.1.100   #允许此IP访问所有的本机端口
sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53
sudo ufw deny smtp   #禁止外部访问smtp服务
sudo ufw delete allow smtp   #删除上面建立的某条规则

#允许某特定 IP
sudo ufw allow from xxx.xxx.xx.xxx

# 允许192.168.1.1 到192.168.1.254
sudo ufw allow from 192.168.1.0/24

#删除 smtp 端口的许可
sudo ufw delete allow smtp

ufw日志在/var/log/ufw.log,可以看到端口被扫描的信息

1
2
Jun 29 10:10:10 xxxxxxx kernel: [3276816.402874] [UFW BLOCK] IN=enp3s0 OUT= MAC=xxxxxxxxxxx SRC=xx.xx.xx.xx DST=xx.xx.xx.xx LEN=228 TOS=0x00 PREC=0x00 TTL=128 ID=1579 PROTO=UDP SPT=61418 DPT=18323 LEN=208

参数含义

1
2
3
4
5
6
7
8
9
TOS, for Type of service,
DST is destination ip,
SRC is source ip
TTL is time to live, a small counter decremented each time a packet is passed through another router (so if there is a loop, the package destroy itself once to 0)
DF is "don't fragment" bit, asking to packet to not be fragmented when sent
PROTO is the protocol (mostly TCP and UDP)
SPT is the source port
DPT is the destination port

8.init命令#

9.history命令#

显示最近使用的命令

  history  history 5

  !编号  执行编号480的命令

10.tcp/ip命令#

数据包:帧头 ip头 tcp头 app头 数据 帧尾

ping命令#

1
2
ping www.baidu.com  #退出shift+ctrl+c

ping命令一般用于检测网络通与不通,也叫时延,其值越大,速度越慢PING(PacketInternetGrope),因特网包探索器,用于测试网络连接量的程序。

ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。它是用来检查网络是否通畅或者网络连接速度的命令。

原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。 

traceroute命令#

追踪路由命令,查看与连接的ip地址之间经历了多少个路由

1
2
traceroute www.baidu.com/ip

netstat命令**
**
#

显示网络统计信息

1
2
netstat -an | more

显示进程号          

1
2
netstat -anp | more  #查看的时候ip地址的foreign address,进程号是最前面的那个

查看端口的TCP UDP的连接

1
sudo netstat -antup

查看已经连接的服务端口(ESTABLISHED)**
**

1
2
netstat -a

查看所有的服务端口(LISTEN,ESTABLISHED)**
**

1
2
netstat -ap

查看8080端口,则可以结合grep命令:

1
2
netstat -ap | grep 8080

从大到小排序查看进程的tcp连接数

1
2
sudo netstat -antp | awk '{print $(7)}' | sort | uniq -c | sort -rn

lsof命令#

查看8888端口,则在终端中输入:**
**

1
2
lsof -i :8888

查看用户占用的连接

1
2
sudo lsof -u xxxx | wc -l

route命令#

查看本机路由表

mtr命令#

查看网络链路连通性,需要sudo

1
sudo mtr www.baidu.com

dig命令#

查看DNS解析是否正常,查看ANSWER SECTION,如果没有则不正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
dig baidu.com

; <<>> DiG 9.10.6 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52394
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;baidu.com. IN A

;; ANSWER SECTION:
baidu.com. 585 IN A 220.181.38.148
baidu.com. 585 IN A 220.181.38.251

;; Query time: 46 msec
;; SERVER: 10.0.31.20#53(10.0.31.20)
;; WHEN: Wed Jun 15 14:47:43 CST 2022
;; MSG SIZE rcvd: 70

wget命令#

使用wget整站下载

检测tcp和udp端口#

1
2
3
nc -uz 127.0.0.1 8080 #udp
nc -vz 127.0.0.1 8080 # tcp

11.任务调度命令crontab#

4. 

如果crontab -e进入的是nano,使用下面命令进行切换

1
2
export EDITOR=vim

12.Linux进程管理#

子程序与父程序#

PID是进程的ID,PPID是其父进程的ID

登录bash之后,就是获取了一个名为bash的PID,在这个环境上所执行的其他命令,就是其子程序

1
2
3
4
common@common-Aspire-4750:~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 5190 5182 0 80 0 - 2153 wait pts/1 00:00:00 bash
0 R 1000 5203 5190 0 80 0 - 1606 - pts/1 00:00:00 ps

ps -aux命令#

参数:-A:所有的进程均显示出来,与-e具有同样的作用

**   -a:**与终端无关的所有进程

**   -u:**有效用户的相关进程

**   x:**通常与a参数一起使用,可列出较完整的信息

输出格式:-l:较长、较详细地显示该PID的信息

**     j:作业的格式,带有PID、PPID等信息**

**     -f:更为完整的输出,进程树格式显示**

1
2
3
4
5
6
7
ps -l    #将当前属于自己这次登录的PID与相关信息显示出来,以长格式显示
ps aux #列出当前所有正在内存中的进程
ps -lA #显示出所有的进程,以长格式显示
ps -axjf #以进程树的方式显示进程
ps -aux | grep 'lantern'  #找出和lantern这个服务有关的PID号码,下面是ps命令本身
common 6929 0.0 0.0 6136 2048 pts/1 S+ 13:42 0:00 grep --color=auto lantern

如果某个进程的CMD后面还有,就表示该进程是僵尸进程

造成僵尸进程的原因是,该进程应该已执行完毕,或者是因故应该终止了,但是该进程的父进程却无法完整地结束该进程,而造成那个进程一直存在于内存中

top命令#

top命令可以持续检测整个系统的进程工作状态

1
2
top [-d] [-bnp]

参数:-d,间隔多少秒输出

   -b,将批处理的结果输出到文件

   -n,与-b搭配,需要进行几次top的输出结果

   -p,指定某些个PID来进行观察

1
2
3
4
top -d 2    #每隔两秒输出
top -b -d 2 > a.txt #以批处理的方式输出到文件,每隔两秒,必须加上-b不然会乱码
top -d 2 -p6559 #6559是已经存在的PID,每隔两秒查询一次

top主要分为两个画面,上面的画面为整个系统的资源使用状态,有6行:

第一行:显示系统时间,上线人数,整体负载(分别表示1、5、10分钟的平均负载,一般不会超过1)

第二行:显示当前观察的进程数量,注意最后的僵尸进程数量

第三行:显示CPU的总负载,id的数值接近于100,表示系统资源使用的很少

第四、五行:表示当前物理内存与虚拟内存(Men和Swap)的使用情况

第六行:输入命令显示状态的地方

pstree命令#

pstree查看进程的关联性

参数:-A:各进程树之间以ASCII字符来连接

**   -p:同时列出每个进程PID**

**   -u:同时列出每个进程的所属账号名称**

1
2
pstree -Aup    #列出当前系统上所有进程树的关联性,并显示PID和用户

centos清理僵尸进程#

1
2
3
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
kill -9 XXX

13.作业管理#

**&**命令#

**& **可以直接将命令放到后台执行

输入命令后,在该命令的最后加上一个&,表示将该命令放到后台,此时会返回一个“作业号”[1],还有一个PID。

1
2
3
4
5
6
7
8
9
10
11
common@common-Aspire-4750:~/下载$ tar -cvzf temp.tar.gz temp/ &amp;    
[1] 5225
common@common-Aspire-4750:~/下载$ temp/
temp/b.txt
temp/a_copy.txt
temp/a.txt
temp/a.tar.gz
temp/b (复件).txt
回车
[1]+ 已完成 tar -cvzf temp.tar.gz temp/

 在后台中执行的命令,如果有stdout和stderr的时候,它的数据依然是输出到屏幕上的,所以要使用数据流重导向,将输出传至某个文件中

1
2
tar -cvzf temp.tar.gz temp/ >> a.txt &amp;

Ctrl-z#

**Ctrl-z **可以将“当前”作业放到后台“暂停

1
2
3
4
5
6
7
8
9
common@common-Aspire-4750:~/下载$ vi a.txt

请按 ENTER 或其它命令继续[1] 已完成 tar -cvzf temp.tar.gz temp/ >> a.txt

按ctrl+z  #暂停

[2]+ 已停止 vi a.txt
common@common-Aspire-4750:~/下载$

jobs命令#

**jobs **观察当前后台作业状态

  -l:除了列出作业号之外,同时列出PID

  -r:仅列出正在后台运行(run)的作业

  -s:仅列出正在后台暂停(stop)的作业

1
2
3
common@common-Aspire-4750:~/下载$ jobs -l
[2]+ 5310 停止 vi a.txt  #+-符号,+表示默认的作业,在仅输入fg的时候,+的作业会被拿到前台处理

fg命令#

fg 将后台作业拿到前台处理

1
2
3
common@common-Aspire-4750:~/下载$ fg %2    # %后面跟的是作业号,默认取出+的作业
vi a.txt

bg命令#

** bg** 让作业在后台运行

1
2
3
common@common-Aspire-4750:~/下载$ bg %2    
[2]+ vi a.txt &amp;  #多了一个&amp;符号

管理后台作业命令#

kill命令

参数

1
2
3
4
5
6
7
8
HUP     1    终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)

参考:Linux命令kill和signal

  -l:列出当前kill能够使用的信号(signal),signal表示指示,使用man 7 signal可以知道

  -1:重新读取一次参数的设置文件,(类似reload)

  -2:表示与由键盘输入ctrl-c同样的动作

  -9:立刻强制删除一个作业

1
2
kill -9 进程号 #强力杀死

   -15:以正常的程序方式终止一项作业

killall命令

强制终止所有以httpd启动的进程

1
2
killall -9 httpd

xkill命令

杀死一个窗口程序,在QQ后台无法呼出的时候使用   

14.用w查看有哪些用户登陆#

1
2
3
4
5
6
7
8
USER     TTY      FROM        
hmy tty7 :0
hmy pts/0 :0.0
hmy pts/1 :0.0

tty7是你的图形界面。
pts/0, pts/1表示你开了两个terminal

切换控制台#

ctrl+alt+F1-F7可以切换到7个不同的控制台,F1-F6是字符界面,F7是图形化的界面。

15.tar命令#

tar命令

-c:创建压缩文件

-x:解开压缩文件

-t:查看tarfile里的文件,(c/x/t只能有一个,不能同时存在)

1
2
3
4
5
tar -cvf a.tar home/common/下载/temp/    #把文件夹打包,名字是a.tar,不压缩
tar -cvzf a.tar.gz home/common/下载/temp/ #用gzip压缩,名字是a.tar.gz
tar -cvjf a.tar.bz2 temp/         #用bzip2压缩,文件名是a.tar.bz2
tar -zxvf XXXXXXX #解压缩gzip文件

-j:是否需要用bzip2压缩

-v:在压缩的过程中显示文件

-f:使用文件名,在f之后要立即接文件名,不要再加参数

-p:使用源文件的原来属性

-P:可以使用绝对路径来压缩

-N:比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中

–exclude FILE:在压缩的过程中,不要将FILE打包

1
2
3
4
2.3G Sep 16 15:12 test1.log
tar -cvzf test1.tar.gz ./test1.log
23M Sep 16 16:50 test1.tar.gz

16.linux下进程和线程#

进程:就是正在执行的程序

线程:(1)轻量级的进程

   (2)进程有独立的地址空间,线程没有

   (3)线程不能独立存储,它是由线程创建的,(fork) thread

     (4)线程耗费CPU和内存小于进程

 

17. 进入mysql的bin目录下,使用./mysqldump

17.重定向命令#

1
2
3
4
5
6
7
8
9
10
11
12
13
ls -l > a.txt  #列表中的内容写入文件a.txt中(覆盖写)
ls -al >> a.txt  #列表中的内容追加到文件aa.txt的末尾

cat > a.txt #从键盘输入,重写a.txt
cat >> a.txt #从键盘输入,在a.txt的内容后面追加

cat > a.txt < b.txt #将b.txt的内容写入到a.txt中
cat >> a.txt < b.txt #将b.txt的内容追加到a.txt后面

cat >> a.txt << end #当输入end的时候,该次输入就结束了,否则需要使用ctrl+D
> start
> end

18.more命令#

more命令    显示文件内容,带分页  空格往下一页翻,pageup往上一页翻

less命令     显示文件内容带分页

grep命令     在文本中查询内容

管道      比如  ls -l /etc/ |  more    把ls命令返回的目录结果给more命令,使其分页显示

19.搜索命令#

which命令,寻找“执行文件”

  参数:-a,将所有可找到的命令均列出,而不仅仅列出第一个找到的命令名称

1
2
3
common@common-Aspire-4750:~$ which passwd
/usr/bin/passwd

whereis命令,寻找特定文件

  参数:-b:只找到二进制文件

     -m:只找在帮助文件manual路径下的文件

     -s:只找源文件

     -u:没有帮助文件的文件

1
2
3
common@common-Aspire-4750:~$ whereis passwd    #任何和passwd有关的文件名都会被列出来
passwd: /usr/bin/passwd /etc/passwd /usr/bin/X11/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz /usr/share/man/man1/passwd.1ssl.gz

locate命令,直接在后面输入“文件的部分名称”,就能够得到结果

  locate查找的速度很快,是根据已经有的数据库/var/lib/slocate/里面的数据所搜索的

1
2
3
4
common@common-Aspire-4750:~$ locate passwd | more
/etc/passwd
/etc/passwd-

find命令,find [PATH] [option] [action]

1
2
find / -name a.java    #从根目录开始以名字来查找

20.修改环境变量命令#

21.alias用法#

1
alias llh='ls -l /home'    #ls -l /home取别名

22.在文件夹下面获得root权限#

1
2
sudo nautilus

23.挂载磁盘或者ISO文件#

1
2
3
mount /mnt/cdrom 光驱的默认挂载路径,也可以是其他路径
unmount

ubuntu下安装ISO的Latex

  在linux下默认的ISO挂载点位于”/media”目录,下面是挂载一个ISO文件的方法:
    sudo mkdir /media/cdimage  #建立一个文件夹作为ISO挂载点
    sudo mount -o loop myfile.iso /media/cdimage   #挂载ISO文件,使用参数 -o loop

  使用你想挂载的iso文件代替myfile.iso。

  挂载一个镜像文件使之能被写入,使用下面的命令:
    sudo mkdir /media/cdimage
    sudo mount -o rw,loop myfile.iso /media/cdimage

  

  然后
    perl install-tl -gui
  

  卸载镜像文件:
    sudo umount /media/cdimage
    rmdir /media/cdimage

 

  安装的路径在usr/local/下

24.创建软链接#

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

硬连接
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除

软连接
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

1
2
sudo ln -s /XXX/bin /usr/bin

25.端口转发#

1
ssh -L8090:remote_ip:remote_port remote_host

26.linux命令并发执行#

先将要执行的命令打印到commend.txt文件中,然后用每50行切一个文件,用10个并发来执行这些文件

1
2
3
4
5
6
rm ./commend.txt*
echo_commend > ./commend.txt
split -l 50 commend.txt commend.txt-
parallel --gnu -j 10 "bash" ::: commend.txt-*
echo "execute commend success"

27.linux防止恶意ssh登录脚本#

参考: https://blog.51cto.com/732233048/1694987

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

#过滤Failed password for root,写入failIP.txt文件
grep -E 'Failed password for root from|Failed password for invalid user' /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn > /root/script/failIP.txt

#失败次数大于100的,将其ip写入/etc/hosts.deny文件
while read failStatus
do
failTimes=`echo $failStatus | awk '{print $1}'`
failIP=`echo $failStatus | awk '{print $2}'`
if [ $failTimes -gt 10 ];then
denyIP=`grep $failIP /etc/hosts.deny`
if [ -z "$denyIP" ];then
echo "sshd:$failIP" >> /etc/hosts.deny
fi
fi
done < /root/script/failIP.txt

crontab -e

1
2
30 5 * * * bash /root/script/denyRootSsh.sh > /dev/null 2>&amp;1 &amp;

28.定制登录motd图案#

1
2
http://www.kammerl.de/ascii/AsciiSignature.php

在/etc/profile中添加

1
2
3
#Login Info
sh /home/lintong/motd/login_bash_ok.sh

login_bash_ok.sh内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# * Variables
user=$USER
path=$PWD
home=$HOME

# * Check if we're somewhere in /home
if [ ! -d ${home} ];then
return 0
fi

# * ASCII head
cat /home/lintong/motd/login_logo.txt
# * Print Output
echo " ::::::::::::::::::::::::::::::::::-STATUS-::::::::::::::::::::::::::::::::::"
reset_terminal=$(tput sgr0)
total_mem=$(top -n 1 -b | grep "KiB\ Mem" | awk '{ print $4/1024 " Mb"}')
echo -e '\E[32m'" Total Memmory :" $reset_terminal ${total_mem}
total_mem_free=$(top -n 1 -b | grep "KiB\ Mem" | awk '{ print $6/1024 " Mb"}')
echo -e '\E[32m'" Total Memmory Free :" $reset_terminal ${total_mem_free}
buff_cache_used=$(top -n 1 -b | grep "KiB\ Mem" | awk '{ print $10/1024 " Mb"}')
echo -e '\E[32m'" Buff Cache Used :" $reset_terminal ${buff_cache_used}

29.如何挂载硬盘#

1
2
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/add-instance-store-volumes.html

重启自动挂卷

1
2
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ebs-using-volumes.html#ebs-mount-after-reboot

30.查看linux内核版本#

1
2
uname -a

查看可以安装的linux内核

1
2
apt-cache search linux-image

安装内核

1
2
sudo apt-get install linux-image-4.9.0-0.bpo.12-amd64
sudo reboot

31.修改主机名#

1
2
vim /etc/hostname

32.测网速#

1
iperf3

33.ubuntu下交换键位#

1
2
setxkbmap -option altwin:swap_lalt_lwin

参考:轻松交换键位

34.linux下网络配置#

 

 

35.无法获得锁 /var/lib/dpkg/lock#

解决办法如下:

  1. 终端输入 ps  -aux 直接sudo kill
    PID
  2. 解决:
    其实这是因为有另外一个程序在运行,导致锁不可用。原因可能是上次运行更新或安装没有正常完成。解决办法是杀死此进程
1
2
3
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

然后还要记得更新软件信息

36.ubuntu下gedit闪退,遇到问题:ERROR:../../gi/pygi-argument.c:1583:_pygi_argument_to_object: code should not be reached 已放弃 (核心已转储)#

解决方法:编辑->首选项关闭->插件->取消”多文件编辑”

37.ubuntu更换源#

建议使用ustc.edu的源,其他例如清华的,阿里的连sublime都没有

参考:ubuntu更改镜像源(软件源)

38.ubuntu右上角时间不显示#

重启unity,命令

1
2
sudo killall unity-panel-service

39.mac下制作ubuntu启动盘#

参考:2019-06-27 Mac OS制作Ubuntu的U盘启动盘

40.Ubuntu在命令行下将默认语言改为英语#

参考:Ubuntu在命令行下将默认语言改为英语

41.linux用户设置免密root#

1
2
sudo vim /etc/sudoers

在%sudo   ALL=(ALL:ALL) ALL的下面添加如下命令,注意必须在该位置添加

1
2
your_username ALL=(ALL) NOPASSWD:ALL

42.ubuntu14.04安装了im-switch后系统设置中不见了语言支持#

1
2
sudo apt-get install language-selector-gnome

43.删除ibus之后导致系统设置进不了#

1
2
sudo apt-get instal ubuntu-desktop

快捷键调出sogou拼音,默认为”ctrl+,”

44.ubuntu16.04固定ip#

45./etc/profile、/etc/bashrc、/.bash_profile、/.bashrc的区别#

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行并从/etc/profile.d目录的配置文件中搜集shell的设置.

/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.

~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取**~/.bash_logout:**当每次退出系统(退出bash shell)时,执行该文件.

46.Ubuntu bash的几个初始化文件
#

(1)/etc/profile

全局(公有)配置,不管是哪个用户,登录时都会读取该文件。

(2)/ect/bashrc

Ubuntu没有此文件,与之对应的是/ect/bash.bashrc;它也是全局(公有)的 ;bash执行时,不管是何种方式,都会读取此文件。

(3)~/.profile

若bash是以login方式执行时,读取/.bash_profile,若它不存在,则读取/.bash_login,若前两者不存在,读取~/.profile。

另外,图形模式登录时,此文件将被读取,即使存在/.bash_profile和/.bash_login。  

(4)~/.bash_login

若bash是以login方式执行时,读取/.bash_profile,若它不存在,则读取/.bash_login,若前两者不存在,读取~/.profile。  

(5)~/.bash_profile

Unbutu默认没有此文件,可新建。

只有bash是以login形式执行时,才会读取此文件。通常该配置文件还会配置成去读取~/.bashrc。  

(6)~/.bashrc

当bash是以non-login形式执行时,读取此文件。若是以login形式执行,则不会读取此文件。

(7)~/.bash_logout

注销时,且是longin形式,此文件才会读取。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。

下面是在本机的几个例子:

  1. 图形模式登录时,顺序读取:**/etc/profile~/.profile**
  2. 图形模式登录后,打开终端时,顺序读取:**/etc/bash.bashrc~/.bashrc**
  3. 文本模式登录时,顺序读取:**/etc/bash.bashrc/etc/profile~/.bash_profile**
  4. 从其它用户su到该用户,则分两种情况:

        (1)如果带-l参数(或-参数,–login参数),如:su -l username,则bash是lonin的,它将顺序读取以下配置文件:/etc/bash.bashrc,/etc/profile和/.bash_profile。

        (2)如果没有带-l参数,则bash是non-login的,它将顺序读取:/etc/bash.bashrc和
    /.bashrc
  5. 注销时,或退出su登录的用户,如果是longin方式,那么bash会读取:~/.bash_logout
  6. 执行自定义的shell文件时,若使用“bash -l
    a.sh”的方式,则bash会读取行:/etc/profile和~/.bash_profile,若使用其它方式,如:bash a.sh,
    ./a.sh,sh a.sh(这个不属于bash shell),则不会读取上面的任何文件。
  7. 上面的例子凡是读取到/.bash_profile的,若该文件不存在,则读取/.bash_login,若前两者不存在,读取~/.profile。

#

47.bashrc与profile的区别

要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shell 和non-login shell。 

交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉
的:登录、执行一些命令、签退。当你签退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件
的结尾,shell也就终止了。 

bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。系统中存在许多bashrc和profile文件,下面逐一介绍:

/etc/pro此文件为系统的每个用户设置环境信息,当第一个用户登录时,该文件被执行. 

并从/etc/profile.d目录的配置文件中搜集shell的设置. 

/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。有些linux版本中的/etc目录下已经没有了bashrc文件。 

~/. pro每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,它设置一些环境变量,然后执行用户的.bashrc文件.

~/.bashrc:该文件包含专用于某个用户的bash shell的bash信息,当该用户登录时以及每次打开新的shell时,该文件被读取. 

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系.

某网友总结如下:

/etc/profile,/etc/bashrc 是系统全局环境变量设定 

/.profile,/.bashrc用户家目录下的私有环境变量设定

当登入系统时候获得一个shell进程时,其读取环境设定档有三步

1首先读入的是全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如

/etc/profile.d和/etc/inputrc

2然后根据不同使用者帐号,去其家目录读取/.bash_profile,如果这读取不了就读取/.bash_login,这个也读取不了才会读取

/.profile,这三个文档设定基本上是一样的,读取有优先关系

3然后在根据用户帐号读取
/.bashrc

至于/.profile与/.bashrc的不区别

都具有个性化定制功能
/.profile可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次
/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次

参考:http://www.hx95.com/Article/Tech/201207/58094.html