文件和目录
cd /home # 进入一个目录
cd .. # 返回上一级目录
cd ../.. # 返回上两级目录
cd - # 返回上次所在的目录
pwd # 显示工作路径
# ls:查看
ls # 查看目录中的文件
ls -F # 查看目录中的文件
ls -l # 显示文件和目录的详细资料
# 第一部分是drwxr-xr-x
# - d:这一项是文件夹
# - r:read读权限
# - w:write
# - x :执行权限
# - r-x:该用户所在用户组的权限
# - r-x:其它用户组的权限
ls -l # 显示的是修改时间 modification time
ls -l --time=atime # 显示最近访问时间 access time
ls -l --time=ctime # 显示 属性(如权限等)修改时间 status time
ls -a # 显示隐藏文件
ls *[0-9]* # 显示包含数字的文件名和目录名
tree # 显示文件和目录由根目录开始的树形结构
tree -d # 仅显示目录
tree -L n # n代表数字..表示要显示几层...
tree -f # 显示完整路径..
mkdir dir1 # 创建一个叫做 'dir1' 的目录
mkdir dir1 dir2 # 同时创建两个目录
mkdir -p /tmp/dir1/dir2 # 创建一个目录树
# rm: 删除
rm -f file1 # 删除文件
rm -rf dir1 # 删除一个叫做 'dir1' 的目录并同时删除其内容
rm -rf dir1 dir2 # 同时删除两个目录及它们的内容
rmdir dir1 # 删除目录,目录为空才行
mv dir1 new_dir # 重命名/移动 一个目录
cp file1 file2 # 复制一个文件
cp dir/* . # 复制一个目录下的所有文件到当前工作目录,不会复制子目录
cp -a dir1 dir2 # 复制一个目录到另一个目录,包括子目录
ln -s file1 lnk1 创建一个指向文件或目录的软链接
ln file1 lnk1 创建一个指向文件或目录的物理链接
clear
clear # 清屏
进程相关
ps # 查看进程
# -a 全部显示
# -u显示详细状态
# -x 显示没有控制终端的进程
top # 查看进程
# -M 根据内存陪许
# -P 根据CPU排序
# -T 根据进程时间
# q退出
kill [-signal] pid # 结束进程
权限相关
chgrp # 改变文件所属群组
chown # 改变文件拥有者
chmod # 改变文件的权限, SUID, SGID, SBIT等等的特性
whoami # 显示当前用户
who # 显示所有用户
find
find / -name file1 # 从 '/' 开始进入根文件系统搜索文件和目录
find / -user user1 # 搜索属于用户 'user1' 的文件和目录
find /home/user1 -name \*.bin # 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
find /usr/bin -type f -atime +100 # 搜索在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10 # 搜索在10天内被创建或者修改过的文件
find / -name \*.rpm -exec chmod 755 '{}' \; # 搜索以 '.rpm' 结尾的文件并定义其权限
find / -xdev -name \*.rpm # 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
locate \*.ps # 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
whereis halt # 显示一个二进制文件、源码或man的位置
which halt # 显示一个二进制文件或可执行文件的完整路径
# 案例:
# 删除空文件夹
find . type -d -empty|xargs rm -rf
# type -d 指的是类型为文件夹
# -empty 指的是空文件夹
# xargs 是把前一个命令的输出作为输入,例如 xargs -n 1 rm -f 读入一条数据
cat
cat # 从上到下的顺序预览文件
# -b 打印行号,行号从 1 开始
# -n 打印行号,并且不跳过空白行
tac # 从下到上的顺序预览文件,这个命令名本身也是 cat 颠倒过来
more file.txt # 预览某个文件
# 按空格:翻到下一页
# 按回车:下一行
# /字符串:搜索下一个
# :f:显示当前行号
# q 退出
# b 往前翻
less file.txt # 效果和 more 类似,但是更多功能
head -n 20 file.txt # 显示前 20 行
tail -n 20 file.txt # 显示后 20 行
od file.txt -ta # 查看二进制文件
# -ta 以默认字符格式输出
# -tc 以 ASCII 码格式输出
# -td 十进制格式输出
# -to 八进制格式输出
# -tx 十六进制格式输出户
touch
# touch
touch
# -a 修改 atime 到现在
# -c 修改 ctime 到现在
# -m 修改 mdate 到现在
touch -d "2 days ago" file.txt # 修改到 2 天前
touch -t 0712250000 file1 # 修改一个文件或目录的时间戳 - (YYMMDDhhmm)
另外,对于不存在的文件,touch 可以新建
案例:统计文件个数
# 统计当前文件夹下文件的个数
ls -l |grep "^-"|wc -l
# 统计当前文件夹下目录的个数
ls -l |grep "^d"|wc -l
# 统计当前文件夹下文件的个数,包括子文件夹里的
ls -lR|grep "^-"|wc -l
# 统计文件夹下目录的个数,包括子文件夹里的
ls -lR|grep "^d"|wc -l
解释
ls -l
列出文件和文件夹,ls -lR
递归列出文件和文件夹grep "^-"
筛选出以横线开头的,grep "^d"
筛选出以d开头的wc -l
计算有多少行
常用命令
时间
# 显示当前时间
date
# 按照指定的格式显示时间
date +%Y/%m/%d
date +%Y-%m-%d
date +%H:%M:%S
# 显示日历
cal
# 查询 2018/02 的日历
cal 02 2018
date +%Y-%m-%d --date '1 days ago'
DATE=$(date +%Y-%m-%d --date '1 days ago')
帮组
date --help
man date
# 在 man page 中,可以按 “/” 进入搜索功能。按 “q” 推出页面
history:显示最近的命令
history [-raw] histfiles
# 选项与参数:
# n :数字,意思是“要列出最近的 n 笔命令列表”的意思!
# -c :将目前的 shell 中的所有 history 内容全部消除
# -a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,
# 则默认写入 ~/.bash_history
# -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
# -w :将目前的 history 记忆内容写入 histfiles 中!
登陆信息
登陆欢迎信息在 /etc/issue 里
常用工具
# 打开一个简单的计算机
bc
开关机
# 将数据同步写入硬盘中
sync
# 关机
shutdown
重新开机,关机: reboot, halt, poweroff
shutdown [-krhc] [时间] [警告讯息]
# -k : 不要真的关机,只是发送警告讯息出去!
# -r : 在将系统的服务停掉之后就重新开机(常用)
# -h : 将系统的服务停掉后,立即关机。 (常用)
# -c : 取消已经在进行的 shutdown 指令内容。
# 时间 : 指定系统关机的时间,默认 1 分钟
# 例子
shutdown -h 10 'I will shutdown after 10 mins'
reboot # 系统重新开机
halt # 系统停止~屏幕可能会保留系统已经停止的讯息
poweroff # 系统关机,所以没有提供额外的电力,屏幕空白!
查看系统配置
uname -r # 查看核心版本
uname -m # 查看操作系统版本
uname # 查看平台
硬盘
/dev/sd[a-p][1-128]:为实体磁盘的磁盘文件名;
/dev/vd[a-d][1-128]:为虚拟磁盘的磁盘文件名
看文件的 inode 信息
ls -li
df:列出文件系统的整体磁盘使用量;
du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
打包和压缩文件
tar
tar 只是打包,不是压缩
tar -cf archive.tar file1 # 打包
tar -tf archive.tar # 显示包中的内容
tar -xf archive.tar # 解包
# -c 产生新的包
# -f 指定包的文件名
# -x 解包
# -r 往包内增加文件,-u 更新文件
# -t 列出文件
# -v 显示正在处理哪个文件
# 与压缩有关的:
# -z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
# -j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
tar -jcvf archive.tar.bz2 tmp # 打包压缩
tar -jtvf archive.tar.bz2 # 显示压缩包
tar -jxvf archive.tar.bz2 # 解压缩
tar有很多参数,下面列出常用的:
tar -cf all.tar * .jpg # 将所有.jpg的文件打成一个名为all.tar的包。
tar -uf all.tar logo.gif # 更新原来tar包all.tar中logo.gif文件
tar -cvf archive.tar file1 file2 dir1 # 打包一个包含了 'file1', 'file2' 以及 'dir1'的档案文件
zip
zip -r FileName.zip DirName # 压缩
unzip FileName.zip # 解压
详情链接
可以比较一下Python的zip操作
程序结构
命令
设置别名
# 设置别名
alias guofei_ls='ls -la'
# 看一个命令是否是系统命令
type cd
type guofei_ls
换行符
# 反斜杠用来换行
cd\
path1
赋值
# 赋值
x=ls
# 1. 等号两边不能有空白
# 2. 变量名不能是数字开头
# 3. 被赋值的字符串如果有空格,必须加引号
# 4. 赋值可以嵌套,例如:
var="lang is $LANG"
echo ${var} # 显示:lang is zh_CN.UTF-8,可以理解为赋值的时候做了字符串替换,之后改变 LANG 变量也不会导致 var 被改变。
# 5. 等号右边加括号,表示右边是命令
x=$(ls)
echo $x # 显示之前的 ls 的返回
${x} -la
# 1. 前加$表示取出变量值,或者 $x 也有一样效果
# 2. 取出后可以作为命令的一部分直接使用,也可以显示:
echo $x
# 取消赋值
unset x
变量用于子程序
cd /lib/modules/$(uname -r)/kernel
# uname -r 代表 20.3.0
# 上面代表 cd 到 /lib/modules/20.3.0/kernel
export x='ls' # 加 export 后,可以被子程序使用
export # 单独的会吧所有变量都显示出来
一些环境变量
HOME # 用户主文件夹
SHELL # 所使用的 SHELL程序,Linux 默认是 /bin/bash
HISTSIZE # 可以记录多少历史命令
PATH # 变量目录
LANG # 语言
RANDOM # 0~32767 的随机数
read
# 用来读取用户输入
read [-pt] variable
# -p:后接提示字符
# -t:等待秒数
# 例子:
read -p "Please keyin your name in 30s: " -t 30 your_name
echo $your_name
declare
declare [-aixr] variable
# -a : array 类型
# -i :integer 类型
# 不支持浮点类型
# 例子:
x=100+200 # 其实是字符串加
declare -i x=100+200 # 这才是数字加
var[1]='a';var[2]='b'
echo "${var[1]},${var[2]}"
管道
cmd1 && cmd2 # cmd1 正确执行,则开始执行 cmd2
cmd1 || cmd2 # cmd1 执行且错误,则开始执行 cmd1
# 例子:
ls /tmp/vbirding && echo "exist" || echo "not exist"
# 若存在,这显示 exist,否则显示 not exist
cut:分割字符串,然后取出第n个
# cut -d '分隔字符' -f fields
echo $PATH |cut -d ':' -f 3
/home/guofei/anaconda3/bin
# 按冒号分割,然后取第3个
grep:搜索字符串
# -c : 返回匹配次数
# -v :反向选择(选择没匹配到的)
# -n : 附加行号
# 例如:寻找 txt 文件
ls -l|grep .txt
script
如何传参?
# file.sh
echo "param 0: ${0}"
echo "param 1: ${1}"
echo "param 2: ${2}"
调用 sh 文件
bash file.sh a b
# 结果:
# param 0: file.sh
# param 1: a
# param 2: b
可以用 shift 来偏移参数号(用的时候详查)
流程控制
if
if [ 条件 ]; then
执行
fi
if [ 条件 ]; then
执行
else
执行
fi
if [ 条件 ]; then
执行
elif [[ condition ]]; then
#statements
else
执行
fi
read ny;
if [ "${ny}" == "y" ]||[ "${ny}" == "Y" ];then
echo "yes";
elif [ "${ny}" == "n" ]||[ "${ny}" == "N" ];then
echo "no";
else
echo "what?";
fi
# || 是或, && 是且
函数
function print_it(){
echo "param 0: ${0}"
echo "param 1: ${1}"
echo "param 2: ${2}"
}
# 如何调用
print_it 1 2
# 打印:
# param 0: -bash
# param 1: 1
# param 2: 2
while 循环
while [[ condition ]]; do
#statements
done
until [[ condition ]]; do
#statements
done
sum=0 # 这是加总的数值变数
i=0 # 这是累计的数值,亦即是 1, 2, 3....
while [ "${i}" != "100" ]; do
i=$(($i+1)) # 每次 i 都会增加 1
sum=$(($sum+$i)) # 每次都会加总一次!
done
echo "The result of '1+2+3+...+100' is ==> $s"
for循环
sum=0; i=0;
for (( i = 0; i < 10; i++ )); do
i=$(($i+1)) # 每次 i 都会增加 1
sum=$(($sum+$i)) # 每次都会加总一次!
done
echo $sum
for x in one two three four
do
echo number $x
done
安装软件
apt-get update
apt-get install sudo
一些常用的工具
sudo apt install tree # tree
sudo apt install git # 安装git ,用 sudo apt install git-all 安装所有额外组件
# 看显卡型号:
lspci | grep -i vga
# 看 mac 地址的工具
sudo apt-get install net-tools # 安装
ifconfig # 使用
安装anaconda
# 下载安装包 https://www.anaconda.com/products/individual
# 用 sh 命令运行下载好的安装包 sh **.sh
# 设置环境变量:
export ANACONDA_HOME='root/anaconda3' # 这里填入你安装 anaconda的目录
export PATH=$ANACONDA_HOME/bin:$PATH
source ~/.bashrc
docker:https://docs.docker.com/engine/install/ubuntu/ pycharm:https://www.anaconda.com/pycharm
常用软件
tree
-a
隐藏的目录和文件也显示-d
只显示目录,不显示文件-D
列出文件或目录的更改时间。-f
在每个文件或目录之前,显示完整的相对路径名称。-L level
限制目录显示层级。-u
列出拥有者,没有对应的名称时,则显示用户识别码。
打开软件
pyspark
spark-shell
查看已安装软件
- rpm包安装的
可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”。
[root@hexuweb102 ~] rpm -qa | grep ruby
- 以deb包安装的
可以用dpkg -l能看到。如果是查找指定软件包,用dpkg -l | grep “软件或者包的名字”;
[root@hexuweb102~]dpkg-l|grepruby
- yum方法安装的,可以用yum list installed查找,如果是查找指定包,命令后加 | grep “软件名或者包名”;
[root@hexuweb102 ~] yum list installed | grep ruby
- 如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了,
上面两种方法都看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。
说明:其中rpm yum 是Redhat系linux的软件包管理命令,dpkg是debian系列的软件包管理命令
vim
- 命令模式:在Linux终端中输入
vim 文件名
就进入了命令模式,但不能输入文字。 - 编辑模式:在命令模式下按
i
就会进入编辑模式,此时就可以写入程式,按Esc
可回到命令模式。 - 末行模式:在命令模式下按
:
进入末行模式,左下角会有一个冒号出现,此时可以敲入命令并执行。
命令模式:转到编辑模式:
i
o
当前行下面插入一个空行,并把光标移动过去,然后进入编辑模式O
当前行上面插入一个空行,并把光标移动过去,然后进入编辑模式r
替换光标处的字符R
替换当前字符及其后的字符,直到按 [ESC]
命令模式:复制黏贴
p
黏贴,配合下面的命令使用yy
拷贝1行nyy
拷贝n行dd
剪切1行3dd
剪切3行x
剪切光标所在位置X
剪切光标前一个位置db
从当前剪切到单词开头dw
从当前剪切到单词结尾ndd
剪切下面n行
命令模式:移动光标
L
当前屏幕底行H
当前屏幕头行M
当前屏幕中间行$
当前行尾0
当前行首w
下一个单词首部b
上一个单词}
下一个空白行{
上一个空白行
命令模式:其它常用
- u:撤销
- / + 查找内容 :开始查找
- n:下一个目标
- N:上一个目标
常用的末行命令:
:w
:写入磁盘:wq
退出保存:q!
退出不保存r filename
:将文件考到光标处:n
光标移动到第n行并回到命令模式
命令模式:其它 nyw:拷贝n个单词 %:自动匹配查找 a:追加到后面 s: 从当前光标位置处开始,以输入的文本替代指定数目的字符 S: 删除指定数目的行,并以所输入文本代替之 d0: 删至行首 D: 删除光标处到行尾 d+}:删除光标所在处到下一个空白行 dG:删除光标处到文件结尾
vsp + 文件名垂直分屏 Ctrl+ww:不同屏幕切换
59,60s/源/目标/g 从59到60全部替换 %s/源/目标/g 全文替换
远程连接 linux 服务器
# ssh 远程连接服务器
sudo apt-get install openssh-server # linux 服务器上安装
ssh user@ip # ssh 连接服务器
# -f SSH连接成功后,转入后台运行。用来在不中断SSH连接的情况下,在本地shell中执行其他操作。
# -p 22 请求 22 端口
# -N 表示只连接远程主机,不打开远程shell
使用 linux 上的 jupyter
# 把本地的 9987 端口和服务器的 8888 连接起来(先确保本地的 9987 端口没被占用)
ssh -f guofei@10.10.10.10 -N -L 9987:localhost:8888
# 远程连接并开启 jupyter:
ssh guofei@10.10.10.10
jupyter-lab --no-browser --port=8888
远程传文件
# 本地的 bash 里面
scp /Users/guofei/Desktop/me.png guofei@10.10.10.10:me.png
下载上传文件
补充xshell中的两个有用的命令
- sz 文件名
下载文件到本地。 - rz
跳出窗口让你选择上传的文件,然后上传。
参考文献
关于Linux命令的: https://www.cnblogs.com/yjd_hycf_space/p/7730690.html
关于压缩解压缩的:http://blog.csdn.net/radianceblau/article/details/54925014
查找已安装的文件:http://blog.hexu.org/archives/1158.shtml