现在的位置: 首页 > 综合 > 正文

ubuntu学习笔记(持续更新) 如何查看ubuntu的内核版本和发行版本号?iptables:unrecognized service 的解决方法

2018年04月11日 ⁄ 综合 ⁄ 共 17518字 ⁄ 字号 评论关闭

下载ubuntu软件包的网站:http://packages.ubuntu.com/

 http://www.freeit.com.cn/forum.php?mod=viewthread&tid=2068

很好的书籍下载地址:http://www.chnxp.com.cn/soft/T/TN/
一.
 ubuntu中打开终端的方法:

首先按住Alt,然后按一下F2,出来一个运行框,在里面输入 gnome-terminal即可运行。在这个运行框里,可以执 行很多命令,想当于windows的[运行],不过很难记住。可以把终端窗口打开放在鼠标右键,效果是在桌面或文件夹内的空白处右键点击,将出现“从终端打开”的快捷方式。那个需要使用一个软件。安装很简单,打开终端,在里面输入以下命令sudo apt-get install nautilus-open-terminal然后注销下,即可看到!

Vectoring+DSL的串扰抵消算法研究及抵消值并行运算的ASIC实现

二.输入法切换:

Dash home(左边侧边栏最上边)  点击   more Apps  第二项  installed  选中右边的see more results    找到keyboard input methods  (是个白色的中间一个小写i 的白色的正方块) 点击   选中中间的input method    有select an input method  点击  出现 chinese选项,将鼠标放到上面,选中自己要用的输入法就行了,然后再进入到language support  (和keyboard input
method靠的很近)language选项中最下行有”Keyboard input method system:“这么一行字,点击,我的选中的是ibus,以后shift +空格   就可以切换了

三软件源怎么加入到/etc/apt/sources.list文件中?

用sudo gedit /etc/apt/sources.list 打开,把地址复制进去就行了

 四.Ubuntu下激活ROOT账户

Ubuntu 12.04默认是不允许root登录的,在登录窗口只能看到普通用户和访客登录。以普通身份登陆Ubuntu后我们需要做一些修改,普通用户登录后,修改系统配置文件需要切换到超级用户模式,在终端窗口里面输入:
sudo  -s.然后输入普通用户登陆的密码,回车即可进入 root用户权限模式。

然后执行: vi /etc/lightdm/lightdm.conf.

增加 greeter-show-manual-login=true  allow-guest=false  . 修改完的整个配置文件是

[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-show-manual-login=true #手工输入登陆系统的用户名和密码
allow-guest=false   #不允许guest登录

然后我们启动root帐号:
sudo passwd root
根据提示输入roott帐号密码。

重启ubuntu,登录窗口会有登录选项,这时候我们就可以通过root登录了

五.打开命令行的快捷方式"CTRL+ALT+T"

六.Ubuntu Linux Vmware方式 共享windows目录

1.在虚拟机下设置windows的共享文件
2.安装VMvare tools
正常情况下,此时可以在mnt目录下见到hgfs文件夹,查看hgfs文件夹里是否存在windows刚共享的文件夹,存在即表示成功,注意名字为虚拟机下面的名字,即第一步中所设置的共享名
ls /mnt/hgfs/
如果htfs目录 下没有东西,可如下操作

方法一(已经过验证):

1,安装vmware tools

2,安装后,在usr/bin下就会出现vmware-config-tools.pl,运行这个文件。

方法二(未验证):

a、使用vmtool 提供的命令——vmware-hgfsclient 查看系统中可以看到的由宿主机共享出的目录;

b、使用mount命令将宿主机共享出的目录挂接到/mnt/hgfs/下;

      mount  -t   vmhgfs         .host:/ASources              /mnt/hgfs/

     .host:/ASources 其中 .host:/表示的是宿主机;ASources 标识的是宿主机共享出的目录;1中命令查到的共享目录。

c、写到/etc/fstab 中进行自动挂接

     ./host:/ASources               /mnt/hgfs              vmhgfs            default    0                 0 

3.设置软链接便于访问
做个软连接,将共享目录放到根目录下,成为新的文件windows,以免每次都得进入/mnt/hgfs/Linuxsharee/目录,以后直接操作根目录下面的windows目录即可了,实际上现在windows下面的E:\Linux\ 和虚拟机下面/mnt/hgfs/windows-share以及根目录下的/windows就是一样的了,改变任意一个,三者同时改变,是硬同步的
ln -s /mnt/hgfs/windows-share /windows        建立软链接
ls /windows                                   即可见到windows系统下面共享的东西了

七.Ubuntu中安装tftp服务

1、安装相关软件包
apt-get install tftpd (服务端)
apt-get install tftp (客户端)
apt-get install xinetd

2、建立配置文件
cd /etc/xinetd.d/
vi tftp
输入
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}

