Linux

来自bbxwiki
跳转至: 导航搜索

静态IP设置

  • Redhat/CentOS /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:26:18:0B:38:C0
ONBOOT=yes
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=xx.xx.xx.xx
DNS2=8.8.8.8
  • SuSE /etc/sysconfig/network/ifcfg-eth0
BOOTPROTO='static'
BROADCAST='172.16.3.255'
IPADDR='172.16.3.222/24'
NAME='xxx Gigabit Network Connection'
NETMASK='255.255.255.0'
NETWORK='172.16.3.0'
STARTMODE='auto'
USERCONTROL='no'
  • Ubuntu/Mint /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 172.16.3.222
netmask 255.255.255.0
network 172.16.3.0
broadcast 172.16.3.255
gateway 172.16.3.1
dns-nameservers 8.8.8.8
PS 生效 sudo /etc/init.d/network restart


静态路由设置

  • Redhat
  • SuSE vim /etc/sysconfig/network/routes
 按以下格式添加内容:
 192.168.1.200 192.168.1.1 255.255.255.0 eth2          这是我的36机器,使用了3块网卡,每个网卡的路由配置如下
 10.166.173.36 10.166.173.11 255.255.255.0 eth0
 10.10.53.85 10.10.53.81 255.255.255.240 eth1
 default 10.166.173.11 - -                             指定“缺省路由”,其实表示3个路由中是优先级最高的1个
 注意不要有空行.
 动态方法: route -add default gw 10.166.173.11
 ref: http://space.itpub.net/26686207/viewspace-718991
  • Ubuntu


DNS设置

  • Redhat (在静态IP中设置)
  • SuSE /etc/resolv.conf
nameserver xx.xx.xx.xx
nameserver 8.8.8.8
  • Ubuntu (在静态IP中设置)


route用法

# 添加路由
route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.10.1
# 查看路由状态
route -n
# 删除路由
route del -net 192.168.20.0 netmask 255.255.255.0


设置hostname

  • Redhat/CentOS
/etc/sysconfig/network
/etc/hosts
ref: http://www.cnblogs.com/huangfox/archive/2012/03/31/2426268.html
  • Ubuntu/LinuxMint
/etc/hostname


通过代理上网

export http_proxy=<proxy>:<port>


注册系统服务

 regist_system_service()
 {
	svc_name=$1"d"
	[ -f /etc/init.d/$svc_name ] && rm -f "/etc/init.d/$svc_name"
	cp -fp $RC_HOME/$svc_name  /etc/init.d/$svc_name
	chmod u+x /etc/init.d/$svc_name
	/sbin/chkconfig --add $svc_name 2>/dev/null >/dev/null
	echo "install $1 successfully!"
 }


查看系统日志

需要管理员权限,用winscp貌似不需要.
vim /var/log/message


screen Cannot open your terminal '/dev/pts/1'

  • 问题描述:
userA首先登录系统,使用screen开启了一个session,然后detach这个窗口。
userB然后登录系统,通过su - userA 变成userA,然后使用screen -r 恢复之前detached窗口,这时系统报如下错误:
Cannot open your terminal '/dev/pts/1' - please check.
  • 解决方法:
userB在 su - userA以后,执行如下命令即可:
script /dev/null
  • 参考
ref: http://blog.sina.com.cn/s/blog_704836f401010osn.html

程序在后台运行命令

  • 在命令行执行以下命令
nohup [command][&]

mount用法

  • mount 中文windows共享
     export LC_ALL=zh_CN.GBK
     mount -t cifs -o username=xxxx,password=xxxx,iocharset=cp936 //192.168.xx.xx/xx /mnt/xx
  • mount 到指定用户和组(uid,gid)
mount -t cifs -o username=xxxx,password=xxxx,iocharset=cp936,uid=718,gid=500 //192.168.xx.xx/xx /mnt/xx

samba中看不到符号链接

  • 修改/etc/samba/smb.conf
[global]
unix extensions = no
follow symlinks = yes
wide links = yes
  • 重启samba服务/etc/init.d/smb restart

