1. ssh远程连接服务器命令 ssh [username@]hostname
2. 查看远程服务器近期登陆记录 last
3. 用户及其主目录的创建
1. useradd –d /home/lb -m 用户名 可以创建一个名为lb的用户,主目录为/home/lb,选项-m表示如果主目录不存在则创建。
2. userdel 用户名 删除一个用户
3. passwd 选项 用户名 用于对口令做一些更改
4. usermod 选项 用户名 用于对用户的配置做修改,与useradd中的选项一样。
5. cat /etc/passwd 用来察看所有的用户
4. 将新建的用户加入sudo用户组
使用root用户权限修改 vi /etc/sudoers 加上 user_name ALL = (ALL) ALL 一行。
5. 切换用户使用 su 命令
su username 切换用户,但是不更改环境变量
su - username 切换用户,并更改到当前用户的环境变量
6. 从网络上下载资源文件
curl -O http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
从支持的http,ftp等协议从给定的URL执行操作,选项-O表示下载到的文件就以资源文件的名字命名。如果出现下载失败,可能是当前用户组对目录不具有w权限,需要使用sudo命令。
7. 查找当前已经安装的软件包
rpm -qa 会显示所有安装的软件包
rpm -qa | grep ssh 会显示与ssh相关的软件包
8. 利用ssh连接进行远程拷贝命令
scp /Users/hope/Downloads/hadoop-2.8.0.tar.gz lb@10.3.242.98:/home/lb
将本地路径下的 hadoop-2.8.0.tar.gz 拷贝到远程服务器 [[用户名 @ ] 主机地址 : 路径
如果是拷贝文件夹的话,需要加上选项 -r
9. 察看服务器和操作系统相关信息
uname -a 服务器信息
cat /etc/issue 操作系统的发行版本
10. 查找指定目录下以y开头的文件
find ./ -name "y*"
11. 察看当前所有的进程及占用端口
netstat -a -t --numeric-ports -p
12. 解压缩命令
1. 解压命令
tar -zxvf jdk-8u131-linux-x64.tar.gz -C temp/ 将压缩包解压到当前目录的 temp 子目录下
2. 压缩命令
tar -zcvf tmp.tar.gz ./test 将当前目录下的 test 文件夹,按照 zip 压缩方式压缩成 tmp.tar.gz
13. 关于 /etc/profile 配置文件和环境变量的写法
关键字的含义:
PATH:告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还应到哪些目录下去寻找。
CLASSPATH:告诉 Java 执行环境,在哪些目录下可以找到执行 Java 程序所需要的类或者包(如.jar文件)。
特殊字符的写法:
: 表示并列含义,如果一个环境变量有多个,用:号进行分离。
. 表示执行操作的当前目录。
所以经常看到 export $PATH = /usr/java/jdk1.8.0:$PATH 表示环境变量在之前的环境变量上加上 Java 的安装路径,相同名字的环境变量后写入的起作用。
另外:~/.bash_profile 存储的是当前用户的环境变量,如果只是想使用此用户时有特定的环境变量,可以直接在该文件中作更改,同样是使用 source ~/.bash_profile 使文件生效。
14. Jar (Java ARchive 文档)
是一种与平台无关的文件格式,可以将多个文件合成一个文件,支持压缩。可以用于将写好的类进行打包,方便类库的发布和传输。与ZIP文件的区别在于,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。
1. jar 创建并显示打包过程
jar cvf hello.jar hello/*
2. 显示 jar 包里的所有内容
jar tvf hello.jar
3. 解压 jar 包
jar xvf hello.jar
4. -C 选项用于先切换到指定目录下再执行该条 jar 命令
15. source 命令的功能是执行一个shell,它和直接执行 ./a.sh 的区别在于:
比如你在一个脚本里export $KKK=111 ,如果你用./a.sh执行该脚本,执行完毕后,你运行 echo $KKK ,发现没有值,如果你用source来执行 ,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是source不同它就是在本shell中执行的,所以可以看到结果。
16. crontab 命令用于定时执行 shell 命令
基本格式 :
* * * * * command
分 时 日 月 周 命令
例子: */2 0,12 * * * python /home/libo/bjh_search.py
表示在0时和12时每隔两分钟执行一次 python 程序。
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
在命令行输入 crontab -e 即可创建时程表,wq 保存即可。
用 crontab -l 命令可查看当前的 crontab 。
/sbin/service crond start 用于启动服务。
如果 crond 服务事先已启动,那么当前用户直接编辑保存后即可生效。
注:在定时执行 python 程序时,如果涉及文件的 IO 操作,一定要写完整路径。因为脚本在执行时,是通过 crontab 去执行的,因此执行目录会变成当前用户的 home 目录,如果是 root ,就会在/root/下执行。
1. 路径问题
使用 crontab 部署定时任务时,默认的当前路径为部署任务的用户的home路径下,比如用户名为spider的用户为/home/spider。可以在执行命令中做目录变更。
2. 环境变量问题
因为 crontab 启动的命令并不读当前的 .profile ,因此所有程序的环境变量需要用程序或shell自己去设置,解决方法就是在执行shell脚本的业务逻辑前先初始化操作系统的环境变量配置文件.profile或.bash_profile。比如:*/1 * * * * source ./.bash_profile && cd ./libo/email_auto && python rep_timeliness.py
3. 执行日志
在 /var/log/cron 中,察看需要有root权限
17. ctrl + R 输入搜索字符,可以察看相关的历史命令
18. echo ftp://`hostname``readlink -f tmp.tar.gz `
可以输出当前文件夹下 tmp.tar.gz 文件的ftp地址:
ftp://cp01-scholar-offline-dev02.epc.baidu.com/home/work/tmp.tar.gz
wget 上述地址可以获取这个文件
19. Vim 快捷键
1. 屏幕滚动
gg 快速跳到文档头部
G 快速跳到文档底部
Ctrl + U 向上滚动半屏
Ctrl + D 向下滚动半屏
Ctrl + B 向上滚动一屏
Ctrl + F 向下滚动一屏
2. 修改 Vim 的配置文件
vim ~/.vimrc
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab / expandtab
set autoindent
其中:
tabstop
表示一个 tab 显示出来是多少个空格的长度,默认 8。
softtabstop
表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab
时特别有用。
shiftwidth
表示每一级缩进的长度,一般设置成跟 softtabstop
一样。
当设置成 expandtab
时,缩进用空格来表示,noexpandtab
则是用制表符表示一个缩进。
设置 autoindent 自动缩进,即按回车时每行的缩进与上一行相同,设置 noautoindent 取消缩进。
3. 行首、行尾快速移动
1. 0 移至行首
2. $ 移至行尾
4. 查找操作
在命令行:后输入/查找字段即可。例如 :/status 查找status字段。
n 键可以跳到下一个,N 键跳到上一个。
20. tail -f 文件名
可以监控文件尾部的更新
21. 命令模式下 shift + '#' 可以高亮搜索当前字符串
:nohlsearch 取消搜索
22. Linux 命令行光标移动命令
ctrl + 'a' 迅速移动到行首
ctrl + 'e' 迅速移动到行尾
23. sendmail 服务 /usr/sbin/sendmail
1. 邮件系统解释
邮件服务器构成了邮件系统的核心。每个收信人都有一个位于某个邮件服务器上的邮箱(mailbox)。首先,当你将 E-mail 输入到你的计算机开始发送时,会根据 SMTP(Simple Mail Transfer Protocol) 和 TCP/IP 协议将你的信件打包,并加注信件头后送到你所属服务商的服务器上,然后邮件服务器会根据你加注的信件头传到下一个邮件服务器,依次往下传输,直到到达接收用户所属服务商的邮件服务器,保存在服务器上用户的 E-mail 邮箱里,用户个人终端通过与服务器的连接取走邮件。
2. 名词解释
1. MUA (Message User Agent)
邮件用户代理,通常我们的 Client 端电脑都没法直接寄信,所以需要通过 MUA 来帮助我们传递信件,不管是收信还是寄信,都要依赖各个系统提供的 MUA (Foxmail 和 Outlook) 帮我们传递信件才能使用邮件系统。
2. MTA (Message Transfer Agent)
邮件传输代理,MUA 是用在客户端上的软件,MTA 就是用在主机上的软件,用于监视 MUA 的请求,找出对方的 MTA,把信送到对方的 MTA 服务器,或者把信收到邮件队列。
3. MDA (Message Deliver Agent)
邮件投递代理,把信最终投递到具体的用户;主要功能是将MTA所收到的信件,依照信件的流向(送到那里去)来将该信件放置到本机账户下的邮件档案中(mailbox_收件箱),或者再经由MTA将这个信件发送到下个MTA。
3. sendmail 服务
通过脚本调用 sendmail 服务配合 crontab 就可以完成邮件的定时自动发送,主要包括指定接收方的邮箱地址和完成邮件内容的书写,邮件内容可以选择传递 html 格式的内容。比如使用 python 调用服务时,就将对应每行的 html 内容从上到小组织成一个列表,然后将列表的每行用 '\n' 连接起来组成完整的 html 语句,进行传递即可。
send_mail = 'formail -I "MIME-Version:1.0" -I "Content-type:text/html;charset=utf-8" -I "Subject:=?utf-8?B?%s?=" -I "TO:%s" | /usr/sbin/sendmail %s' % (subject, users, users)
sub = subprocess.Popen(send_mail, shell=True, stdin=subprocess.PIPE)
slice_num = sub.communicate(html)
上述语句是完成 sendmail 服务的调用,其中需要的参数 user 是用 ' ' 连接的多个邮件接收地址的字符串,html 为邮件的内容,subject 为邮件主题。
24. 清屏命令
clear 或者快捷键 ctrl + l
25. wc 命令
1. 命令格式
wc [选项] 文件
2. 命令功能
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
3. 命令参数
-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串
-L 打印最长行的长度
26. & nohup 标准输入输出流
1. 标准输入输出流
操作系统中有三个常用的流:
0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr
一般当我们用 > console.txt,实际上是 1 > console.txt 的简略用法;< console.txt 是 0 < console.txt 的简略用法。
2. 输出重定向 > 和 >> 的区别
> 和 >> 都是输出重定向到文件,如果文件不存在,就创建文件。区别在于,如果文件存在,> 会将文件清空,然后再向文件输入;>> 会将新的内容追加到原有文件的尾部。
3. & 命令
当在前台运行某个作业时,终端会被该作业占据;可以在命令的尾部加上 & 实现后台运行,例如:sh test.sh &
注意,需要用户交互的程序不要放在后台进行,否则机器会在后台等待用户交互。一般来说作业在后台执行一样会把结果输出到终端屏幕,这时我们可以选择将输出重定向,使后台执行的作业输出到我们指定的文件中。例如:command > output.file 2>&1 &
2>&1 将标准错误流重定向到标准输出流中,而标准输出流又在之前重定向到 output.file 文件中,所以所有的标准输出流和标准错误流都会输出到 output.file 文件中去。至于为什么必须将标准错误流重定向到标准输出流中,而不能直接重定向到文件,比如 2 > output.file 会出错,是因为标准错误流没有缓存区,而标准输出流 stdout 有缓存区。为什么直接要写为 2>&1 ,因为 2>1 系统会自动认为 1 是一个文件,而 & 与 1 结合为 &1 就代表了标准输出流。
4. nohup 命令
使用 & 命令在后台执行的作业,虽然当前控制台没有被占用,但是一旦把当前控制台关闭(退出账户时),作业就会停止运行。nohup (no hang up)命令可以帮助用户在退出账户后仍然继续执行相应的进程。
如果使用 nohup 提交作业,在缺省情况下,该作业的所有输出都被重定向到当前目录下的 nohup.out 文件中,也可以使用重定向运算符自定义重定向。例如:nohup comand > out.file 2>&1 &
使用 nohup 命令后,如果在当前账户非正常退出或结束的时候,命令也有可能自动结束了,所以最好是使用 exit 正常退出当前用户。
5. ctrl + z
将当前前台执行命令放到后台,并处于暂停状态
6. ctrl + c
终止前台命令
27. make 命令
1. 命令作用
根据 Makefile 文件的指示去构建文件。make 命令后给出需要构建的目标(可以有多个,用空格隔开),然后就根据 Makefile 文件中,每个目标的前置条件和执行命令来构建对应的目标(通常为文件)。例如:make clean && make result.txt
上述命令先执行了 clean 伪目标将原有的结果文件删除,然后再构建新的 result.txt 文件。
2. Makefile 文件结构
由一系列的规则(rules)构成,每条规则的形式如下:
<target>: <prerequisites>
[tab] <commands>
target:一般情况下为文件名,为该条规则想要生成的目标文件。也可以为伪目标用来执行对应的命令,如删除现有的某个文件。
prerequisites:前置条件通常是一组文件名,它指定了“目标”是否重新构建的判断标准:只要有一个前置文件不存在,或者有过更新(前置文件的last-modification时间戳比目标的时间戳新),“目标”就需要重新构建。
commands:为构建文件所需要执行的具体方法,命令前需要有一个 Tab 缩进。详细介绍见:http://www.ruanyifeng.com/blog/2015/02/make.html