存盘退出

3、建立tftp服务文件目录
mkdir /tftpboot

4、从新启动服务
/etc/init.d/xinetd restart

安装完成!测试方法:
在/tftpboot 目录下随便放个文件abc
然后 运行tftp 192.168.123.202 进入tftp命令行
输入get abc 看看是不是能把文件下下来,如果可以就可以了,也可以put 文件上去。

 

八. MAKEFILE: 出错:

makefile:4: *** missing separator. Stop.

解决办法:用WinHex或UltraEdit以二进制方式打开,里面的Tab字符对应0x09而不应该是几个0x20

mkdir 目录名         => 创建一个目录

rmdir 空目录名      => 删除一个空目录

rm 文件名 文件名   => 删除一个文件或多个文件

rm –rf 非空目录名 => 删除一个非空目录下的一切

touch 文件名        => 创建一个空文件

九.Linux公社资料下载

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

十.Linux中如何查看服务及监听端口

 问:我该如何发现哪种服务正在某个特定端口上监听呢?我如何发现哪一个程序正在一个特定端口上监听呢?

  答:在*NIX系统中,你可以使用下面的任何一个命令来得到在一个特定TCP端口上监听的列表。

  Lsof:其功能是列示打开的文件,包括监听端口。

  netstat :此命令象征性地展示各种与网络有关的数据和信息的内容。

  Lsof命令示例

  你可以输入下面的命令来查看IPv4端口:

  # lsof -Pnl +M -i4

  你可以输入下面的命令来查看IPv6协议下的端口列示:

  # lsof -Pnl +M -i6

  此例输出:

实例:Linux中如何查看服务及监听端口


    
    这里我们不妨解释一 下。第一栏是command,它给出了程序名称的有关信息。请注意标题的细节。例如,第二行的gweather* 命令从美国 NWS服务器(140.90.128.70)获取天气的报告信息,包括交互天气信息网络和其它的天气服务。在这里,我们解释一下命令各个参数。

  1. -P :这个选项约束着网络文件的端口号到端口名称的转换。约束转换可以使lsof运行得更快一些。在端口名称的查找不能奏效时,这是很有用的。

  2. -n : 这个选项约束着网络文件的端口号到主机名称的转换。约束转换可以使lsof的运行更快一些。在主机名称的查找不能奏效时,它非常有用。

  3. -l :这个选项约束着用户ID号到登录名的转换。在登录名的查找不正确或很慢时,这个选项就很有用。

  4. +M :此选项支持本地TCP和UDP端口映射程序的注册报告。

  5. -i4 :仅列示IPv4协议下的端口。

  6. -i6 : 仅列示IPv6协议下的端口。

  Netstaty命令举例

  请输入下面的命令:

  # netstat -tulpn

  或者是

  # netstat -npl

  请看输出结果::

  

 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:6881 0.0.0.0:* LISTEN 6908/python

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5562/cupsd

tcp 0 0 127.0.0.1:3128 0.0.0.0:* LISTEN 6278/(squid)

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5854/exim4

udp 0 0 0.0.0.0:32769 0.0.0.0:* 6278/(squid)