screen 用法

  • 会话创建: screen [-S sessionName]
  • 会话挂起: C-A, D
  • 会话查看: screen -ls
  • 会话介入: Attach: screen -r | screen -x (多人共享)
    • 新窗口: C-A, C
  • ref: linux 技巧:使用 screen 管理你的远程会话 http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
  • 更多用法:
C-a ? -> Help,显示简单说明
C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window
C-a p -> Previous,前一个 window
C-a 0..9 -> 切换到第 0..9 个window
Ctrl+a [Space] -> 由视窗0循序换到视窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将当前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,
         此时在 screen session 里 每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> Windows,列出已开启的 windows 有那些
C-a t -> Time,显示当前时间,和系统的 load
C-a K -> kill window,强行关闭当前的 window

RPM安装出错

修改LD_LIBRARY_PATH等环境变量

export LD_LIBRARY_PATH=YourLibPath:$LD_LIBRARY_PATH

看看你最常用的命令

history | awk '{CMD[$2]++;count++;} END { for (a in CMD )print CMD[ a ]" " CMD[ a ]/count*100 "% " a }' | grep -v "./" | column -c3 -s " " -t |sort -nr | nl | head -n10

生成空白文件

dd if=/dev/zero of=zero bs=100 count=2

查看端口占用

lsof -i :12580
netstat -apn | grep 12580

以普通用户执行服务

su test1 -c "python /home/test1/test.py"
ref:http://www.soft6.com/v9/2009/jccz_1028/115390.html

普通用户使用1024以下端口

不让普通用户开80端口, 使用iptables的端口转发,假设你让Tomcat还工作在8080端口
以root身份执行以下两条命令
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING  -j REDIRECT -p tcp --destination-port 80:80 --to-ports 8080
这样,来访本地80端口的数据包都被转发到8080端口,完成了端口转发功能,对别人来说,就好像你的Tomcat就开在80端口一样.

查看远程主机端口是否开放

nc -v host port 端口
telnet host port

Linux下java程序中文乱码问题

从windows下拷贝simsun.ttc到$JAVA_HOME/jre/lib/fonts/fallback目录下.
需要手动创建: fonts/fallback目录.
必要时在fonts/fallback下建立fonts.dir文件.
mkfontscale
mv fonts.scale fonts.dir
ref: http://chen.junchang.blog.163.com/blog/static/6344519201202024621903/

Linux core设置

  • 生成core:ulimit -c unlimited
  • 指定文件名:
/etc/sysctrl.conf 中添加:
kernel.core_pattern = "/corefile/core-%e-%p-%t"
kernel.core_uses_pid = 1
立即生效:sysctrl -p /etc/sysctrl.conf
  • 文件名格式:
    • %p - insert pid into filename #添加pid
    • %u - insert current uid into filename #添加当前uid
    • %g - insert current gid into filename #添加当前gid
    • %s - insert signal that caused the coredump into the filename #添加导致产生core的信号
    • %t - insert UNIX time that the coredump occurred into filename #添加core文件生成时的unix时间
    • %h - insert hostname where the coredump happened into filename #添加主机名
    • %e - insert coredumping executable name into filename

lamp不能访问xampp主页

  • 找到httpd-xampp.conf
# httpd-xampp.conf
# New XAMPP security concept 
# 
       Order deny,allow
       #Deny from all
       #Require local
....

查看kill支持的信号 kill -l

查看网络接入是千兆还是百兆

  • ethtool 网卡名称

yum,zypper源配置

  • redhat:以iso文件mount到/home/extend/repo/iso下为例. 新建/etc/yum.repos.d/rhel-iso.repo(名字任意)
[rhel-iso]
name=Red Hat Enterprise Linux ISO
baseurl=file:///home/extend/repo/iso/
enabled=1
gpgcheck=1
gpgkey=file:///home/extend/repo/iso/RPM-GPG-KEY-redhat-beta,file:///home/extend/repo/iso/RPM-GPG-KEY-redhat-release
  • suse: 以iso文件mount到/home/extend/repo/iso下为例. 新建/etc/zypp/repos.d/suse-iso.repo(名字任意)
[suse-iso]
name=suse-iso
enabled=1
autorefresh=0
baseurl=file:///home/extend/repo/iso
path=/
type=yast2
keeppackages=0

