Java教程

程序员防溺水指南

本文主要是介绍程序员防溺水指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Linux篇

文件管理

awk

ps -ef | grep 'main' | awk '{print $2}'

cat

显示文件内容

cat /etc/issue
cat /proc/meminfo
  • chattr

chgrp

修改文件或目录的所属组

chgrp admin file1 # 改变文件file1的所属组为adm

chmod

修改权限

chmod 764 /etc/services
chmod g+w file1  # 赋予文件file1所属组写权限   <ugo+rwx>
path=/opt/package/orochiplus-upgrade/buffalo/dt-buffalo-serv-server/target/logs/app
for line in `ls /opt/package/orochiplus-upgrade/buffalo/dt-buffalo-serv-server/target/logs/app`
do
 chmod -R +x $path/$line
 echo $path/$line
 find $path/$line/ -mtime +30 | xargs rm -rf
done

chown

修改文件或目录的所有者

chown liuhh /etc/services
  • cksum
  • cmp

cp

复制文件或目录

cp file1 file2 dir1 # 将文件file1、file2复制到目录dir1
cp -R dir1 dir2 # 将dir1下的所有文件及子目录复制到dir2
cp -rf Label_lvshou_fill_vertify /home/liuhuihe/workspace/code_run/  # 将一个文件夹复制到另一个文件夹下
cp -rf /home/lhh/workspace/customer_risk_pro/*  /home/lhh/workspace/code_run/customer_risk_pro/
cp -rf /usr/local/KingSTD_1/*  /usr/local/webapps/KingSTD_2/    #将dir1下的所有文件及子目录复制到dir2,覆盖
  • cut

diff

diff 命令用于比较文件的差异。

diff 以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

diff log2014.log log2013.log 
  • diffstat
  • file

find

查找文件或目录

find /etc -name init #在目录/etc中查找文件init
find / -size +204800 # 在根目录下查找大于200MB的文件
find / -user sam # 在根目录下查找所有者为sam的文件
find /etc -ctime -1  # 在/etc下查找24小时内被修改过属性的文件和目录
#!/bin/bash
log_path=(/home/dmp/logs
		  /opt/package/orochiplus/web/logs 
		  /var/log/ambari-agent 
		  /var/log/hadoop/hdfs 
		  /var/log/hadoop-yarn/yarn 
		  /var/log/ambari-server 
		  /var/log/hive 
		  /var/log/ambari-metrics-collector)
		  
for path in ${log_path[@]}
do 
  chmod -R +x $path/
  find $path -mtime +30 -regextype posix-extended -regex ".*\.(log|out|err)" | xargs rm
done
echo "clean ok..."
  • git
  • gitview

查看文件的前N行

head -100 /etc/services
  • indent
  • less

ln

创建链接文件,目录只能创建软链接

ln -s  /etc/issue  /issue.soft # 创建文件/etc/issue的软链接/issue.soft
ln /etc/issue  /issue.hard # 创建文件/etc/issue的硬链接/issue.hard

locate

查找文件或目录

locate ls  # 列出所有跟file相关的文件
  • lsattr
  • mattrib
  • mc
  • mcopy
  • mdel
  • mdir
  • mktemp
  • mmove
  • more

分页显示文件内容

more /etc/services
  • mread
  • mren
  • mshowfat
  • mtools
  • mtoolstest

mv

移动文件、更名

mv file1 file3 # 将当前目录下文件file1更名为file3
mv file1 file2 file3 dir2  # 将文件file1、 file2 file3移动到目录dir2下
  • od
  • paste
  • patch
  • rcp
  • read
  • rhmask

rm

删除文件或目录

rm he  # 删除文件he
rm -r river # 删除目录river

scp

# 从106复制文件到92.8

# 92.8上面
scp root@172.16.92.106:/home/Anaconda3-5.0.1-Linux-x86_64.sh /home

# 106上面
scp /home/Anaconda3-5.0.1-Linux-x86_64.sh root@172.16.92.8:/home
  • slocate
  • split

tail

查看文件的后N行

tail -100 /etc/services
tail -f ./logs/catalina.out
  • tee
  • tmpwatch

touch

创建空文件

touch student # 创建空文件student
touch  /river/student   # 创建空文件student
  • umask
  • updatedb
  • whereis

which

显示系统命令所在目录

which hive

文档编辑

  • col
  • colrm
  • comm
  • csplit
  • ed
  • egrep
  • ex
  • expr
  • fgrep
  • fmt
  • fold

grep

在文件中搜寻字串匹配的行并输出

grep ftp /etc/services
ls | grep staff
ps -ef | grep brm_distribution_function
#!/bin/sh

task=$1

source /home/digger/.bashrc
set -ex

dt=`date +%Y-%m-%d_%H-%M-%S`

echo "kill zombie task"
ps avx | grep $task | grep -v grep | awk '{print $1}' | xargs -I {} kill {}

echo "run today task"
python main.py $task > logs/$task.$dt.log
  • ispell
  • jed
  • joe
  • join
  • let
  • look
  • mtype
  • pico
  • rgrep
  • sed
  • sort
  • spell
  • tr
  • uniq

wc

命令用于计算字数

wc testfile           # testfile文件的统计信息  

3 92 598 testfile       # testfile文件的行数为3、单词数92、字节数598 

其中,3 个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。

如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:

wc testfile testfile_1 testfile_2   #统计三个文件的信息 

输出结果如下:

3 92 598 testfile                    # 第一个文件行数为3、单词数92、字节数598  
9 18 78 testfile_1                   # 第二个文件的行数为9、单词数18、字节数78  
3 6 32 testfile_2                    # 第三个文件的行数为3、单词数6、字节数32  
15 116 708 总用量                    # 三个文件总共的行数为15、单词数116、字节数708 

文件传输

  • bye
  • ftp
  • ftpcount
  • ftpshut
  • ftpwho
  • lpd
  • lpq
  • lpr
  • lprm
  • ncftp
  • tftp
  • uucico
  • uucp
  • uupick
  • uuto

磁盘管理

cd

切换目录

cd /   # 切换到根目录
cd ..   # 回到上一级目录
cd ./home # 当前目录下的home目录
cd ~   # 切换到HOME目录
cd -   # 切换到前一目录
#!/bin/bash
source /etc/profile

cd /home/dmp/script/py/AddressTranform /usr/bin/python3 main.py

df

显示文件系统的磁盘使用情况,默认情况下df -k 将以字节为单位输出磁盘的使用量

df -k
df -h  #使用-h选项可以以更符合阅读习惯的方式显示磁盘使用量
  • dirs

du

du命令用于显示目录或文件的大小。du会显示指定的目录或文件所占用的磁盘空间。

du -h --max-depth=1 /home
  • edquota
  • eject
  • lndir

ls

显示目录文件

ls -a # 显示所有文件,包括隐藏文件
ls -l # 详细信息显示
ls -al # 所有文件详细信息
JAR_NAME=`ls | grep jar-with-dependencies`
  • mcd
  • mdeltree
  • mdu

mkdir

创建新目录

参数:-p 确保目录名称存在,如果目录不存在的就新创建一个。

mkdir river 创建目录river
directory=/home/dmp/lixiaoli/yjk_dm
loaddate=`date -d "-1 day" "+%Y-%m-%d"`
mkdir -p ${directory}/log/${loaddate}/
  • mlabel
  • mmd
  • mmount
  • mount
  • mrd
  • mzip

pwd

当前工作目录

  • quota
  • quotacheck
  • quotaoff
  • quotaon
  • repquota
  • rmdir
  • rmt
  • stat
  • tree
  • umount

磁盘维护

  • badblocks
  • cfdisk
  • dd
  • e2fsck
  • ext2ed
  • fdformat
  • fdisk
  • fsck
  • fsck.ext2
  • fsck.minix
  • fsconf
  • hdparm
  • losetup
  • mbadblocks
  • mformat
  • mkbootdisk
  • mkdosfs
  • mke2fs
  • mkfs
  • mkfs.ext2
  • mkfs.minix
  • mkfs.msdos
  • mkinitrd
  • mkisofs
  • mkswap
  • mpartition
  • sfdisk
  • swapoff
  • swapon
  • symlinks
  • sync

网络通讯

  • apachectl
  • arpwatch
  • cu
  • dip
  • dnsconf
  • efax
  • getty
  • httpd

ifconfig

查看网络设置信息

ifconfig -a  # 查看网络设置信息

lsof

lsof(list open files)是一个列出当前系统打开文件的工具。

lsof 查看端口占用语法格式:

lsof -i:8080:查看8080端口占用
lsof abc.txt:显示开启文件abc.txt的进程
lsof -c abc:显示abc进程现在打开的文件
lsof -c -p 1234:列出进程号为1234的进程所打开的文件
lsof -g gid:显示归属gid的进程情况
lsof +d /usr/local/:显示目录下被进程开启的文件
lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长
lsof -d 4:显示使用fd为4的进程
lsof -i -U:显示所有打开的端口和UNIX domain文件
  • mesg
  • mingetty
  • minicom
  • nc
  • netconf
  • netconfig

netstat

netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。

netstat 查看端口占用语法格式:

netstat -tunlp | grep 端口号

例如查看 8000 端口的情况,使用以下命令:

netstat -tunlp | grep 8000 
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      26993/nodejs 

更多命令:

netstat -ntlp   //查看当前所有tcp端口
netstat -ntulp | grep 80   //查看所有80端口使用情况
netstat -ntulp | grep 3306   //查看所有3306端口使用情况
  • newaliases

ping

测试网络连通性

ping 192.168.1.1
  • ppp-off
  • pppsetup
  • pppstats
  • samba
  • setserial
  • shapecfg
  • smbclient
  • smbd
  • statserial
  • talk
  • tcpdump
  • telnet
  • testparm
  • traceroute
  • tty
  • uulog
  • uuname
  • uustat
  • uux

wall

向所有用户广播信息

write

向一个用户发信息

  • ytalk

系统管理

  • adduser
  • chfn
  • chsh

date

设置系统日期

date

date -d "-1 day" "+%Y-%m-%d" # 昨天 2019-12-21
  • exit
  • finger

free

显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况,默认情况下free会以字节为单位输出内存的使用量

查看所有内存的汇总,请使用-t选项,-g为GB,-m为MB,-k为KB,-b为字节

free -m
free -t -g
free -g
  • fwhios
  • gitps
  • groupadd
  • groupdel
  • groupmod
  • halt
  • id

kill

在查到端口占用的进程后,如果你要杀掉对应的进程可以使用 kill 命令:kill -9 PID

如上实例,我们看到 8000 端口对应的 PID 为 26993,使用以下命令杀死进程:

kill -9 26993
# 根据名字包含来kill
ps x | grep main_LabelCustomer | grep -v grep |awk '{print $1}'|xargs kill -9
  • last
  • lastb
  • login
  • logname
  • logout
  • logrotate
  • newgrp
  • nice
  • procinfo

ps

用法:ps aux 显示所有包含其他使用者的行程

用法:ps -ef 是用标准的格式显示进程的

ps -ef
ps -ef | grep river    # 在进程显示结果中匹配与river相关的内容并输出
ps -ef | more
ps auxw|head -1;ps auxw|sort -rn -k4|head -10  # 查看内存占用前十的进程

#linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:
ps aux|head -1; ps aux|grep -v PID|sort -rn -k +3|head

#linux下获取占用内存资源最多的10个进程,可以使用如下命令组合:
ps aux|head -1; ps aux|grep -v PID|sort -rn -k +4|head
  • pstree

reboot

重启系统

reboot
  • renice
  • rlogin
  • rsh
  • rwho
  • screen

shutdown

关机

shutdown -h now
  • skill
  • sleep
  • sliplogin
  • su
  • sudo
  • suspend
  • swatch
  • tload

top

top命令会显示当前系统中占用资源最多的一些进程

# 显示指定的进程信息,显示进程号为139的进程信息,CPU、内存占用率等
top -p 139

uname

uname可以显示一些重要的系统信息,例如内核名称、主机名、内核版本号、处理器类型之类的信息

uname -a
  • useradd
  • userconf
  • userdel
  • usermod
  • vlock
  • w
  • who
  • whoami
  • whois

系统设置

  • alias
  • apmd
  • aumix
  • bind
  • chkconfig
  • chroot
  • clear
  • clock
  • crontab
  • declare
  • depmod
  • dircolors
  • dmesg
  • enable
  • eval

export

export PATH=/root/anaconda3/bin:$PATH
  • fbset
  • gpasswd
  • grpconv
  • grpunconv
  • hwclock
  • insmod
  • kbdconfig
  • lilo
  • liloconfig
  • lsmod
  • minfo
  • mkkickstart
  • modinfo
  • modprobe
  • mouseconfig
  • ntsysv

passwd

passwd用于在命令行修改密码

  • pwconv
  • pwunconv
  • rdate
  • reset
  • resize
  • rmmod
  • rpm
  • set
  • setconsole
  • setenv
  • setup
  • sndconfig
  • SVGATextMode
  • time
  • timeconfig
  • ulimit
  • unalias
  • unset

备份压缩

  • ar

bunzip2

解压缩

bunzip2 -k file1.bz2

bzip2

压缩文件

bzip2 -k file1 # -k 产生压缩文件后保留原文件,压缩后文件格式:.bz2
  • bzip2recover
  • compress
  • cpio
  • dump

gunzip

解压缩.gz的压缩文件

gunzip file1.gz
  • gzexe

gzip

压缩文件(不能压缩目录)

  • lha
  • restore

tar

打包目录

tar -zcvf dir1.tar.gz dir1   将目录dir1压缩成一个打包并压缩的文件
tar -zxvf dir1.tar.gz 解压

    -c 产生.tar打包文件
    -v 显示详细信息
    -f 指定压缩后的文件名指定压缩后的文件名
    -z 打包同时压缩
  • unarj

unzip

解压.zip的压缩文件

unzip test.zip
  • uudecode
  • uuencode

zip

压缩文件或目录

zip services.zip /etc/services   # 压缩文件
zip -r test.zip /test  # 压缩目录
# 压缩文件104
cd /home/liuhuihe
zip -r workspace.zip workspace

# 92.8
scp root@172.16.92.104:/home/liuhuihe/workspace.zip /home/liuhuihe
unzip workspace.zip
  • zipinfo

设备管理

  • dumpkeys
  • loadkeys
  • MAKEDEV
  • rdev
  • setleds

其它

man

获取帮助信息

man ls

info

获取帮助信息

info ls

whatis

获得索引的简短说明信息

whatis ls

wget

使用wget从网上下载软件、音乐、视频

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz

输入/输出重定向

  1. 或>> 输出重定向
ls -l /tmp > /river/he
  1. < 输入重定向
wall < /etc/motd
  1. 2> 错误输出重定向
cp -R /usr /backup/usr.bak 2> /bak.error

管道

将一个命令的输出传送给另一个命令,作为另一个命令的输入。

ls -l / | grep river | wc -l

命令连接符

  1. ; # 用;间隔的各命令按顺序依次执行。

  2. && # 前后命令的执行存在逻辑与关系,只有&&前面的命令执行成功后,它后面的命令才被执行。

  3. || # 前后命令的执行存在逻辑或关系,只有||前面的命令执行失败后,它后面的命令才被执行。

命令替换符

将一个命令的输出作为另一个命令的参数。

ls -l `which touch`

Docker篇

获取镜像

# 查询镜像
docker search centos

# 拉取指定版本的镜像
docker pull centos:6.9

# 拉取最新的镜像版本:latest
docker pull centos

查询镜像

# 查询本机的所有镜像,并显示详细信息
docker images

# 查询本机的所有镜像,只显示镜像ID
docker images -q 

# 查看镜像的详细信息(对外端口、容器启动时执行的命令、环境变量、工作目录等等)
docker inspect ID/name:tag

删除镜像

# 删除指定镜像
docker rmi  IID 

# 删除所有镜像
docker rmi `docker images -q`

# 同上
docker rmi $(docker images -q)

# 强制删除镜像(一些相互依赖的镜像通过上面的命令无法删除)
docker rmi -f IID

导入导出镜像

# 导出本地镜像为tar文件
docker image save nginx >/opt/nginx.tar.gz

# 从tar文件加载镜像
docker image load -i /opt/nginx.tar.gz

启动容器

# 启动交互式容器(/bin/sh、/bin/bash、bash),执行exit后容器就退出了,可以使用ctrl+p+q
docker run -it --name="n1" 3fe2fe0dab2e /bin/bash

# 启动守护式容器
docker run -d -p 8080:80 --name="n1" nginx

# 启动容器,并执行一个命令(执行的命令必须是前台持续性的,不能是执行完就结束的命令,否则容器就会推出)
docker run -d -p 8080:80 --name="n1" nginx cd /usr1;python manager.py runserver 0.0.0.0:8080

# 停止正在运行容器
docker stop 容器ID/名称

# 启动已经停止的容器
docker start 容器ID/名称

# 重启容器,不会使容器中已有的修改失效
docker restart 容器ID/名称

进入容器

# 进入容器的已有交互界面,退出时应该使用ctrl+p+q,否则容器会关闭
docker attach 容器ID

# 进入当前运行容器,并创建一个新的交互式界面,退出时不会关闭容器(推荐做法)
docker exec -it 容器ID|容器名称 /bin/bash

# 不进入容器执行命令(查看根目录列表,并显示在控制台)
docker exec 容器ID ls /
  
# 不进入容器,向容器中安装vim,并后台安装,不在前台展示
docker exec -d 容器ID apt-get install vim

查询容器

# 查询当前正在运行的容器
docker ps

# 查询所有存在的容器,包括已退出的
docker ps -a

# 查询容器ID
docker ps -q

# 查询容器详细信息(端口映射、IP地址、磁盘绑定等信息)
docker inspect 容器ID/名称 

删除容器

# 删除已退出的容器
docker rm 容器ID/名称

# 强制删除容器,包括正在运行的
docker rm -f 容器ID/名称

容器网络

指定映射(docker 会自动添加一条iptables规则来实现端口映射)
    -p hostPort:containerPort
    -p ip:hostPort:containerPort 
    -p ip::containerPort(随机端口)
    -p hostPort:containerPort/udp
    -p 81:80 –p 443:443

随机映射
    docker run -p 80(随机端口)

容器其他操作

# 查看容器中正在运行的进程
docker top 容器ID/名称

# 拷贝文件或目录
docker cp 宿主机目录/文件 容器ID:/usr1/test
docker cp 容器ID:/usr1/test 宿主机目录/文件

# 查询容器正在运行的日志
docker logs 容器ID/名称

# 实时显示容器中运行日志
docker logs -f 容器ID/名称

# 将容器实时日志输出到文件,可以配合ELK进行日志收集
docker logs -f  testxx > /var/log/xxx.log 2>1&

容器持久化存储

# 挂载数据卷  -v 宿主机目录或文件:容器中目录或文件
docker run -d -v ./test:/test --name='n1' nginx

数据卷容器

# 启动一个容器作为数据卷
docker run -it --name "my_volumes" -v /opt/Volume/conf:/usr/local/nginx/conf nginx /bin/bash

# 跳出容器
ctrl p q

# 使用上面的数据卷容器作为新容器的数据卷,相当于新容器挂载了/opt/Volume/conf目录
docker run -d  -p 8085:80 --volumes-from  my_volumes --name "n85" nginx
docker run -d  -p 8086:80 --volumes-from  my_volumes --name "n86" nginx

基于容器制作镜像

# 查询正在运行的容器
docker ps

# 将容器制作为镜像(如果要提交到私有镜像库,新镜像名称必须携带私有库的域名,例如:xxx.com
docker commit 容器ID xxx.com/my_container:v1

# 将容器提交到私有镜像库
docker push xxx.com/my_container:v1

# 修改镜像名称(想要将公共镜像推送到私有镜像库,必须修改其名称,前面加上私有库的域名)
docker tag old_container_name xxx.com/new_container_name:latest

优点:制作方便,只要进入容器,安装好环境,就可以制作一个新的镜像,并部署到其他环境。

缺点:容器内新增的服务必须在启动后,再进入容器启动一次服务,但是可以通过启动时执行指定命令来解决这个问题

基于Dockerfile制作镜像

  • FROM命令
FROM 镜像ID:标签

# 必须指定镜像和标签,作为基础镜像,此命令是必须的
FROM centos:latest
  • RUN命令
# RUN 执行shell命令,多条命令使用&&连接,也可以使用多行RUN,但是docker镜像是分层制作的
# 在dockerfile中每一条执行命令都创建一层,所以我们尽量创建少的层,把能够合并的命令放在一
# 层中
RUN cd /opt && mkdir code && yum install -y vim && yum install -y wget

以上命令就是切换到/opt目录,创建一个code子目录,安装vim和wget

  • CMD命令

使用镜像启动容器时默认的运行命令,如果在docker run的时候,在后面带上自定义命令,那么这个命令就会被替换掉,导致容器启动的时候不会执行,所以一般我们不用这个

CMD ["/usr/sbin/sshd", "-D"]
  • ENTRYPOINT

和上面的CMD命令相似,但是不会被启动容器时的自定义命令替换掉,一定会执行;还有一个用法是在docker run后面的自定义命令可以作为ENTRYPOINT的命令参数传入

ENTRYPOINT ["/usr/sbin/sshd", "-D"]
  • COPY命令

从主机拷贝文件到容器中

COPY init.sh /opt/
  • ADD命令

和copy命令类似,拷贝文件到镜像中,但是对于压缩文件(含有tar的)拷贝过去会直接解压

ADD xxx.tar.gz /var/www/html
  • EXPOSE命令

指定容器要对外暴露的端口

EXPOSE 80
EXPOSE 3306
  • VOLUME命令

在dockerfile中声明了VOLUME绑定目录并不会在容器启动的时候帮我们自动绑定目录,那么VOLUME和-v有什么区别呢?假设我们在dockerfile中声明了

VOLUME ['/data', '/etc/proc']

那么我们使用不同的命令启动时

# 如果在run容器的时候,没有指定-v,那么此时会创建一个匿名卷,并且绑定到/var/lib/docker/volumes(docker安装目录下的volumes中)
docker run -d --name='cent1' my_centos

# 如果在run的时候,指定了-v,那么就会覆盖匿名卷
docker run -d -v ./data:/data -v ./proc:/etc/proc --name='cent1' my_centos

所以如果一个镜像制作的时候使用了VOLUME,那么每次启动都会在宿主机上创建一个数据目录,如果这个目录里存在的东西很多,那么时间长了,我们就会发现宿主机上空间越来越小,即使你重启容器也不行。所以要了解这个性质,针对性的清理docker目录。

  • WORKDIR

相当于cd命令,区别是在dockerfile中使用了WORKDIR后,在它下面的语句,工作目录都变成了WORKDIR指定的目录

 WORKDIR /code
  • ENV

在dockerfile中设置环境变量,主要为了在执行docker run的时候可以通过-e参数修改环境变量,这样也可以使镜像更加通用。例如MySQL安装时要指定用户名、密码、绑定IP,如果直接在容器里面安装,那么我们如果要修改的话,必须登录到容器中,进行修改重启。但是在dockerfile中指定了ENV变量,那么在docker run的时候就可以修改这些设置。

ENV MYSQL_USERNAME = 'root'

# 使用时用以下方式获取
${MYSQL_USERNAME}

下面给一个简单的dockerfile例子

FROM centos:latest

# 替换yum源
COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
# 配置pip文件
COPY pip.conf ~/.pip/
RUN yum clean all && yum makecache && yum update -y && yum install -y vim && yum install -y wget
RUN yum install -y python38 && yum install -y python38-setuptools && yum install -y python38-pip && # 配置pip文件

# 切换到目录/ftp
WORKDIR /ftp

# 将init.sh文件拷贝到镜像的/ftp目录下
COPY init.sh .

# 执行启动命令
ENTRYPOINT ["/bin/bash", "init.sh"]

在当前目录下创建dockerfile文件,并使用docker build命令制作镜像

# -t 后面是新的镜像标签, .表示使用当前目录下的dockerfile文件
docker build -t my_https://gitee.com/liuhuihe/Ehe/raw/master/images/centos:latest .

搭建私有镜像库

在很多企业中,都不能肆意的访问外网,那这样是不是docker就没法愉快的使用了呢?我们通常下载镜像都是从docker hub官方仓库下载的,如果在企业内部搭建一个私有镜像库,那是不是就能像外网一样使用docker了呢,docker官方为我们提供了非常简单的搭建私有库的方式:

docker run -d -p 5000:5000 --restart=always --name docker_registry -v /opt/registry:/var/lib/registry registry
# --restart=always docker服务启动时,容器就启动
# -v 将镜像存储地址映射到宿主机,防止丢失

好了,通过以上命令我们的私有镜像库就搭建好了,是不是很简单呢?那么怎么使用呢?

  • 修改配置文件
vim /etc/docker/daemon.json

{
"insecure-registries": ["xx.xx.xx.xx:5000"]
}
  • 重启docker服务
systemctl restart docker
  • 推送本地镜像到私有镜像库

修改镜像名称,添加私有镜像库地址为前缀,然后push到镜像库

docker tag nginx:latest xx.xx.xx.xx:5000/nginx:latest
docker push xx.xx.xx.xx:5000/nginx:latest
  • 在其他机器上pull
docker pull xx.xx.xx.xx:5000/nginx:latest

docker搭建jupyterlab开发环境

  1. docker安装anaconda
docker pull continuumio/anaconda3
  1. 启动anaconda容器
docker run -d -p 8888:8888 
-v /home/notebooks/:/opt/notebooks 
--restart=always continuumio/anaconda3 /bin/bash 
-c "/opt/conda/bin/conda install jupyter -y 
--quiet && /opt/conda/bin/jupyter notebook 
--notebook-dir=/opt/notebooks --ip='*' 
--port=8888 
--no-browser 
--allow-root 
--NotebookApp.token='123456789'"

-v /home/notebooks:本地目录,jupyter创建的所有文件都会在此目录下

  1. 连接jupyterlab

http://127.0.0.1:8888/lab

Token:123456789

  1. 安装第三方库
conda install packagename

Docker实战

# 下拉代码
cd Code/
git clone git@172:/home/git/src/nlp/diaodu/KnowledgeDemo

# 使用已有镜像生成新的容器:KnowledgeDemo
docker images
docker run -p 2530:9001 --name KnowledgeDemo -dt f255141a932f bash

# 进入开启容器,复制代码到容器里面
docker exec -ti KnowledgeDemo bash
docker cp KnowledgeDemo KnowledgeDemo:/home/nlp

# 进去容器,运行脚本
docker exec -ti KnowledgeDemo bash
cd /home/nlp
sh reload.sh

# 查看进程
docker images
docker ps | grep KnowledgeDemo

# 提交代码,指定版本
docker commit -a "leslie" -m "KnowledgeDemo" KnowledgeDemo knowledgedemo:v1

# 保存为.tar文件
cd /home/dockersave/
mkdir KnowledgeDemo
cd KnowledgeDemo/
docker save -o KnowledgeDemo.tar knowledgedemo:v1

Git篇

Git常用命令

git config

用法: git config –global user.name “[name]”

用法: git config –global user.email “[email address]”

此命令分别设置要与提交一起使用的作者姓名和电子邮件地址。

git config --global user.name "liuhuihe"
git config --global user.email "lhhriver@163.com"

git init

用法: git init [repository name]

此命令用于启动新的存储库。

git init  /home/liuhuihe/DEMO

git clone

用法: git clone [url]

此命令用于从现有URL获取存储库。

git clone https://github.com/jalammar/jalammar.github.io.git
git clone git@17.163.18.443:/home//src/nlp.git

git add

用法: git add [file]

此命令将文件添加到暂存区域。

git add test.py

用法: git add *

此命令将一个或多个添加到暂存区域。

git add *

git commit

用法: git commit -m “[ Type in the commit message]”

此命令在版本历史记录中永久记录或快照文件。

git commit -m "First Commit"

用法: git commit -a

此命令将提交你使用git add命令添加的所有文件,并且还将提交自此以来已更改的所有文件。

git commit -a

git diff

用法: git diff

此命令显示尚未暂存的文件差异。

git diff

用法:git diff –staged

此命令显示暂存区域中的文件与当前最新版本之间的差异。

git diff -staged

用法: git diff [first branch] [second branch]

该命令显示了上述两个分支之间的差异。

git diff branch_2 branch_3

git reset

用法: git reset [file]

此命令取消暂存文件,但保留文件内容。

git reset site.css

用法: git reset [commit]

此命令在指定的提交后撤消所有提交,并在本地保留更改。

git reset heliluya

用法: git reset –hard [commit]

此命令将丢弃所有历史记录,并返回到指定的提交。

git reset -hard haliluya

git status

用法: git status

该命令列出了所有必须提交的文件。

git status

git rm

用法: git rm [file]

此命令从你的工作目录中删除文件,然后进行删除。

git rm test.py
# 删除缓存区文件,再提交可以删除远程文件,本地不受影响
git rm -r --cached .idea

git log

用法: git log

此命令用于列出当前分支的版本历史记录。

git log

用法: git log –follow[file]

此命令列出了文件的版本历史记录,包括文件的重命名。

git log -follow project_1

git show

用法: git show [commit]

此命令显示指定提交的元数据和内容更改。

git show dfgdfgs

git tag

用法: git tag [commitID]

该命令用于将标签赋予指定的提交。

git tag dfgsdfgsdfgsdf

git branch

用法: git branch

此命令列出当前存储库中的所有本地分支。

git branch

列出本地及远程分支

git branch -a

用法: git branch [branch name]

此命令创建一个新分支。

git branch  branch_1

新建并跳转到分支

git checkout -b dbg_lichen_star

用法: git branch -d [branch name]

此命令删除功能分支。

git branch -d branch_1

git checkout

用法: git checkout [branch name]

此命令用于从一个分支切换到另一个分支。

git checkout branch_2

用法: git checkout -b [branch name]

该命令将创建一个新分支,并切换到该分支。

git checkout -b branch_4

git merge

用法: git merge [branch name]

此命令将指定分支的历史记录合并到当前分支中。

git merge branch_2

git remote

用法: git remote add [variable name] [Remote Server Link]

此命令用于将本地存储库连接到远程服务器。

git remote add origin http://github.com/river

git push

用法: git push [variable name] master

此命令将提交的master分支更改提交到远程存储库。

git push origin master

用法: git push [variable name] [branch]

此命令将分支提交发送到你的远程存储库。

git push origin master

用法: git push –all [variable name]

此命令将所有分支推送到你的远程存储库。

git push --all origin

用法: git push [variable name] :[branch name]

推送分支到远程

git push origin develop:develop

此命令删除远程存储库上的分支, 推送空到远程分支。

git push origin  :branch_2

或者

git push origin --delete branch_2

git pull

用法: git pull [Repository Link]

该命令获取远程服务器上的更改并将其合并到你的工作目录中。

git pull https://github.com/river.git
git pull origin master

git stash

用法: git stash save

此命令临时存储所有已修改的跟踪文件。

git stash save

用法: git stash pop

此命令恢复最近存放的文件。

git stash pop

用法: git stash list

此命令列出所有隐藏的变更集。

git stash list

用法: git stash drop

此命令将丢弃最近存放的变更集。

git stash drop stash@{0}

git 实战

代码提交

提交暂存区到仓库区

git commit -m "update"

提交暂存区的指定文件到仓库区

git commit [file1] [file2] ... -m [message]

提交工作区自上次commit之后的变化,直接到仓库区

git commit -a

提交时显示所有diff信息

git commit -v

使用一次新的commit,替代上一次提交

如果代码没有任何新变化,则用来改写上一次commit的提交信息

git commit --amend -m [message]

重做上一次commit,并包括指定文件的新变化

git commit --amend [file1] [file2] ...

分支

列出所有本地分支

git branch

列出所有远程分支

git branch -r

列出所有本地分支和远程分支

git branch -a

新建一个分支,但依然停留在当前分支

git branch dev

新建一个分支,并切换到该分支

git checkout -b dev
git switch -c dev

切换到指定分支,并更新工作区

git checkout dev
git switch master

合并指定分支到当前分支

git checkout master
git merge dev

删除分支

git branch -d dev

删除远程分支

git push origin --delete dev

查看信息

显示有变更的文件

git status

显示当前分支的版本历史, 命令显示从最近到最远的提交日志

git log
git log --pretty=oneline

用来记录你的每一次命令

git reflog

显示暂存区和工作区的差异

git diff

远程同步

下载远程仓库的所有变动

git fetch [remote]

显示所有远程仓库

git remote -v

显示某个远程仓库的信息

git remote show https://gitee.com/liuhuihe/AC_Project.git

增加一个新的远程仓库,并命名

git remote add dev https://gitee.com/neimenggudaxue/dev.git

本地电脑连接码云项目

git remote add origin https://gitee.com/liuhuihe/AC_Notebook.git

取回远程仓库的变化,并与本地分支合并

git pull origin master

上传本地指定分支到远程仓库

git push origin dev

# 强制推送
git push origin dev -f

强行推送当前分支到远程仓库,即使有冲突

git push [remote] --force

推送所有分支到远程仓库

git push [remote] --all

撤销

恢复暂存区的指定文件到工作区

git checkout [file]

恢复某个commit的指定文件到暂存区和工作区

git checkout [commit] [file]

恢复暂存区的所有文件到工作区

git checkout .

把readme.txt文件在工作区的修改全部撤销, 回到最近一次git commit或git add时的状态

git checkout -- readme.txt

重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

git reset [file]

重置暂存区与工作区,与上一次commit保持一致

git reset --hard
git reset --hard HEAD^   # 上一个版本
git reset --hard HEAD^^   # 上上一个版本
git reset --hard HEAD~100   # 上100个版本
git reset --hard 1094a   # 返回撤销的版本1094a...

把暂存区的修改撤销掉(unstage),重新放回工作区

git reset HEAD readme.txt

标签

列出所有tag

git tag

新建一个tag在当前commit

git tag [tag]

新建一个tag在指定commit

git tag [tag] [commit]

删除本地tag

git tag -d [tag]

删除远程tag

git push origin :refs/tags/[tagName]

查看tag信息

git show [tag]

提交指定tag

git push [remote] [tag]

提交所有tag

git push [remote] --tags

新建一个分支,指向某个tag

git checkout -b [branch] [tag]

提交到服务器

服务器

git init --bare UncleNLP.git
chown -R git:git UncleNLP.git

本地

git init
git remote add origin git@172.168.1.1:/home/nlp/UncleNLP.git
这篇关于程序员防溺水指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!