udp 0 0 0.0.0.0:3130 0.0.0.0:* 6278/(squid)

udp 0 0 0.0.0.0:68 0.0.0.0:* 4583/dhclient3

udp 0 0 0.0.0.0:6881 0.0.0.0:* 6908/python

  请注意,最后一栏给出了关于程序名称和端口的信息。在这里,我们解释一下各参数的含义:

  -t : 指明显示TCP端口

  -u : 指明显示UDP端口

  -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)

  -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。

  -n : 不进行DNS轮询(可以加速操作)

  关于/etc/services文件

  /etc/services是一个纯ASCII文件,它可以提供互联网服务的友好文本名称,还有其默认分配的端口号和协议类型。每一个网络程序都要进入这个文件得其服务的端口号(和协议)。你可以借助于cat命令或less命令等来查看这个文件:

  

 $ cat /etc/services

$ grep 110 /etc/services

$ less /etc/services

因为没有在线的时候进行安装软件包,但是也是可以进行离线安装的,但是在Ubuntu系统中离线安装软件包要怎么的安装呢!会不会很是麻烦?所以现在我们一起去看看吧!

 
一.应用场景
a.当我们需要在多台电脑安装同一个软件,并且这个软件很大,下载需要很长时间时
b.需要安装软件的ubuntu不能上网
二.离线安装包的制作
2.1.通过如下指令下载XXXX软件所需要的deb包
        $ sudo apt-get -d install XXXXX
执行完上述指令后,XXXX软件的安装包就下载到了/var/cache/apt/archives目录下
2.2.生成依赖关系
1.根目录下新建一个文件夹 
$ sudo mkdir offlinePackage
2.将下载的deb包拷贝到上述新建的文件夹下
$ sudo cp -r /var/cache/apt/archives  /offlinePackage
3.修改文件夹的权限,可读可写可执行
$ sudo chmod 777 -R /offlinPackage/
4.建立deb包的依赖关系
$ sudo dpkg-scanpackages /offlinePackage/ /dev/null |gzip >/offlinePackage/Packages.gz
如果出现错误:sudo: dpkg-scanpackages: command not found
则需要安装dpkg-dev工具:
$ sudo apt-get install dpkg-dev
5.将生成的Packages.gz包复制到和deb同目录下
$ sudo cp /offlinePackage/Packages.gz /offlinePackage/archives/Packages.gz
2.3.打包成压缩包,以备后用
        $ tar cvzf offlinePackage.tar.gz offlinePackage/