redhat6.x补装32位c++运行库

  • 基于yum安装: yum install libstdc++.i686
  • 直接rpm安装: 以redhat6.3为例,依次安装nss-softokn-freebl-3.12.9-11.el6.i686.rpm, glibc-2.12-1.80.el6.i686.rpm, libgcc-4.4.6-4.el6.i686.rpm, libstdc++-4.4.6-4.el6.i686.rpm

rpm,yum常用用法

  • 根据so文件,找包: yum whatprovides libstdc++.so.6
  • 查找libstdc++所在包,不知具体名字的情况 : yum search stdc --> libstdc++.i686


pkg-config用法

  • 功能: 解决GCC编译链接参数
  • 举例:
# ~/.bash_profile
export PKG_CONFIG_PATH=$HOME/devhome/sdk/pkgconfig:$PKG_CONFIG_PATH
 
# using
gcc -o test test.c $(pkg-config --libs --cflags apr-1)


ubuntu源更新到163

sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/mirrors\.163\.com\/ubuntu\//g' /etc/apt/sources.list


ubuntu/linuxmint待扩展安装程序

# update source
sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/mirrors\.163\.com\/ubuntu\//g' /etc/apt/sources.list
 
# editor
sudo apt-get -y install vim
 
# UML
# sudo apt-get -y install umbrello
 
# develop
sudo apt-get -y install build-essential g++ valgrind
sudo apt-get -y install anjuta kdevelop codeblocks
sudo apt-get -y install autogen automake autoconf libtool libglib2.0-dev
sudo apt-get -y install cmake
sudo apt-get -y install vim code2html
 
# version control
sudo apt-get -y install git subversion
 
# file, ftp, scp
sudo apt-get -y install filezilla gnome-commander ssh openssh-server
 
# net safe
sudo apt-get -y install nmap fail2ban 
 
# system
sudo apt-get -y install screen
sudo apt-get -y install rdesktop
sudo apt-get -y install sysstat htop hardinfo tree
 
# vm
# sudo apt-get -y install virtualbox-4.3
sudo apt-get -y install kvm virt-manager libvirt-bin
sudo apt-get -y install docker.io
 
# 32bits
sudo apt-get -y install lib32stdc++6 lib32z1 libgl1-mesa-dev
 
# image
sudo apt-get -y install ksnapshot shutter
 
# extend dev
sudo apt-get -y install graphviz kcachegrind gv
 
# blog
sudo apt-get -y install nodejs npm
 
# kerbos gssapi
sudo apt-get install libkrb5-dev
 
# tools
sudo apt-get -y install goldendict
 
# have fun
sudo apt-get -y install sl fortune-mod figlet toilet cowsay xcowsay cmatrix bb

apt用法

apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package 安装包
sudo apt-get install package - - reinstall 重新安装包
sudo apt-get -f install 修复安装"-f = ――fix-missing"
sudo apt-get remove package 删除包
sudo apt-get remove package - - purge 删除包,包括删除配置文件等
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends package 了解使用依赖
apt-cache rdepends package 是查看该包被哪些包依赖
sudo apt-get build-dep package 安装相关的编译环境
apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理无用的包
sudo apt-get check 检查是否有损坏的依赖

增加新分区/etc/fstab

  • /dev/sdb1 /home/extend ext3 defaults 0 0

ssh端口映射

  • ssh -CfNgL 33896:192.168.xx.xx:3389 foobar@localhost

linux操作习惯

  • 1st 根据需求建立特定的用户,存放特定的数据
  • 2nd 建立当前常用用户(中心用户)到新用户的无密码即ssh认证登录
    • ssh-keygen
    • ssh-copy-id -i ~/.ssh/.id_rsa.pub newuser@localhost
  • 3rd 采用screen管理多组窗口

快速拷贝与粘贴

  • 字符界面(不管是Slackware 还是RedHat 的)安装后,每次启动时都会自动运行一个叫gpm的程序, 该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的文字反白, 这时反白的区域已经被拷贝, 再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。
  • 在X-Window下,拷贝操作与字符界面下一样, 如果你用的是三键鼠标,按中键进行粘贴, 如果是两键鼠标,则可同时按左右键粘贴(条件是必须在配置XF86时在鼠标的设置里选择 Emulate 3 Button)。

