Algorithm-bit

  • 定理1:设a,b为两个二进制数,则a+b = a^b + (a&b)<<1。
    证明:a^b是不考虑进位时加法结果。当二进制位同时为1时,才有进位,因此 (a&b)<<1是进位产生的值,称为进位补偿。将两者相加便是完整加法结果。
  • 定理2:使用定理1可以实现只用位运算进行加法运算。
    证明:利用定理1中的等式不停对自身进行迭代。每迭代一次,进位补偿右边就多一位0,因此最多需要加数二进制位长度次迭代,进位补偿就变为0,这时运算结束。
    java代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public int aplusb(int a, int b) {
    // write your code here
    int j_a=a^b;
    int j_b=(a&b);
    while(j_b!=0)
    {
    int t_a=j_a;
    int t_b=j_b<<1;
    j_a=t_a^t_b;
    j_b=t_a&t_b;
    }
    return j_a;
    }

Manage-linux

常用命令

查看系统信息

  • linux 版本
    uname -a
  • linux版本
    cat /proc/version
  • 系统
    more /etc/issue

大文件切分与合并

针对大文件传输容易中断的问题,可以将其切分为小文件,传输后再合并。

  • 切分,可以指定每个文件的大小
    split -b 1024M LargeFile.tar prefix_
  • 合并
    cat prefix_* > merged_file

针对rm被禁用的情况,删除文件

rsync -a --delete empty/ target/ 其中empty为空目录,可以将target目录中的文件删除。

远程连接

ssh

  • ssh建立隧道命令,远程服务器没办法开启其他端口,但是想要用tensorboard之类的,可以使用这个方法
    ssh -N -L 本地端口:localhost:服务器端口 -p 服务器ssh端口(默认22可以不用写) 服务器IP

目录管理

grep

查找文件里符合条件的字符串
grep "word" file

wc

利用wc指令我们可以计算文件的Byte数、字数、或是行数
wc -l file

查看目录中的文件数量

通过ls、grep、wc三个命令的组合可以实现查看目录下文件的数量,ls获取目录所有的文件,grep筛选调.和..,wc用于行记数
ls -l | grep "-" | wc -l

应用管理

后台运行程序

  • 使用 “nohup”

    • “nohup ./test.sh &”,忽略hangup信号,防止终端关闭时程序退出。
    • 运行状态可以用 jobs -l 来查看。
    • 输入bg将一个在后台暂停的命令。变成在后台继续运行。假设后台中有多个命令,能够用bg %jobnumber将选中的命令调出。
    • 输入 fg 将后台中的命令调至前台继续执行。
  • 使用 “setsid” 即 “setsid ./test.sh”。
    ps -ef | grep test.sh 查看对应的进程号,可以杀死

  • 最简单,将命令放入括号当中,比如说:(./test &),这样就行了。
  • 按住 Ctrl+z键,即可将一个正在前台执行的命令放到后台,并且暂停
    查看: jobs
    继续执行: bg 1

    查看端口及服务是否启动

  • 查看ssh服务是否启动
    sudo ps -e |grep ssh
  • 使用lsof
    lsof -i:端口号查看某个端口是否被占用
  • 使用netstat
    使用netstat -anp|grep 80

磁盘管理

1.du命令

du会显示指定的目录或文件所占用的磁盘空间。
du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][—block-size][—exclude=<目录或文件>][—max-depth=<目录层数>][—help][—version][目录或文件]
参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-a或-all 显示目录中个别文件的大小。  
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或--dereference-args 显示指定符号连接的源文件大小。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-k或--kilobytes 以1024 bytes为单位。
-l或--count-links 重复计算硬件连接的文件。
-L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或--megabytes 以1MB为单位。
-s或--summarize 仅显示总计。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
--max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
--help 显示帮助。
--version 显示版本信息。

sudo du --max-depth=1 -h /

du -sh * (同上)

2. df命令

看到当前系统分区(包括交换分区swap)的”文件系统、容量、已用 、可用、已用% 、挂载点“等实时装况
df -l /home
df -h /home #-h,显示M、G更直观

3.fdisk命令

fdisk -l #查看所有挂着的磁盘

网络管理

查看网关方法

1
2
3
4
5
6
1、route -n
2、ip route show
3、traceroute www.prudentwoo.com -s 100 【第一行就是自己的网关】
4、netstat -r
5、more /etc/network/interfaces 【Debian/Ubuntu Linux】
6、more /etc/sysconfig/network-scripts/ifcfg-eth0 【Red Hat Linux】

检查端口

  • 查看已经连接的服务端口(ESTABLISHED)
    netstat -a
  • 查看所有的服务端口(LISTEN,ESTABLISHED)
    netstat -ap
  • 查看指定端口,可以结合grep命令:
    netstat -ap | grep 8080
    也可以使用lsof命令:
    lsof -i:8888
  • 若要关闭使用这个端口的程序,使用kill + 对应的pid
    kill -9 PID号
    ps:kill就是给某个进程id发送了一个信号。默认发送的信号是SIGTERM,而kill -9发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。

防火墙管理

UFW是一个主机端的iptables类防火墙配置工具,比较容易上手。一般桌面应用使用ufw已经可以满足要求了。
Ubuntu下安装方法
sudo apt-get install ufw
使用方法

  • 启用
    sudo ufw enable
    sudo ufw default deny
    作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。
  • 关闭
    sudo ufw disable
  • 查看防火墙状态
    sudo ufw status
  • 开启/禁用相应端口或服务举例

    ufw allow 80 允许外部访问80端口
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sudo ufw delete allow 80 禁止外部访问80 端口
    sudo ufw allow from 192.168.1.1 允许此IP访问所有的本机端口
    sudo ufw deny smtp 禁止外部访问smtp服务
    sudo ufw delete allow smtp 删除上面建立的某条规则
    ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 要拒绝所有的流量从TCP的10.0.0.0/8 到端口22的地址192.168.0.1
    可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):
    sudo ufw allow from 10.0.0.0/8
    sudo ufw allow from 172.16.0.0/12
    sudo ufw allow from 192.168.0.0/16
  • 推荐设置
    sudo apt-get install ufw
    sudo ufw enable
    sudo ufw default deny
    这样设置已经很安全,如果有特殊需要,可以使用sudo ufw allow开启相应服务。

设置

解决linux终端路径过长的问题

vim ~/.bashrc
找到61行左右

1
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

\u 表示当前用户名
\h 表示当前主机名(hostname)
\w 表示当前路径
把\w改为\W(小写的w改为大写),不显示全路径,只显示basename(当前文件夹名)
用户名和主机名也没有什么用

|