保存offlinePackage.tar.gz文件到U盘或服务器
三.在另外一台Ubuntu上离线安装
       1.插入U盘或光盘,将offlinePackage.tar.gz复制到根目录下,解压
        $ sudo tar -xvf offlinePackage.tar.gz
       2.将安装包所在和源路径添加到系统源source.list
        $ sudo vi /etc/apt/sources.list
           deb file:///offlinePackage archives/
       然后将所有的其他deb全部注销掉(#)
       注意:我们在添加之前可以先将原来的源备份
        $ sudo cp /etc/apt/sources.list /etc/apt/sources.list.back
       以备以后使用
3. 更新系统源
        $ sudo apt-get update
4.离线安装
        此时,在没有网络的情况下,我们就可以安装我们之间下载的XXXX软件了
        $ sudo apt-get  install XXXXX
注意:
    兼容性问题,如果我们制作安装包时,用的是64位的ubuntu,那么该离线包只能在其他64位系统上安装。
    有些软件对ubuntu server和ubuntu desktop版也不兼容。总之,在什么系统下制作的离线包,就在什么系统下安装。
    Ubuntu系统中离线安装软件包是很麻烦的一种方法,一般情况下还是不要用这个进行,因为它有着很多的条件,以上就是关于离线安装的过程和操作

十一.Ubutu 12.04
LTS 安装iNode 后缺少libjpeg.so.62与libtiff.so.3解决方法--软连接问题

1.首先执行locate 命令

$:locate libjpeg(/libtiff)

发现了在 /usr/lib/i386-linux-gnu/下有libjpeg.so,于是执行了以下命令。

2.创建软链接
$:sudo cp ./i386-linux-gnu/libjpeg.so.8 ./i386-linux-gnu/libjpeg.so.8.0.2 ./
$:sudo ln -s libjpeg.so.8 libjpeg.so.62
创建了libjpeg.so.62指向新库libjpeg.so.8的软链接。(实际上libjpeg.so.8是指向libjpeg.so.8.0.2的硬链接)
$:sudo cp /usr/lib/i386-linux-gnu/libtiff.so.4 /usr/lib/i386-linux-    gnu/libtiff.so.4.3.4 ./
$:sudo ln -s libtiff.so.4 libtiff.so.3
创建了libtiff.so.3指向新库libtiff.so.4的软链接。(实际上libtiff.so.4为指向libtiff.so.4.3.4的硬链接)
十二.如何查看ubuntu的内核版本和发行版本号?

  有时候,我们在升级内核版本或者是从一个版本升级到新的版本之后,想要查看一下自己的ubuntu是否升级成功。可是有没有一种比较快捷的方法比如说在终端里面查看呢?答案是肯定的。为了查看 Ubuntu 的版本号,可以采用以下两种方法之一。

方法一

在终端中执行下列指令:

cat /etc/issue

可以查看当前正在运行的 Ubuntu 的版本号。其输出结果类似下面的内容:

Ubuntu 8.04 /n /l

方法二

使用 lsb_release 命令也可以查看 Ubuntu 的版本号,与方法一相比,内容更为详细。执行指令如下:

sudo lsb_release -a

将输出结果:

Distributor ID:    Ubuntu
Description:    Ubuntu 8.04
Release:    8.04
Codename:    hardy
那么,如果需要查看内核版本号呢?
查看内核版本号的方法是:
打印一个终端,输入命令uname -r

十三.Ubuntu添加虚拟网卡的方法
 

在eth0中添加一块虚拟网卡:

方法1,快递创建\删除虚拟网卡

 

复制代码代码示例:
sudo ifconfig eth0:0 192.168.10.10 up

在eth0网卡上创建一个叫eth0:0的虚拟网卡,IP地址:192.168.1.63。

删除这个虚拟网卡,可以用如下的命令:

 

复制代码代码示例:
sudo ifconfig eth0:0 down

重启服务器或网络,虚拟网卡即消失。

方法2,修改网卡配置文件

在ubuntu下,网卡的配置文件为/etc/network/interfaces

修改这个文件:

 

复制代码代码示例:
sudo vim /etc/network/interfaces

增加如下内容并保存:

 

复制代码代码示例:
auto eth0:0

iface eth0:0 inet static

address 192.168.10.10

netmask 255.255.255.0

#network 192.168.10.1

#broadcast 192.168.1.255

保存后,重启网卡(重新加载配置文件)使配置生效:

 

复制代码代码示例:
sudo /etc/init.d/networking restart

用第二种方式配置的虚拟网卡,重启服务器或网卡配置,不会丢失,即永久生效。

十四.Linux和Windos XP下向路由表添加路由

 

查看Linux服务器的路由表:netstat -r  和  route -e

添加默认的路由:route add default gw X.X.X.X(下一跳路由器地址) 

                    举例:route add default gw 192.168.1.1

添加到一台主机的路由:route add -host X.X.X.X(主机地址) gw X.X.X.X(下一跳路由器地址)

                                举例:route add -host 192.168.10.100 gw 192.168.1.2

添加到一段网络的路由:route add -net X.X.X.X(网络地址) netmask X.X.X.X(掩码) gw X.X.X.X(下一跳路由器地址)

                     举例:route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.3

删除一条主机路由:route del -host X.X.X.X (主机地址)

                        举例:route del -host 192.168.10.100

删除一条网络路由:route del -net X.X.X.X(网络地址) netmask X.X.X.X(掩码)

                        举例:route del -net 192.168.10.0 netmask 255.255.255.0

Windows XP

查看路由表:route print

添加到主机或网络的路由:route add X.X.X.X(主机或网络地址) mask X.X.X.X(掩码) X.X.X.X(下一跳路由器地址)

                     举例:到主机 route add 192.168.10.100 mask 255.255.255.255 192.168.1.2

                                 到网络 route add 192.168.10.0 mask 255.255.255.0 192.168.1.2

删除路由表:route delete X.X.X.X(主机或网络地址)

            举例:route delete 192.168.10.100

                        route delete 192.168.10.0

可以加上-p参数,让路由成为永久性的,重启后仍然存在

route add -p add 192.168.10.100 mask 255.255.255.255 192.168.1.2

在ubuntu中由于不存在 /etc/init.d/iptales文件,所以无法使用service等命令来启动iptables,需要用modprobe命令。
启动iptables
modprobe ip_tables
关闭iptables(关闭命令要比启动复杂)
iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
modprobe -r ip_tables
依次执行以上命令即可关闭iptables,否则在执行modproble -r ip_tables时将会提示
FATAL: Module ip_tables is in use.

上述问题最总得到解决。

十六.ubuntu12.04没有/var/log/messages解决
 
因为出错了找不到这个文件,很奇怪,因为网上介绍说查看这个文件的
 
然后百度,发现有些版本是没有,不过ubuntu的可以有
 
编辑/etc/rsyslog.d/50-default.conf
 
其中有这么一段
 
*.=info;*.=notice;*.=warn;\
    auth,authpriv.none;\
    cron,daemon.none;\
    mail,news.none        -/var/log/messages
 
这是本来就有,却被注释了。现在解注释就行
 
保存后重启服务:sudo restart rsyslog  

十七.Ubuntu
手动挂载U盘

有时候只有Ubuntu server,有时候Ubuntu Desktop不能自动挂载U盘。这个时候需要一些命令:
1.在插入U盘前和插入U盘后,都输入同一个命令,检查多了哪个盘
cat /proc/partitions
这里我发现多了
   8       16    7827424 sdb
   8       17    7825423 sdb1

sdb是统称,所以新插入的U盘就是/dev/sdb1

2.用命令检查新的U盘的文件系统格式
root@ www.linuxidc.com :/# fdisk -l /dev/sdb

Disk /dev/sdb: 8015 MB, 8015282176 bytes
247 heads, 62 sectors/track, 1022 cylinders, total 15654848 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001fce0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *          62    15650907     7825423    c  W95 FAT32 (LBA)

看到这里是FAT32格式。

3.mount 
mount -t vfat /dev/sdb1 /media/usb

注意:  
mount -t 按两次tab键会提示输入什么文件系统类型
/media/usb是我自己创建的目录

4.umount
umount /media/usb

十八.Linux下软件安装方法汇总
Linux系统中,软件通常以源代码或者预编译包的形式提供。
软件源代码需要您亲自编译为二进制的机器代码才能够使用,安装比较耗时,不过您可以自行调节编译选项,决定您需要的功能或组件,或者针对您的硬件平台作出优化。
预编译的软件包,通常是由软件的发布者进行编译,您只要将软件拷贝到系统中就可以了。考虑到预编译软件包的适用性,预编译软件包通常不会针对某种硬件平台优化。它所包含的功能和组件也是通用的组合。

Ubuntu系统中,软件通常以“deb”格式的包文件发布,它是一种预编译软件包。deb包中除了包含已编译的软件,通常还包括软件的拷贝路径、对其它软件包的依赖关系纪录、一个比较通用的配置文件以及软件的描述、版本、作者、类别、占用空间等信息。

deb软件包命令遵行如下约定:
soft_ver-rev_arch.deb
soft为软件包名称,ver为软件版本号,rev为Ubuntu修订版本号,arch为目标架构名称
例如:azureus_2.4.0.2-0ubuntu2_all.deb

您需要使用“dpkg”命令来管理deb软件包:
dpkg -i | --install xxx.deb 安装deb软件包
dpkg -r | --remove xxx.deb 删除软件包
dpkg -r -P | --purge xxx.deb 连同配置文件一起删除
dpkg -I | -info xxx.deb 查看软件包信息
dpkg -L xxx.deb 查看文件拷贝详情
dpkg -l 查看系统中已安装软件包信息
dpkg-reconfigure xxx 重新配置软件包

有些时候,您使用“dpkg”安装一个软件包,系统会提示您该软件包依赖其它软件包。这时,您先安装其它软件包,直到满足依赖关系为止。或者同时安装多个软件包
dpkg -i aaa.deb bbb.deb ccc.deb


APT
===
如果一个软件依赖关系过于复杂,使用“dpkg”来安装它,并不是一个明智的选择,这个时候您就需要用到APT软件包管理系统。APT可以自动的检查依赖关系,通过您预设的方式来获得相关软件包,并自动安装配置它。事实上,在多数情况下,我们推荐您使用APT软件包管理系统。
APT系统需要一个软件信息数据库和至少一个存放着大量deb包的软件仓库,我们称之为“源”。“源”可以是网络服务器,安装CD或者本地软件仓库。您需要修改“/etc/apt/sources.list”文件,使APT系统能够连接到“源”。
您可以在以下页面中获得网络安装源的列表,并且根据您的网络环境,选择速度较快的源。
http://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97/DapperDrake

APT系统主要包括“apt-get”和“apt-cache”等命令。它们通常都是复合命令,包含若干个子命令。
apt-get install xxx 安装xxx
   -d 仅下载
   -f 强制安装
apt-get remove xxx 卸载xxx
apt-get update 更新软件信息数据库
apt-get upgrade 进行系统升级
apt-cache search 搜索软件包
        
Tips:建议您经常使用“apt-get update”命令来更新您的软件信息数据库

源码包
======
对于绝大多数软件,我们建议您使用APT系统来安装它。在少数情况下,例如某软件没有以deb包的格式发布,或者您需要定制适合自己的软件,您可以通过编译源代码的方式安装它。

首先您需要下载软件的源码包,并且将它解包为一些源代码文件。并了便于管理,我们建议您将下载的源码包移动到“/usr/local/src/”目录下,并在这里解包。
sudo mv xxx.tar.gz /usr/local/src 移动源码包
cd /usr/local/src       进入“/usr/local/src/”目录
sudo tar -xzvf xxx.tar.gz    解包源码
cd xxx_ver/          进行解包后的源码目录

源码目录中通常有一个“configure”脚本,用来配置即将开始的编译过程。您可以执行它
sudo ./configure [--prefix=/usr/loca/xxx ......]
它会自动检测软件的编译环境和依赖关系,并且生成“Makefile”文件。
   您可以使用带参数的命令“./configure --help”,或者阅读“INSTALL”文件,查看该脚本允许的参数。例如使用“--prefix=/usr/local/xxx”参数,将软件的安装目录设定为“/usr/local/xxx/”。(如果您一定要将软件安装在一个目录下,我们建议您安装在这里)

现在执行“make”命令,系统会根据“Makefile”文件中的设定,通过“make”工具调用编译器和所需资源文件,将源代码文件编译成目标文件。
sudo make

执行“make install”命令,“make”工具会自动将连接目标文件,将最终生成的文件拷贝到“Makefile”文件设定的路径中,并且完成更改文件的属性,删除残留文件等活动。
sudo make install

现在,您的编译安装已经完成,为了更方便的使用它,需要给程序的可执行文件作一个符号链接。
sudo ln -sf /usr/local/xxx/exe /usr/local/bin/exe

---------------------------------------------------------------------------------------------------

Ubuntu中复制文件或目录的命令

cp(copy)命令

该命令的功能是将给出的文件或目录拷贝到另一文件或目录中。

语法: cp [选项] 源文件或目录 目标文件或目录

说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。

该命令的各选项含义如下:

- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。

- d 拷贝时保留链接。

- f 删除已经存在的目标文件而不提示。

- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。

- p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。

- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。

- l 不作拷贝,只是链接文件。

  需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。

例如:将/home/wally/test中 test.c 的文件复制到/local/arm 中,命令为:

cd /wally/test

ls

sudo cp -i test.c /local/arm

Ubuntu 
./configure 命令

源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install),具体的安装方法一般作者都会给出文档,这里主要讨论配置(configure)。Configure是一个可执行脚本,它有很多选项,使用命令./configure –help输出详细的选项列表,如下:
-bash-3.00# ./configure --help
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE     cache test results in FILE
--help             print this message
--no-create         do not create output files
--quiet, --silent     do not print `checking...' messages
--version           print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX       install architecture-independent files in PREFIX
                [/usr/local]
--exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                [same as prefix]
--bindir=DIR         user executables in DIR [EPREFIX/bin]
……….(省略若干)
很多的选项,个人认为,你可以忽略其他的一切,但请把—prefix加上。这里以安装supersparrow-0.0.0为例,我们打算把它安装到目录 /usr/local/supersparrow,于是在supersparrow-0.0.0目录执行带选项的脚本./configure --prefix=/usr/local/supersparrow,执行成功后再编译、安装(make,make
install);安装完成将自动生成目录supersparrow,而且该软件所有的文件都被复制到这个目录。为什么要指定这个安装目录?是为了以后的维护方便,如果没有用这个选项,安装过程结束后,该软件所需的软件被复制到不同的系统目录下,很难弄清楚到底复制了那些文件、都复制到哪里去了—基本上是一塌糊涂。


用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。

一个小选项有这么方便的作用,建议在实际工作中多多使用

     $0 ---- 当前程序的名称,实际上是一个内部参数,不同于$1,$2....因为它必须有!
  $# ---- 传递给程序的总的参数数目,也就是那个传说中的数组大小
  $? ---- 上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
  $* ---- 传递给程序的所有参数组成的字符串。
  $@ ---- 以"参数1" "参数2" ... 形式保存所有参数
  $$ ---- 本程序的(进程ID号)PID
  $! ---- 上一个命令的PID
  命令行指令$ test.sh f1.c f2.c
  脚本举例:
  if [ $# -eq 0 ];then
  echo "no arguments"
  else
  for args in $@
     do
  echo $args
     done
  fi
  其中$#表示参数的个数,$@取到所有的参数值。

printk()函数的总结

我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况。
对程序的调试起到了很重要的作用。
(下文中的日志级别和控制台日志控制级别是一个意思)

printk(日志级别 "消息文本");这里的日志级别通俗的说指的是对文本信息的一种输出范围上的指定。
日志级别一共有8个级别,printk的日志级别定义如下(在linux26/includelinux/kernel.h中):
#defineKERN_EMERG"<0>"/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
#defineKERN_ALERT"<1>"/*报告消息,表示必须立即采取措施*/
#defineKERN_CRIT"<2>"/*临界条件,通常涉及严重的硬件或软件操作失败*/
#defineKERN_ERR"<3>"/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/
#defineKERN_WARNING"<4>"/*警告条件,对可能出现问题的情况进行警告*/
#defineKERN_NOTICE"<5>"/*正常但又重要的条件,用于提醒。常用于与安全相关的消息*/
#defineKERN_INFO"<6>"/*提示信息,如驱动程序启动时,打印硬件信息*/
#defineKERN_DEBUG"<7>"/*调试级别的消息*/

没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在linux26/kernel/printk.c中可以找到。
下面是一个比较简单的使用
printk(KERN_INFO "INFO\n");  //这里可以使用数字代替 KERN_INFO,即可以写成printk(<6> "INFO\n");  
在这个格式的定义中,日志级别和信息文本之间不能够使用逗号隔开,因为系统在进行编译的时候,将日志级别转换成字符串于后面的文本信息进行连接。

在对系统输出进行控制时,主要是讨论控制台和伪终端的输情况,以及系统日志等。

下面是控制台日志级别的一些简要的介绍
控制台相应的日志级别定义如下:
#define MINIMUM_CONSOLE_LOGLEVEL  1   /*可以使用的最小日志级别*/
#define DEFAULT_CONSOLE_LOGLEVEL  7 /*比KERN_DEBUG 更重要的消息都被打印*/

int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL,/*控制台日志级别,优先级高于该值的消息将在控制台显示*/
/*默认消息日志级别,printk没定义优先级时,打印这个优先级以上的消息*/
DEFAULT_MESSAGE_LOGLEVEL,
/*最小控制台日志级别,控制台日志级别可被设置的最小值(最高优先级)*/
MINIMUM_CONSOLE_LOGLEVEL,
DEFAULT_CONSOLE_LOGLEVEL,/* 默认的控制台日志级别*/
};
在进行查看的时候,可以使用命令 cat /proc/sys/kernel/printk来查看这四个值
可以通过修改文件/proc/sys/kernel/printk中的第一个值来更改当前的控制台日志级别。

(声明:在下面的模块函数中控制台所使用的日志级别均为KERN_WARNING级别)当日志级别高于console_loglevel(控制台日志级别)时,消息才能在控制台显示出来。
假如我们写了一个如下的模块函数:
1 #include <linux/init.h>
2 #include <linux/module.h>
3 MODULE_LICENSE("Dual BSD/GPL");
4 static int book_init(void)
5 {
6   printk(KERN_EMERG "EMERG\n");
7   printk(KERN_ALERT "ALERT\n");
8   printk(KERN_CRIT " CRIT\n");
9   printk(KERN_ERR " ERR\n");
10  printk(KERN_WARNING ""WARNING\n");
11   printk(KERN_NOTICE "NOTICE\n");
12  printk(KERN_INFO "INFO\n");
13  printk(KERN_DEBUG "DEBUG\n");
14  return 0;
    }
15static void book_exit(void)
16{
17  printk(KERN_ALERT "Book module exit\n");
    }
18  module_init(book_init);
19  module_exit(book_exit);

在控制台(这里指的是虚拟终端  Ctrl+Alt+(F1~F6))加载模块以后,控制台给出的信息为
6~9行中要求输出的信息,我们在伪终端(如果对伪终端不是很清楚可以看相关的内容)上运行命令tail -n 10 /var/log/messages查看日志文件刚才得到的运行记录
可以发现messages中的值为KERN_WARNING级别之后所要求输出到信息值。而如果我们在文件syslog和kern-log中查看系统日志文件,一般情况下可以得到所有的输出信息

Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637057] INFO
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637063] CRIT
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637066] WARNING
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637068] ERR
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637069] ALERT
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637070] EMERG
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637071]  NOTICE 
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637072] DEBUG
(不过在有些机器上运行得到的结果并不是这样的)
即一般情况下,syslog和kern.log两个文件中记录的内容从编程这个角度来看是基本一致的。
在目录/var/log/下有一下四个文件可以查看日志
syslog ,kern.log,messages ,DEBUG 。   
syslog和kern.log一般情况下可以得到所有的系统输出值,而messages得到的是比控制台日志级别低的输出值,DEBUG得到的仅仅是DEBUG级别的
输出值。
一般情况下,优先级高于控制台日志级别的消息将被打印到控制台。优先级低于控制台日志级别的消息将被打印到messages日志文件中,而在伪终端下不打印任何的信息。
我们在进行有关编程的时候,若使用到printk()这个函数,一般查看信息是在messages和虚拟终端下进行查看,而对于syslog和kern.log下是用来检验所有信息的输出情况。

抱歉!评论已关闭.