tar解压缩问题

tar包含有用户(own)、文件(mod)权限<如可执行权限>、符号链接等信息

  • 包含可执行文件的tar包,不能在windows下用winzip, winrar, 7z,360,好压等解压缩
  • root解压缩tar仅发生在用户clone时,恰到好处,慢慢体会.
  • Linux下正常使用当前用户(一般非root)来解压缩tar包,解压缩完毕后,用户信息给自动chown, 而mod不变,恰到好处.

crontab计划任务

  • 格式
*  *  *  *  *  command
分  时  日  月  周  命令

*    *    *    *    *    *
-    -    -    -    -    -
|    |    |    |    |    |
|    |    |    |    |    + year [optional]
|    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7)
|    |    |    +---------- month (1 - 12)
|    |    +--------------- day of month (1 - 31)
|    +-------------------- hour (0 - 23)
+------------------------- min (0 - 59)
  • e.g crontab
  • NOTE: crontab不加载用户配置(~/.bashrc,~/.bash_profile),:其执行方式为:
    sh -c "command"

Linux软件开发

Linux截图

  • gnome-screenshot
  • <shift+PrintScr> 载取矩形区域
  • <PrintScr> 载取屏幕
  • ksnapshot
  • --region 矩形区域
  • --freeregion 自由区域
  • shutter 可以自动化(-n -e)
  • -f -n -e 整个屏幕
  • -w -n -e 选定窗口
  • -m -n -e 截取菜单
  • -s -n -e 选定区域
  • -s=1,1,300,200 选定1,1开始宽300高200区域

Linux录屏

  • <Shift+Ctrl+Alt+r> 录屏


CentOS ssh 连接缓慢解决方法

 1. 最为常见的原因是因为server的sshd会去DNS查找访问client IP的hostname,如果DNS不可用或者没有相关记录,就会耗费大量时间。 
    关闭 SSH 的 DNS 反解析,
    编辑server上/etc/ssh/sshd_config文件,添加一行: UseDNS no
2. 在authentication gssapi-with-mic也有可能出现问题
    在server上/etc/ssh/sshd_config文件中修改GSSAPIAuthentication no.


修改/dev/shm

sudo mount -o size=56G -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm/


查看登录历史

last -a 

查看本机公网IP地址

curl ifconfig.me


用户配置文件/etc/skel/

路径/etc/skel/


bash脚本,自动输入sudo的密码

echo "password" | sudo -S bash


含BOM文件查找

# 列出不含BOM头的文本(-L)
grep -IrL $'^\xEF\xBB\xBF' ./
 
# 列出含BOM头的文本(-l)
grep -Irl $'^\xEF\xBB\xBF' ./
 
# 去掉BOM
sed -i 's/\xEF\xBB\xBF//' file
find . -type f   -exec  sed -i 's/\xEF\xBB\xBF//' {} \;


设置zh_CN.UTF-8

# 查看locale
locale -a # 全部字符集
locale # 当前
 
# 安装locale
# sudo /usr/share/locales/install-language-pack zh_CN
sudo dpkg-reconfigure locales
 
# 当前用户生效
export LC_ALL="zh_CN.UTF-8"
 
# 全局生效
# sudo vim /etc/default/locale
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"


双系统启动菜单修复

# sudo add-apt-repository ppa:yannubuntu/boot-repair
# apt-get update
# apt-get install boot-repair
# 在dash中搜索boot-repair
# 点recommand repair


Redhat/CentOS7添加端口

## 查询指定端口(1024)
firewall-cmd --permanent --query-port=1024/tcp
## 添加1024端口
firewall-cmd --permanent --add-port=1024/tcp
firewall-cmd --reload
## 列出所有端口
firewall-cmd --list-all


inotify用法

# install
sudo apt-get install inotify-tools
# demo
inotifywait -mrq --timefmt "%Y%m%d-%H:%M" --format="%T|%w|%f|%e" -e modify,delete,create,attrib /tmp/


查看已安装字体

fc-list
fc-list :lang=zh-cn


参见