ubuntu server guide 学习笔记
1. 软件包
1.1. dpkg
dpkg -l
dpkg -l | grep apache2
dpkg -L ufw
dpkg -S /etc/host.conf
dpkg -i zip_3.0-4_i386.deb
dpkg -r zip
1.2. Apt-Get
1.2.1. apt的相关文件
/etc/apt/sources.list |
设置软件包的获取来源 |
/etc/apt/apt.conf |
apt配置文件 |
/etc/apt/apt.conf.d/ |
apt的零碎配置文件 |
/etc/apt/preferences |
版本参数 |
/var/cache/apt/archives/ |
存放已经下载的软件包 |
/var/cache/apt/archives/partial |
存放正在下载的软件包 |
/var/lib/apt/lists/ |
存放已经下载的软件包详细信息 |
/var/lib/apt/lists/partial/ |
存放正在下载的软件包详细信息 |
1.2.2. apt-get命令的子命令
update |
更新软件包列表 |
upgrade |
升级系统中的所有软件包 |
install |
安装软件包 |
remove |
卸载软件包 |
autoremove |
仅删除不需要再次下载的软件包 |
purge |
彻底删除软件包(包括配置文件) |
source |
下载源代码 |
build-dep |
自动下载安装编译某个软件所需要的软件包 |
dist-upgrade |
升级整个发行版 |
dselect-upgrade |
安装dselect的选择进行升级 |
clean |
删除本地缓存的所有升级包 |
autoclean |
删除本地缓存中无用的软件包 |
check |
检查是否存在有问题的依赖关系 |
例:$ sudo apt-get install php5-mysql apache2 $ sudo apt-get update && sudo apt-get upgrade |
1.2.3. apt-get命令选项
-d,--download-only |
仅下载,不安装 |
-f,--fix-broken |
修复依赖问题(用于install和remove子命令) |
-m,--ignore-missing,--fix-missing |
忽略缺失的软件包。遇到无法下载的软件包,自动忽略 |
--no-download |
禁止下载软件包。与-m配合,可以使apt只使用已经下载的软件包 |
-q,--quiet |
静默模式,输出的信息适合做日志 |
-s,--simulate,--just-print |
模拟测试,不做出实际操作,不改变系统 |
-y,--yes,--assume-yes |
在系统提问时,自动应答yes |
-u,--show-upgraded |
显示已升级的软件包 |
-V,--verbose-versions |
显示已安装和已升级的软件包的完整版本号 |
-b,--compile,--build |
在源码包下载完成后进行编译 |
--ignore-hold |
忽略被保留的软件包 |
--no-upgrade |
不要升级软件包 |
--force-yes |
强制回答yes |
--print-uris |
仅答应软件包地址,不安装 |
--purge |
彻底删除,包括配置文件 |
--reinstall |
重新安装软件包 |
1.2.4. apt-cache命令
功能:搜索某个软件包的名字或显示某个软件包的详细信息 |
|
搜索mysql的软件包 |
$ apt-cache search mysql |
查看ssh软件包的详细版本号 |
$ apt-cache show ssh |
1.2.5. Red Hat、Fedora和Ubuntu软件包操作对比
任务 |
Red Hat、Fedora |
Ubuntu |
基本信息 |
||
软件包后缀 |
*.rpm |
*.deb |
软件源配置文件 |
/etc/yum.conf |
/etc/apt/sources.list |
安装、删除、升级软件包 |
||
更新软件包列表 |
每次运行yum时自动执行 |
apt-get update |
从软件仓库软件安装软件 |
yum install package |
apt-get install package |
安装一个已下载的软件包 |
yum install pkg.rpm rpm -i pkg.rpm |
dpkg -i pkg.deb pkg --install pkg.deb |
删除软件包 |
rpm -e package |
apt-get remove package |
软件包升级检查/测试 |
yum check-update |
apt-get -s upgrade apt-get -s dist-upgrade |
升级软件包 |
yum update rpm -Uvh [args] |
apt-get upgrade |
升级整个系统 |
yum upgrade |
apt-get dist-upgrade |
软件包信息 |
||
获取某软件包的信息 |
yum search package |
apt-cache show package |
获取所有软件包的信息 |
yum list available |
apt-cache dumpavail |
显示所有已安装的软件 |
yum list installed rpm -qa |
dpkg -l dpkg --list |
获取某个已安装软件包的信息 |
yum info package rpm -qi package |
dpkg --status package |
列出某个已安装软件包所包含的文件列表 |
rpm -ql package |
|
列出某个已安装软件包所包含的文档 |
rpm -qd package |
无 |
列出某个已安装软件包所包含的配置文件 |
rpm -qc package |
无 |
显示某个软件包所依赖的软件包列表 |
rpm -qR package |
apt-cache depends package |
显示某个软件包的反向依赖关系 |
rpm -q -whatrequires [args] |
apt-cache rdepends package |
软件包文件信息 |
||
获取某个软件包文件的信息 |
rpm -qpi pkg.rpm |
dpkg --info pkg.deb |
获取某个软件包文件所包含的文件列表 |
rpm -qpl pkg.rpm |
dpkg --contents pkg.deb |
获取某个软件包文件所包含的文档 |
rpm -qpd pkg.rpm |
无 |
获取某个软件包文件所包含的配置文件 |
rpm -qpc pkg.rpm |
无 |
软件包解压 |
rpm2cpio pkg.rpm | cpio -vid |
dpkg-deb --extract pkg.deb |
搜索某个文件是由哪个软件包安装的 |
rpm -qf /file/name |
dpkg -S /file/name dpkg --search /file/name |
搜索所有提供某个文件的软件包 |
yum provides /file/name |
apt-file search /file/name |
杂项 |
||
显示本地软件包缓存的状态 |
无 |
apt-cache stats |
校验所有已安装的软件包 |
rpm -Va |
debsums |
删除本地缓存的所有软件包 |
yum clean packages |
apt-get clean |
仅删除本地缓存中过时的软件包 |
无 |
apt-get autoclean |
删除所有软件包信息 |
yum clean headers |
apt-file purge |
1.2.6. apt源
apt-get install nmap
apt-get remove nmap
apt-get update --更新源
apt-get upgrade --升级软件包
deb 软件的位置
deb-src 软件的源代码的位置
限定词:
main:完全的自由软件。
restricted:不完全的自由软件。
universe:ubuntu官方不提供支持与补丁,全靠社区支持。
muitiverse:非自由软件,完全不提供支持和补丁。
1、原文件备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
2、编辑源列表文件
deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse ## Not recommended
# deb https://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
3、运行sudo apt-get update
1.3. Aptitude
aptitude
aptitude install nmap
aptitude remove nmap
2. Network
ifconfig|grep eth
lshw -class network
apt-get install ethtool
ethtool eth0
2.1. ip设置
临时设置:
ifconfig eth0 10.0.0.100 netmask 255.255.255.0
route add default gw 10.0.0.1 eth0
route -n
ip addr flush eth0 --清除ip设置
dhcp获取ip
auto eth0
iface eth0 inet dhcp
静态ip
auto eth0
iface eth0 inet static
address 10.0.0.100
netmask 255.255.255.0
gateway 10.0.0.1
ifdown eth0 && ifup eth0 --重启网络
2.2. dns设置
vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
网卡配置文件
iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search example.com
dns-nameservers 192.168.3.45 192.168.8.10
2.3. 静态主机名
vim /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu-server
10.0.0.11 server1 server1.example.com vpn
10.0.0.12 server2 server2.example.com mail
10.0.0.13 server3 server3.example.com www
10.0.0.14 server4 server4.example.com file
2.4. 域名解析顺序
vim /etc/nsswitch.conf
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
• files first tries to resolve static hostnames located in /etc/hosts .
• mdns4_minimal attempts to resolve the name using Multicast DNS.
• [NOTFOUND=return] means that any response of notfound by the preceding mdns4_minimal process
should be treated as authoritative and that the system should not try to continue hunting for an answer.
• dns represents a legacy unicast DNS query.
• mdns4 represents a Multicast DNS query.
2.5. 桥接
apt-get install bridge-utils
vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.0.10
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
brctl show
2.6. man
2.6.1. man interfaces
pre-up command
Run command before bringing the interface up. If this command fails then ifup aborts, refraining from marking the interface as configured, prints an error
message, and exits with status 0. This behavior may change in the future. post-up command
Run command after bringing the interface up. If this command fails then ifup aborts, refraining from marking the interface as configured (even though it has really been configured), prints an error message, and exits with status 0.This behavior may change in the future. pre-down command
Run command before taking the interface down. If this command fails then ifdown aborts, marks the interface as deconfigured (even though it has not really been deconfigured), and exits with status 0. This behavior may change in the future. post-down command
Run command after taking the interface down. If this command fails then ifdown aborts, marks the interface as deconfigured, and exits with status 0.This behavior may change in the future.
2.6.2. man ifup
ifup -a
ifdown -a
ifquery -l
-i FILE, --interfaces=FILE
Read interface definitions from FILE instead of from /etc/network/interfaces.
2.6.3. man resolvconf
# vim /etc/resolv.conf
dns-nameservers 192.168.1.254 8.8.8.8
dns-search foo.org bar.com
# ll /etc/resolv.conf
lrwxrwxrwx 1 root root 29 Jun 14 02:40 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
2.7. dhcp
apt-get install isc-dhcp-server
# vim /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.150 192.168.1.200;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.example";
}
2.8. ntp
ntpdate -s ntp.ubuntu.com
apt-get install ntp
#vim /etc/ntp.conf
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+stratum2-2.NTP. 129.70.130.70 2 u 5 64 377 68.461 -44.274 110.334
+ntp2.m-online.n 212.18.1.106 2 u 5 64 377 54.629 -27.318 78.882
*145.253.66.170 .DCFa. 1 u 10 64 377 83.607 -30.159 68.343
+stratum2-3.NTP. 129.70.130.70 2 u 5 64 357 68.795 -68.168 104.612
+europium.canoni 193.79.237.14 2 u 63 64 337 81.534 -67.968 92.792
3. multipath
service multipath-tools stop
multipath -F
service multipath-tools start
service multipath-tools reload
multipathd help --显示相关命令
multipathd -k 进入命令输入界面
echo 'show config' | multipathd -k
Every time either /etc/lvm.conf or /etc/multipath.conf is updated, the initrd should be rebuilt toreflect these changes.
update-initramfs -u -k all
Before setting up DM-Multipath on your system, ensure that your system has been updated and includes the multipath-tools package. If boot from SAN is desired, then the multipath-tools-boot package is also required.
3.1. Resizing an Online Multipath Device
If you need to resize an online multipath device, use the following procedure
1. Resize your physical device. This is storage platform specific.
2. Use the following command to find the paths to the LUN:
# multipath -l
3. Resize your paths. For SCSI devices, writing 1 to the rescan file for the device causes the SCSI driver to
rescan, as in the following command:
# echo 1 > /sys/block/device_name/device/rescan
4. Resize your multipath device by running the multipathd resize command:
# multipathd -k 'resize map mpatha'
5. Resize the file system (assuming no LVM or DOS partitions are used):
# resize2fs /dev/mapper/mpatha
3.2. troubleshotting
# multipathd -k
> > show config
> > CTRL-D
The following command sequence ensures that multipath has picked up any changes to the multipath.conf,
# multipathd -k
> > reconfigure
> > CTRL-D
Use the following command sequence to ensure that the path checker is working properly.
# multipathd -k
> > show paths
> > CTRL-D
Commands can also be streamed into multipathd using stdin like so:
# echo 'show config' | multipathd -k
4. 远程管理
4.1. ssh
apt-get install openssh-client
apt-get install openssh-server
备份配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
chmod a-w /etc/ssh/sshd_config.original
service ssh restart
ssh-keygen -t rsa
ssh-copy-id username@remotehost
chmod 600 .ssh/authorized_keys
4.2. puppet
Puppet server's /etc/hosts file add:
127.0.0.1 localhost.localdomain localhost puppet
192.168.1.17 puppetclient.example.com puppetclient
On each Puppet client, add an entry for the server:
192.168.1.16 puppetmaster.example.com puppetmaster puppet
apt-get install puppetmaster --服务端
apt-get install puppet --客户端
服务端
mkdir -p /etc/puppet/modules/apache2/manifests
# vim /etc/puppet/modules/apache2/manifests/init.pp
containing the following:
class apache2 {
package { 'apache2':
ensure => installed,
}
service { 'apache2':
ensure => true,
enable => true,
require => Package['apache2'],
}
}
# vim /etc/puppet/manifests/site.pp
node 'puppetclient.example.com' {
include apache2
}
service puppetmaster restart
客户端
First, configure the Puppet agent daemon to start. Edit /etc/default/puppet ,changing START to yes:
START=yes
Then start the service:
sudo service puppet start
View the client cert fingerprint
sudo puppet agent --fingerprint
Back on the Puppet server, view pending certificate signing requests:
sudo puppet cert list
On the Puppet server, verify the fingerprint of the client and sign puppetclient's cert:
sudo puppet cert sign puppetclient.example.com
On the Puppet client, run the puppet agent manually in the foreground. This step isn't strictly speaking necessary, but it is the best way to test and debug the puppet service.
sudo puppet agent --test
Check /var/log/syslog on both hosts for any errors with the configuration. If all goes well the apache2 package and it's dependencies will be installed on the Puppet client.
5. DNS
sudo apt-get install bind9
sudo apt-get install dnsutils --测试和排障
/etc/bind/named.conf
/etc/bind/named.conf.options
/etc/bind/db.root
6. 安全
6.1. 用户管理
开启root
sudo passwd
禁用root密码
sudo passwd -l root
禁用root账号
usermod --expiredate 1
man sudo
/etc/sudoers
6.1.1. 用户操作
创建和删除用户
sudo adduser username
sudo deluser username
锁住和解锁用户
sudo passwd -l username
sudo passwd -u username
增加和删除组
sudo addgroup groupname
sudo delgroup groupname
添加用户到组
sudo adduser username groupname
用户属性
ls -ld /home/username
sudo chmod 0750 /home/username
vim /etc/adduser.conf
DIR_MODE=0750
6.1.2. 密码策略
密码长度
/etc/pam.d/common-password
password [success=1 default=ignore] pam_unix.so obscure sha512 minlen=8
查看用户密码状态
sudo chage -l username
设置密码策略
sudo chage username
sudo chage -E 01/31/2015 -m 5 -M 90 -I 30 -W 14 username
6.1.3. ssh连接
who | grep username (to get the pts/# terminal)
sudo pkill -f pts/#
6.2. console安全
6.2.1. Disable Ctrl+Alt+Delete
/etc/init/control-alt-delete.conf
#exec shutdown -r now "Control-Alt-Delete pressed"
6.3. Firewall
sudo ufw enable
sudo ufw allow 22
sudo ufw insert 1 allow 80
sudo ufw deny 22
sudo ufw delete deny 22
sudo ufw allow proto tcp from 192.168.0.2 to any port 22
sudo ufw --dry-run allow http --测试
sudo ufw disable
sudo ufw status
6.3.1. ufw Application Integration
配置文件 /etc/ufw/applications.d
sudo ufw app list
sudo ufw allow Samba
ufw allow from 192.168.0.0/24 to any app Samba
ufw app info Samba
6.3.2. IP Masquerading
1) ufw Masquerading
First, packet forwarding needs to be enabled in ufw. Two configuration files will need to be adjusted, in /etc/default/ufw change the DEFAULT_FORWARD_POLICY to “ACCEPT”:
DEFAULT_FORWARD_POLICY="ACCEPT"
Then edit /etc/ufw/sysctl.conf and uncomment:
net/ipv4/ip_forward=1
Now add rules to the /etc/ufw/before.rules file. The default rules only configure the filter table, and to enable masquerading the nat table will need to be configured. Add the following to the top of the file just after the header comments:
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0] # Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE # don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT
重启ufw
sudo ufw disable && sudo ufw enable
2) iptables Masquerading
Similar to ufw, the first step is to enable IPv4 packet forwarding by editing /etc/sysctl.conf and
uncomment the following line:
net.ipv4.ip_forward=1
sudo sysctl -p
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.0/16 -m state \
--state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
6.3.3. Logs
sudo ufw logging on
sudo ufw logging off
If using iptables instead of ufw, enter:
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 \
-j LOG --log-prefix "NEW_HTTP_CONN: "
A request on port 80 from the local machine, then, would generate a log in dmesg that looks like this (single line split into 3 to fit this document):
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP
SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0
The above log will also appear in /var/log/messages , /var/log/syslog , and /var/log/kern.log
7. 文件服务
7.1. vsftpd
sudo apt-get install vsftpd
edit /etc/vsftpd.conf by changing:
anonymous_enable=Yes
修改ftp家目录
sudo mkdir /srv/files/ftp
sudo usermod -d /srv/files/ftp ftp
重启服务
sudo restart vsftpd
7.2. nfs
sudo apt-get install nfs-kernel-server
vim /etc/exports
/ubuntu *(ro,sync,no_root_squash)
/home *(rw,sync,no_root_squash)
sudo service nfs-kernel-server start
客户端
sudo apt-get install nfs-common
sudo mount example.hostname.com:/ubuntu /local/ubuntu
vim /etc/fstab
example.hostname.com:/ubuntu /local/ubuntu nfs rsize=8192,wsize=8192,timeo=14,intr
7.3. iSCSI Initiator
sudo apt-get install open-iscsi
edit /etc/iscsi/iscsid.conf
node.startup = automatic
sudo iscsiadm -m discovery -t st -p 192.168.0.10
192.168.0.10:3260,1 iqn.1992-05.com.emc:sl7b92030000520000-2
sudo iscsiadm -m node --login
sudo fdisk /dev/sdb
n
p
enter
w
sudo mkfs.ext4 /dev/sdb1
sudo mount /dev/sdb1 /srv
vim /etc/fstab
/dev/sdb1 /srv ext4 defaults,auto,_netdev 0 0
8. 备份
#!/bin/bash
####################################
#
# Backup to NFS mount script.
#
####################################
# What to backup.
backup_files="/home /var/spool/mail /etc /root /boot /opt" # Where to backup to.
dest="/mnt/backup" # Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz" # Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo # Backup the files using tar.
tar czf $dest/$archive_file $backup_files
# Print end status message.
echo
echo "Backup finished"
date # Long listing of files in $dest to check file sizes.
ls -lh $dest
chmod u+x backup.sh
sudo ./backup.sh
sudo crontab -e
0 0 * * * bash /usr/local/bin/backup.sh
还原
tar -tzvf /mnt/backup/host-Monday.tgz
tar -xzvf /mnt/backup/host-Monday.tgz -C /tmp etc/hosts
另外一个shell脚本
#!/bin/bash
####################################
#
# Backup to NFS mount script with
# grandfather-father-son rotation.
#
####################################
# What to backup.
backup_files="/home /var/spool/mail /etc /root /boot /opt" # Where to backup to.
dest="/mnt/backup" # Setup variables for the archive filename.
day=$(date +%A)
hostname=$(hostname -s) # Find which week of the month 1-4 it is.
day_num=$(date +%d)
if (( $day_num <= 7 )); then
week_file="$hostname-week1.tgz"
elif (( $day_num > 7 && $day_num <= 14 )); then
week_file="$hostname-week2.tgz"
elif (( $day_num > 14 && $day_num <= 21 )); then
week_file="$hostname-week3.tgz"
elif (( $day_num > 21 && $day_num < 32 )); then
week_file="$hostname-week4.tgz"
fi # Find if the Month is odd or even.
month_num=$(date +%m)
month=$(expr $month_num % 2)
if [ $month -eq 0 ]; then
month_file="$hostname-month2.tgz"
else
month_file="$hostname-month1.tgz"
fi # Create archive filename.
if [ $day_num == 1 ]; then
archive_file=$month_file
elif [ $day != "Saturday" ]; then
archive_file="$hostname-$day.tgz"
else
archive_file=$week_file
fi # Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo # Backup the files using tar.
tar czf $dest/$archive_file $backup_files # Print end status message.
echo
echo "Backup finished"
date # Long listing of files in $dest to check file sizes.
ls -lh $dest/
9. kvm
kvm-ok --检查是否支持kvm
sudo apt-get install qemu-kvm libvirt-bin
sudo adduser $USER libvirtd
sudo apt-get install virtinst
sudo virt-install -n web_devel -r 256 \
--disk path=/var/lib/libvirt/images/web_devel.img,bus=virtio,size=4 -c \
ubuntu-14.04-server-i386.iso --network network=default,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole -v
sudo virt-clone -o web_devel -n database_devel -f /path/to/database_devel.img \
--connect=qemu:///system
virsh -c qemu:///system list
virsh -c qemu:///system start web_devel
virsh -c qemu:///system autostart web_devel
virsh -c qemu:///system reboot web_devel
virsh -c qemu:///system save web_devel web_devel-022708.state
virsh -c qemu:///system restore web_devel-022708.state
virsh -c qemu:///system shutdown web_devel
virsh -c qemu:///system attach-disk web_devel /dev/cdrom /media/cdrom
sudo apt-get install virt-manager
virt-manager -c qemu:///system
virt-manager -c qemu+ssh://virtnode1.mydomain.com/system --用其他主机连接
sudo apt-get install virt-viewer
virt-viewer -c qemu:///system web_devel
virt-viewer -c qemu+ssh://virtnode1.mydomain.com/system web_devel
10. 开机启动项
sudo update-rc.d -f boa remove --删除启动项
sudo update-rc.d boa default --添加启动项
sudo apt-get install bum #图形界面
sudo apt-get install sysv-rc-conf #字符界面
sudo bum
sudo sysv-rc-conf #进入交互界面
sudo sysv-rc-conf --list #直接打印列表
11. 图形桌面
apt install xinit
apt install gdm
apt install ubuntu-desktop --gnome桌面
apt install kubuntu-desktop --kde桌面
ubuntu系统运行级别,runlevel
0 系统停机状态
1 单用户或系统维护状态
2~5 多用户状态
6 重新启动
修改系统运行级别
vim /etc/init/rc-sysinit.conf
entry env DEFAULT_RUNLEVEL=2
ubuntu server guide 学习笔记的更多相关文章
- CUDA Programming Guide 学习笔记
CUDA学习笔记 GPU架构 GPU围绕流式多处理器(SM)的可扩展阵列搭建,每个GPU有多个SM,每个SM支持数百个线程并发执行.目前Nvidia推出了6种GPU架构(按时间顺序,详见下图):Fer ...
- Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
用了很长一段时间了, 但是一直没有做过任何笔记,感觉 identity 太多东西要写了, 提不起劲. 但是时间一久很多东西都记不清了. 还是写一轮吧. 加深记忆. 这是 0-1 的笔记, 会写好多篇. ...
- [转载]FMS Dev Guide学习笔记(验证客户端二)
一.开发交互式的媒体应用程序 1.使用unique key a. 在客户端ActionScript中创建一个unique key,如下代码所示,unique key的组成为本地电脑时间和一个随机数连接 ...
- SQL Server 2012 学习笔记5
1. 索引(Index) 索引是快速的定位和查找数据.索引分为: 聚集索引:唯一,默认主键,一般选取比较连贯的字段,聚集索引是物理排序. 非聚集索引: 并没有把数据物理排序,只是多了一个索引页(包括索 ...
- SQL Server 2012 学习笔记1
1. 新建的数据库会产生两个文件(数据文件.mdf 和日志文件.ldf) 2. 编辑表格和为表格录入数据 "Design"为设计表格,"Edit Top 200 Rows ...
- MS Sql server 2008 学习笔记
数据库中常用的概念 Sql本身是一个服务器,没有界面,Management Studio 只是一个SQL Server管理工具而已,不是服务器. Sql server 在管理工具下面的服务SQL S ...
- SQL Server数据库学习笔记-概念数据模型
概念数据模型(Conceptual Data Model)也称为信息模型.它是对客观事物及其联系的抽象,用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具. ...
- sql server 2008 学习笔记
sql server 2008 删除已有的实例 想从setup.exe中区卸载,没找到. 原来还是要从控制面板中卸载,卸载Microsoft SQL Server 2008 卸载界面会提示让你选择要删 ...
- ubuntu linux c学习笔记----共享内存(shmget,shmat,shmdt,shmctl)
shmget int shmget(key_t key, size_t size, int flag); key: 标识符的规则 size:共享存储段的字节数 flag:读写的权限 返回值:成功返回共 ...
随机推荐
- Lua库-table
1 获取以及设置大小 a={} print(table.getn(a)) --> table.setn(a,) print(table.getn(a)) --> 2 插入删除 a={} f ...
- iOS视频处理
在iOS中,apple提供了AVFoundation 用来处理音视频,基本能满足一些常用的音视频处理需求,而且能调用的硬件编解码接口,能提高不少效率,这是其它库所不能达到的.最近做过的Recnow S ...
- 解决vue变量未渲染前代码显示问题
在网络加载缓慢或者刷新的时候总会有那么一瞬间出现vue的模板代码,实在很影响美观,对于我这种有强迫症的人来说实在是忍无可忍,后来经过查找资料,终于发现了解决方法,可以使用vue现成的指令来解决这个问题 ...
- 单源最短路dijkstra算法&&优化史
一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...
- DOCTYPE导致MyEclipse无法正常格式化HTML的问题
今天遇到在JSP代码中Ctrl+F无法正常格式化HTML代码,经过排查是DOCTYPE的原因. 之前写的是: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...
- CentOS 7.x下升级Python版本到3.x系列(新老版本共存)
由于python官方已宣布2.x系列即将停止支持,为了向前看,我们升级系统的python版本为3.x系列服务器系统为当前最新的CentOS 7.4 1.安装前查看当前系统下的python版本号 # p ...
- centos7.3 vsftpd 多用户配置
1. 安装vsftpd及pam认证服务软件 yum install vsftpd* -y yum install pam* libdb-utils libdb* --skip-broken -y #设 ...
- Leecode刷题之旅-C语言/python-204计数质数
/* * @lc app=leetcode.cn id=204 lang=c * * [204] 计数质数 * * https://leetcode-cn.com/problems/count-pri ...
- 【转】I2C总线相关知识
1. I2C access 1.1. I2C introduction I2C(Inter-Integrated Circuit)总线是由NXP恩智浦半导体公司在80年代开发的两线式串行总线,用来进行 ...
- Divisibility题解
From lyh 学长 2018.5.3 信(liang)心(liang)杯T3 一道略弱的数论题. 题目描述 给定 n个数,问是否能从中选出恰好 k个数,使得这些数两两之差可以被 m 整除. 输入输 ...