精华内容
下载资源
问答
  • t = {} for word in words: # 存入字典,单词为key,统计数字为value if word in t: t[word]=t[word]+1 elif word not in t: t[word]=1
  • 在前面几篇文章中我们学习了 word2vec 的两种模型 CBOW 和 Skip-Gram,了解了它们的基本原理,数学思想,还有代码实现。 word2vec 有很多优点,它的概念比较容易理解,训练速度快,既适用于小数据集也适用于大数据集...

    在前面几篇文章中我们学习了 word2vec 的两种模型 CBOW 和 Skip-Gram,了解了它们的基本原理,数学思想,还有代码实现。

    word2vec 有很多优点,它的概念比较容易理解,训练速度快,既适用于小数据集也适用于大数据集,在捕获语义相似性方面做得很好,而且是一种非监督式学习方法,不需要人类标记数据。

    当然也有一些不足,如虽然易于开发,但难以调试;如果一个单词有多种含义,嵌入向量只能反映出它们的平均值。

    今天我们来进一步学习 word2vec 的应用。


    word2vec 的应用

    word2vec 有很多应用场景,因为它可以捕获语义相似性,因此当我们遇见涉及分布式语义的任务时,就可以用它来生成特征,输入到各种算法模型中。

    • 例如在依存解析任务中,使用 word2vec 可以生成单词之间更好更准确的依赖关系。
    • 命名实体识别任务中,因为 word2vec 非常擅长找出相似的实体,可以把相似的聚集在一起,获得更好的结果。
    • 情感分析中,使用 word2vec 来保持语义相似性,可以产生更好的情绪结果,因为语义相似性能够帮助我们了解人们一般会使用哪些短语或单词来表达自己什么样的观点。
    • 在文档分类任务中,也可以用 word2vec 省去人工标签。
    • 谷歌也使用 word2vec 来改进他们的机器翻译产品。
    • 此外在自动摘要、语音识别、自动问答、音乐视频推荐系统等很多任务中也有广泛的应用。

    这里我们将学习如何将 word2vec 用于文档分类/聚类任务中。

    文档分类

    文档分类,是指给文档分配一个或者多个类别标签。在我们的日常生活中,文档分类任务有很多应用场景,例如:

    • 过滤垃圾邮件,自动识别电子邮件中哪些是垃圾邮件;
    • 邮件路径自动化,根据邮件的主题将其发送到特定地址或者邮箱;
    • 可读性推荐,例如为不同年龄的或不同兴趣类型的读者找到合适的材料;
    • 情感分析,确定说话主体关于某个内容的态度;
    • 识别文档的领域是属于体育、金融还是科技等等。

    可以说需要给文档数据识别类别的任务都属于文档分类,处理文档分类的方法也有很多种,大体可以划分为两大类:监督式学习和非监督式学习方法。

    监督式学习中,类别是提前定义好的,训练集中的文档需要手动打上标签,然后在训练集上训练分类器模型。主要流程为:

    1. 建立数据集

    数据集需要足够大,例如有 500 种文档类别,那么每个类别可能需要 100 个文档。文档还需要有足够高的质量,以便区分不同类别中的文档之间的差异。

    2. 预处理

    这一步常用的步骤有将文本数据进行大小写转化、分词、转化成数字向量等,再构建一些特征,可以用词向量,如 word2vec、GloVe、FastText 等。

    3. 算法

    有很多种算法都可以用来做文档分类,如:

    • 逻辑回归
    • 朴素贝叶斯分类器
    • 支持向量机
    • KNN 近邻
    • 决策树
    • Ensemble 方法:随机森林、Gradient boosting、Adaboost
    • 一般的前馈神经网络
    • 还有我们现在学的循环神经网络:LSTM、GRU
    • 还可以用 seq2seq 加上注意力机制
    • 除了用 RNN,还可以用 CNN,以及 RCNN
    • 还有目前很火的 Transformer、BERT 等模型,在后面的章节中我们会讲到。

    非监督式学习用于文档数据也叫做文档聚类,不需要给数据打标签,例如找到相似的新闻/微博,分析顾客的商品评价,挖掘文档中有意义的隐式主题等。

    常用的方法有两种,一种是基于层级的算法,会通过聚集或划分等步骤将文档表示为适合浏览的层次结构,可以学习出更深入的信息和细节,不过通常效率不高。另一种方法是 K-means 及其拓展算法,这种就比较高效。

    Doc2vec

    我们知道 word2vec 的作用主要是学习出单词的嵌入向量表示作为单词的特征,在后面的文档分类实战中,我们会用它来学习出文档中每个单词的词向量,再用文档中的所有词向量取平均值作为文档的嵌入表示,其实 word2vec 的思想还可以扩展到不同级别的文本,例如段落级别,或者直接到达文档级别。

    Doc2Vec 就是 word2vec 的扩展,也叫做 paragraph2vec 或者 sentence embeddings,是在 2014 年由 Quoc Le 和 Tomas Mikolov 提出的。这个算法是在 Word2vec 的基础上做出的改进,所以思路是差不多的,Doc2Vec 目的是要得到句子或者文档的向量表示。

    和 word2vec 类似,Doc2Vec 也有两种模型:一种是 DM:Distributed Memory,是给定上下文和文档向量,预测单词的概率,这个模型和 word2vec 的CBOW 很像。

    如图所示,DM 模型的输入是每个文档 ID 和语料库中所有词的向量,每个段落或句子可以用矩阵 D 的一列来表示,每个单词用矩阵 W 的一列来表示,然后取平均值或者直接拼接成一个向量,再输出下一个单词的 softmax 概率。

    DM 与 word2vec 的区别是在输入中除了单词外,还输入了代表文档的节点,这个节点的作用是代表这个段落或篇章的主题。它将文档看作为另一种上下文,在抽象意义上单词和文档之间没有区别,它的目标函数和训练步骤也和 word2vec 一样。

    另一种是 DBOW:Distributed Bag of Words,即给定文档向量,预测文档中一组随机单词的概率,这和 word2vec 的 Skip-Gram 很像。此模型的输入是文档的向量,预测的是该文档中随机抽样的词。

    Doc2vec 也可以用于文档聚类,情感分析,推荐系统等任务,在学习完下面的实战后,如果对 Doc2vec 感兴趣可以尝试应用。

    用 word2vec 进行文档聚类

    在这个实战中我们将对文档进行聚类,整体思路是,首先用所有文本数据学习出各单词的词向量,然后用文档中出现单词的词向量平均值作为文档的嵌入表示,最后用 K-means 算法对文档的嵌入向量进行聚类,找到相近的文档。所以 word2vec 在这个任务的作用是在学习出表示文档的特征,然后输入给机器学习算法中得到预测结果。

    代码的整体流程和前面的 CBOW、Skip-Gram、GloVe 基本一致,主要有四大步骤:

    数据:

    1. 导入库
    2. 下载数据
    3. 数据预处理
    4. 建立字典
    5. 生成批次数据

    建立并训练 CBOW 模型:

    6. 设置超参数
    7. 定义输入输出
    8. 定义模型参数
    9. 定义模型
    10. 定义损失和优化算法
    11. 定义相似度
    12. 模型训练

    可视化:

    13. 将文档嵌入结果可视化

    对文档进行聚类:

    14. K-means

    1. 导入所需要的库

    %matplotlib inline
    from __future__ import print_function
    import collections
    import math
    import numpy as np
    import os
    import random
    import tensorflow as tf
    import zipfile
    from matplotlib import pylab
    from six.moves import range
    from six.moves.urllib.request import urlretrieve
    from sklearn.manifold import TSNE
    from sklearn.cluster import KMeans
    import nltk             # 用于预处理
    nltk.download('punkt')
    import operator         # 用于对字典里的项目进行排序
    from math import ceil
    

    2. 下载数据

    我们所使用的数据是 BBC 数据集,这个数据集由 D. Greene 和 P. Cunningham 创建,包括 2225 个新闻文档,分别属于五大类:商业、娱乐、科技、体育和政治。每一类的文档保存在各自的文件夹中,每个文档用数字编号,如:'bbc/tech/211.txt'。各类所包含的文档数目为:体育类 511、商业类 510、政治类 417、科技类 401、娱乐类 386。数据可以通过下面的代码获得,或者在这里下载 CSV 格式的数据:

    url = 'http://mlg.ucd.ie/files/datasets/'
    
    def maybe_download(filename, expected_bytes):
      """Download a file if not present, and make sure it's the right size."""
      if not os.path.exists(filename):
        filename, _ = urlretrieve(url + filename, filename)
      statinfo = os.stat(filename)
      if statinfo.st_size == expected_bytes:
        print('Found and verified %s' % filename)
      else:
        print(statinfo.st_size)
        raise Exception(
          'Failed to verify ' + filename + '. Can you get to it with a browser?')
      return filename
    
    filename = maybe_download('bbc-fulltext.zip', 2874078)
    

    3. 读取数据,并用 NLTK 进行预处理

    read_data 是要从 ['business','entertainment','politics','sport','tech'] 的每一类中分别读取 249 个文档,将文本内容进行解码,转化成小写,分词等简单的预处理,建立 data。

    def read_data(filename):
      data = []
      files_to_read_for_topic = 250
      topics = ['business','entertainment','politics','sport','tech']
      with zipfile.ZipFile(filename) as z:
        parent_dir = z.namelist()[0]
        for t in topics:
            print('\tFinished reading data for topic: ',t)
            for fi in range(1,files_to_read_for_topic):
                with z.open(parent_dir + t + '/'+ format(fi,'03d')+'.txt') as f:
                    file_string = f.read().decode('latin-1')
                    file_string = file_string.lower()
                    file_string = nltk.word_tokenize(file_string)
                    data.extend(file_string)
        return data
    

    read_test_data 的作用和前者是一样的,只不过是从前面每一类读取的 249 个文档中各自随机选择 10 个文档作为测试集,所以测试数据有 50 个文档,和 data 不同的是 test_data 是个字典,key 是类别—文档编号,value 是该文档的分词序列,如:

    'sport-221': ['lennon', 'brands', 'rangers', 'favourites', 'celtic', "'s", 'neil', ...
    
    def read_test_data(filename):
      test_data = {}
      files_to_read_for_topic = 250
      topics = ['business','entertainment','politics','sport','tech']
      with zipfile.ZipFile(filename) as z:
        parent_dir = z.namelist()[0]
        for t in topics:
            print('\tFinished reading data for topic: ',t)
    
            for fi in np.random.randint(1,files_to_read_for_topic,(10)).tolist():
                with z.open(parent_dir + t + '/'+ format(fi,'03d')+'.txt') as f:
                    file_string = f.read().decode('latin-1')
                    file_string = file_string.lower()
                    file_string = nltk.word_tokenize(file_string)
                    test_data[t+'-'+str(fi)] = file_string                
        return test_data
    
    print('Processing training data...')
    words = read_data(filename)
    print('\nProcessing testing data...')
    test_words = read_test_data(filename)
    
    print('Example words (start): ',words[:10])
    print('Example words (end): ',words[-10:])
    
    Example words (start):  ['ad', 'sales', 'boost', 'time', 'warner', 'profit', 'quarterly', 'profits', 'at', 'us']
    Example words (end):  ['almost', '200,000', 'people', 'are', 'registered', 'players', 'on', 'project', 'entropia', '.']
    

    最后我们得到的 words 训练数据集大小为 521827,test_words 为 50 个文档组成的测试数据集。

    4. 建立字典

    这一步的 build_dataset 和前面几篇词向量中所用都是一样的,目的就是将训练集和测试集的文本数据都转化为数字序列。

    假设我们输入的文本是 "I like to go to school":

    • dictionary:将单词映射为 ID,例如 {I:0, like:1, to:2, go:3, school:4}
    • reverse_dictionary:将 ID 映射为单词,例如 {0:I, 1:like, 2:to, 3:go, 4:school}
    • count:计数每个单词出现了几次,例如 [(I,1),(like,1),(to,2),(go,1),(school,1)]
    • data:将读取的文本数据转化为 ID 后的数据列表,例如 [0, 1, 2, 3, 2, 4] 此外,我们用 UNK 代表比较少见的单词。

    多了一个 build_dataset_with_existing_dictionary 用来将单词串根据已有的字典转化为 ID 串。

    # 将词汇表大小限制在 25000
    vocabulary_size = 25000                                                             
    
    def build_dataset(words):
      count = [['UNK', -1]]
      # 选择 50000 个最常见的单词,其他的用 UNK 代替
      count.extend(collections.Counter(words).most_common(vocabulary_size - 1))            
      dictionary = dict()
    
      # 为每个 word 建立一个 ID,保存到一个字典里
      for word, _ in count:                                                                
        dictionary[word] = len(dictionary)
    
      data = list()
      unk_count = 0
    
      # 将文本数据中所有单词都换成相应的 ID,得到 data
      # 不在字典里的单词,用 UNK 代替
      for word in words:                                                                
        if word in dictionary:                                                            
          index = dictionary[word]
        else:
          index = 0  # dictionary['UNK']
          unk_count = unk_count + 1
        data.append(index)
    
      count[0][1] = unk_count
    
      reverse_dictionary = dict(zip(dictionary.values(), dictionary.keys())) 
    
      # 确保字典和词汇表的大小一样
      assert len(dictionary) == vocabulary_size                                            
    
      return data, count, dictionary, reverse_dictionary
    
    
    # 根据已有的字典将单词串转化为 ID
    def build_dataset_with_existing_dictionary(words, dictionary):
        data = list()
        for word in words:
            if word in dictionary:
              index = dictionary[word]
            else:
              index = 0  # dictionary['UNK']
            data.append(index)
        return data
    
    # 得到训练数据
    data, count, dictionary, reverse_dictionary = build_dataset(words)
    
    # 得到测试数据
    test_data = {}
    for k,v in test_words.items():
        print('Building Test Dataset for ',k,' topic')
        test_data[k] = build_dataset_with_existing_dictionary(test_words[k],dictionary)
    
    print('Most common words (+UNK)', count[:5])
    print('Sample data', data[:10])
    print('test keys: ',test_data.keys())
    del words  
    del test_words
    

    5. 生成批次数据

    在这个例子中,因为数据量不是特别大,我们用 CBOW 比 Skip-Gram 的效果会好一些,所以就用 CBOW 来训练。generate_batch 和 CBOW 那篇文章中是一样的,就是要构造模型所需要的数据格式,即由上下文得到中心词。

    data_index = 0
    
    def generate_batch(data, batch_size, window_size):
    
        # 每次读取一个数据集后增加 1
        global data_index
    
        # span 是指中心词及其两侧窗口的总长度
        span = 2 * window_size + 1 
    
        # batch 为上下文数据集,一共有 span - 1 个列
        # labels 为中心词
        batch = np.ndarray(shape=(batch_size,span-1), dtype=np.int32)
        labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)
    
        # buffer 用来存储 span 内部的数据
        buffer = collections.deque(maxlen=span)
    
        # 填充 buffer 更新 data_index
        for _ in range(span):
            buffer.append(data[data_index])
            data_index = (data_index + 1) % len(data)
    
        # 批次读取数据,对于每一个 batch index 遍历 span 的所有元素,填充到 batch 的各个列中
        for i in range(batch_size):
            target = window_size                  # 在 buffer 的中心是中心词
            target_to_avoid = [ window_size ]     # 因为只需要考虑中心词的上下文,这时不需要考虑中心词
    
            # 将选定的中心词加入到 avoid_list 下次时用
            col_idx = 0
            for j in range(span):
                # 建立批次数据时忽略中心词
                if j==span//2:
                    continue
                batch[i,col_idx] = buffer[j] 
                col_idx += 1
            labels[i, 0] = buffer[target]
    
            # 每次读取一个数据点,需要移动 span 一次,建立一个新的 span
            buffer.append(data[data_index])
            data_index = (data_index + 1) % len(data)
    
        assert batch.shape[0]==batch_size and batch.shape[1]== span-1
        return batch, labels
    
    for window_size in [1,2]:
        data_index = 0
        batch, labels = generate_batch(data, batch_size=8, window_size=window_size)
        print('\nwith window_size = %d:' % (window_size))
        print('    batch:', [[reverse_dictionary[bii] for bii in bi] for bi in batch])
        print('    labels:', [reverse_dictionary[li] for li in labels.reshape(8)])
    
    with window_size = 1:
        batch: [['ad', 'boost'], ['sales', 'time'], ['boost', 'warner'], ['time', 'profit'], ['warner', 'quarterly'], ['profit', 'profits'], ['quarterly', 'at'], ['profits', 'us']]
        labels: ['sales', 'boost', 'time', 'warner', 'profit', 'quarterly', 'profits', 'at']
    
    with window_size = 2:
        batch: [['ad', 'sales', 'time', 'warner'], ['sales', 'boost', 'warner', 'profit'], ['boost', 'time', 'profit', 'quarterly'], ['time', 'warner', 'quarterly', 'profits'], ['warner', 'profit', 'profits', 'at'], ['profit', 'quarterly', 'at', 'us'], ['quarterly', 'profits', 'us', 'media'], ['profits', 'at', 'media', 'giant']]
        labels: ['boost', 'time', 'warner', 'profit', 'quarterly', 'profits', 'at', 'us']
    

    此处多出了一个 generate_test_batch 函数,是用来从测试数据中生成批次数据。

    # 从测试数据中生成批次数据
    test_data_index = 0
    
    def generate_test_batch(data, batch_size):
        global test_data_index
    
        batch = np.ndarray(shape=(batch_size,), dtype=np.int32)
        # 得到 index 为 0 到 span 的单词
        for bi in range(batch_size):
            batch[bi] = data[test_data_index]
            test_data_index = (test_data_index + 1) % len(data)
    
        return batch
    
    test_data_index = 0
    test_batch = generate_test_batch(test_data[list(test_data.keys())[0]], batch_size=8)
    print('\nwith window_size = %d:' % (window_size))
    print('    labels:', [reverse_dictionary[li] for li in test_batch.reshape(8)])
    

    输出:

    with window_size = 2:
        labels: ['uk', 'gets', 'official', 'virus', 'alert', 'site', 'a', 'rapid']
    

    6. 设置 CBOW 的超参数

    batch_size = 128                             
    embedding_size = 128             # embedding 向量的维度
    window_size = 4                 # 中心词的左右两边各取 4 个
    
    valid_size = 16                 # 随机选择一个 validation 集来评估单词的相似性
    valid_window = 50                # 从一个大窗口随机采样 valid 数据
    
    # 选择 valid 样本时, 取一些频率比较大的单词,也选择一些适度罕见的单词
    valid_examples = np.array(random.sample(range(valid_window), valid_size))
    valid_examples = np.append(valid_examples,random.sample(range(1000, 1000+valid_window), valid_size),axis=0)
    
    num_sampled = 32                 # 负采样的样本个数
    

    7. 定义输入输出

    这里多了一个 test_labels,在后续计算中会用到。

    tf.reset_default_graph()
    
    # 用于训练的上下文数据,有 2*window_size 列
    train_dataset = tf.placeholder(tf.int32, shape=[batch_size,2*window_size])            
    
    # 用于训练的中心词
    train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])    
    
    # Validation 不需要用 placeholder,因为前面已经定义了 valid_examples
    valid_dataset = tf.constant(valid_examples, dtype=tf.int32)    
    
    # 测试数据,通过对一个给定文档中的词向量做平均来计算文档的嵌入
    test_labels = tf.placeholder(tf.int32, shape=[batch_size],name='test_dataset')
    

    8. 定义模型的参数

    定义一个 embedding 层和神经网络的参数。

    embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0,dtype=tf.float32))
    # Softmax 的权重和 Biases
    softmax_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size],
                         stddev=1.0 / math.sqrt(embedding_size),dtype=tf.float32))
    softmax_biases = tf.Variable(tf.zeros([vocabulary_size],dtype=tf.float32))
    

    9. 定义模型

    这里多了 mean_batch_embedding,通过对测试文档中所有的词向量做平均来计算出一个文档的词嵌入表示。

    # 对测试文档中所有的词向量做平均来计算文档的嵌入
    mean_batch_embedding = tf.reduce_mean(tf.nn.embedding_lookup(embeddings,test_labels),axis=0)
    
    # 为 input 的每一列做 embedding lookups
    # 然后求平均,得到大小为 embedding_size 的词向量
    stacked_embedings = None
    print('Defining %d embedding lookups representing each word in the context'%(2*window_size))
    for i in range(2*window_size):
        embedding_i = tf.nn.embedding_lookup(embeddings, train_dataset[:,i])        
        x_size,y_size = embedding_i.get_shape().as_list()
        if stacked_embedings is None:
            stacked_embedings = tf.reshape(embedding_i,[x_size,y_size,1])
        else:
            stacked_embedings = tf.concat(axis=2,values=[stacked_embedings,tf.reshape(embedding_i,[x_size,y_size,1])])
    
    # 确保 taked embeddings 有 2*window_size 列
    assert stacked_embedings.get_shape().as_list()[2]==2*window_size
    print("Stacked embedding size: %s"%stacked_embedings.get_shape().as_list())
    
    # 计算 stacked_embedings 的平均嵌入
    mean_embeddings =  tf.reduce_mean(stacked_embedings,2,keepdims=False)
    print("Reduced mean embedding size: %s"%mean_embeddings.get_shape().as_list())
    

    输出:

    Defining 8 embedding lookups representing each word in the context
    Stacked embedding size: [128, 128, 8]
    Reduced mean embedding size: [128, 128]
    

    10. 定义损失和优化算法

    # 每次用一些负采样样本计算 softmax loss, 
    # 输入是训练数据的 embeddings
    # 用这个 loss 来优化 weights, biases, embeddings
    loss = tf.reduce_mean(
        tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=mean_embeddings,
                               labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size))
    
    optimizer = tf.train.AdagradOptimizer(1.0).minimize(loss)                        
    

    11. 定义计算单词相似性的函数

    用余弦距离来计算样本的相似性。

    norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keepdims=True))
    normalized_embeddings = embeddings / norm
    valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings, valid_dataset)
    similarity = tf.matmul(valid_embeddings, tf.transpose(normalized_embeddings))
    

    12. 在文档数据上运行 CBOW 算法

    这段代码比 CBOW 的训练步骤多出来一部分,是要从每个文档中取出 batch_size*num_test_steps 个单词的词向量取平均,来计算文档的嵌入向量。

    num_steps = 100001
    cbow_loss = []
    
    config=tf.ConfigProto(allow_soft_placement=True)
    config.gpu_options.allow_growth = True
    
    with tf.Session(config=config) as session:
    
        tf.global_variables_initializer().run()
        print('Initialized')
    
        average_loss = 0
    
        # 训练 num_step 次
        for step in range(num_steps):
    
            # 生成一批数据
            batch_data, batch_labels = generate_batch(data, batch_size, window_size)
    
            # 运行优化算法,计算损失
            feed_dict = {train_dataset : batch_data, train_labels : batch_labels}
            _, l = session.run([optimizer, loss], feed_dict=feed_dict)
    
            # 更新平均损失变量
            average_loss += l
    
            if (step+1) % 2000 == 0:
                if step > 0:
                    average_loss = average_loss / 2000
                    # 计算一下平均损失
                print('Average loss at step %d: %f' % (step+1, average_loss))
                cbow_loss.append(average_loss)
                average_loss = 0
    
            # 评估 validation 集的单词相似性
            if (step+1) % 10000 == 0:
                sim = similarity.eval()
                # 对验证集的每个用于验证的中心词,计算其 top_k 个最近单词的余弦距离,
                for i in range(valid_size):
                    valid_word = reverse_dictionary[valid_examples[i]]
                    top_k = 8 # number of nearest neighbors
                    nearest = (-sim[i, :]).argsort()[1:top_k+1]
                    log = 'Nearest to %s:' % valid_word
                    for k in range(top_k):
                        close_word = reverse_dictionary[nearest[k]]
                        log = '%s %s,' % (log, close_word)
                    print(log)
    
        # 从每个文档中取出 batch_size*num_test_steps 个单词的词向量取平均,来计算文档的嵌入向量
        num_test_steps = 100
    
        # document_embeddings 用来存储文档的嵌入,格式为 {document_id: embedding}
        document_embeddings = {}
        print('Testing Phase (Compute document embeddings)')
    
        # 对每个测试文档,计算文档的嵌入向量
        for k,v in test_data.items():
            print('\tCalculating mean embedding for document ',k,' with ', num_test_steps, ' steps.')
            test_data_index = 0
            topic_mean_batch_embeddings = np.empty((num_test_steps,embedding_size),dtype=np.float32)
    
            for test_step in range(num_test_steps):
                test_batch_labels = generate_test_batch(test_data[k],batch_size)
                batch_mean = session.run(mean_batch_embedding,feed_dict={test_labels:test_batch_labels})
                topic_mean_batch_embeddings[test_step,:] = batch_mean
    
            document_embeddings[k] = np.mean(topic_mean_batch_embeddings,axis=0)
    

    输出:

    Average loss at step 92000: 1.480679
    Average loss at step 94000: 1.445840
    Average loss at step 96000: 1.462062
    Average loss at step 98000: 1.415321
    Average loss at step 100000: 1.422292
    Nearest to for: 81, high-powered, kipchoge, births, unwind, physicians, net-using, maintains,
    Nearest to was: am, is, capitalisations, were, bmo, flash, became, dial,
    Nearest to they: you, renegade, commentating, we, mobiles, councils, divulge, 'cantona,
    Nearest to he: she, surprisngly, collins, underscores, consistency, tribunals, 75-year-old, logistical,
    ...
    Calculating mean embedding for document  tech-34  with  100  steps.
    Calculating mean embedding for document  sport-166  with  100  steps.
    Calculating mean embedding for document  sport-87  with  100  steps.
    ...
    

    13. 用 t-SNE 将文档可视化

    这里我们要定义一个 t-SNE 将学习出的长度为 128 的文档嵌入向量映射到二维平面上。

    # 要可视化的数据个数
    num_points = 1000 
    
    # 建立一个 t-SNE
    tsne = TSNE(perplexity=30, n_components=2, init='pca', n_iter=5000)
    
    print('Fitting embeddings to T-SNE')
    doc_ids, doc_embeddings = zip(*document_embeddings.items())
    two_d_embeddings = tsne.fit_transform(doc_embeddings)
    print('\tDone')
    

    其中 two_d_embeddings 为测试集中 50 个文档降维后的二维向量表示:

    array([[ -11.36216  ,  131.78575  ],
           [ -23.075674 ,   88.1492   ],
           [   4.4817004,   39.693035 ],
           [  46.797825 ,   88.773224 ],
           [ -36.411736 ,   65.47163  ],
           [ -73.96673  ,   63.287937 ],
           [  11.076577 ,   86.579575 ],
           ...)
    

    画出 t-SNE 的结果。

    def plot(embeddings, labels):
    
      n_clusters = 5         # clusters 的数量
    
      # 为每个 cluster 自动分配颜色和标记
      label_colors = [pylab.cm.spectral(float(i) /n_clusters) for i in range(n_clusters)]
      label_markers = ['o','^','d','s','x']
    
      # 确保文档嵌入的数量和标签的数目一样
      assert embeddings.shape[0] >= len(labels), 'More labels than embeddings'
    
      pylab.figure(figsize=(15,15))  # in inches
    
      # 给每个类别设置一个 cluster_id
      def get_label_id_from_key(key):
        if 'business' in key:
            return 0
        elif 'entertainment' in key:
            return 1
        elif 'politics' in key:
            return 2
        elif 'sport' in key:
            return 3
        elif 'tech' in key:
            return 4
    
      # 画出所有文档的嵌入
      for i, label in enumerate(labels):
        x, y = embeddings[i,:]
        pylab.scatter(x, y, c=label_colors[get_label_id_from_key(label)],s=50,
                      marker=label_markers[get_label_id_from_key(label)])    
    
        # 在散点图上标记出每个点
        pylab.annotate(label, xy=(x, y), xytext=(5, 2), textcoords='offset points',
                       ha='right', va='bottom',fontsize=16)
    
      pylab.title('Document Embeddings visualized with t-SNE',fontsize=24)
    
      pylab.savefig('document_embeddings.png')
      pylab.show()
    
    plot(two_d_embeddings, doc_ids)
    

    上图就是用 t-SNE 算法将 CBOW 学习出的测试集文档的嵌入表示可视化出来,用不同符号表示五种类别。可以看出同一类别中的大多数文档都聚得比较近,当然也有一些异常点,例如 sport-176 离运动类别的其他文档就比较远,离娱乐和科技比较近。针对这些异常值,可以打开文档查看一下里面的内容,会发现虽然分别标签是 sport,但是里面的内容和词语更多的是关于娱乐方面的,也正是算法学习出来的结果。

    14. 对文档进行聚类

    上面是通过可视化的方法大概看一下每个类别的聚拢情况,这里我们用 K-means 对文档的嵌入向量进行聚类,并列出每个类中都有哪些文档,下面的结果中 0 表示娱乐类,1 表示体育类,2 表示商业类,3 表示科技类,4 表示政治类,课件政治类中的异常值多一些,商业、体育、娱乐都包含了两篇文档。当遇到新文档时,将其加入到测试集中,重新进行 K-means,这个新文档所在类别里面找到最多的那个种类就是它的预测标签。

    # 训练 K-means
    kmeans = KMeans(n_clusters=5, random_state=43643, max_iter=10000, n_init=100, algorithm='elkan')
    kmeans.fit(np.array(list(document_embeddings.values())))
    
    # 计算每个簇中的文档
    document_classes = {}
    
    for inp, lbl in zip(list(document_embeddings.keys()), kmeans.labels_):
        if lbl not in document_classes:
            document_classes[lbl] = [inp]
        else:
            document_classes[lbl].append(inp)
    
    for k,v in document_classes.items():    
        print('\nDocuments in Cluster ',k)
        print('\t',v)
    

    输出:

    Documents in Cluster  4
         ['business-87', 'business-81', 'business-15', 'entertainment-137', 'entertainment-221', 'politics-82', 'politics-97', 'politics-167', 'politics-148', 'politics-207', 'politics-238', 'politics-78', 'politics-171', 'politics-9', 'politics-168', 'sport-203', 'sport-81']
    
    Documents in Cluster  2
         ['business-228', 'business-152', 'business-208', 'business-71', 'business-85', 'business-190', 'business-79']
    
    Documents in Cluster  0
         ['entertainment-119', 'entertainment-99', 'entertainment-157', 'entertainment-183', 'entertainment-218', 'entertainment-230']
    
    Documents in Cluster  1
         ['entertainment-180', 'sport-75', 'sport-76', 'sport-176', 'sport-236', 'sport-169', 'sport-44', 'sport-123', 'sport-100']
    
    Documents in Cluster  3
         ['entertainment-202', 'tech-22', 'tech-152', 'tech-200', 'tech-157', 'tech-14', 'tech-177', 'tech-44', 'tech-87', 'tech-134', 'tech-66']
    

    好了,词嵌入这一章到这里就先告一段落,接下来我们进入新的章节——LSTM 的扩展模型,poophole、beam search 等概念,还会实现 POS。

    面试题:

    1. 如何进行文本分类,文本聚类?

    参考文献:

    • D. Greene and P. Cunningham. "Practical Solutions to the Problem of Diagonal Dominance in Kernel Document Clustering", Proc. ICML 2006.
    • Thushan Ganegedara, Natural Language Processing with TensorFlow
    • Quoc Le, Tomas Mikolov, Distributed Representations of Sentences and Documents
    展开全文
  • chmod -R a+r * 此外chmod也可以用数字来表示权限如 : chmod 777 file 语法为: chmod abc file 其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 r=4,w=2,x=1 • 若要 rwx 属性则 4+2+1=7; • 若要...

    Liunx命令大全

    文件管理

    Cat (英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上
    cat
    [-AbeEnstTuv] [–help] [–version] fileName
    -n 或 --number:由 1 开始对所有输出的行数编号。
    -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
    -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
    -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
    -E 或 --show-ends : 在每行结束处显示 $。
    -T 或 --show-tabs: 将 TAB 字符显示为 ^I。
    -A, --show-all:等价于 -vET。
    -e:等价于"-vE"选项;
    -t:等价于"-vT"选项;
    实例:
    把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
    cat -n textfile1 > textfile2
    把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
    cat -b textfile1 textfile2 >> textfile3
    清空 /etc/test.txt 文档内容:
    cat /dev/null > /etc/test.txt

    Chattr
    Linux chattr命令用于改变文件属性
    这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

    1. a:让文件或目录仅供附加用途。
    2. b:不更新文件或目录的最后存取时间。
    3. c:将文件或目录压缩后存放。
    4. d:将文件或目录排除在倾倒操作之外。
    5. i:不得任意更动文件或目录。
    6. s:保密性删除文件或目录。
    7. S:即时更新文件或目录。
    8. u:预防意外删除。
      语法
      chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录…]
      参数
        -R 递归处理,将指定目录下的所有文件及子目录一并处理。
        -v<版本编号> 设置文件或目录版本。
        -V 显示指令执行过程。
        +<属性> 开启文件或目录的该项属性。
        -<属性> 关闭文件或目录的该项属性。
        =<属性> 指定文件或目录的该项属性。
      实例
      用chattr命令防止系统中某个关键文件被修改:
      chattr +i /etc/resolv.conf
      lsattr /etc/resolv.conf
      会显示如下属性
      ----i-------- /etc/resolv.conf
      让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
      chattr +a /var/log/messages

    chgrp
    Linux chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组
    与 chown 命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员。
    在 UNIX 系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用 chgrp 指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
    语法
    chgrp [-cfhRv][–help][–version][所属群组][文件或目录…] 或 chgrp [-cfhRv][–help][–reference=<参考文件或目录>][–version][文件或目录…]
    参数说明
      -c或–changes 效果类似"-v"参数,但仅回报更改的部分。
      -f或–quiet或–silent  不显示错误信息。
      -h或–no-dereference  只对符号连接的文件作修改,而不更动其他任何相关文件。
      -R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
      -v或–verbose  显示指令执行过程。
      --help  在线帮助。
      --reference=<参考文件或目录>  把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
      --version  显示版本信息。
    实例
    实例1:改变文件的群组属性:
    chgrp -v bin log2012.log
    输出:
    [root@localhost test]# ll
    —xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
    [root@localhost test]# chgrp -v bin log2012.log
    “log2012.log” 的所属组已更改为 bin
    [root@localhost test]# ll
    —xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
    说明: 将log2012.log文件由root群组改为bin群组
    实例2:根据指定文件改变文件的群组属性
    chgrp --reference=log2012.log log2013.log
    输出:
    [root@localhost test]# ll
    —xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
    -rw-r–r-- 1 root root 61 11-13 06:03 log2013.log
    [root@localhost test]# chgrp --reference=log2012.log log2013.log
    [root@localhost test]# ll
    —xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
    -rw-r–r-- 1 root bin 61 11-13 06:03 log2013.log
    说明: 改变文件log2013.log 的群组属性,使得文件log2013.log的群组属性和参考文件log2012.log的群组属性相同
    Chmod Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
    Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)
    chmod [-cfvR] [–help] [–version] mode file…
    参数说明
    mode : 权限设定字串,格式如下 :
    [ugoa…][[±=][rwxX]…][,…]
    其中:
    u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

    • 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
      r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
      其他参数说明:
      -c : 若该文件权限确实已经更改,才显示其更改动作
      -f : 若该文件权限无法被更改也不要显示错误讯息
      -v : 显示权限变更的详细资料
      -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
      –help : 显示辅助说明
      –version : 显示版本
      实例
      将文件 file1.txt 设为所有人皆可读取 :
      chmod ugo+r file1.txt
      将文件 file1.txt 设为所有人皆可读取 :
      chmod a+r file1.txt
      将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
      chmod ug+w,o-w file1.txt file2.txt
      将 ex1.py 设定为只有该文件拥有者可以执行 :
      chmod u+x ex1.py
      将目前目录下的所有文件与子目录皆设为任何人可读取 :
      chmod -R a+r *
      此外chmod也可以用数字来表示权限如 :
      chmod 777 file
      语法为:
      chmod abc file
      其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
      r=4,w=2,x=1
      • 若要 rwx 属性则 4+2+1=7;
      • 若要 rw- 属性则 4+2=6;
      • 若要 r-x 属性则 4+1=5。
      chmod a=rwx file

      chmod 777 file
      效果相同
      chmod ug=rwx,o=x file

      chmod 771 file
      效果相同
      若用 chmod 4755 filename 可使此程序具有 root 的权限。

    Chown Linux chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。
    Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者。利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。 。
    chown 需要超级用户 root 的权限才能执行此命令。
    只有超级用户和属于组的文件所有者才能变更文件关联组。非超级用户如需要设置关联组可能需要使用 chgrp 命令。
    使用权限 : root
    语法
    chown [-cfhvR] [–help] [–version] user[:group] file…
    参数 :
    • user : 新的文件拥有者的使用者 ID
    • group : 新的文件拥有者的使用者组(group)
    • -c : 显示更改的部分的信息
    • -f : 忽略错误信息
    • -h :修复符号链接
    • -v : 显示详细的处理信息
    • -R : 处理指定目录以及其子目录下的所有文件
    • --help : 显示辅助说明
    • --version : 显示版本
    实例
    把 /var/run/httpd.pid 的所有者设置 root:
    chown root /var/run/httpd.pid
    将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :
    chown runoob:runoobgroup file1.txt
    将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:
    chown -R runoob:runoobgroup *
    把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:
    chown :512 /home/runoob

    cksum Linux cksum命令用于检查文件的CRC是否正确。确保文件从一个系统传输到另一个系统的过程中不被损坏。
    CRC是一种排错检查方式,该校验法的标准由CCITT所指定,至少可检测到99.998%的已知错误。
    指定文件交由指令"cksum"进行校验后,该指令会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则指令"cksum"会从标准输入设备中读取数据
    语法
    cksum [–help][–version][文件…]
    参数:
    • --help:在线帮助。
    • --version:显示版本信息。
    • 文件…:需要进行检查的文件路径
    实例
    使用指令"cksum"计算文件"testfile1"的完整性,输入如下命令:
    $ cksum testfile1
    以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示:
    1263453430 78 testfile1 //输出信息
    上面的输出信息中,"1263453430"表示校验码,"78"表示字节数。
    注意:如果文件中有任何字符被修改,都将改变计算后CRC校验码的值。

    Cmp Linux cmp命令用于比较两个文件是否有差异。
    当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为"-",则cmp指令会从标准输入设备读取数据。
    语法
    cmp [-clsv][-i <字符数目>][–help][第一个文件][第二个文件]
    参数:
    • -c或–print-chars  除了标明差异处的十进制字码之外,一并显示该字符所对应字符。
    • -i<字符数目>或–ignore-initial=<字符数目>  指定一个数目。
    • -l或–verbose  标示出所有不一样的地方。
    • -s或–quiet或–silent  不显示错误信息。
    • -v或–version  显示版本信息。
    • --help  在线帮助。
    实例
    要确定两个文件是否相同,请输入:
    cmp prog.o.bak prog.o
    这比较 prog.o.bak 和 prog.o。如果文件相同,则不显示消息。如果文件不同,则显示第一个不同的位置;例如:
    prog.o.bak prog.o differ: char 4, line 1
    如果显示消息 cmp: EOF on prog.o.bak,则 prog.o 的第一部分与 prog.o.bak 相同,但在 prog.o 中还有其他数据。

    Diff
    Linux diff命令用于比较文件的差异
    diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录
    语法
    diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][–help][–left-column][–suppress-common-line][文件或目录1][文件或目录2]
    参数:
    • -<行数>  指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。
    • -a或–text  diff预设只会逐行比较文本文件。
    • -b或–ignore-space-change  不检查空格字符的不同。
    • -B或–ignore-blank-lines  不检查空白行。
    • -c  显示全部内文,并标出不同之处。
    • -C<行数>或–context<行数>  与执行"-c-<行数>"指令相同。
    • -d或–minimal  使用不同的演算法,以较小的单位来做比较。
    • -D<巨集名称>或ifdef<巨集名称>  此参数的输出格式可用于前置处理器巨集。
    • -e或–ed  此参数的输出格式可用于ed的script文件。
    • -f或-forward-ed  输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。
    • -H或–speed-large-files  比较大文件时,可加快速度。
    • -l<字符或字符串>或–ignore-matching-lines<字符或字符串>  若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。
    • -i或–ignore-case  不检查大小写的不同。
    • -l或–paginate  将结果交由pr程序来分页。
    • -n或–rcs  将比较结果以RCS的格式来显示。
    • -N或–new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示:
    • Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
    • -p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。
    • -P或–unidirectional-new-file  与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。
    • -q或–brief  仅显示有无差异,不显示详细的信息。
    • -r或–recursive  比较子目录中的文件。
    • -s或–report-identical-files  若没有发现任何差异,仍然显示信息。
    • -S<文件>或–starting-file<文件>  在比较目录时,从指定的文件开始比较。
    • -t或–expand-tabs  在输出时,将tab字符展开。
    • -T或–initial-tab  在每行前面加上tab字符以便对齐。
    • -u,-U<列数>或–unified=<列数>  以合并的方式来显示文件内容的不同。
    • -v或–version  显示版本信息。
    • -w或–ignore-all-space  忽略全部的空格字符。
    • -W<宽度>或–width<宽度>  在使用-y参数时,指定栏宽。
    • -x<文件名或目录>或–exclude<文件名或目录>  不比较选项中所指定的文件或目录。
    • -X<文件>或–exclude-from<文件>  您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件。
    • -y或–side-by-side  以并列的方式显示文件的异同之处。
    • --help  显示帮助。
    • --left-column  在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。
    • --suppress-common-lines  在使用-y参数时,仅显示不同之处。
    实例1:比较两个文件
    [root@localhost test3]# diff log2014.log log2013.log
    3c3
    < 2014-03

    2013-03
    8c8
    < 2013-07


    2013-08
    11,12d10
    < 2013-11
    < 2013-12
    上面的"3c3"和"8c8"表示log2014.log和log20143log文件在3行和第8行内容有所不同;"11,12d10"表示第一个文件比第二个文件多了第11和12行。
    实例2:并排格式输出
    [root@localhost test3]# diff log2014.log log2013.log -y -W 50
    2013-01 2013-01
    2013-02 2013-02
    2014-03 | 2013-03
    2013-04 2013-04
    2013-05 2013-05
    2013-06 2013-06
    2013-07 2013-07
    2013-07 | 2013-08
    2013-09 2013-09
    2013-10 2013-10
    2013-11 <
    2013-12 <
    [root@localhost test3]# diff log2013.log log2014.log -y -W 50
    2013-01 2013-01
    2013-02 2013-02
    2013-03 | 2014-03
    2013-04 2013-04
    2013-05 2013-05
    2013-06 2013-06
    2013-07 2013-07
    2013-08 | 2013-07
    2013-09 2013-09
    2013-10 2013-10
    2013-11
    2013-12
    说明:
    • "|"表示前后2个文件内容有不同
    • "<"表示后面文件比前面文件少了1行内容
    • ">“表示后面文件比前面文件多了1行内容
    Diffstat Linux diffstat命令根据diff的比较结果,显示统计数字。
    diffstat读取diff的输出结果,然后统计各文件的插入,删除,修改等差异计量。
    语法
    diff [-wV][-n <文件名长度>][-p <文件名长度>]
    参数:
    • -n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
    • -p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。
    • -w  指定输出时栏位的宽度。
    • -V  显示版本信息。
    实例
    用户也可以直接使用”|"将diff指令所输出的结果直接送给diffstat指令进行统计结果的显示。
    使用该指令时,若所比较的文件或者子目录不在当前目录下,则应该使用其完整路径。
    将目录"test1"和"test2"下的同名文件"testf.txt"使用diff指令进行比较。然后使用diffstat指令对结果进行统计显示,输入如下命令:
    $ diff test1 test2 | diffstat #进行比较结果的统计显示
    注意:使用这条命令可以非常方便地实现统计显示的功能。
    对于查看文件中的内容,用户可以通过指令"cat"进行查看即可,具体操作如下:
    $ cat test1/testf.txt #查看test1/testf的内容
    abc
    def
    ghi
    jkl
    mno
    pqr
    stu
    vws
    $ cat test2/testf.txt #查看test2/testf的内容
    abc
    def
    ghi
    jkl
    mno
    从上面的文件内容显示,可以看到两个文件内容的差别。现在来运行刚才的命令,对文件比较的结果进行统计显示,结果如下:
    testfile | 2 ± #统计信息输出显示
    1 file changed, 1 insertion(+), 1 deletion(-)

    File Linux file命令用于辨识文件类型
    通过file指令,我们得以辨识该文件的类型。
    语法
    file [-bcLvz][-f <名称文件>][-m <魔法数字文件>…][文件或目录…]
    参数:
    • -b  列出辨识结果时,不显示文件名称。
    • -c  详细显示指令执行过程,便于排错或分析程序执行的情形。
    • -f<名称文件>  指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
    • -L  直接显示符号连接所指向的文件的类别。
    • -m<魔法数字文件>  指定魔法数字文件。
    • -v  显示版本信息。
    • -z  尝试去解读压缩文件的内容。
    • [文件或目录…] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
    实例
    显示文件类型:
    [root@localhost ~]# file install.log
    install.log: UTF-8 Unicode text

    [root@localhost ~]# file -b install.log <== 不显示文件名称
    UTF-8 Unicode text

    [root@localhost ~]# file -i install.log <== 显示MIME类别。
    install.log: text/plain; charset=utf-8

    [root@localhost ~]# file -b -i install.log
    text/plain; charset=utf-8
    显示符号链接的文件类型
    [root@localhost ~]# ls -l /var/mail
    lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail

    [root@localhost ~]# file /var/mail
    /var/mail: symbolic link to `spool/mail’

    [root@localhost ~]# file -L /var/mail
    /var/mail: directory

    [root@localhost ~]# file /var/spool/mail
    /var/spool/mail: directory

    [root@localhost ~]# file -L /var/spool/mail
    /var/spool/mail: directory

    Find Linux find 命令用来在指定目录下查找文件。
    任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
    语法
    find path -option [ -print ] [ -exec -ok command ] {} ;
    参数说明 :
    find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
    expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
    -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
    -amin n : 在过去 n 分钟内被读取过
    -anewer file : 比文件 file 更晚被读取过的文件
    -atime n : 在过去n天内被读取过的文件
    -cmin n : 在过去 n 分钟内被修改过
    -cnewer file :比文件 file 更新的文件
    -ctime n : 在过去n天内被修改过的文件
    -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
    -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
    -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
    -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
    -type c : 文件类型是 c 的文件。
    d: 目录
    c: 字型装置文件
    b: 区块装置文件
    p: 具名贮列
    f: 一般文件
    l: 符号连结
    s: socket
    -pid n : process id 是 n 的文件
    你可以使用 ( ) 将运算式分隔,并使用下列运算。
    exp1 -and exp2
    ! expr
    -not expr
    exp1 -or exp2
    exp1, exp2
    实例
    将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:

    find . -name “*.c”

    将目前目录其其下子目录中所有一般文件列出

    find . -type f

    将当前目录及其子目录下所有最近 20 天内更新过的文件列出:

    find . -ctime -20

    查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:

    find /var/log -type f -mtime +7 -ok rm {} ;

    查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

    find . -type f -perm 644 -exec ls -l {} ;

    查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:

    find / -type f -size 0 -exec ls -l {} ;

    Git Linux git命令是文字模式下的文件管理员
    git是用来管理文件的程序,它十分类似DOS下的Norton Commander,具有互动式操作界面。它的操作方法和Norton Commander几乎一样。
    语法
    git
    操作说明:
    • F1 :执行info指令,查询指令相关信息,会要求您输入欲查询的名称。
    • F2 :执行cat指令,列出文件内容。
    • F3 :执行gitview指令,观看文件内容。
    • F4 :执行vi指令,编辑文件内容。
    • F5 :执行cp指令,复制文件或目录,会要求您输入目标文件或目录。
    • F6 :执行mv指令,移动文件或目录,或是更改其名称,会要求您输入目标文件或目录。
    • F7 :执行mkdir指令,建立目录。
    • F8 :执行rm指令,删除文件或目录。
    • F9 :执行make指令,批处理执行指令或编译程序时,会要求您输入相关命令。
    • F10 :离开git文件管理员。

    Gitview Linux gitview命令用于观看文件的内容,它会同时显示十六进制和ASCII格式的字码
    语法
    gitview [-bchilv][文件]
    参数:
    • -b  单色模式,不使用ANSI控制码显示彩色。
    • -c  彩色模式,使用ANSI控制码显示色彩。
    • -h  在线帮助。
    • -i  显示存放gitview程序的所在位置。
    • -l  不使用先前的显示字符。
    • -v  显示版本信息。
    实例
    使用指令gitview以彩色模式观看文件"/home/ rootlocal/demo.txt"中的内容,输入如下命令:
    $ gitview -c /home/rootlocal/demo.txt #使用gitview指令观看指定文件内容

    Indent Linux indent命令用于调整C原始代码文件的格式。
    indent可辨识C的原始代码文件,并加以格式化,以方便程序设计师阅读
    语法
    indent [参数][源文件] 或 indent [参数][源文件][-o 目标文件]
    参数:
    • -bad或–blank-lines-after-declarations  在声明区段或加上空白行。
    • -bap或–blank-lines-after-procedures  在程序或加上空白行。
    • -bbb或–blank-lines-after-block-comments  在注释区段后加上空白行。
    • -bc或–blank-lines-after-commas  在声明区段中,若出现逗号即换行。
    • -bl或–braces-after-if-line  if(或是else,for等等)与后面执行区段的"{“不同行,且”}“自成一行。
    • -bli<缩排格数>或–brace-indent<缩排格数>  设置{ }缩排的格数。
    • -br或–braces-on-if-line  if(或是else,for等等)与后面执行跛段的”{“不同行,且”}“自成一行。
    • -bs或–blank-before-sizeof  在sizeof之后空一格。
    • -c<栏数>或–comment-indentation<栏数>  将注释置于程序码右侧指定的栏位。
    • -cd<栏数>或–declaration-comment-column<栏数>  将注释置于声明右侧指定的栏位。
    • -cdb或–comment-delimiters-on-blank-lines  注释符号自成一行。
    • -ce或–cuddle-else  将else置于”}"(if执行区段的结尾)之后。
    • -ci<缩排格数>或–continuation-indentation<缩排格数>  叙述过长而换行时,指定换行后缩排的格数。
    • -cli<缩排格数>或–case-indentation-<缩排格数>  使用case时,switch缩排的格数。
    • -cp<栏数>或-else-endif-column<栏数>  将注释置于else与elseif叙述右侧定的栏位。
    • -cs或–space-after-cast  在cast之后空一格。
    • -d<缩排格数>或-line-comments-indentation<缩排格数>  针对不是放在程序码右侧的注释,设置其缩排格数。
    • -di<栏数>或–declaration-indentation<栏数>  将声明区段的变量置于指定的栏位。
    • -fc1或–format-first-column-comments  针对放在每行最前端的注释,设置其格式。
    • -fca或–format-all-comments  设置所有注释的格式。
    • -gnu或–gnu-style  指定使用GNU的格式,此为预设值。
    • -i<格数>或–indent-level<格数>  设置缩排的格数。
    • -ip<格数>或–parameter-indentation<格数>  设置参数的缩排格数。
    • -kr或–k-and-r-style  指定使用Kernighan&Ritchie的格式。
    • -lp或–continue-at-parentheses  叙述过长而换行,且叙述中包含了括弧时,将括弧中的每行起始栏位内容垂直对其排列。
    • -nbad或–no-blank-lines-after-declarations  在声明区段后不要加上空白行。
    • -nbap或–no-blank-lines-after-procedures  在程序后不要加上空白行。
    • -nbbb或–no-blank-lines-after-block-comments  在注释区段后不要加上空白行。
    • -nbc或–no-blank-lines-after-commas  在声明区段中,即使出现逗号,仍旧不要换行。
    • -ncdb或–no-comment-delimiters-on-blank-lines  注释符号不要自成一行。
    • -nce或–dont-cuddle-else  不要将else置于"}"之后。
    • -ncs或–no-space-after-casts  不要在cast之后空一格。
    • -nfc1或–dont-format-first-column-comments  不要格式化放在每行最前端的注释。
    • -nfca或–dont-format-comments  不要格式化任何的注释。
    • -nip或–no-parameter-indentation  参数不要缩排。
    • -nlp或–dont-line-up-parentheses  叙述过长而换行,且叙述中包含了括弧时,不用将括弧中的每行起始栏位垂直对其排列。
    • -npcs或–no-space-after-function-call-names  在调用的函数名称之后,不要加上空格。
    • -npro或–ignore-profile  不要读取indent的配置文件.indent.pro。
    • -npsl或–dont-break-procedure-type  程序类型与程序名称放在同一行。
    • -nsc或–dont-star-comments  注解左侧不要加上星号()。
    • -nsob或–leave-optional-semicolon  不用处理多余的空白行。
    • -nss或–dont-space-special-semicolon  若for或while区段仅有一行时,在分号前不加上空格。
    • -nv或–no-verbosity  不显示详细的信息。
    • -orig或–original  使用Berkeley的格式。
    • -pcs或–space-after-procedure-calls  在调用的函数名称与"{"之间加上空格。
    • -psl或–procnames-start-lines  程序类型置于程序名称的前一行。
    • -sc或–start-left-side-of-comments  在每行注释左侧加上星号(
    )。
    • -sob或–swallow-optional-blank-lines  删除多余的空白行。
    • -ss或–space-special-semicolon  若for或swile区段今有一行时,在分号前加上空格。
    • -st或–standard-output  将结果显示在标准输出设备。
    • -T  数据类型名称缩排。
    • -ts<格数>或–tab-size<格数>  设置tab的长度。
    • -v或–verbose  执行时显示详细的信息。
    • -version  显示版本信息。
    Indent代码格式化说明
    使用的indent参数 值 含义
    –blank-lines-after-declarations bad 变量声明后加空行
    –blank-lines-after-procedures bap 函数结束后加空行
    –blank-lines-before-block-comments bbb 块注释前加空行
    –break-before-boolean-operator bbo 较长的行,在逻辑运算符前分行
    –blank-lines-after-commas nbc 变量声明中,逗号分隔的变量不分行
    –braces-after-if-line bl “if"和”{"分做两行
    –brace-indent 0 bli0 "{"不继续缩进
    –braces-after-struct-decl-line bls 定义结构,“struct"和”{"分行
    –comment-indentationn c33 语句后注释开始于行33
    –declaration-comment-columnn cd33 变量声明后注释开始于行33
    –comment-delimiters-on-blank-lines ncdb 不将单行注释变为块注释
    –cuddle-do-while ncdw “do — while"的"while"和其前面的”}“另起一行
    –cuddle-else nce “else"和其前面的”}“另起一行
    –case-indentation 0 cli0 switch中的case语句所进0个空格
    –else-endif-columnn cp33 #else, #endif后面的注释开始于行33
    –space-after-cast cs 在类型转换后面加空格
    –line-comments-indentation n d0 单行注释(不从1列开始的),不向左缩进
    –break-function-decl-args nbfda 关闭:函数的参数一个一行
    –declaration-indentationn di2 变量声明,变量开始于2行,即不必对齐
    –format-first-column-comments nfc1 不格式化起于第一行的注释
    –format-all-comments nfca 不开启全部格式化注释的开关
    –honour-newlines hnl Prefer to break long lines at the position of newlines in the input.
    –indent-leveln i4 设置缩进多少字符,如果为tab的整数倍,用tab来缩进,否则用空格填充。
    –parameter-indentationn ip5 旧风格的函数定义中参数说明缩进5个空格
    –line-length 75 l75 非注释行最长75
    –continue-at-parentheses lp 续行从上一行出现的括号开始
    –space-after-procedure-calls pcs 函数和”(“之间插入一个空格
    –space-after-parentheses nprs 在”(“后”)“前不插入空格
    –procnames-start-lines psl 将函数名和返回类型放在两行定义
    –space-after-for saf for后面有空格
    –space-after-if sai if后面有空格
    –space-after-while saw while后面有空格
    –start-left-side-of-comments nsc 不在生成的块注释中加*
    –swallow-optional-blank-lines nsob 不去掉可添加的空行
    –space-special-semicolon nss 一行的for或while语句,在”;“前不加空。
    –tab-size ts4 一个tab为4个空格(要能整除”-in”)
    –use-tabs ut 使用tab来缩进

    Cut Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字。
    语法
    cut [-bn] [file]
    cut [-c] [file]
    cut [-df] [file]
    使用说明:
    cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
    如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
    参数:
    • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
    • -c :以字符为单位进行分割。
    • -d :自定义分隔符,默认为制表符。
    • -f :与-d一起使用,指定显示哪个区域。
    • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
    范围之内,该字符将被写出;否则,该字符将被排除
    实例
    当你执行who命令时,会输出类似如下的内容:
    $ who
    rocrocket :0 2009-01-08 11:07
    rocrocket pts/0 2009-01-08 11:23 (:0.0)
    rocrocket pts/1 2009-01-08 14:15 (:0.0)
    如果我们想提取每一行的第3个字节,就这样:
    $ who|cut -b 3
    c
    c

    ln Linux ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。
    当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
    语法
    ln [参数][源文件或目录][目标文件或目录]
    其中参数的格式为
    [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
    [–help] [–version] [–]
    命令功能 :
    Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
    不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
    软链接:
    • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
    • 2.软链接可以 跨文件系统 ,硬链接不可以
    • 3.软链接可以对一个不存在的文件名进行链接
    • 4.软链接可以对目录进行链接
    硬链接:
    • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
    • 2.不允许给目录创建硬链接
    • 3.硬链接只有在同一个文件系统中才能创建
    命令参数
    必要参数:
    • -b 删除,覆盖以前建立的链接
    • -d 允许超级用户制作目录的硬链接
    • -f 强制执行
    • -i 交互模式,文件存在则提示用户是否覆盖
    • -n 把符号链接视为一般目录
    • -s 软链接(符号链接)
    • -v 显示详细的处理过程
    选择参数:
    • -S "-S<字尾备份字符串> "或 “–suffix=<字尾备份字符串>”
    • -V “-V<备份方式>“或”–version-control=<备份方式>”
    • --help 显示帮助信息
    • --version 显示版本信息
    实例
    给文件创建软链接,为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效:
    ln -s log2013.log link2013
    输出:
    [root@localhost test]# ll
    -rw-r–r-- 1 root bin 61 11-13 06:03 log2013.log
    [root@localhost test]# ln -s log2013.log link2013
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
    -rw-r–r-- 1 root bin 61 11-13 06:03 log2013.log
    给文件创建硬链接,为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同
    ln log2013.log ln2013
    输出:
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
    -rw-r–r-- 1 root bin 61 11-13 06:03 log2013.log
    [root@localhost test]# ln log2013.log ln2013
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
    -rw-r–r-- 2 root bin 61 11-13 06:03 ln2013
    -rw-r–r-- 2 root bin 61 11-13 06:03 log2013.log

    Less less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件
    语法
    less [参数] 文件
    参数说明:
    • -b <缓冲区大小> 设置缓冲区的大小
    • -e 当文件显示结束后,自动离开
    • -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
    • -g 只标志最后搜索的关键词
    • -i 忽略搜索时的大小写
    • -m 显示类似more命令的百分比
    • -N 显示每行的行号
    • -o <文件名> 将less 输出的内容在指定文件中保存起来
    • -Q 不使用警告音
    • -s 显示连续空行为一行
    • -S 行过长时间将超出部分舍弃
    • -x <数字> 将"tab"键显示为规定的数字空格
    • /字符串:向下搜索"字符串"的功能
    • ?字符串:向上搜索"字符串"的功能
    • n:重复前一个搜索(与 / 或 ? 有关)
    • N:反向重复前一个搜索(与 / 或 ? 有关)
    • b 向上翻一页
    • d 向后翻半页
    • h 显示帮助界面
    • Q 退出less 命令
    • u 向前滚动半页
    • y 向前滚动一行
    • 空格键 滚动一页
    • 回车键 滚动一行
    • [pagedown]: 向下翻动一页
    • [pageup]: 向上翻动一页
    实例
    1、查看文件
    less log2013.log
    2、ps查看进程信息并通过less分页显示
    ps -ef |less
    3、查看命令历史使用记录并通过less分页显示
    [root@localhost test]# history | less
    22 scp -r tomcat6.0.32 root@192.168.120.203:/opt/soft
    23 cd …
    24 scp -r web root@192.168.120.203:/opt/
    25 cd soft
    26 ls
    ……省略……
    4、浏览多个文件
    less log2013.log log2014.log
    说明:
    输入 :n后,切换到 log2014.log
    输入 :p 后,切换到log2013.log
    附加备注
    1.全屏导航
    • ctrl + F - 向前移动一屏
    • ctrl + B - 向后移动一屏
    • ctrl + D - 向前移动半屏
    • ctrl + U - 向后移动半屏
    2.单行导航
    • j - 向前移动一行
    • k - 向后移动一行
    3.其它导航
    • G - 移动到最后一行
    • g - 移动到第一行
    • q / ZZ - 退出 less 命令
    4.其它有用的命令
    • v - 使用配置的编辑器编辑当前文件
    • h - 显示 less 的帮助文档
    • &pattern - 仅显示匹配模式的行,而不是整个文件
    5.标记导航
    当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
    • ma - 使用 a 标记文本的当前位置
    • 'a - 导航到标记 a 处

    Locate 一般情况我们需要出入 locate your_file_name查找指定文件
    Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。

    语法
    locate [-d ][–help][–version][范本样式…]
    参数:
    • -b, --basename – 仅匹配路径名的基本名称
    • -c, --count – 只输出找到的数量
    • -d, --database DBPATH – 使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
    • -e, --existing – 仅打印当前现有文件的条目
    • -1 – 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
    • -0, --null – 在输出上带有NUL的单独条目
    • -S, --statistics – 不搜索条目,打印有关每个数据库的统计信息
    • -q – 安静模式,不会显示任何错误讯息。
    • -P, --nofollow, -H – 检查文件存在时不要遵循尾随的符号链接
    • -l, --limit, -n LIMIT – 将输出(或计数)限制为LIMIT个条目
    • -n – 至多显示 n个输出。
    • -m, --mmap – 被忽略,为了向后兼容
    • -r, --regexp REGEXP – 使用基本正则表达式
    • --regex – 使用扩展正则表达式
    • -q, --quiet – 安静模式,不会显示任何错误讯息
    • -s, --stdio – 被忽略,为了向后兼容
    • -o – 指定资料库存的名称。
    • -h, --help – 显示帮助
    • -i, --ignore-case – 忽略大小写
    • -V, --version – 显示版本信息
    实例
    查找 passwd 文件,输入以下命令:
    locate passwd
    搜索 etc 目录下所有以 sh 开头的文件 :
    locate /etc/sh
    忽略大小写搜索当前用户目录下所有以 r 开头的文件 :
    locate -i ~/r
    附加说明
    locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。
    locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为:
    updatedb
    默认情况下 updatedb 每天执行一次。

    Lsattr Linux lsattr命令用于显示文件属性。
    用chattr执行改变文件或目录的属性,可执行lsattr指令查询其属性。

    语法
    lsattr [-adlRvV][文件或目录…]
    参数:
    • -a  显示所有文件和目录,包括以".“为名称开头字符的额外内建,现行目录”.“与上层目录”…"。
    • -d  显示,目录名称,而非其内容。
    • -l  此参数目前没有任何作用。
    • -R  递归处理,将指定目录下的所有文件及子目录一并处理。
    • -v  显示文件或目录版本。
    • -V  显示版本信息。
    实例
    1、用chattr命令防止系统中某个关键文件被修改:

    chattr +i /etc/resolv.conf

    然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。
    vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉:
    chattr -i /etc/resolv.conf
    使用 lsattr 命令来显示文件属性:

    lsattr /etc/resolv.conf

    输出结果为:
    ----i-------- /etc/resolv.conf
    2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:

    chattr +a /var/log/messages

    Mattrib Linux mattrib命令用来变更或显示MS-DOS文件的属性。
    mattrib为mtools工具指令,模拟MS-DOS的attrib指令,可变更MS-DOS文件的属性。
    语法
    mattrib [-a|+a] [-h|+h] [-r|+r] [-s|+s] [-/] [-X] msdosfile [ msdosfiles … ]
    参数:
    • -a/+a 除去/设定备份属性。
    • -h/+h 除去/设定隐藏属性。
    • -r/+r 除去/设定唯读属性。
    • -s/+s 除去/设定系统属性。
    • -/ 递回的处理包含所有子目录下的档案。
    • -X 以较短的格式输出结果。
    实例
    列出 A 槽 MSDOS 格式磁片上所有文件的属性。
    mattrib a:
    除去 A 槽磁片上 msdos.sys 档案的隐藏、系统与唯读属性。
    mattrib -h -s -r a:msdos.sys
    除去 A 槽磁片上包含子目录下所有档案的唯读属性。
    mattrib -r -/ a:.

    mc Linux mc命令用于提供一个菜单式的文件管理程序。
    执行mc之后,将会看到菜单式的文件管理程序,共分成4个部分。
    mc [-abcdfhkPstuUVx][-C <参数>][-l <文件>][-v <文件>][目录]
      参  数:
    • -a  当mc程序画线时不用绘图字符画线。
    • -b  使用单色模式显示。
    • -c  使用彩色模式显示。
    • -C<参数>  指定显示的颜色。
    • -d  不使用鼠标。
    • -f  显示mc函数库所在的目录。
    • -h  显示帮助。
    • -k  重设softkeys成预设置。
    • -l<文件>  在指定文件中保存ftpfs对话窗的内容。
    • -P  程序结束时,列出最后的工作目录。
    • -s  用慢速的终端机模式显示,在这模式下将减少大量的绘图及文字显示。
    • -t  使用TEMPCAP变量设置终端机,而不使用预设置。
    • -u  不用目前的shell程序。
    • -U  使用目前的shell程序。
    • -v<文件>  使用mc的内部编辑器来显示指定的文件。
    • -V  显示版本信息。
    • -x  指定以xterm模式显示。
    Linux MC 相关操作
    命令按键 描 述
    F9 or Esc+9 激活菜单栏
    Tab 在两个窗口间移动
    F10 or Esc+0 退出MC
    Control-Enter or Alt-Enter 可以将文件名拷贝到命令行
    F1 or Esc+1 打开帮助页面
    虽然MC很好用,不过我还是建议大家使用命令行工具!

    Mdel Linux mdel命令用来删除 MSDOS 格式的档案
    在删除只读之前会有提示信息产生。
    语法
    mdel [-v] msdosfile [ msdosfiles … ]
    参数:
    • -v 显示更多的讯息。
    实例
    将 A 槽磁片根目录中的 autoexec.bat 删除。
    mdel a:autoexec.bat .

    mdir Linux mdir命令用于显示MS-DOS目录。
    mdir为mtools工具指令,模拟MS-DOS的dir指令,可显示MS-DOS文件系统中的目录内容
    语法
    mdir [-afwx/][目录]
    参数:
    • -/ 显示目录下所有子目录与文件。
    • -a  显示隐藏文件。
    • -f  不显示磁盘所剩余的可用空间。
    • -w  仅显示目录或文件名称,并以横排方式呈现,以便一次能显示较多的目录或文件。
    • -X  仅显示目录下所有子目录与文件的完整路径,不显示其他信息。
    实例
    显示a盘中的内容
    $ mdir -/ a:*
    以上命令执行后,mdir将显示指定盘"a:"中的所有子目录及其中的文件信息,如下所示:
    Volume in drive A has no label #加载信息
    Volume Serial Number is 13D2~055C
    Directory for A:\ #以下为目录信息
    ./TEST

    2011-08-23 16:59
    #显示格式为文件名,目录大小,修改时间
    AUTORUN.INF 265 2011-08-23 16:53
    AUTORUN.BAT 43 2011-08-23 16:56
    3 files 308 bytes #统计总大小
    724 325 bytes free #剩余空间

    More 类似于cat
    Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h

    语法
    more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames…]
    参数:
    • -num 一次显示的行数
    • -d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
    • -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
    • -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
    • -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
    • -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
    • -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
    • -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
    • +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
    • +num 从第 num 行开始显示
    • fileNames 欲显示内容的文档,可为复数个数
    实例
    逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。
    more -s testfile
    从第 20 行开始显示 testfile 之文档内容。
    more +20 testfile
    常用操作命令
    • Enter 向下n行,需要定义。默认为1行
    • Ctrl+F 向下滚动一屏
    • 空格键 向下滚动一屏
    • Ctrl+B 返回上一屏
    • = 输出当前行的行号
    • :f 输出文件名和当前行的行号
    • V 调用vi编辑器
    • !命令 调用Shell,并执行命令
    • q 退出more
    mmove Linux mmove命令用于在MS-DOS文件系统中,移动文件或目录,或更改名称。
    mmove为mtools工具命令,模拟MS-DOS的move命令,可在MS-DOS文件系统中移动现有的文件或目录,或是更改现有文件或目录的名称。
    语法
    mmove [源文件或目录…][目标文件或目录]
    参数说明:
    • [源文件或目录…]: 执行操作的源文件或目录路径
    • [目标文件或目录]: 执行操作后的目标文件或目录路径
    实例
    使用指令mmove将文件"autorun.bat"移动到目录"test"中,输入如下命令:
    $ mmove autorun.bat test #移动文件到目录test中
    以上命令执行以后,指令mmove会将文件"autorun.bat"移动到指定目录"test"中。
    注意:用户可以使用mdir指令查看移动后的文件或目录信息。mtools
    Mv Linux mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。
    语法
    mv [options] source dest
    mv [options] source… directory
    参数说明:
    • -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
    • -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
    • -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
    • -n: 不要覆盖任何已存在的文件或目录。
    • -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
    mv 参数设置与运行结果
    命令格式 运行结果
    mv source_file(文件) dest_file(文件) 将源文件名 source_file 改为目标文件名 dest_file
    mv source_file(文件) dest_directory(目录) 将文件 source_file 移动到目标目录 dest_directory 中
    mv source_directory(目录) dest_directory(目录) 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory
    mv source_directory(目录) dest_file(文件) 出错
    实例
    将文件 aaa 改名为 bbb :
    mv aaa bbb
    将 info 目录放入 logs 目录中。注意,如果 logs 目录不存在,则该命令将 info 改名为 logs。
    mv info/ logs
    再如将 /usr/runoob 下的所有文件和目录移到当前目录下,命令行为:
    $ mv /usr/runoob/* .

    Od Linux od命令用于输出文件内容。

    od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来。
    语法
    od [-abcdfhilovx][-A <字码基数>][-j <字符数目>][-N <字符数目>][-s <字符串字符数>][-t <输出格式>][-w <每列字符数>][–help][–version][文件…]
    参数:
    • -a  此参数的效果和同时指定"-ta"参数相同。
    • -A<字码基数>  选择要以何种基数计算字码。
    • -b  此参数的效果和同时指定"-toC"参数相同。
    • -c  此参数的效果和同时指定"-tC"参数相同。
    • -d  此参数的效果和同时指定"-tu2"参数相同。
    • -f  此参数的效果和同时指定"-tfF"参数相同。
    • -h  此参数的效果和同时指定"-tx2"参数相同。
    • -i  此参数的效果和同时指定"-td2"参数相同。
    • -j<字符数目>或–skip-bytes=<字符数目>  略过设置的字符数目。
    • -l  此参数的效果和同时指定"-td4"参数相同。
    • -N<字符数目>或–read-bytes=<字符数目>  到设置的字符数目为止。
    • -o  此参数的效果和同时指定"-to2"参数相同。
    • -s<字符串字符数>或–strings=<字符串字符数>  只显示符合指定的字符数目的字符串。
    • -t<输出格式>或–format=<输出格式>  设置输出格式。
    • -v或–output-duplicates  输出时不省略重复的数据。
    • -w<每列字符数>或–width=<每列字符数>  设置每列的最大字符数。
    • -x  此参数的效果和同时指定"-h"参数相同。
    • --help  在线帮助。
    • --version  显示版本信息。
    实例
    创建 tmp 文件:
    $ echo abcdef g > tmp
    $ cat tmp
    abcdef g
    使用 od 命令:
    $ od -b tmp
    0000000 141 142 143 144 145 146 040 147 012
    0000011
    使用单字节八进制解释进行输出,注意左侧的默认地址格式为八字节:
    $ od -c tmp
    0000000 a b c d e f g \n
    0000011
    使用ASCII码进行输出,注意其中包括转义字符
    $ od -t d1 tmp
    0000000 97 98 99 100 101 102 32 103 10
    0000011
    使用单字节十进制进行解释
    $ od -A d -c tmp
    0000000 a b c d e f g \n
    0000009

    Paste Linux paste 命令用于合并文件的列
    paste 指令会把每个文件以列对列的方式,一列列地加以合并。
    语法
    paste [-s][-d <间隔字符>][–help][–version][文件…]
    参数:
    • -d<间隔字符>或–delimiters=<间隔字符>  用指定的间隔字符取代跳格字符。
    • -s或–serial  串列进行而非平行处理。
    • --help  在线帮助。
    • --version  显示帮助信息。
    • [文件…] 指定操作的文件路径
    实例
    使用paste指令将文件"file"、“testfile”、“testfile1"进行合并,输入如下命令:
    paste file testfile testfile1 #合并指定文件的内容
    但是,在执行以上命令之前,首先使用"cat"指令对3个文件内容进行查看,显示如下所示:
    $ cat file #file文件的内容
    xiongdan 200
    lihaihui 233
    lymlrl 231
    $ cat testfile #testfile文件的内容
    liangyuanm ss
    $ cat testfile1 #testfile1文件的内容
    huanggai 56
    zhixi 73
    当合并指令”$ paste file testfile testfile1"执行后,程序界面中将显示合并后的文件内容,如下所示:
    xiongdan 200
    lihaihui 233
    lymlrl 231
    liangyuanm ss
    huanggai 56
    zhixi 73
    若使用paste指令的参数"-s",则可以将一个文件中的多行数据合并为一行进行显示。例如,将文件"file"中的3行数据合并为一行数据进行显示,输入如下命令
    $ paste -s file #合并指定文件的多行数据
    上面的命令执行后,显示的数据内容如下所示:
    xiongdan 200 lihaihui 233 lymlrl 231
    注意:参数"-s"只是将testfile文件的内容调整显示方式,并不会改变原文件的内容格式。

    Patch Linux patch命令用于修补文件
    patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。
    语法
    patch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标示符号>][-F <监别列数>][-g <控制数值>][-i <修补文件>][-o <输出文件>][-p <剥离层级>][-r <拒绝文件>][-V <备份方式>][-Y <备份字首字符串>][-z <备份字尾字符串>][–backup-if -mismatch][–binary][–help][–nobackup-if-mismatch][–verbose][原始文件 <修补文件>] 或 path [-p <剥离层级>] < [修补文件]
    参数:
    • -b或–backup  备份每一个原始文件。
    • -B<备份字首字符串>或–prefix=<备份字首字符串>  设置文件备份时,附加在文件名称前面的字首字符串,该字符串可以是路径名称。
    • -c或–context  把修补数据解译成关联性的差异。
    • -d<工作目录>或–directory=<工作目录>  设置工作目录。
    • -D<标示符号>或–ifdef=<标示符号>  用指定的符号把改变的地方标示出来。
    • -e或–ed  把修补数据解译成ed指令可用的叙述文件。
    • -E或–remove-empty-files  若修补过后输出的文件其内容是一片空白,则移除该文件。
    • -f或–force  此参数的效果和指定"-t"参数类似,但会假设修补数据的版本为新 版本。
    • -F<监别列数>或–fuzz<监别列数>  设置监别列数的最大值。
    • -g<控制数值>或–get=<控制数值>  设置以RSC或SCCS控制修补作业。
    • -i<修补文件>或–input=<修补文件>  读取指定的修补文件。
    • -l或–ignore-whitespace  忽略修补数据与输入数据的跳格,空格字符。
    • -n或–normal  把修补数据解译成一般性的差异。
    • -N或–forward  忽略修补的数据较原始文件的版本更旧,或该版本的修补数据已使 用过。
    • -o<输出文件>或–output=<输出文件>  设置输出文件的名称,修补过的文件会以该名称存放。
    • -p<剥离层级>或–strip=<剥离层级>  设置欲剥离几层路径名称。
    • -f<拒绝文件>或–reject-file=<拒绝文件>  设置保存拒绝修补相关信息的文件名称,预设的文件名称为.rej。
    • -R或–reverse  假设修补数据是由新旧文件交换位置而产生。
    • -s或–quiet或–silent  不显示指令执行过程,除非发生错误。
    • -t或–batch  自动略过错误,不询问任何问题。
    • -T或–set-time  此参数的效果和指定"-Z"参数类似,但以本地时间为主。
    • -u或–unified  把修补数据解译成一致化的差异。
    • -v或–version  显示版本信息。
    • -V<备份方式>或–version-control=<备份方式>  用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用"-z"参数变更,当使用"-V"参数指定不同备份方式时,也会产生不同字尾的备份字符串。
    • -Y<备份字首字符串>或–basename-prefix=–<备份字首字符串>  设置文件备份时,附加在文件基本名称开头的字首字符串。
    • -z<备份字尾字符串>或–suffix=<备份字尾字符串>  此参数的效果和指定"-B"参数类似,差别在于修补作业使用的路径与文件名若为src/linux/fs/super.c,加上"backup/“字符串后,文件super.c会备份于/src/linux/fs/backup目录里。
    • -Z或–set-utc  把修补过的文件更改,存取时间设为UTC。
    • --backup-if-mismatch  在修补数据不完全吻合,且没有刻意指定要备份文件时,才备份文件。
    • --binary  以二进制模式读写数据,而不通过标准输出设备。
    • --help  在线帮助。
    • --nobackup-if-mismatch  在修补数据不完全吻合,且没有刻意指定要备份文件时,不要备份文件。
    • --verbose  详细显示指令的执行过程。
    实例
    使用patch指令将文件"testfile1"升级,其升级补丁文件为"testfile.patch”,输入如下命令:
    $ patch -p0 testfile1 testfile.patch #使用补丁程序升级文件
    使用该命令前,可以先使用指令"cat"查看"testfile1"的内容。在需要修改升级的文件与原文件之间使用指令"diff"比较可以生成补丁文件。具体操作如下所示:
    $ cat testfile1 #查看testfile1的内容
    Hello,This is the firstfile!
    $ cat testfile2 #查看testfile2的内容
    Hello,Thisisthesecondfile!
    $ diff testfile1 testfile2 #比较两个文件
    1c1
    <Hello,Thisisthefirstfile!

    Hello,Thisisthesecondfile!
    #将比较结果保存到tetsfile.patch文件
    $ diff testfile1 testfile2>testfile.patch
    $ cat testfile.patch #查看补丁包的内容
    1c1
    <Hello,Thisisthefirstfile!


    Hello,Thisisthesecondfile!
    #使用补丁包升级testfile1文件
    $ patch -p0 testfile1 testfile.patch
    patching file testfile1
    KaTeX parse error: Expected 'EOF', got '#' at position 32: … #̲再次查看testfile1的内… diff testfile1 testfile2>testfile. patch"所使用的操作符">"表示将该操作符左边的文件数据写入到右边所指向的文件中。在这里,即是指将两个文件比较后的结果写入到文件"testfile.patch"中。

    Rcp Linux rcp命令用于复制远程文件或目录
    rcp指令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。
    语法
    rcp [-pr][源文件或目录][目标文件或目录]

    rcp [-pr][源文件或目录…][目标文件]
    参数:
    -p  保留源文件或目录的属性,包括拥有者,所属群组,权限与时间。
    -r  递归处理,将指定目录下的文件与子目录一并处理。
    实例
    使用rcp指令复制远程文件到本地进行保存。
    设本地主机当前账户为rootlocal,远程主机账户为root,要将远程主机(218.6.132.5)主目录下的文件"testfile"复制到本地目录"test"中,则输入如下命令:
    rcp root@218.6.132.5:./testfile testfile #复制远程文件到本地
    rcp root@218.6.132.5:home/rootlocal/testfile testfile
    #要求当前登录账户cmd 登录到远程主机
    rcp 218.6.132.5:./testfile testfile
    注意:指令"rcp"执行以后不会有返回信息,仅需要在目录"test"下查看是否存在文件"testfile"。若存在,则表示远程复制操作成功,否则远程复制操作失败。

    Rm liunx rm(英文全拼: remove) 命令用于删除一个文件或者目录

    语法
    rm [options] name…
    参数:
    • -i 删除前逐一询问确认。
    • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
    • -r 将目录及以下之档案亦逐一删除。
    实例
    删除文件可以直接使用rm命令,若删除目录则必须配合选项"-r",例如:

    rm test.txt

    rm:是否删除 一般文件 “test.txt”? y

    rm homework

    rm: 无法删除目录"homework": 是一个目录

    rm -r homework

    rm:是否删除 目录 “homework”? y
    删除当前目录下的所有文件及目录,命令行为:
    rm -r *
    文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令。

    Split Linux split命令用于将一个文件分割成数个。
    该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。
    语法
    split [–help][–version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
    参数说明:
    • -<行数> : 指定每多少行切成一个小文件
    • -b<字节> : 指定每多少字节切成一个小文件
    • --help : 在线帮助
    • --version : 显示版本信息
    • -C<字节> : 与参数"-b"相似,但是在切 割时将尽量维持每行的完整性
    • [输出文件名] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号
    实例
    使用指令"split"将文件"README"每6行切割成一个文件,输入如下命令:
    $ split -6 README #将README文件每六行分割成一个文件
    以上命令执行后,指令"split"会将原来的大文件"README"切割成多个以"x"开头的小文件。而在这些小文件中,每个文件都只有6行内容。
    使用指令"ls"查看当前目录结构,如下所示:
    $ ls #执行ls指令
    #获得当前目录结构
    README xaa xad xag xab xae xah xac xaf xai

    Tee Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
    tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
    语法
    tee [-ai][–help][–version][文件…]
    参数:
    • -a或–append  附加到既有文件的后面,而非覆盖它.
    • -i或–ignore-interrupts  忽略中断信号。
    • --help  在线帮助。
    • --version  显示版本信息。
    实例
    使用指令"tee"将用户输入的数据同时保存到文件"file1"和"file2"中,输入如下命令:
    $ tee file1 file2 #在两个文件中复制内容
    以上命令执行后,将提示用户输入需要保存到文件的数据,如下所示:
    My Linux #提示用户输入数据
    My Linux #输出数据,进行输出反馈
    此时,可以分别打开文件"file1"和"file2",查看其内容是否均是"My Linux"即可判断指令"tee"是否执行成功。
    Touch 创建文件
    Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
    ls -l 可以显示档案的时间记录

    语法
    touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][–help][–version][文件或目录…]
    参数说明:
    • a 改变档案的读取时间记录。
    • m 改变档案的修改时间记录。
    • c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
    • f 不使用,是为了与其他 unix 系统的相容性而保留。
    • r 使用参考档的时间记录,与 --file 的效果一样。
    • d 设定时间与日期,可以使用各种不同的格式。
    • t 设定档案的时间记录,格式与 date 指令相同。
    • --no-create 不会建立新档案。
    • --help 列出指令格式。
    • --version 列出版本讯息。
    实例
    使用指令"touch"修改文件"testfile"的时间属性为当前系统时间,输入如下命令:
    $ touch testfile #修改文件的时间属性
    首先,使用ls命令查看testfile文件的属性,如下所示:
    $ ls -l testfile #查看文件的时间属性
    #原来文件的修改时间为16:09
    -rw-r–r-- 1 hdd hdd 55 2011-08-22 16:09 testfile
    执行指令"touch"修改文件属性以后,并再次查看该文件的时间属性,如下所示:
    $ touch testfile #修改文件时间属性为当前系统时间
    $ ls -l testfile #查看文件的时间属性
    #修改后文件的时间属性为当前系统时间
    -rw-r–r-- 1 hdd hdd 55 2011-08-22 19:53 testfile
    使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件"file",输入如下命令:
    $ touch file #创建一个名为“file”的新的空白文件

    Which Linux which命令用于查找文件
    which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
    语法
    which [文件…]
    参数:
    • -n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
    • -p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。
    • -w  指定输出时栏位的宽度。
    • -V  显示版本信息。
    实例
    使用指令"which"查看指令"bash"的绝对路径,输入如下命令:
    $ which bash
    上面的指令执行后,输出信息如下所示:
    /bin/bash #bash可执行程序的绝对路径

    Cp Linux cp(英文全拼:copy file)命令主要用于复制文件或目录。
    语法
    cp [options] source dest

    cp [options] source… directory
    参数说明:
    • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
    • -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
    • -f:覆盖已经存在的目标文件而不给出提示。
    • -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
    • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
    • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
    • -l:不复制文件,只是生成链接文件。
    实例
    使用指令 cp 将当前目录 test/ 下的所有文件复制到新目录 newtest 下,输入如下命令:
    $ cp –r test/ newtest
    注意:用户使用该指令复制目录时,必须使用参数 -r 或者 -R

    Whhereis Linux whereis命令用于查找文件
    该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。
    该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
    语法
    whereis [-bfmsu][-B <目录>…][-M <目录>…][-S <目录>…][文件…]
    参数:
    • • -b  只查找二进制文件。
    • -B<目录>  只在设置的目录下查找二进制文件。
    • -f  不显示文件名前的路径名称。
    • -m  只查找说明文件。
    • -M<目录>  只在设置的目录下查找说明文件。
    • -s  只查找原始代码文件。
    • -S<目录>  只在设置的目录下查找原始代码文件。
    • -u  查找不包含指定类型的文件。
    实例
    使用指令"whereis"查看指令"bash"的位置,输入如下命令:
    $ whereis bash
    上面的指令执行后,输出信息如下所示:
    bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz
    注意:以上输出信息从左至右分别为查询的程序名、bash路径、bash的man 手册页路径。
    如果用户需要单独查询二进制文件或帮助文件,可使用如下命令:
    $ whereis -b bash
    $ whereis -m bash
    输出信息如下:
    $ whereis -b bash #显示bash 命令的二进制程序
    bash: /bin/bash /etc/bash.bashrc /usr/share/bash # bash命令的二进制程序的地址
    $ whereis -m bash #显示bash 命令的帮助文件
    bash: /usr/share/man/man1/bash.1.gz #bash命令的帮助文件地址

    rhmask Linux rhmask命令用于对文件进行加密和解密操作。
    执行rhmask指令可制作加密过的文件,方便用户在公开的网络上传输该文件,而不至于被任意盗用。
    语法
    rhmask [加密文件][输出文件] 或 rhmask [-d][加密文件][源文件][输出文件]
    参数:
    • -d  产生加密过的文件。
    实例
    使用指令"rhmask"将加密文件"code.txt"进行加密后,另存为输出文件"demo.txt",输入如下命令:
    $ rhmask code.txt demo.txt
    以上命令执行后,文件"code.txt"将被加密后,另存为已经加密的文件"demo.txt"。
    注意:该指令有两种语法,用户可以有选择性地进行使用即可。

    Scp Linux scp 命令用于 Linux 之间复制文件和目录。
    scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
    scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
    语法
    scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
    [-l limit] [-o ssh_option] [-P port] [-S program]
    [[user@]host1:]file1 […] [[user@]host2:]file2
    简易写法:
    scp [可选参数] file_source file_target
    参数说明:
    • -1: 强制scp命令使用协议ssh1
    • -2: 强制scp命令使用协议ssh2
    • -4: 强制scp命令只使用IPv4寻址
    • -6: 强制scp命令只使用IPv6寻址
    • -B: 使用批处理模式(传输过程中不询问传输口令或短语)
    • -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
    • -p:保留原文件的修改时间,访问时间和访问权限。
    • -q: 不显示传输进度条。
    • -r: 递归复制整个目录。
    • -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
    • -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
    • -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
    • -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
    • -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
    • -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
    • -P port:注意是大写的P, port是指定数据传输用到的端口号
    • -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
    实例
    1、从本地复制到远程
    命令格式:
    scp local_file remote_username@remote_ip:remote_folder
    或者
    scp local_file remote_username@remote_ip:remote_file
    或者
    scp local_file remote_ip:remote_folder
    或者
    scp local_file remote_ip:remote_file
    • 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
    • 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
    应用实例:
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3
    scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music
    scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3
    复制目录命令格式:
    scp -r local_folder remote_username@remote_ip:remote_folder
    或者
    scp -r local_folder remote_ip:remote_folder
    • 第1个指定了用户名,命令执行后需要再输入密码;
    • 第2个没有指定用户名,命令执行后需要输入用户名和密码;
    应用实例:
    scp -r /home/space/music/ root@www.runoob.com:/home/root/others/
    scp -r /home/space/music/ www.runoob.com:/home/root/others/
    上面命令将本地 music 目录复制到远程 others 目录下。
    2、从远程复制到本地
    从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例
    应用实例:
    scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
    scp -r www.runoob.com:/home/root/others/ /home/space/music/
    说明
    1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
    #scp 命令使用端口号 4588
    scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator
    2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。

    Awk AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
    之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
    语法
    awk [选项参数] ‘script’ var=value file(s)

    awk [选项参数] -f scriptfile var=value file(s)
    选项参数说明:
    • -F fs or --field-separator fs
    指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
    • -v var=value or --asign var=value
    赋值一个用户定义变量。
    • -f scripfile or --file scriptfile
    从脚本文件中读取awk命令。
    • -mf nnn and -mr nnn
    对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
    • -W compact or --compat, -W traditional or --traditional
    在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
    • -W copyleft or --copyleft, -W copyright or --copyright
    打印简短的版权信息。
    • -W help or --help, -W usage or --usage
    打印全部awk选项和每个选项的简短说明。
    • -W lint or --lint
    打印不能向传统unix平台移植的结构的警告。
    • -W lint-old or --lint-old
    打印关于不能向传统unix平台移植的结构的警告。
    • -W posix
    打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符=不能代替=;fflush无效。
    • -W re-interval or --re-inerval
    允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
    • -W source program-text or --source program-text
    使用program-text作为源代码,可与-f命令混用。
    • -W version or --version
    打印bug报告信息的版本。


    基本用法
    log.txt文本内容如下:
    2 this is a test
    3 Are you like awk
    This’s a test
    10 There are orange,apple,mongo
    用法一:
    awk ‘{[pattern] action}’ {filenames} # 行匹配语句 awk ‘’ 只能用单引号
    实例:

    每行按空格或TAB分割,输出文本中的1、4项

    $ awk ‘{print $1,$4}’ log.txt

    2 a
    3 like
    This’s
    10 orange,apple,mongo

    格式化输出

    $ awk ‘{printf “%-8s %-10s\n”,$1,$4}’ log.txt

    2 a
    3 like
    This’s
    10 orange,apple,mongo

    用法二:
    awk -F #-F相当于内置变量FS, 指定分割字符
    实例:

    使用","分割

    $ awk -F, ‘{print $1,$2}’ log.txt

    2 this is a test
    3 Are you like awk
    This’s a test
    10 There are orange apple

    或者使用内建变量

    $ awk ‘BEGIN{FS=","} {print $1,$2}’ log.txt

    2 this is a test
    3 Are you like awk
    This’s a test
    10 There are orange apple

    使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割

    $ awk -F ‘[ ,]’ ‘{print $1,$2,$5}’ log.txt

    2 this test
    3 Are awk
    This’s a
    10 There apple
    用法三:
    awk -v # 设置变量
    实例:
    $ awk -va=1 ‘{print $1,$1+a}’ log.txt

    2 3
    3 4
    This’s 1
    10 11
    $ awk -va=1 -vb=s ‘{print $1,$1+a,$1b}’ log.txt

    2 3 2s
    3 4 3s
    This’s 1 This’ss
    10 11 10s
    用法四:
    awk -f {awk脚本} {文件名}
    实例:
    $ awk -f cal.awk log.txt


    运算符
    运算符 描述
    = += -= *= /= %= ^= **= 赋值
    ?: C条件表达式
    || 逻辑或
    && 逻辑与
    ~ 和 !~ 匹配正则表达式和不匹配正则表达式
    < <= > >= != == 关系运算符
    空格 连接

      • 加,减
    • / % 乘,除与求余
      • ! 一元加,减和逻辑非
        ^ *** 求幂
        ++ – 增加或减少,作为前缀或后缀
        $ 字段引用
        in 数组成员
        过滤第一列大于2的行
        $ awk ‘$1>2’ log.txt #命令
        #输出
        3 Are you like awk
        This’s a test
        10 There are orange,apple,mongo
        过滤第一列等于2的行
        $ awk ‘$12 {print $1,$3}’ log.txt #命令
        #输出
        2 is
        过滤第一列大于2并且第二列等于’Are’的行
        $ awk '$1>2 && $2
        "Are" {print $1,$2,$3}’ log.txt #命令
        #输出
        3 Are you

    内建变量
    变量 描述
    $n 当前记录的第n个字段,字段间由FS分隔
    $0 完整的输入记录
    ARGC 命令行参数的数目
    ARGIND 命令行中当前文件的位置(从0开始算)
    ARGV 包含命令行参数的数组
    CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
    ERRNO 最后一个系统错误的描述
    FIELDWIDTHS 字段宽度列表(用空格键分隔)
    FILENAME 当前文件名
    FNR 各文件分别计数的行号
    FS 字段分隔符(默认是任何空格)
    IGNORECASE 如果为真,则进行忽略大小写的匹配
    NF 一条记录的字段的数目
    NR 已经读出的记录数,就是行号,从1开始
    OFMT 数字的输出格式(默认值是%.6g)
    OFS 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
    ORS 输出记录分隔符(默认值是一个换行符)
    RLENGTH 由match函数所匹配的字符串的长度
    RS 记录分隔符(默认是一个换行符)
    RSTART 由match函数所匹配的字符串的第一个位置
    SUBSEP 数组下标分隔符(默认值是/034)
    $ awk ‘BEGIN{printf “%4s %4s %4s %4s %4s %4s %4s %4s %4s\n”,“FILENAME”,“ARGC”,“FNR”,“FS”,“NF”,“NR”,“OFS”,“ORS”,“RS”;printf “---------------------------------------------\n”} {printf “%4s %4s %4s %4s %4s %4s %4s %4s %4s\n”,FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}’ log.txt
    FILENAME ARGC FNR FS NF NR OFS ORS RS

    log.txt 2 1 5 1
    log.txt 2 2 5 2
    log.txt 2 3 3 3
    log.txt 2 4 4 4
    $ awk -F’ ‘BEGIN{printf “%4s %4s %4s %4s %4s %4s %4s %4s %4s\n”,“FILENAME”,“ARGC”,“FNR”,“FS”,“NF”,“NR”,“OFS”,“ORS”,“RS”;printf “---------------------------------------------\n”} {printf “%4s %4s %4s %4s %4s %4s %4s %4s %4s\n”,FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}’ log.txt
    FILENAME ARGC FNR FS NF NR OFS ORS RS

    log.txt 2 1 ’ 1 1
    log.txt 2 2 ’ 1 2
    log.txt 2 3 ’ 2 3
    log.txt 2 4 ’ 1 4

    输出顺序号 NR, 匹配文本行号

    $ awk ‘{print NR,FNR,$1,$2,$3}’ log.txt

    1 1 2 this is
    2 2 3 Are you
    3 3 This’s a test
    4 4 10 There are

    指定输出分割符

    $ awk ‘{print $1,$2,$5}’ OFS=" $ " log.txt

    2 $ this $ test
    3 $ Are $ awk
    This’s $ a $
    10 $ There $


    使用正则,字符串匹配

    输出第二列包含 “th”,并打印第二列与第四列

    $ awk ‘$2 ~ /th/ {print $2,$4}’ log.txt

    this a
    表示模式开始。// 中是模式。

    输出包含 “re” 的行

    $ awk '/re/ ’ log.txt

    3 Are you like awk
    10 There are orange,apple,mongo


    忽略大小写
    $ awk ‘BEGIN{IGNORECASE=1} /this/’ log.txt

    2 this is a test
    This’s a test


    模式取反
    $ awk ‘$2 !~ /th/ {print $2,$4}’ log.txt

    Are like
    a
    There orange,apple,mongo
    $ awk ‘!/th/ {print $2,$4}’ log.txt

    Are like
    a
    There orange,apple,mongo


    awk脚本
    关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。
    • BEGIN{ 这里面放的是执行前的语句 }
    • END {这里面放的是处理完所有的行后要执行的语句 }
    • {这里面放的是处理每一行时要执行的语句}
    假设有这么一个文件(学生成绩表):
    $ cat score.txt
    Marry 2143 78 84 77
    Jack 2321 66 78 45
    Tom 2122 48 77 71
    Mike 2537 87 97 95
    Bob 2415 40 57 62
    我们的 awk 脚本如下:
    $ cat cal.awk
    #!/bin/awk -f
    #运行前
    BEGIN {
    math = 0
    english = 0
    computer = 0

    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
    printf "---------------------------------------------\n"
    

    }
    #运行中
    {
    math+=$3
    english+=$4
    computer+=$5
    printf “%-6s %-6s %4d %8d %8d %8d\n”, $1, $2, $3,$4,$5, $3+$4+$5
    }
    #运行后
    END {
    printf “---------------------------------------------\n”
    printf " TOTAL:%10d %8d %8d \n", math, english, computer
    printf “AVERAGE:%10.2f %8.2f %8.2f\n”, math/NR, english/NR, computer/NR
    }
    我们来看一下执行结果:
    $ awk -f cal.awk score.txt
    NAME NO. MATH ENGLISH COMPUTER TOTAL

    Marry 2143 78 84 77 239
    Jack 2321 66 78 45 189
    Tom 2122 48 77 71 196
    Mike 2537 87 97 95 279
    Bob 2415 40 57 62 159

    TOTAL: 319 393 350
    AVERAGE: 63.80 78.60 70.00


    另外一些实例
    AWK 的 hello world 程序为:
    BEGIN { print “Hello, world!” }
    计算文件大小
    $ ls -l *.txt | awk ‘{sum+=$5} END {print sum}’

    666581
    从文件中找出长度大于 80 的行:
    awk ‘length>80’ log.txt
    打印九九乘法表
    seq 9 | sed ‘H;g’ | awk -v RS=’’ ‘{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}’
    read Linux read命令用于从标准输入读取数值
    read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
    语法
    read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
    参数说明:
    • -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
    • -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
    • -p 后面跟提示信息,即在输入前打印提示信息。
    • -e 在输入的时候可以使用命令补全功能。
    • -n 后跟一个数字,定义输入文本的长度,很实用。
    • -r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
    • -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
    • -t 后面跟秒数,定义输入字符的等待时间。
    • -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
    实例
    1、简单读取
    #!/bin/bash

    #这里默认会换行
    echo "输入网站名: "
    #读取从键盘的输入
    read website
    echo “你输入的网站名是 $website”
    exit 0 #退出
    测试结果为:
    输入网站名:
    www.runoob.com
    你输入的网站名是 www.runoob.com
    2、-p 参数,允许在 read 命令行中直接指定一个提示。
    #!/bin/bash

    read -p “输入网站名:” website
    echo “你输入的网站名是 $website”
    exit 0
    测试结果为:
    输入网站名:www.runoob.com
    你输入的网站名是 www.runoob.com
    3、-t 参数指定 read 命令等待输入的秒数,当计时满时,read命令返回一个非零退出状态。
    #!/bin/bash

    if read -t 5 -p “输入网站名:” website
    then
    echo “你输入的网站名是 $website”
    else
    echo “\n抱歉,你输入超时了。”
    fi
    exit 0
    执行程序不输入,等待 5 秒后:
    输入网站名:
    抱歉,你输入超时了
    4、除了输入时间计时,还可以使用 -n 参数设置 read 命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。
    #!/bin/bash

    read -n1 -p “Do you want to continue [Y/N]?” answer
    case $answer in
    Y | y)
    echo “fine ,continue”;;
    N | n)
    echo “ok,good bye”;;
    *)
    echo “error choice”;;

    esac
    exit 0
    该例子使用了-n 选项,后接数值 1,指示 read 命令只要接受到一个字符就退出。只要按下一个字符进行回答,read 命令立即接受输入并将其传给变量,无需按回车键。
    只接收 2 个输入就退出:
    #!/bin/bash

    read -n2 -p "请随便输入两个字符: " any
    echo “\n您输入的两个字符是:$any”
    exit 0
    执行程序输入两个字符:
    请随便输入两个字符: 12
    您输入的两个字符是:12
    5、-s 选项能够使 read 命令中输入的数据不显示在命令终端上(实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色)。输入密码常用这个选项。
    #!/bin/bash

    read -s -p “请输入您的密码:” pass
    echo “\n您输入的密码是 $pass”
    exit 0
    执行程序输入密码后是不显示的:
    请输入您的密码:
    您输入的密码是 runoob
    6.读取文件
    每次调用 read 命令都会读取文件中的 “一行” 文本。当文件没有可读的行时,read 命令将以非零状态退出。
    通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。
    测试文件 test.txt 内容如下:
    123
    456
    runoob
    测试代码:
    #!/bin/bash

    count=1 # 赋值语句,不加空格
    cat test.txt | while read line # cat 命令的输出作为read命令的输入,read读到>的值放在line中
    do
    echo “Line count:count:line”
    count=$[ $count + 1 ] # 注意中括号中的空格。
    done
    echo “finish”
    exit 0
    执行结果为:
    Line 1:123
    Line 2:456
    Line 3:runoob
    finish
    使用 -e 参数,以下实例输入字符 a 后按下 Tab 键就会输出相关的文件名(该目录存在的):
    $ read -e -p “输入文件名:” str
    输入文件名:a
    a.out a.py a.pyc abc.txt
    输入文件名:a
    文档编辑
    Col liunx col 命令用于过滤控制字符
    在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">“和”>>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。
    语法
    col [-bfx][-l<缓冲区列数>]
    参数:
    • -b 过滤掉所有的控制字符,包括RLF和HRLF。
    • -f 滤除RLF字符,但允许将HRLF字符呈现出来。
    • -x 以多个空格字符来表示跳格字符。
    • -l<缓冲区列数> 预设的内存缓冲区有128列,您可以自行指定缓冲区的大小。
    实例
    下面以 man 命令帮助文档为例,讲解col 命令的使用。
    将man 命令的帮助文档保存为man_help,使用-b 参数过滤所有控制字符。在终端中使用如下命令:
    man man | col-b > man_help
    注:其中"|"用于建立管道,把man命令的输出结果转为col命令的输入数据。

    Egrep Linux egrep命令用于在文件内查找指定的字符串
    egrep执行效果与"grep-E"相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。
    egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更规范。
    语法
    egrep [范本模式] [文件或目录]
    参数说明:
    • [范本模式] :查找的字符串规则。
    • [文件或目录] :查找的目标文件或目录。
    实例
    显示文件中符合条件的字符。例如,查找当前目录下所有文件中包含字符串"Linux"的文件,可以使用如下命令:
    egrep Linux *
    结果如下所示:
    $ egrep Linux * #查找当前目录下包含字符串“Linux”的文件
    testfile:hello Linux! #以下五行为testfile 中包含Linux字符的行
    testfile:Linux is a free Unix-type operating system.
    testfile:This is a Linux testfile!
    testfile:Linux
    testfile:Linux
    testfile1:helLinux! #以下两行为testfile1中含Linux字符的行
    testfile1:This a Linux testfile!
    #以下两行为testfile_2 中包含Linux字符的行
    testfile_2:Linux is a free unix-type opterating system.
    testfile_2:Linux test
    xx00:hello Linux! #xx00包含Linux字符的行
    xx01:Linux is a free Unix-type operating system. #以下三行为xx01包含Linux字符的行
    xx01:This is a Linux testfile!
    xx01:Linux

    grep Linux grep 命令用于查找文件里符合条件的字符串
    grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
    语法
    grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][–help][范本样式][文件或目录…]
    参数:
    • -a 或 --text : 不要忽略二进制的数据。
    • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
    • -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
    • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
    • -c 或 --count : 计算符合样式的列数。
    • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
    • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
    • -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
    • -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
    • -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
    • -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
    • -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
    • -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
    • -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
    • -i 或 --ignore-case : 忽略字符大小写的差别。
    • -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
    • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
    • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
    • -o 或 --only-matching : 只显示匹配PATTERN 部分。
    • -q 或 --quiet或–silent : 不显示任何信息。
    • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
    • -s 或 --no-messages : 不显示错误信息。
    • -v 或 --invert-match : 显示不包含匹配文本的所有行。
    • -V 或 --version : 显示版本信息。
    • -w 或 --word-regexp : 只显示全字符合的列。
    • -x --line-regexp : 只显示全列符合的列。
    • -y : 此参数的效果和指定"-i"参数相同。
    实例
    1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
    grep test file
    结果如下所示:
    $ grep test test
    #查找前缀有“test”的文件包含“test”字符串的文件
    testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行
    testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行
    testfile_2:Linux test #列出testfile_2 文件中包含test字符的行
    2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
    grep -r update /etc/acpi
    输出结果如下:
    $ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”
    #下包含“update”的文件
    /etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)
    Rather than
    /etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of
    IO.) Rather than
    /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys–update
    3、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
    查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
    grep -v test test
    结果如下所示:
    $ grep-v test* #查找文件名中包含test 的文件中不包含test 的行
    testfile1:helLinux!
    testfile1:Linis a free Unix-type operating system.
    testfile1:Lin
    testfile_1:HELLO LINUX!
    testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.
    testfile_1:THIS IS A LINUX TESTFILE!
    testfile_2:HELLO LINUX!
    testfile_2:Linux is a free unix-type opterating system.

    join Linux join命令用于将两个文件中,指定栏位内容相同的行连接起来

    找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
    语法
    join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][–help][–version][文件1][文件2]
    参数:
    • -a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
    • -e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
    • -i或–igore-case 比较栏位内容时,忽略大小写的差异。
    • -o<格式> 按照指定的格式来显示结果。
    • -t<字符> 使用栏位的分隔字符。
    • -v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
    • -1<栏位> 连接[文件1]指定的栏位。
    • -2<栏位> 连接[文件2]指定的栏位。
    • --help 显示帮助。
    • --version 显示版本信息。
    实例
    连接两个文件。
    为了清楚地了解join命令,首先通过cat命令显示文件testfile_1和 testfile_2 的内容。
    然后以默认的方式比较两个文件,将两个文件中指定字段的内容相同的行连接起来,在终端中输入命令:
    join testfile_1 testfile_2
    首先查看testfile_1、testfile_2 中的文件内容:
    $ cat testfile_1 #testfile_1文件中的内容
    Hello 95 #例如,本例中第一列为姓名,第二列为数额
    Linux 85
    test 30
    cmd@hdd-desktop:~$ cat testfile_2 #testfile_2文件中的内容
    Hello 2005 #例如,本例中第一列为姓名,第二列为年份
    Linux 2009
    test 2006
    然后使用join命令,将两个文件连接,结果如下:
    $ join testfile_1 testfile_2 #连接testfile_1、testfile_2中的内容
    Hello 95 2005 #连接后显示的内容
    Linux 85 2009
    test 30 2006
    文件1与文件2的位置对输出到标准输出的结果是有影响的。例如将命令中的两个文件互换,即输入如下命令:
    join testfile_2 testfile_1
    最终在标准输出的输出结果将发生变化,如下所示:
    $ join testfile_2 testfile_1 #改变文件顺序连接两个文件
    Hello 2005 95 #连接后显示的内容
    Linux 2009 85
    test 2006 30

    look Linux look命令用于查询单词。
    look指令用于英文单字的查询。您仅需给予它欲查询的字首字符串,它会显示所有开头字符串符合该条件的单字。
    语法
    look [-adf][-t<字尾字符串>][字首字符串][字典文件]
    参数说明:
    • -a 使用另一个字典文件web2,该文件也位于/usr/dict目录下。
    • -d 只对比英文字母和数字,其余一慨忽略不予比对。
    • -f 忽略字符大小写差别。
    • -t<字尾字符串> 设置字尾字符串。
    实例
    为了查找在testfile文件中以字母L开头的所有的行,可以输入如下命令:
    look L testfile
    原文件testfile中的内容如下:
    $ cat testfile #查看testfile 文件内容
    HELLO LINUX!
    Linux is a free unix-type opterating system.
    This is a linux testfile!
    Linux test
    在testfile文件中使用look命令查找以"L"开头的单词,结果如下:
    $ look L testfile #查找以“L”开头的单词
    Linux is a free unix-type opterating system. #第二行以“L”开头,列出全句
    Linux test #第四行以“L”开头,列出全句

    rgrep Linux rgrep命令用于递归查找文件里符合条件的字符串。
    Linux rgrep命令用于递归查找文件里符合条件的字符串。
    rgrep指令的功能和grep指令类似,可查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设rgrep指令会把含有范本样式的那一列显示出来。
    语法
    rgrep [-?BcDFhHilnNrv][-R<范本样式>][-W<列长度>][-x<扩展名>][–help][–version][范本样式][文件或目录…]
    参说明数:
    • -? 显示范本样式与范例的说明。
    • -B 忽略二进制的数据。
    • -c 计算符合范本样式的列数。
    • -D 排错模式,只列出指令搜寻的目录清单,而不会读取文件内容。
    • -F 当遇到符号连接时,rgrep预设是忽略不予处理,加上本参数后,rgrep指令就会读取该连接所指向的原始文件的内容。
    • -h 特别将符合范本样式的字符串标示出来。
    • -H 只列出符合范本样式的字符串,而非显示整列的内容。
    • -i 忽略字符大小写的差别。
    • -l 列出文件内容符合指定的范本样式的文件名称。
    • -n 在显示符合坊本样式的那一列之前,标示出该列的列数编号。
    • -N 不要递归处理。
    • -r 递归处理,将指定目录下的所有文件及子目录一并处理。
    • -R<范本样式> 此参数的效果和指定"-r"参数类似,但只主力符合范本样式文件名称的文件。
    • -v 反转查找。
    • -W<列长度> 限制符合范本样式的字符串所在列,必须拥有的字符数。
    • -x<扩展名> 只处理符合指定扩展名的文件名称的文件。
    • --help 在线帮助。
    • --version 显示版本信息。
    实例
    在当前目录下查找句子中包含"Hello"字符串的文件,可使用如下命令:
    rgrep Hello *
    其搜索结果如下:
    $ rgrep Hello * #在当前目录下查找句子中包含“Hello”字符串的文件
    testfile_1:Hello 95 #testfile_1中包含“Hello”字符串的句子
    testfile_2:Hello 2005 #testfile_2中包含“Hello”字符串的句子

    sed Linux sed 命令是利用脚本来处理文本文件。
    sed 可依照脚本的指令来处理、编辑文本文件。
    Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
    语法
    sed [-hnV][-e

    drink beer ?’
    1 root❌0:0:root:/root:/bin/bash
    2 bin❌1:1:bin:/bin:/sbin/nologin
    Drink tea or …
    drink beer ?
    3 daemon❌2:2:daemon:/sbin:/sbin/nologin
    …(后面省略)…
    每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。
    以行为单位的替换与显示
    将第2-5行的内容取代成为『No 2-5 number』呢?
    [root@www ~]# nl /etc/passwd | sed ‘2,5c No 2-5 number’
    1 root❌0:0:root:/root:/bin/bash
    No 2-5 number
    6 sync❌5:0:sync:/sbin:/bin/sync
    …(后面省略)…
    透过这个方法我们就能够将数据整行取代了!
    仅列出 /etc/passwd 文件内的第 5-7 行
    [root@www ~]# nl /etc/passwd | sed -n ‘5,7p’
    5 lp❌4:7:lp:/var/spool/lpd:/sbin/nologin
    6 sync❌5:0:sync:/sbin:/bin/sync
    7 shutdown❌6:0:shutdown:/sbin:/sbin/shutdown
    可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。
    数据的搜寻并显示
    搜索 /etc/passwd有root关键字的行
    nl /etc/passwd | sed ‘/root/p’
    1 root❌0:0:root:/root:/bin/bash
    1 root❌0:0:root:/root:/bin/bash
    2 daemon❌1:1:daemon:/usr/sbin:/bin/sh
    3 bin❌2:2:bin:/bin:/bin/sh
    4 sys❌3:3:sys:/dev:/bin/sh
    5 sync❌4:65534:sync:/bin:/bin/sync
    …下面忽略
    如果root找到,除了输出所有行,还会输出匹配行。
    使用-n的时候将只打印包含模板的行。
    nl /etc/passwd | sed -n ‘/root/p’
    1 root❌0:0:root:/root:/bin/bash
    数据的搜寻并删除
    删除/etc/passwd所有包含root的行,其他行输出
    nl /etc/passwd | sed ‘/root/d’
    2 daemon❌1:1:daemon:/usr/sbin:/bin/sh
    3 bin❌2:2:bin:/bin:/bin/sh
    …下面忽略
    #第一行的匹配root已经删除了
    数据的搜寻并执行命令
    搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:
    nl /etc/passwd | sed -n ‘/root/{s/bash/blueshell/;p;q}’
    1 root❌0:0:root:/root:/bin/blueshell
    最后的q是退出。
    数据的搜寻并替换
    除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:
    sed ‘s/要被取代的字串/新的字串/g’
    先观察原始信息,利用 /sbin/ifconfig 查询 IP
    [root@www ~]# /sbin/ifconfig eth0
    eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
    inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    …(以下省略)…
    本机的ip是192.168.1.100。
    将 IP 前面的部分予以删除
    [root@www ~]# /sbin/ifconfig eth0 | grep ‘inet addr’ | sed ‘s/^.*addr://g’
    192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    将 IP 后面的部分予以删除
    [root@www ~]# /sbin/ifconfig eth0 | grep ‘inet addr’ | sed ‘s/^.addr://g’ | sed 's/Bcast.//g192.168.1.100sed/etc/passwdbashblueshellnl/etc/passwdsede3,//g' 192.168.1.100 多点编辑 一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell nl /etc/passwd | sed -e '3,d’ -e ‘s/bash/blueshell/’
    1 root❌0:0:root:/root:/bin/blueshell
    2 daemon❌1:1:daemon:/usr/sbin:/bin/sh
    -e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。
    直接修改文件内容(危险动作)
    sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用文件 regular_express.txt 文件来测试看看吧!
    regular_express.txt 文件内容如下:
    [root@www ~]# cat regular_express.txt
    runoob.
    google.
    taobao.
    facebook.
    zhihu-
    weibo-
    利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
    [root@www ~]# sed -i ‘s/.KaTeX parse error: Expected 'EOF', got '#' at position 40: …xt [root@www ~]#̲ cat regular_ex…a # This is a test’ regular_express.txt
    [root@www ~]# cat regular_express.txt
    runoob!
    google!
    taobao!
    facebook!
    zhihu-
    weibo-

    This is a test

    由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增 # This is a test!
    sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

    Sort Linux sort命令用于将文本文件内容加以排序
    sort可针对文本文件的内容,以行为单位来排序。
    语法
    sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][–help][–verison][文件]
    参数说明:
    • -b 忽略每行前面开始出的空格字符。
    • -c 检查文件是否已经按照顺序排序。
    • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
    • -f 排序时,将小写字母视为大写字母。
    • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
    • -m 将几个排序好的文件进行合并。
    • -M 将前面3个字母依照月份的缩写进行排序。
    • -n 依照数值的大小排序。
    • -u 意味着是唯一的(unique),输出的结果是去完重了的。
    • -o<输出文件> 将排序后的结果存入指定的文件。
    • -r 以相反的顺序来排序。
    • -t<分隔字符> 指定排序时所用的栏位分隔字符。
    • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
    • --help 显示帮助。
    • --version 显示版本信息。
    实例
    在使用sort命令以默认的式对文件的行进行排序,使用的命令如下:
    sort testfile
    sort 命令将以默认的方式将文本文件的第一列以ASCII 码的次序排列,并将结果输出到标准输出。
    使用 cat命令显示testfile文件可知其原有的排序如下:
    $ cat testfile #testfile文件原有排序
    test 30
    Hello 95
    Linux 85
    使用sort命令重排后的结果如下:
    $ sort testfile #重排结果
    Hello 95
    Linux 85
    test 30

    spell Linux spell命令可建立拼写检查程序

    spell可从标准输入设备读取字符串,结束后显示拼错的词汇。
    语法
    spell
    实例
    检查文件testfile是否有拼写错误,在命令行提示符下输入如下命令:
    spell testfile
    如果文件中有单词拼写错误,则输出如下信息:
    $ spell testfile #检查testfile 拼写错误
    scurity #以下为有错误的单词
    tp
    LANs
    Securty
    practicl
    applcations
    necesary
    如果所检查的文件没有单词拼写错误,那么,命令运行后不会给出任何信息。
    检查从标准输入读取的字符串。例如在命令行中输入如下命令:
    spell
    按回车键后,输入一串字符串,然后按Ctrl+D 组合键退出spell,屏幕上将显示拼写有错误的单词。如下所示:
    $ spell #检查标准输入的字符串的拼写错误
    hell,this is a linx sustem! #拼写错误的字符串
    linx #以下为有拼写错误的单词
    sustem

    tr Linux tr 命令用于转换或删除文件中的字符。
    tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
    语法
    tr [-cdst][–help][–version][第一字符集][第二字符集]
    tr [OPTION]…SET1[SET2]
    参数说明:
    • -c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
    • -d, --delete:删除指令字符
    • -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
    • -t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
    • --help:显示程序用法信息
    • --version:显示程序本身的版本信息
    字符集合的范围:
    • \NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
    • \ 反斜杠
    • \a Ctrl-G 铃声
    • \b Ctrl-H 退格符
    • \f Ctrl-L 走行换页
    • \n Ctrl-J 新行
    • \r Ctrl-M 回车
    • \t Ctrl-I tab键
    • \v Ctrl-X 水平制表符
    • CHAR1-CHAR2 :字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。
    • [CHAR*] :这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
    • [CHAR*REPEAT] :这也是 SET2 专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始)
    • [:alnum:] :所有字母字符与数字
    • [:alpha:] :所有字母字符
    • [:blank:] :所有水平空格
    • [:cntrl:] :所有控制字符
    • [:digit:] :所有数字
    • [:graph:] :所有可打印的字符(不包含空格符)
    • [:lower:] :所有小写字母
    • [:print:] :所有可打印的字符(包含空格符)
    • [:punct:] :所有标点字符
    • [:space:] :所有水平与垂直空格符
    • [:upper:] :所有大写字母
    • [:xdigit:] :所有 16 进位制的数字
    • [=CHAR=] :所有符合指定的字符(等号里的 CHAR,代表你可自订的字符)
    实例
    将文件testfile中的小写字母全部转换成大写字母,此时,可使用如下命令:
    cat testfile |tr a-z A-Z
    testfile文件中的内容如下:
    $ cat testfile #testfile原来的内容
    Linux networks are becoming more and more common,
    but scurity is often an overlooked
    issue. Unfortunately, in today’s environment all networks
    are potential hacker targets,
    fro0m tp-secret military research networks to small home LANs.
    Linux Network Securty focuses on securing Linux in a
    networked environment, where the
    security of the entire network needs to be considered
    rather than just isolated machines.
    It uses a mix of theory and practicl techniques to
    teach administrators how to install and
    use security applications, as well as how the
    applcations work and why they are necesary.
    使用 tr 命令大小写转换后,得到如下输出结果:
    $ cat testfile | tr a-z A-Z #转换后的输出
    LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED
    ISSUE. UNFORTUNATELY, IN TODAY’S ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,
    FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.
    LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE
    SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.
    IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND
    USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY.
    大小写转换,也可以通过[:lower][:upper]参数来实现。例如使用如下命令:
    cat testfile |tr [:lower:] [:upper:]
    输出结果如下:
    $ cat testfile | tr [:lower:] [:upper:] #转换后的输出
    LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED
    ISSUE. UNFORTUNATELY, IN TODAY’S ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,
    FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.
    LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE
    SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.
    IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND
    USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY.

    Expr expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串
    语法
    expr 表达式
    表达式说明:
    • 用空格隔开每个项;
    • 用反斜杠 \ 放在 shell 特定的字符前面;
    • 对包含空格和其他特殊字符的字符串要用引号括起来
    实例
    1、计算字串长度

    expr length “this is a test”
    14
    2、抓取字串
    expr substr “this is a test” 3 5
    is is
    3、抓取第一个字符数字串出现的位置
    expr index “sarasara” a
    2
    4、整数运算
    expr 14 % 9
    5
    expr 10 + 10
    20
    expr 1000 + 900
    1900
    expr 30 / 3 / 2
    5
    expr 30 * 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
    90
    expr 30 * 3
    expr: Syntax error

    uniq Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
    uniq 可检查文本文件中重复出现的行列。
    语法
    uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][–help][–version][输入文件][输出文件]
    参数:
    • -c或–count 在每列旁边显示该行重复出现的次数。
    • -d或–repeated 仅显示重复出现的行列。
    • -f<栏位>或–skip-fields=<栏位> 忽略比较指定的栏位。
    • -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
    • -u或–unique 仅显示出一次的行列。
    • -w<字符位置>或–check-chars=<字符位置> 指定要比较的字符。
    • --help 显示帮助。
    • --version 显示版本信息。
    • [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
    • [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
    实例
    文件testfile中第 2、3、5、6、7、9行为相同的行,使用 uniq 命令删除重复的行,可使用以下命令:
    uniq testfile
    testfile中的原有内容为:
    $ cat testfile #原有内容
    test 30
    test 30
    test 30
    Hello 95
    Hello 95
    Hello 95
    Hello 95
    Linux 85
    Linux 85
    使用uniq 命令删除重复的行后,有如下输出结果:
    $ uniq testfile #删除重复行后的内容
    test 30
    Hello 95
    Linux 85
    检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数。使用如下命令:
    uniq -c testfile
    结果输出如下:
    $ uniq -c testfile #删除重复行后的内容
    3 test 30 #前面的数字的意义为该行共出现了3次
    4 Hello 95 #前面的数字的意义为该行共出现了4次
    2 Linux 85 #前面的数字的意义为该行共出现了2次
    当重复的行并不相邻时,uniq 命令是不起作用的,即若文件内容为以下时,uniq 命令不起作用:
    $ cat testfile1 # 原有内容
    test 30
    Hello 95
    Linux 85
    test 30
    Hello 95
    Linux 85
    test 30
    Hello 95
    Linux 85
    这时我们就可以使用 sort:
    $ sort testfile1 | uniq
    Hello 95
    Linux 85
    test 30
    统计各行在文件中出现的次数:
    $ sort testfile1 | uniq -c
    3 Hello 95
    3 Linux 85
    3 test 30
    在文件中找出重复的行:
    $ sort testfile1 | uniq -d
    Hello 95
    Linux 85
    test 30

    wc Linux wc命令用于计算字数
    利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
    语法
    wc [-clw][–help][–version][文件…]
    参数:
    • -c或–bytes或–chars 只显示Bytes数。
    • -l或–lines 显示行数。
    • -w或–words 只显示字数。
    • --help 在线帮助。
    • --version 显示版本信息。
    实例
    在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:
    wc testfile
    先查看testfile文件的内容,可以看到:
    $ cat testfile
    Linux networks are becoming more and more common, but scurity is often an overlooked
    issue. Unfortunately, in today’s environment all networks are potential hacker targets,
    fro0m tp-secret military research networks to small home LANs.
    Linux Network Securty focuses on securing Linux in a networked environment, where the
    security of the entire network needs to be considered rather than just isolated machines.
    It uses a mix of theory and practicl techniques to teach administrators how to install and
    use security applications, as well as how the applcations work and why they are necesary.
    使用 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 #统计三个文件的信息
    输出结果如下:
    $ 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

    Let let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
    语法格式
    let arg [arg …]
    参数说明:
    arg:要执行的表达式
    实例:
    自加操作:let no++
    自减操作:let no–
    简写形式 let no+=10,let no-=20,分别等同于 let no=no+10,let no=no-20。
    以下实例计算 a 和 b 两个表达式,并输出结果:
    #!/bin/bash

    let a=5+4
    let b=9-3
    echo $a $b
    以上实例执行结果为:
    9 6

    磁盘管理
    Cd Linux cd(英文全拼:change directory)命令用于切换当前工作目录。
    其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。
    另外,~ 也表示为 home 目录 的意思, . 则是表示目前所在的目录, … 则表示目前目录位置的上一层目录。
    语法
    cd [dirName]
    • dirName:要切换的目标目录。
    实例
    跳到 /usr/bin/ :
    cd /usr/bin
    跳到自己的 home 目录 :
    cd ~
    跳到目前目录的上上两层 :
    cd …/…

    df Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计
    语法
    df [选项]… [FILE]…
    • 文件-a, --all 包含所有的具有 0 Blocks 的文件系统
    • 文件–block-size={SIZE} 使用 {SIZE} 大小的 Blocks
    • 文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的…)
    • 文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
    • 文件-i, --inodes 列出 inode 资讯,不列出已使用 block
    • 文件-k, --kilobytes 就像是 --block-size=1024
    • 文件-l, --local 限制列出的文件结构
    • 文件-m, --megabytes 就像 --block-size=1048576
    • 文件–no-sync 取得资讯前不 sync (预设值)
    • 文件-P, --portability 使用 POSIX 输出格式
    • 文件–sync 在取得资讯前 sync
    • 文件-t, --type=TYPE 限制列出文件系统的 TYPE
    • 文件-T, --print-type 显示文件系统的形式
    • 文件-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
    • 文件-v (忽略)
    • 文件–help 显示这个帮手并且离开
    • 文件–version 输出版本资讯并且离开
    实例
    显示文件系统的磁盘使用情况统计:

    df

    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/sda6 29640780 4320704 23814388 16% /
    udev 1536756 4 1536752 1% /dev
    tmpfs 617620 888 616732 1% /run
    none 5120 0 5120 0% /run/lock
    none 1544044 156 1543888 1% /run/shm
    第一列指定文件系统的名称,第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。用和可用列正在使用中,分别指定的内存量。
    使用列指定使用的内存的百分比,而最后一栏"安装在"指定的文件系统的挂载点。
    df也可以显示磁盘使用的文件系统信息:

    df test

    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/sda6 29640780 4320600 23814492 16% /
    用一个-i选项的df命令的输出显示inode信息而非块使用量。
    df -i
    Filesystem Inodes IUsed IFree IUse% Mounted on
    /dev/sda6 1884160 261964 1622196 14% /
    udev 212748 560 212188 1% /dev
    tmpfs 216392 477 215915 1% /run
    none 216392 3 216389 1% /run/lock
    none 216392 8 216384 1% /run/shm
    显示所有的信息:

    df --total

    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/sda6 29640780 4320720 23814372 16% /
    udev 1536756 4 1536752 1% /dev
    tmpfs 617620 892 616728 1% /run
    none 5120 0 5120 0% /run/lock
    none 1544044 156 1543888 1% /run/shm
    total 33344320 4321772 27516860 14%
    我们看到输出的末尾,包含一个额外的行,显示总的每一列。
    -h选项,通过它可以产生可读的格式df命令的输出:

    df -h

    Filesystem Size Used Avail Use% Mounted on
    /dev/sda6 29G 4.2G 23G 16% /
    udev 1.5G 4.0K 1.5G 1% /dev
    tmpfs 604M 892K 603M 1% /run
    none 5.0M 0 5.0M 0% /run/lock
    none 1.5G 156K 1.5G 1% /run/shm
    我们可以看到输出显示的数字形式的’G’(千兆字节),“M”(兆字节)和"K"(千字节)。
    这使输出容易阅读和理解,从而使显示可读的。请注意,第二列的名称也发生了变化,为了使显示可读的"大小"。

    Du 用于显示目录或文件大小
    du 会显示指定的目录或文件所占用的磁盘空间。
    语法
    du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][–block-size][–exclude=<目录或文件>][–max-depth=<目录层数>][–help][–version][目录或文件]
    参数说明:
    • -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 显示版本信息。
    实例
    显示目录或者文件所占空间:

    du

    608 ./test6
    308 ./test4
    4 ./scf/lib
    4 ./scf/service/deploy/product
    4 ./scf/service/deploy/info
    12 ./scf/service/deploy
    16 ./scf/service
    4 ./scf/doc
    4 ./scf/bin
    32 ./scf
    8 ./test3
    1288 .
    只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小
    显示指定文件所占空间

    du log2012.log

    300 log2012.log
    方便阅读的格式显示test目录所占空间情况:

    du -h test

    608K test/test6
    308K test/test4
    4.0K test/scf/lib
    4.0K test/scf/service/deploy/product
    4.0K test/scf/service/deploy/info
    12K test/scf/service/deploy
    16K test/scf/service
    4.0K test/scf/doc
    4.0K test/scf/bin
    32K test/scf
    8.0K test/test3
    1.3M test

    mkdir Linux mkdir(英文全拼:make directory)命令用于创建目录
    语法
    mkdir [-p] dirName
    参数说明:
    • -p 确保目录名称存在,不存在的就建一个。
    实例
    在工作目录下,建立一个名为 runoob 的子目录 :
    mkdir runoob
    在工作目录下的 runoob2 目录中,建立一个名为 test 的子目录。
    若 runoob2 目录原本不存在,则建立一个。(注:本例若不加 -p 参数,且原本 runoob2 目录不存在,则产生错误。)
    mkdir -p runoob2/test

    pwd Linux pwd(英文全拼:print work directory) 命令用于显示工作目录。
    执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。
    语法
    pwd [–help][–version]
    参数说明:
    • --help 在线帮助。
    • --version 显示版本信息。
    实例
    查看当前所在目录:

    pwd

    /root/test #输出结果

    Quota Linux quota命令用于显示磁盘已使用的空间与限制。
    执行quota指令,可查询磁盘空间的限制,并得知已使用多少空间。
    语法
    quota [-quvV][用户名称…] 或 quota [-gqvV][群组名称…]
    参数说明:
    • -g 列出群组的磁盘空间限制。
    • -q 简明列表,只列出超过限制的部分。
    • -u 列出用户的磁盘空间限制。
    • -v 显示该用户或群组,在所有挂入系统的存储设备的空间限制。
    • -V 显示版本信息。
    实例

    quota -guvs <==显示目前执行者(就是 root )的 quota 值

    quota -uvs test <==显示 test 这个使用者的 quota 值

    Mount Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件。
    语法
    mount [-hV]
    mount -a [-fFnrsvw] [-t vfstype]
    mount [-fnrsvw] [-o options [,…]] device | dir
    mount [-fnrsvw] [-t vfstype] [-o options] device dir
    参数说明:
    • -V:显示程序版本
    • -h:显示辅助讯息
    • -v:显示较讯息,通常和 -f 用来除错。
    • -a:将 /etc/fstab 中定义的所有档案系统挂上。
    • -F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
    • -f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
    • -n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
    • -s-r:等于 -o ro
    • -w:等于 -o rw
    • -L:将含有特定标签的硬盘分割挂上。
    • -U:将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
    • -t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。
    • -o async:打开非同步模式,所有的档案读写动作都会用非同步模式执行。
    • -o sync:在同步模式下执行。
    • -o atime、-o noatime:当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
    • -o auto、-o noauto:打开/关闭自动挂上模式。
    • -o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
    • -o dev、-o nodev-o exec、-o noexec允许执行档被执行。
    • -o suid、-o nosuid:
    • 允许执行档在 root 权限下执行。
    • -o user、-o nouser:使用者可以执行 mount/umount 的动作。
    • -o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。
    • -o ro:用唯读模式挂上。
    • -o rw:用可读写模式挂上。
    • -o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。
    实例
    将 /dev/hda1 挂在 /mnt 之下。
    #mount /dev/hda1 /mnt
    将 /dev/hda1 用唯读模式挂在 /mnt 之下。
    #mount -o ro /dev/hda1 /mnt
    将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom之下。用这种方法可以将一般网络上可以找到的 Linux 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。
    #mount -o loop /tmp/image.iso /mnt/cdrom
    Rmdir Linux rmdir(英文全拼:remove directory)命令删除空的目录。
    语法
    rmdir [-p] dirName
    参数:
    • -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。
    实例
    将工作目录下,名为 AAA 的子目录删除 :
    rmdir AAA
    在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。
    rmdir -p BBB/Test

    stat Linux stat命令用于显示inode内容。
    stat以文字的格式来显示inode的内容。
    语法
    stat [文件或目录]
    实例
    查看 testfile 文件的inode内容内容,可以用以下命令:

    stat testfile

    执行以上命令输出结果:

    stat testfile #输入命令

    File: `testfile’
    Size: 102 Blocks: 8 IO Block: 4096 regular file
    Device: 807h/2055d Inode: 1265161 Links: 1
    Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2014-08-13 14:07:20.000000000 +0800
    Modify: 2014-08-13 14:07:07.000000000 +0800
    Change: 2014-08-13 14:07:07.000000000 +0800

    Tree Linux tree命令用于以树状图列出目录的内容。
    执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。
    语法
    tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录…]
    参数说明:
    • -a 显示所有文件和目录。
    • -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
    • -C 在文件和目录清单加上色彩,便于区分各种类型。
    • -d 显示目录名称而非内容。
    • -D 列出文件或目录的更改时间。
    • -f 在每个文件或目录之前,显示完整的相对路径名称。
    • -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|“号。
    • -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
    • -i 不以阶梯状列出文件或目录名称。
    • -L level 限制目录显示层级。
    • -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
    • -n 不在文件和目录清单加上色彩。
    • -N 直接列出文件和目录名称,包括控制字符。
    • -p 列出权限标示。
    • -P<范本样式> 只显示符合范本样式的文件或目录名称。
    • -q 用”?"号取代控制字符,列出文件和目录名称。
    • -s 列出文件或目录大小。
    • -t 用文件和目录的更改时间排序。
    • -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
    • -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
    实例
    以树状图列出当前目录结构。可直接使用如下命令:
    tree
    该命令有如下输出结果:

    tree #以树状图列出当前目录结构

    . #当前目录结构
    |-- README
    |-- examples.desktop
    |-- file
    |-- file.new
    |-- index.htm
    |-- test
    | |-- README
    | |-- file
    | |-- testfile
    | |-- testfile1
    | |-- xaa
    | |-- xab
    | |-- xac
    | |-- xad
    | |-- xae
    | |-- xaf
    | |-- xag
    | |-- xah
    | -- xai |-- test.tar.gz |-- test.zip |-- testfile |-- testfile.new |-- testfile.patch |-- testfile1 |-- testfile2 |-- testfile3 |-- xaa |-- xab |-- xac |-- xad |-- xae |-- xaf |-- xag |-- xah |-- xai |-- \345\205\254\345\205\261\347\232\204 |-- \345\233\276\347\211\207 | |-- 075b5c2bb1628c1a5343c10a.jpg | |-- 0c978fe989ac787e799757095719d3c4.jpg | |-- 20050726194826866443.jpg | |-- 20061113171548785122.jpg | |-- 2007102221576687.jpg | |-- 39.jpg | |-- 434887ec4340916a78f0559a.jpg | |-- 498da016ac02fb2bc93d6d08.jpg | |-- 7b284f5a0f854da2f3bf90b204149a34.jpg | |-- 9196c030d342a68d5edf0e98.jpg | |-- a56c5a90de15c8a9a977a4cc.jpg | |-- c74f62167c9d2b244a90a79e.jpg |– img13.jpg
    |-- \346\226\207\346\241\243
    |-- \346\241\214\351\235\242
    |-- \346\250\241\346\235\277
    |-- \350\247\206\351\242\221
    `-- \351\237\263\344\271\220
    8 directories, 48 files #统计信息,该目录共8个子目录,48个文件

    Umount Linux umount(英文全拼:unmount)命令用于卸除文件系统。
    umount可卸除目前挂在Linux目录中的文件系统。
    语法
    umount [-ahnrvV][-t <文件系统类型>][文件系统]
    参数:
    • -a 卸除/etc/mtab中记录的所有文件系统。
    • -h 显示帮助。
    • -n 卸除时不要将信息存入/etc/mtab文件中。
    • -r 若无法成功卸除,则尝试以只读的方式重新挂入文件系统。
    • -t<文件系统类型> 仅卸除选项中所指定的文件系统。
    • -v 执行时显示详细的信息。
    • -V 显示版本信息。
    • [文件系统] 除了直接指定文件系统外,也可以用设备名称或挂入点来表示文件系统。
    实例
    下面两条命令分别通过设备名和挂载点卸载文件系统,同时输出详细信息:

    umount -v /dev/sda1 通过设备名卸载

    /dev/sda1 umounted

    umount -v /mnt/mymount/ 通过挂载点卸载

    /tmp/diskboot.img umounted
    如果设备正忙,卸载即告失败。卸载失败的常见原因是,某个打开的shell当前目录为挂载点里的某个目录:

    umount -v /mnt/mymount/

    umount: /mnt/mymount: device is busy
    umount: /mnt/mymount: device is busy

    ls Linux ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
    语法
    ls [-alrtAFR] [name…]
    参数 :
    • -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
    • -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
    • -r 将文件以相反次序显示(原定依英文字母次序)
    • -t 将文件依建立时间之先后次序列出
    • -A 同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)
    • -F 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/”
    • -R 若目录下有文件,则以下之文件亦皆依序列出
    实例
    列出根目录()下的所有目录:

    ls /

    bin dev lib media net root srv upload www
    boot etc lib64 misc opt sbin sys usr
    home lost+found mnt proc selinux tmp var
    列出目前工作目录下所有名称是 s 开头的文件,越新的排越后面 :
    ls -ltr s*
    将 /bin 目录以下所有目录及文件详细资料列出 :
    ls -lR /bin
    列出目前工作目录下所有文件及目录;目录于名称后加 “/”, 可执行档于名称后加 “*” :
    ls -AF

    quotacheck Linux quotacheck命令用于检查磁盘的使用空间与限制。
    执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和群组的磁盘空间限制。
    语法
    quotacheck [-adgRuv][文件系统…]
    参数:
    • -a 扫描在/etc/fstab文件里,有加入quota设置的分区。
    • -d 详细显示指令执行过程,便于排错或了解程序执行的情形。
    • -g 扫描磁盘空间时,计算每个群组识别码所占用的目录和文件数目。
    • -R 排除根目录所在的分区。
    • -u 扫描磁盘空间时,计算每个用户识别码所占用的目录和文件数目。
    • -v 显示指令执行过程。

    Qutaoff Linux quotaoff命令关闭磁盘空间限制。
    执行quotaoff指令可关闭用户和群组的磁盘空间限制。
    语法
    quotaoff [-aguv][文件系统…]
    参数说明:
    • -a 关闭在/etc/fstab文件里,有加入quota设置的分区的空间限制。
    • -g 关闭群组的磁盘空间限制。
    • -u 关闭用户的磁盘空间限制。
    • -v 显示指令执行过程。
    实例
    关闭配额限制:

    quotaoff -a

    磁盘维护
    Badblocks 用于检查磁盘装置中损坏的区域
    执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。
    语法
    badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块]
    参数说明:
    • -b<区块大小> 指定磁盘的区块大小,单位为字节。
    • -o<输出文件> 将检查的结果写入指定的输出文件。
    • -s 在检查时显示进度。
    • -v 执行时显示详细的信息。
    • -w 在检查时,执行写入测试。
    • [磁盘装置] 指定要检查的磁盘装置。
    • [磁盘区块数] 指定磁盘装置的区块总数。
    • [启始区块] 指定要从哪个区块开始检查。
    实例
    查看系统当前硬盘信息。

    fdisk -l

    例如,显示信息如下:
    Disk /dev/sda: 298.9 GB, 298999349248 bytes
    255 heads, 63 sectors/track, 36351 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sda1 1 262 2104483+ 82 Linux swap / Solaris
    /dev/sda2 * 263 32898 262148670 83 Linux
    /dev/sda3 32899 36351 27736222+ 83 Linux

    Disk /dev/sdb: 42.9 GB, 42949672960 bytes
    64 heads, 32 sectors/track, 40960 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    通过命令扫描硬盘。

    badblocks -s -v /dev/sdnx

    其中n表示硬盘设备名,x表示硬盘对应的分区号。例如需要检查"/dev/sda2",执行命令如下:

    badblocks -s -v /dev/sda2

    Checking blocks 0 to 30681000
    Checking for bad blocks (read-only test): 306809600674112/ 306810000000
    30680964
    30680965
    30680966
    30680967
    30680968
    30680969
    30680970
    30680971
    30680972
    30680973

    done
    Pass completed, 37 bad blocks found.其中,“37 bad blocks found”表示硬盘存在37个坏块。

    Cfdisk Linux cfdisk命令用于磁盘分区。
    cfdisk是用来磁盘分区的程序,它十分类似DOS的fdisk,具有互动式操作界面而非传统fdisk的问答式界面,您可以轻易地利用方向键来操控分区操作。
    语法
    cfdisk [-avz][-c <柱面数目>-h <磁头数目>-s <盘区数目>][-P <r,s,t>][外围设备代号]
    参数说明:
    • -a 在程序里不用反白代表选取,而以箭头表示。
    • -c<柱面数目> 忽略BIOS的数值,直接指定磁盘的柱面数目。
    • -h<磁头数目> 忽略BIOS的数值,直接指定磁盘的磁头数目。
    • -P<r,s,t> 显示分区表的内容,附加参数"r"会显示整个分区表的详细资料,附加参数"s"会依照磁区的顺序显示相关信息,附加参数"t"则会以磁头,磁区,柱面的方式来显示资料。
    • -s<磁区数目> 忽略BIOS的数值,直接指定磁盘的磁区数目。
    • -v 显示版本信息。
    • -z 不读取现有的分区,直接当作没有分区的新磁盘使用。
    实例
    进行磁盘分区:

    cfsik

    进行磁盘分区,使用箭头进行操作,而不使用反白表示:

    cfsik -a

    进行磁盘分区,使用箭头进行操作,而不使用反白表示:

    cfsik -s 3

    e2fsck Linux e2fsck命令用于检查使用 Linux ext2 档案系统的 partition 是否正常工作
    语法
    e2fsck [-pacnydfvFV] [-b superblock] [-B blocksize] [-l|-L bad_blocks_file] [-C fd] device
    参数说明:
    • device : 预备检查的硬盘 partition,例如:/dev/sda1
    • -a : 对 partition 做检查,若有问题便自动修复,等同 -p 的功能
    • -b : 设定存放 superblock 的位置
    • -B : 设定单位 block 的大小
    • -c : 检查该partition 是否有坏轨
    • -C file : 将检查的结果存到 file 中以便查看
    • -d : 列印 e2fsck 的 debug 结果
    • -f : 强制检查
    • -F : 在开始检查前,将device 的 buffer cache 清空,避免有错误发生
    • -l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
    • -L bad_blocks_file : 设定坏轨的block资料存到 bad_blocks_file 里面,若无该档则自动产生
    • -n : 将档案系统以[唯读]方式开启
    • -p : 对 partition 做检查,若有问题便自动修复
    • -v : 详细显示模式
    • -V : 显示出目前 e2fsck 的版本
    • -y : 预先设定所有检查时的问题均回答[是]
    实例
    检查 /dev/hda5 是否正常,如果有异常便自动修复,并且设定若有问答,均回答[是] :
    e2fsck -a -y /dev/hda5
    注意 :
    大部份使用 e2fsck 来检查硬盘 partition 的情况时,通常都是情形特殊,因此最好先将该 partition umount,然后再执行 e2fsck 来做检查,若是要非要检查 / 时,则请进入 singal user mode 再执行。

    ext2ed Linux ext2ed命令是ext2文件系统编辑程序。
    ext2ed可直接处理硬盘分区上的数据,这指令只有Red Hat Linux才提供。
    语法
    ext2ed
    一般指令:
    • setdevice[设备名称] 指定要处理的设备。
    • disablewrite 将ext2ed设为只读的状态。
    • enablewrite 将ext2ed设为可读写的状态。
    • help[指令] 显示个别指令的帮助。
    • next 移至下一个单位,单位会依目前所在的模式而异。
    • prev 移至前一个单位,单位会依目前所在的模式而异。
    • pgup 移至下一页。
    • pgdn 移至上一页。
    • set 修改目前的数据,参数会依目前所在的模式而异。
    • writedata 在执行此指令之后,才会实际修改分区中的数据。
    • ext2进入3种模式的指令
    • super 进入main superblock,即Superblock模式。
    • group<编号> 进入指定的group,即Group模式。
    • cd<目录或文件> 在inode模式下,进入指定的目录或文件,即Inode模式。
    • Superblock模式
    • gocopy<备份编号> 进入指定的superblock备份。
    • setactivecopy 将目前所在的superblock,复制到main superblock。
    • Group模式
    • blockbitmap 显示目前groupo的区块图。
    • inode 进入目前group的第一个inode。
    • inodebitmap 显示目前group的inode二进制码。
    • Inode模式
    • dir 进入目录模式。
    • file 进入文件模式。

    Fsck Linux fsck(英文全拼:file system check)命令用于检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统
    语法
    fsck [-sACVRP] [-t fstype] [–] [fsck-options] filesys […]
    参数 :
    • filesys : device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)
    • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
    • -s : 依序一个一个地执行 fsck 的指令来检查
    • -A : 对/etc/fstab 中所有列出来的 partition 做检查
    • -C : 显示完整的检查进度
    • -d : 列印 e2fsck 的 debug 结果
    • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
    • -R : 同时有 -A 条件时,省略 / 不检查
    • -V : 详细显示模式
    • -a : 如果检查有错则自动修复
    • -r : 如果检查有错则由使用者回答是否修复
    实例
    检查 msdos 档案系统的 /dev/hda5 是否正常,如果有异常便自动修复 :
    fsck -t msdos -a /dev/hda5
    注意 此指令可与 /etc/fstab 相互参考操作来加以了解。
    mke2fs Linux mke2fs命令用于建立ext2文件系统。

    语法
    mke2fs [-cFMqrSvV][-b <区块大小>][-f <不连续区段大小>][-i <字节>][-N <inode数>][-l <文件>][-L <标签>][-m <百分比值>][-R=<区块数>][ 设备名称][区块数]
    参数:
    • -b<区块大小> 指定区块大小,单位为字节。
    • -c 检查是否有损坏的区块。
    • -f<不连续区段大小> 指定不连续区段的大小,单位为字节。
    • -F 不管指定的设备为何,强制执行mke2fs。
    • -i<字节> 指定"字节/inode"的比例。
    • -N<inode数> 指定要建立的inode数目。
    • -l<文件> 从指定的文件中,读取文件西中损坏区块的信息。
    • -L<标签> 设置文件系统的标签名称。
    • -m<百分比值> 指定给管理员保留区块的比例,预设为5%。
    • -M 记录最后一次挂入的目录。
    • -q 执行时不显示任何信息。
    • -r 指定要建立的ext2文件系统版本。
    • -R=<区块数> 设置磁盘阵列参数。
    • -S 仅写入superblock与group descriptors,而不更改inode able inode bitmap以及block bitmap。
    • -v 执行时显示详细信息。
    • -V 显示版本信息。

    swapon Linux swapon命令用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存。
    语法
    /sbin/swapon -a [-v]
    /sbin/swapon [-v] [-p priority] specialfile …
    /sbin/swapon [-s]
    参数说明:
    • -h 请帮帮我
    • -V 显示版本讯息
    • -s 显示简短的装置讯息
    • -a 自动启动所有SWAP装置
    • -p 设定优先权,你可以在0到32767中间选一个数字给他。或是在 /etc/fstab 里面加上 pri=[value] ([value]就是0~32767中间一个数字),然后你就可以很方便的直接使用 swapon -a 来启动他们,而且有优先权设定。
    swapon 是开启swap.
    相对的,便有一个关闭swap的指令,swapoff

    sync Linux sync命令用于数据同步,sync命令是在关闭Linux系统时使用的
    Linux 系统中欲写入硬盘的资料有的时候为了效率起见,会写到 filesystem buffer 中,这个 buffer 是一块记忆体空间,如果欲写入硬盘的资料存于此 buffer 中,而系统又突然断电的话,那么资料就会流失了,sync 指令会将存于 buffer 中的资料强制写入硬盘中。
    语法
    sync

    fdisk Linux fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。

    fdisk [必要参数][选择参数]
    必要参数:
    • -l 列出素所有分区表
    • -u 与"-l"搭配使用,显示分区数目
    选择参数:
    • -s<分区编号> 指定分区
    • -v 版本信息
    菜单操作说明
    • m :显示菜单和帮助信息
    • a :活动分区标记/引导分区
    • d :删除分区
    • l :显示分区类型
    • n :新建分区
    • p :显示分区信息
    • q :退出不保存
    • t :设置分区号
    • v :进行分区检查
    • w :保存修改
    • x :扩展应用,高级功能
    实例
    显示当前分区情况:

    fdisk -l

    Disk /dev/sda: 10.7 GB, 10737418240 bytes
    255 heads, 63 sectors/track, 1305 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sda1 * 1 13 104391 83 Linux
    /dev/sda2 14 1305 10377990 8e Linux LVM

    Disk /dev/sdb: 5368 MB, 5368709120 bytes
    255 heads, 63 sectors/track, 652 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Disk /dev/sdb doesn’t contain a valid partition table
    显示SCSI硬盘的每个分区情况

    fdisk -lu

    Disk /dev/sda: 10.7 GB, 10737418240 bytes
    255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes

    Device Boot Start End Blocks Id System
    /dev/sda1 * 63 208844 104391 83 Linux
    /dev/sda2 208845 20964824 10377990 8e Linux LVM

    Disk /dev/sdb: 5368 MB, 5368709120 bytes
    255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors
    Units = sectors of 1 * 512 = 512 bytes

    Disk /dev/sdb doesn’t contain a valid partition table

    mkfs Linux mkfs(英文全拼:make file system)命令用于在特定的分区上建立 linux 文件系统。
    使用方式 :
    mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
    参数 :
    • device : 预备检查的硬盘分区,例如:/dev/sda1
    • -V : 详细显示模式
    • -t : 给定档案系统的型式,Linux 的预设值为 ext2
    • -c : 在制做档案系统前,检查该partition 是否有坏轨
    • -l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
    • block : 给定 block 的大小
    实例
    在 /dev/hda5 上建一个 msdos 的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来 :
    mkfs -V -t msdos -c /dev/hda5
    将sda6分区格式化为ext3格式
    mfks -t ext3 /dev/sda6
    注意:这里的文件系统是要指定的,比如 ext3 ;reiserfs ;ext2 ;fat32 ;msdos 等。

    Sfdisk Linux sfdisk命令是硬盘分区工具程序。

    sfdisk为硬盘分区工具程序,可显示分区的设置信息,并检查分区是否正常。
    语法
    sfdisk [-?Tvx][-d <硬盘>][-g <硬盘>][-l <硬盘>][-s <分区>][-V <硬盘>]
    参数:
    • -?或–help 显示帮助。
    • -d<硬盘> 显示硬盘分区的设置。
    • -g<硬盘>或–show-geometry<硬盘> 显示硬盘的CHS参数。
    • -l<硬盘> 显示后硬盘分区的相关设置。
    • -s<分区> 显示分区的大小,单位为区块。
    • -T或–list-types 显示所有sfdisk能辨识的文件系统ID。
    • -v或–version 显示版本信息。
    • -V<硬盘>或–verify<硬盘> 检查硬盘分区是否正常。
    • -x或–show-extend 显示扩展分区中的逻辑分区。
    实例
    显示分区信息:

    sfdisk -l

    Disk /dev/sda: 1305 cylinders, 255 heads, 63 sectors/track
    Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

    Device Boot Start End #cyls #blocks Id System
    /dev/sda1 * 0+ 12 13- 104391 83 Linux
    /dev/sda2 13 1304 1292 10377990 8e Linux LVM
    /dev/sda3 0 - 0 0 0 Empty
    /dev/sda4 0 - 0 0 0 Empty

    Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track

    sfdisk: ERROR: sector 0 does not have an msdos signature
    /dev/sdb: unrecognized partition
    No partitions found

    网络通讯
    telnet Linux telnet命令用于远端登入。
    执行telnet指令开启终端机阶段作业,并登入远端主机。
    语法
    telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]
    参数说明:
    • -8 允许使用8位字符资料,包括输入与输出。
    • -a 尝试自动登入远端系统。
    • -b<主机别名> 使用别名指定远端主机名称。
    • -c 不读取用户专属目录里的.telnetrc文件。
    • -d 启动排错模式。
    • -e<脱离字符> 设置脱离字符。
    • -E 滤除脱离字符。
    • -f 此参数的效果和指定"-F"参数相同。
    • -F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
    • -k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
    • -K 不自动登入远端主机。
    • -l<用户名称> 指定要登入远端主机的用户名称。
    • -L 允许输出8位字符资料。
    • -n<记录文件> 指定文件记录相关信息。
    • -r 使用类似rlogin指令的用户界面。
    • -S<服务类型> 设置telnet连线所需的IP TOS信息。
    • -x 假设主机有支持数据加密的功能,就使用它。
    • -X<认证形态> 关闭指定的认证形态。
    实例
    登录远程主机

    telnet 192.168.0.5

    //登录IP为 192.168.0.5 的远程主机

    Netconfig Linux netconfig命令用于设置网络环境。
    这是Slackware发行版内附程序,它具有互动式的问答界面,让用户轻易完成网络环境的设置。
    语法
    netconfig
    httpd Linux httpd命令是Apache HTTP服务器程序。
    httpd为Apache HTTP服务器程序。直接执行程序可启动服务器的服务。
    语法
    httpd [-hlLStvVX][-c<httpd指令>][-C<httpd指令>][-d<服务器根目录>][-D<设定文件参数>][-f<设定文件>]
    参数说明:
    • -c<httpd指令> 在读取配置文件前,先执行选项中的指令。
    • -C<httpd指令> 在读取配置文件后,再执行选项中的指令。
    • -d<服务器根目录> 指定服务器的根目录。
    • -D<设定文件参数> 指定要传入配置文件的参数。
    • -f<设定文件> 指定配置文件。
    • -h 显示帮助。
    • -l 显示服务器编译时所包含的模块。
    • -L 显示httpd指令的说明。
    • -S 显示配置文件中的设定。
    • -t 测试配置文件的语法是否正确。
    • -v 显示版本信息。
    • -V 显示版本信息以及建立环境。
    • -X 以单一程序的方式来启动服务器。
    实例
    检查配置文件语法错误

    httpd -t

    httpd: Could not determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
    Syntax OK
    启动httpd
    httpd
    httpd: Could not determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
    显示编译模块

    httpd -l

    Compiled in modules:
    core.c
    prefork.c
    http_core.c
    mod_so.c
    显示配置文件

    httpd -L>1.log|tail -n 20 1.log

    Maximum number of children alive at the same time
    Allowed in *.conf only outside , or
    ServerLimit (prefork.c)
    Maximum value of MaxClients for this run of Apache
    Allowed in *.conf only outside , or
    KeepAliveTimeout (http_core.c)
    Keep-Alive timeout duration (sec)
    Allowed in *.conf only outside , or
    MaxKeepAliveRequests (http_core.c)
    Maximum number of Keep-Alive requests per connection, or 0 for infinite
    Allowed in *.conf only outside , or
    KeepAlive (http_core.c)
    Whether persistent connections should be On or Off
    Allowed in *.conf only outside , or
    LoadModule (mod_so.c)
    a module name and the name of a shared object file to load it from
    Allowed in *.conf only outside , or
    LoadFile (mod_so.c)
    shared object file or library to load into the server at runtime
    Allowed in *.conf only outside , or

    Ifconfig Linux ifconfig命令用于显示或设置网络设备。
    ifconfig可设置网络设备的状态,或是显示目前的设置。
    语法
    ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
    参数说明:
    • add<地址> 设置网络设备IPv6的IP地址。
    • del<地址> 删除网络设备IPv6的IP地址。
    • down 关闭指定的网络设备。
    • <hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
    • io_addr<I/O地址> 设置网络设备的I/O地址。
    • irq<IRQ地址> 设置网络设备的IRQ。
    • media<网络媒介类型> 设置网络设备的媒介类型。
    • mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
    • metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
    • mtu<字节> 设置网络设备的MTU。
    • netmask<子网掩码> 设置网络设备的子网掩码。
    • tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
    • up 启动指定的网络设备。
    • -broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
    • -pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
    • -promisc 关闭或启动指定网络设备的promiscuous模式。
    • [IP地址] 指定网络设备的IP地址。
    • [网络设备] 指定网络设备的名称。
    实例
    显示网络设备信息

    ifconfig

    eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
    inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
    inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
    TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
    Interrupt:185 Base address:0x2024

    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
    TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)
    启动关闭指定网卡

    ifconfig eth0 down

    ifconfig eth0 up

    为网卡配置和删除IPv6地址

    ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡设置IPv6地址

    ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址

    用ifconfig修改MAC地址

    ifconfig eth0 down //关闭网卡

    ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址

    ifconfig eth0 up //启动网卡

    ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址

    ifconfig eth1 up //启动网卡

    配置IP地址

    ifconfig eth0 192.168.1.56

    //给eth0网卡配置IP地址

    ifconfig eth0 192.168.1.56 netmask 255.255.255.0

    // 给eth0网卡配置IP地址,并加上子掩码

    ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255

    // 给eth0网卡配置IP地址,加上子掩码,加上个广播地址
    启用和关闭ARP协议

    ifconfig eth0 arp //开启

    ifconfig eth0 -arp //关闭

    设置最大传输单元

    ifconfig eth0 mtu 1500

    //设置能通过的最大数据包大小为 1500 bytes

    minicom
    mesg
    dnsconf Linux dnsconf命令用于设置DNS服务器组态。
    语法
    dnsconf [–deldomain<域>][–delsecondary<域>][–newdomain<域>][–set<主机>][–setcname<主机>][–setmx<域><主机>][–setns<域><主机>][–unset<主机>]
    参数说明:
    • --deldomain<域> 删除域。
    • --delsecondary<域> 删除次级域。
    • --newdomain<域> 新增域。
    • --set<主机> 新增主机记录。
    • --setcname<主机> 设置。
    • --setmx<域><主机> 指定域的邮件主机。
    • --setns<域><主机> 指定域的DNS服务器。
    • --unset<主机> 删除DNS中某台主机的记录。

    wall
    netstat Linux netstat 命令用于显示网络状态。
    利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
    语法
    netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][–ip]
    参数说明:
    • -a或–all 显示所有连线中的Socket。
    • -A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
    • -c或–continuous 持续列出网络状态。
    • -C或–cache 显示路由器配置的快取信息。
    • -e或–extend 显示网络其他相关信息。
    • -F或–fib 显示FIB。
    • -g或–groups 显示多重广播功能群组组员名单。
    • -h或–help 在线帮助。
    • -i或–interfaces 显示网络界面信息表单。
    • -l或–listening 显示监控中的服务器的Socket。
    • -M或–masquerade 显示伪装的网络连线。
    • -n或–numeric 直接使用IP地址,而不通过域名服务器。
    • -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
    • -o或–timers 显示计时器。
    • -p或–programs 显示正在使用Socket的程序识别码和程序名称。
    • -r或–route 显示Routing Table。
    • -s或–statistics 显示网络工作信息统计表。
    • -t或–tcp 显示TCP传输协议的连线状况。
    • -u或–udp 显示UDP传输协议的连线状况。
    • -v或–verbose 显示指令执行过程。
    • -V或–version 显示版本信息。
    • -w或–raw 显示RAW传输协议的连线状况。
    • -x或–unix 此参数的效果和指定"-A unix"参数相同。
    • --ip或–inet 此参数的效果和指定"-A inet"参数相同。
    实例
    显示详细的网络状况

    netstat -a

    显示当前户籍UDP连接状况

    netstat -nu

    显示UDP端口号的使用情况

    netstat -apu

    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    udp 0 0 *:32768 : -
    udp 0 0 *:nfs : -
    udp 0 0 *:641 : 3006/rpc.statd
    udp 0 0 192.168.0.3:netbios-ns : 3537/nmbd
    udp 0 0 *:netbios-ns : 3537/nmbd
    udp 0 0 192.168.0.3:netbios-dgm : 3537/nmbd
    udp 0 0 *:netbios-dgm : 3537/nmbd
    udp 0 0 *:tftp : 3346/xinetd
    udp 0 0 *:999 : 3366/rpc.rquotad
    udp 0 0 *:sunrpc : 2986/portmap
    udp 0 0 *:ipp : 6938/cupsd
    udp 0 0 *:1022 : 3392/rpc.mountd
    udp 0 0 *:638 : 3006/rpc.statd
    显示网卡列表

    netstat -i

    Kernel Interface table
    Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
    eth0 1500 0 181864 0 0 0 141278 0 0 0 BMRU
    lo 16436 0 3362 0 0 0 3362 0 0 0 LRU
    显示组播组的关系

    netstat -g

    IPv6/IPv4 Group Memberships
    Interface RefCnt Group


    lo 1 ALL-SYSTEMS.MCAST.NET
    eth0 1 ALL-SYSTEMS.MCAST.NET
    lo 1 ff02::1
    eth0 1 ff02::1:ff0a:b0c
    eth0 1 ff02::1
    显示网络统计信息

    netstat -s

    Ip:
    184695 total packets received
    0 forwarded
    0 incoming packets discarded
    184687 incoming packets delivered
    143917 requests sent out
    32 outgoing packets dropped
    30 dropped because of missing route
    Icmp:
    676 ICMP messages received
    5 input ICMP message failed.
    ICMP input histogram:
    destination unreachable: 44
    echo requests: 287
    echo replies: 345
    304 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
    destination unreachable: 17
    echo replies: 287
    Tcp:
    473 active connections openings
    28 passive connection openings
    4 failed connection attempts
    11 connection resets received
    1 connections established
    178253 segments received
    137936 segments send out
    29 segments retransmited
    0 bad segments received.
    336 resets sent
    Udp:
    5714 packets received
    8 packets to unknown port received.
    0 packet receive errors
    5419 packets sent
    TcpExt:
    1 resets received for embryonic SYN_RECV sockets
    ArpFilter: 0
    12 TCP sockets finished time wait in fast timer
    572 delayed acks sent
    3 delayed acks further delayed because of locked socket
    13766 packets directly queued to recvmsg prequeue.
    1101482 packets directly received from backlog
    19599861 packets directly received from prequeue
    46860 packets header predicted
    14541 packets header predicted and directly queued to user
    TCPPureAcks: 12259
    TCPHPAcks: 9119
    TCPRenoRecovery: 0
    TCPSackRecovery: 0
    TCPSACKReneging: 0
    TCPFACKReorder: 0
    TCPSACKReorder: 0
    TCPRenoReorder: 0
    TCPTSReorder: 0
    TCPFullUndo: 0
    TCPPartialUndo: 0
    TCPDSACKUndo: 0
    TCPLossUndo: 0
    TCPLoss: 0
    TCPLostRetransmit: 0
    TCPRenoFailures: 0
    TCPSackFailures: 0
    TCPLossFailures: 0
    TCPFastRetrans: 0
    TCPForwardRetrans: 0
    TCPSlowStartRetrans: 0
    TCPTimeouts: 29
    TCPRenoRecoveryFail: 0
    TCPSackRecoveryFail: 0
    TCPSchedulerFailed: 0
    TCPRcvCollapsed: 0
    TCPDSACKOldSent: 0
    TCPDSACKOfoSent: 0
    TCPDSACKRecv: 0
    TCPDSACKOfoRecv: 0
    TCPAbortOnSyn: 0
    TCPAbortOnData: 1
    TCPAbortOnClose: 0
    TCPAbortOnMemory: 0
    TCPAbortOnTimeout: 3
    TCPAbortOnLinger: 0
    TCPAbortFailed: 3
    TCPMemoryPressures: 0
    显示监听的套接口

    netstat -l

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 *:32769 : LISTEN
    tcp 0 0 *:nfs : LISTEN
    tcp 0 0 *:644 : LISTEN
    tcp 0 0 *:1002 : LISTEN
    tcp 0 0 *:netbios-ssn : LISTEN
    tcp 0 0 *:sunrpc : LISTEN
    tcp 0 0 vm-dev:ipp : LISTEN
    tcp 0 0 *:telnet : LISTEN
    tcp 0 0 *:601 : LISTEN
    tcp 0 0 *:microsoft-ds : LISTEN
    tcp 0 0 *:http : LISTEN
    tcp 0 0 *:ssh : LISTEN
    tcp 0 0 *:https : LISTEN
    udp 0 0 *:32768 :
    udp 0 0 *:nfs :
    udp 0 0 *:641 :
    udp 0 0 192.168.0.3:netbios-ns :
    udp 0 0 *:netbios-ns :
    udp 0 0 192.168.0.3:netbios-dgm :
    udp 0 0 *:netbios-dgm :
    udp 0 0 *:tftp :
    udp 0 0 *:999 :
    udp 0 0 *:sunrpc :
    udp 0 0 *:ipp :
    udp 0 0 *:1022 :
    udp 0 0 *:638 :
    Active UNIX domain sockets (only servers)
    Proto RefCnt Flags Type State I-Node Path
    unix 2 [ ACC ] STREAM LISTENING 10621 @/tmp/fam-root-
    unix 2 [ ACC ] STREAM LISTENING 7096 /var/run/acpid.socket
    unix 2 [ ACC ] STREAM LISTENING 9792 /tmp/.gdm_socket
    unix 2 [ ACC ] STREAM LISTENING 9927 /tmp/.X11-unix/X0
    unix 2 [ ACC ] STREAM LISTENING 10489 /tmp/ssh-lbUnUf4552/agent.4552
    unix 2 [ ACC ] STREAM LISTENING 10558 /tmp/ksocket-root/kdeinit__0
    unix 2 [ ACC ] STREAM LISTENING 10560 /tmp/ksocket-root/kdeinit-:0
    unix 2 [ ACC ] STREAM LISTENING 10570 /tmp/.ICE-unix/dcop4664-1270815442
    unix 2 [ ACC ] STREAM LISTENING 10843 /tmp/.ICE-unix/4735
    unix 2 [ ACC ] STREAM LISTENING 10591 /tmp/ksocket-root/klauncherah3arc.slave-socket
    unix 2 [ ACC ] STREAM LISTENING 7763 /var/run/iiim/.iiimp-unix/9010
    unix 2 [ ACC ] STREAM LISTENING 11047 /tmp/orbit-root/linc-1291-0-1e92c8082411
    unix 2 [ ACC ] STREAM LISTENING 11053 /tmp/orbit-root/linc-128e-0-dc070659cbb3
    unix 2 [ ACC ] STREAM LISTENING 8020 /var/run/dbus/system_bus_socket
    unix 2 [ ACC ] STREAM LISTENING 58927 /tmp/mcop-root/vm-dev-2c28-4beba75f
    unix 2 [ ACC ] STREAM LISTENING 7860 /tmp/.font-unix/fs7100
    unix 2 [ ACC ] STREAM LISTENING 7658 /dev/gpmctl
    unix 2 [ ACC ] STREAM LISTENING 10498 @/tmp/dbus-s2MLJGO5Ci

    ping Linux ping命令用于检测主机。
    执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
    语法
    ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
    参数说明:
    • -d 使用Socket的SO_DEBUG功能。
    • -c<完成次数> 设置完成要求回应的次数。
    • -f 极限检测。
    • -i<间隔秒数> 指定收发信息的间隔时间。
    • -I<网络界面> 使用指定的网络接口送出数据包。
    • -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
    • -n 只输出数值。
    • -p<范本样式> 设置填满数据包的范本样式。
    • -q 不显示指令执行过程,开头和结尾的相关信息除外。
    • -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
    • -R 记录路由过程。
    • -s<数据包大小> 设置数据包的大小。
    • -t<存活数值> 设置存活数值TTL的大小。
    • -v 详细显示指令的执行过程。
    实例
    检测是否与主机连通

    ping www.w3cschool.cc //ping主机

    PING aries.m.alikunlun.com (114.80.174.110) 56(84) bytes of data.
    64 bytes from 114.80.174.110: icmp_seq=1 ttl=64 time=0.025 ms
    64 bytes from 114.80.174.110: icmp_seq=2 ttl=64 time=0.036 ms
    64 bytes from 114.80.174.110: icmp_seq=3 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=4 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=5 ttl=64 time=0.028 ms
    64 bytes from 114.80.174.110: icmp_seq=6 ttl=64 time=0.028 ms
    64 bytes from 114.80.174.110: icmp_seq=7 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=8 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=9 ttl=64 time=0.036 ms
    64 bytes from 114.80.174.110: icmp_seq=10 ttl=64 time=0.041 ms

    — aries.m.alikunlun.com ping statistics —
    10 packets transmitted, 30 received, 0% packet loss, time 29246ms
    rtt min/avg/max/mdev = 0.021/0.035/0.078/0.011 ms

    //需要手动终止Ctrl+C
    指定接收包的次数

    ping -c 2 www.w3cschool.cc

    PING aries.m.alikunlun.com (114.80.174.120) 56(84) bytes of data.
    64 bytes from 114.80.174.120: icmp_seq=1 ttl=54 time=6.18 ms
    64 bytes from 114.80.174.120: icmp_seq=2 ttl=54 time=15.4 ms

    — aries.m.alikunlun.com ping statistics —
    2 packets transmitted, 2 received, 0% packet loss, time 1016ms
    rtt min/avg/max/mdev = 6.185/10.824/15.464/4.640 ms

    //收到两次包后,自动退出
    多参数使用

    ping -i 3 -s 1024 -t 255 g.cn //ping主机

    PING g.cn (203.208.37.104) 1024(1052) bytes of data.
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=0 ttl=243 time=62.5 ms
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=1 ttl=243 time=63.9 ms
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=2 ttl=243 time=61.9 ms

    — g.cn ping statistics —
    3 packets transmitted, 3 received, 0% packet loss, time 6001ms
    rtt min/avg/max/mdev = 61.959/62.843/63.984/0.894 ms, pipe 2
    [root@linux ~]#

    //-i 3 发送周期为 3秒 -s 设置发送包的大小 -t 设置TTL值为 255
    系统管理
    useradd Linux useradd 命令用于建立用户帐号。
    useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。
    语法
    useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ][-u ][用户帐号]

    useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ]
    参数说明:
    • -c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。
    • -d<登入目录>  指定用户登入时的起始目录。
    • -D  变更预设值.
    • -e<有效期限>  指定帐号的有效期限。
    • -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。
    • -g<群组>  指定用户所属的群组。
    • -G<群组>  指定用户所属的附加群组。
    • -m  自动建立用户的登入目录。
    • -M  不要自动建立用户的登入目录。
    • -n  取消建立以用户名称为名的群组.
    • -r  建立系统帐号。
    • -s   指定用户登入后所使用的shell。
    • -u  指定用户ID。
    实例
    添加一般用户

    useradd tt

    为添加的用户指定相应的用户组

    useradd -g root tt

    创建一个系统用户

    useradd -r tt

    为新添加的用户指定home目录

    useradd -d /home/myd tt

    建立用户且制定ID

    useradd caojh -u 544

    Date 时间
    Linux date命令可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:
    时间方面:
    • % : 印出 %
    • %n : 下一行
    • %t : 跳格
    • %H : 小时(00…23)
    • %I : 小时(01…12)
    • %k : 小时(0…23)
    • %l : 小时(1…12)
    • %M : 分钟(00…59)
    • %p : 显示本地 AM 或 PM
    • %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
    • %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
    • %S : 秒(00…61)
    • %T : 直接显示时间 (24 小时制)
    • %X : 相当于 %H:%M:%S
    • %Z : 显示时区
    日期方面:
    • %a : 星期几 (Sun…Sat)
    • %A : 星期几 (Sunday…Saturday)
    • %b : 月份 (Jan…Dec)
    • %B : 月份 (January…December)
    • %c : 直接显示日期与时间
    • %d : 日 (01…31)
    • %D : 直接显示日期 (mm/dd/yy)
    • %h : 同 %b
    • %j : 一年中的第几天 (001…366)
    • %m : 月份 (01…12)
    • %U : 一年中的第几周 (00…53) (以 Sunday 为一周的第一天的情形)
    • %w : 一周中的第几天 (0…6)
    • %W : 一年中的第几周 (00…53) (以 Monday 为一周的第一天的情形)
    • %x : 直接显示日期 (mm/dd/yy)
    • %y : 年份的最后两位数字 (00.99)
    • %Y : 完整年份 (0000…9999)
    若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。
    使用权限:所有使用者。
    当您不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date ‘+%-H:%-M:%-S’ 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。
    当您以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。
    语法
    date [-u] [-d datestr] [-s datestr] [–utc] [–universal] [–date=datestr] [–set=datestr] [–help] [–version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
    参数说明:
    • -d datestr : 显示 datestr 中所设定的时间 (非系统时间)
    • --help : 显示辅助讯息
    • -s datestr : 将系统时间设为 datestr 中所设定的时间
    • -u : 显示目前的格林威治时间
    • --version : 显示版本编号
    显示当前时间

    date

    三 5月 12 14:08:12 CST 2010

    date ‘+%c’

    2010年05月12日 星期三 14时09分02秒

    date ‘+%D’ //显示完整的时间

    05/12/10

    date ‘+%x’ //显示数字日期,年份两位数表示

    2010年05月12日

    date ‘+%T’ //显示日期,年份用四位数表示

    14:09:31

    date ‘+%X’ //显示24小时的格式

    14时09分39秒
    按自己的格式输出

    date ‘+usr_time: $1:%M %P -hey’

    usr_time: $1:16 下午 -hey
    显示时间后跳行,再显示目前日期
    date ‘+%T%n%D’
    显示月份与日数
    date ‘+%B %d’
    显示日期与设定时间(12:34:56)
    date --date ‘12:34:56’

    exit linux exit命令用于退出目前的shell
    执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。exit也可用在script,离开正在执行的script,回到shell。
    语法
    exit [状态值]
    实例
    退出终端

    exit

    sleep Linux sleep命令可以用来将目前动作延迟一段时间。
    使用权限:所有使用者。
    语法
    sleep [–help] [–version] number[smhd]
    参数说明:
    • --help : 显示辅助讯息
    • --version : 显示版本编号
    • number : 时间长度,后面可接 s、m、h 或 d
    • 其中 s 为秒,m 为 分钟,h 为小时,d 为日数
    实例
    休眠5分钟

    sleep 5m

    显示目前时间后延迟 1 分钟,之后再次显示时间
    date;sleep 1m;date

    groupdel Linux groupdel命令用于删除群组。
    需要从系统上删除群组时,可用groupdel(group delete)指令来完成这项工作。倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
    语法
    groupdel [群组名称]
    实例
    删除一个群组

    groupdel hnuser

    Groupmod Linux groupmod命令用于更改群组识别码或名称
    需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。
    语法
    groupmod [-g <群组识别码> <-o>][-n <新群组名称>][群组名称]
    参数:
    • -g <群组识别码>  设置欲使用的群组识别码。
    • -o  重复使用群组识别码。
    • -n <新群组名称>  设置欲使用的群组名称。
    实例
    修改组名
    [root@runoob.com ~]# groupadd linuxso
    [root@runoob.com ~]# tail -1 /etc/group
    linuxso❌500:
    [root@runoob.com ~]# tail -1 /etc/group
    linuxso❌500:
    [root@runoob.com ~]# groupmod -n linux linuxso
    [root@runoob.com ~]# tail -1 /etc/group
    linux❌500:

    kill Linux kill 命令用于删除执行中的程序或工作。
    kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。
    语法
    kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
    参数说明:
    • -l <信息编号>  若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
    • -s <信息名称或编号>  指定要送出的信息。
    • [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。
    使用 kill -l 命令列出所有可用信号。
    最常用的信号是:
    • 1 (HUP):重新加载进程。
    • 9 (KILL):杀死一个进程。
    • 15 (TERM):正常停止一个进程。
    实例
    杀死进程

    kill 12345

    强制杀死进程

    kill -KILL 123456

    发送SIGHUP信号,可以使用一下信号

    kill -HUP pid

    彻底杀死进程

    kill -9 123456

    显示信号

    kill -l

    1. SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
    2. SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
    3. SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
    4. SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
    5. SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
    6. SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
    7. SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
    8. SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
    9. SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
    10. SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
    11. SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
    12. SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
    13. SIGRTMAX-1 64) SIGRTMAX
      杀死指定用户所有进程
      #kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程
      #kill -u hnlinux //方法二

    Last Linux last 命令用于显示用户最近登录信息。
    使用权限:所有使用者。
    语法
    shell>> last [options]
    参数说明:
    • -R 省略 hostname 的栏位
    • -num 展示前 num 个
    • username 展示 username 的登入讯息
    • tty 限制登入讯息包含终端机代号
    实例
    shell>> last -R -2
    johnney pts/1 Mon Aug 14 20:42 still logged in
    johnney pts/0 Mon Aug 14 19:59 still logged in
    wtmp begins Tue Aug 1 09:01:10 2000 ### /var/log/wtmp
    shell>> last -2 minery
    minery pts/0 140.119.217.115 Mon Aug 14 18:37 - 18:40 (00:03)
    minery pts/0 140.119.217.115 Mon Aug 14 17:22 - 17:24 (00:02)
    wtmp begins Tue Aug 1 09:01:10 2000
    一般显示方法

    last

    简略显示,并指定显示的个数

    last -n 5 -R

    root pts/4 Thu May 13 17:25 still logged in
    root pts/2 Thu May 13 17:23 - 17:25 (00:02)
    root pts/1 Thu May 13 16:46 still logged in
    root pts/7 Thu May 13 15:36 still logged in
    root pts/9 Thu May 13 15:35 still logged in

    wtmp begins Thu May 13 18:55:40 2014
    显示最后一列显示主机IP地址

    last -n 5 -a -i

    root pts/4 Thu May 13 17:25 still logged in 192.168.1.10
    root pts/2 Thu May 13 17:23 - 17:25 (00:02) 192.168.1.10
    root pts/1 Thu May 13 16:46 still logged in 192.168.1.10
    root pts/7 Thu May 13 15:36 still logged in 192.168.1.10
    root pts/9 Thu May 13 15:35 still logged in 192.168.1.10

    wtmp begins Thu May 13 18:55:40 2014

    lastb Linux lastb命令用于列出登入系统失败的用户相关信息。
    单独执行lastb指令,它会读取位于/var/log目录下,名称为btmp的文件,并把该文件内容
    记录的登入失败的用户名单,全部显示出来。
    语法
    lastb [-adRx][-f <记录文件>][-n <显示列数>][帐号名称…][终端机编号…]
    参数说明:
    • -a  把从何处登入系统的主机名称或IP地址显示在最后一行。
    • -d  将IP地址转换成主机名称。
    • -f<记录文件>  指定记录文件。
    • -n<显示列数>或-<显示列数>  设置列出名单的显示列数。
    • -R  不显示登入系统的主机名称或IP地址。
    • -x  显示系统关机,重新开机,以及执行等级的改变等信息。
    实例
    显示登录失败的用户

    lastb

    root tty7 :1 Thu May 13 11:26 - 11:26 (00:00)

    btmp begins Thu May 13 11:26:39 2014

    ps Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
    语法
    ps [options] [–help]
    参数:
    • ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
    • -A 列出所有的进程
    • -w 显示加宽可以显示较多的资讯
    • -au 显示较详细的资讯
    • -aux 显示所有包含其他使用者的行程
    • au(x) 输出格式 :
    • USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    • USER: 行程拥有者
    • PID: pid
    • %CPU: 占用的 CPU 使用率
    • %MEM: 占用的记忆体使用率
    • VSZ: 占用的虚拟记忆体大小
    • RSS: 占用的记忆体大小
    • TTY: 终端的次要装置号码 (minor device number of tty)
    • STAT: 该行程的状态:
    • D: 无法中断的休眠状态 (通常 IO 的进程)
    • R: 正在执行中
    • S: 静止状态
    • T: 暂停执行
    • Z: 不存在但暂时无法消除
    • W: 没有足够的记忆体分页可分配
    • <: 高优先序的行程
    • N: 低优先序的行程
    • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
    • START: 行程开始时间
    • TIME: 执行的时间
    • COMMAND:所执行的指令
    实例

    ps -A 显示进程信息

    PID TTY TIME CMD
    1 ? 00:00:02 init
    2 ? 00:00:00 kthreadd
    3 ? 00:00:00 migration/0
    4 ? 00:00:00 ksoftirqd/0
    5 ? 00:00:00 watchdog/0
    6 ? 00:00:00 events/0
    7 ? 00:00:00 cpuset
    8 ? 00:00:00 khelper
    9 ? 00:00:00 netns
    10 ? 00:00:00 async/mgr
    11 ? 00:00:00 pm
    12 ? 00:00:00 sync_supers
    13 ? 00:00:00 bdi-default
    14 ? 00:00:00 kintegrityd/0
    15 ? 00:00:02 kblockd/0
    16 ? 00:00:00 kacpid
    17 ? 00:00:00 kacpi_notify
    18 ? 00:00:00 kacpi_hotplug
    19 ? 00:00:27 ata/0
    ……省略部分结果
    30749 pts/0 00:00:15 gedit
    30886 ? 00:01:10 qtcreator.bin
    30894 ? 00:00:00 qtcreator.bin
    31160 ? 00:00:00 dhclient
    31211 ? 00:00:00 aptd
    31302 ? 00:00:00 sshd
    31374 pts/2 00:00:00 bash
    31396 pts/2 00:00:00 ps
    显示指定用户信息

    ps -u root //显示root进程用户信息

    PID TTY TIME CMD
    1 ? 00:00:02 init
    2 ? 00:00:00 kthreadd
    3 ? 00:00:00 migration/0
    4 ? 00:00:00 ksoftirqd/0
    5 ? 00:00:00 watchdog/0
    6 ? 00:00:00 events/0
    7 ? 00:00:00 cpuset
    8 ? 00:00:00 khelper
    9 ? 00:00:00 netns
    10 ? 00:00:00 async/mgr
    11 ? 00:00:00 pm
    12 ? 00:00:00 sync_supers
    13 ? 00:00:00 bdi-default
    14 ? 00:00:00 kintegrityd/0
    15 ? 00:00:02 kblockd/0
    16 ? 00:00:00 kacpid
    ……省略部分结果
    30487 ? 00:00:06 gnome-terminal
    30488 ? 00:00:00 gnome-pty-helpe
    30489 pts/0 00:00:00 bash
    30670 ? 00:00:00 debconf-communi
    30749 pts/0 00:00:15 gedit
    30886 ? 00:01:10 qtcreator.bin
    30894 ? 00:00:00 qtcreator.bin
    31160 ? 00:00:00 dhclient
    31211 ? 00:00:00 aptd
    31302 ? 00:00:00 sshd
    31374 pts/2 00:00:00 bash
    31397 pts/2 00:00:00 ps
    显示所有进程信息,连同命令行

    ps -ef //显示所有命令,连带命令行

    UID PID PPID C STIME TTY TIME CMD
    root 1 0 0 10:22 ? 00:00:02 /sbin/init
    root 2 0 0 10:22 ? 00:00:00 [kthreadd]
    root 3 2 0 10:22 ? 00:00:00 [migration/0]
    root 4 2 0 10:22 ? 00:00:00 [ksoftirqd/0]
    root 5 2 0 10:22 ? 00:00:00 [watchdog/0]
    root 6 2 0 10:22 ? /usr/lib/NetworkManager
    ……省略部分结果
    root 31302 2095 0 17:42 ? 00:00:00 sshd: root@pts/2
    root 31374 31302 0 17:42 pts/2 00:00:00 -bash
    root 31400 1 0 17:46 ? 00:00:00 /usr/bin/python /usr/sbin/aptd
    root 31407 31374 0 17:48 pts/2 00:00:00 ps -ef

    procinfo Linux procinfo命令用于显示系统状态。
    procinfo(process information)指令从/proc目录里读取相关数据,将数据妥善整理过后输出到标准输出设备。
    语法
    procinfo [-abdDfhimsSv][-F <输出文件>][-n <间隔秒数>]
    参数说明:
    • -a  显示所有信息。
    • -b  显示磁盘设备的区块数目,而非存取数目。
    • -d  显示系统信息每秒间的变化差额,而非总和的数值。本参数必须配合"-f"参数使用
    • -D  此参数效果和指定"-d"参数类似,但内存和交换文件的信息为总和数值。
    • -f  进入全画面的互动式操作界面。
    • -F<输出文件>  把信息状态输出到文件保存起来,而非预设的标准输出设备。
    • -h  在线帮助。
    • -i  显示完整的IRP列表。
    • -m  显示系统模块和外围设备等相关信息。
    • -n<间隔秒数>  设置全画面互动模式的信息更新速度,单位以秒计算。
    • -s  显示系统的内存,磁盘空间,IRP和DMA等信息,此为预设值。
    • -S  搭配参数"-d"或"-D"使用时,每秒都会更新信息,不论是否有使用参数"-n"。
    • -v  显示版本信息。
    实例
    显示系统状态

    procinfo

    Top Linux top命令用于实时显示 process 的动态。
    语法
    top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
    参数说明:
    • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
    • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
    • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
    • S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
    • s : 安全模式,将交谈式指令取消, 避免潜在的危机
    • i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
    • n : 更新的次数,完成后将会退出 top
    • b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
    实例
    显示进程信息

    top

    显示完整命令

    top -c

    以批处理模式显示程序信息

    top -b

    以累积模式显示程序信息

    top -S

    设置信息更新次数
    top -n 2

    //表示更新两次后终止更新显示
    设置信息更新时间

    top -d 3

    //表示更新周期为3秒
    显示指定的进程信息

    top -p 139

    //显示进程号为139的进程信息,CPU、内存占用率等
    显示更新十次后退出
    top -n 10
    使用者将不能利用交谈式指令来对行程下命令
    top -s

    pstree Linux pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程
    使用权限:所有使用者。
    语法
    pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]

    pstree -V
    参数说明:
    • -a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号
    • -c 如果有重覆的行程名, 则分开列出(预设值是会在前面加上
    实例
    显示进程的关系
    pstree
    init-±amd
    |-apmd
    |-atd
    |-httpd—10
    [httpd]
    %pstree -p
    init(1)-±amd(447)
    |-apmd(105)
    |-atd(339)
    %pstree -c
    init-±amd
    |-apmd
    |-atd
    |-httpd-±httpd
    | |-httpd
    | |-httpd
    | |-httpd

    特别表明在运行的进程

    pstree -apnh //显示进程间的关系

    同时显示用户名称

    pstree -u //显示用户名称

    Reboot Linux reboot命令用于用来重新启动计算机。
    若系统的 runlevel 为 0 或 6 ,则重新开机,否则以 shutdown 指令(加上 -r 参数)来取代
    语法
    reboot [-n] [-w] [-d] [-f] [-i]
    参数:
    • -n : 在重开机前不做将记忆体资料写回硬盘的动作
    • -w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
    • -d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
    • -f : 强迫重开机,不呼叫 shutdown 这个指令
    • -i : 在重开机之前先把所有网络相关的装置先停止
    实例
    重新启动

    reboot

    Shutdown Linux shutdown命令可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机。
    使用权限:系统管理者。
    语法
    shutdown [-t seconds] [-rkhncfF] time [message]
    参数说明:
    • -t seconds : 设定在几秒钟之后进行关机程序。
    • -k : 并不会真的关机,只是将警告讯息传送给所有使用者。
    • -r : 关机后重新开机。
    • -h : 关机后停机。
    • -n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
    • -c : 取消目前已经进行中的关机动作。
    • -f : 关机时,不做 fcsk 动作(检查 Linux 档系统)。
    • -F : 关机时,强迫进行 fsck 动作。
    • time : 设定关机的时间。
    • message : 传送给所有使用者的警告讯息。
    实例
    立即关机

    shutdown -h now

    指定 10 分钟后关机

    shutdown -h 10

    重新启动计算机

    shutdown -r now

    Rwho Linux rwho命令用于查看系统用户。
    rwho指令的效果类似who指令,但它会显示局域网里所有主机的用户。主机必须提供rwhod常驻服务的功能,方可使用rwho指令。
    语法
    rwho [-a]
    参数说明:
    • -a  列出所有的用户,包括闲置时间超过1个小时以上的用户。
    实例
    显示本地局域网内的所有用户

    rwho

    root snail-hnlinux:pts/2 May 14 17:42

    sudo Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

    使用权限:在 /etc/sudoers 中有出现的使用者。
    语法
    sudo -V
    sudo -h
    sudo -l
    sudo -v
    sudo -k
    sudo -s
    sudo -H
    sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s
    sudo command
    参数说明:
    • -V 显示版本编号
    • -h 会显示版本编号及指令的使用方式说明
    • -l 显示出自己(执行 sudo 的使用者)的权限
    • -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
    • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
    • -b 将要执行的指令放在背景执行
    • -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
    • -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
    • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
    • -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
    • command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
    实例
    sudo命令使用
    $ sudo ls
    [sudo] password for hnlinux:
    hnlinux is not in the sudoers file. This incident will be reported.
    指定用户执行命令

    sudo -u userb ls -l

    显示sudo设置
    $ sudo -L //显示sudo设置
    Available options in a sudoers ``Defaults’’ line:

    syslog: Syslog facility if syslog is being used for logging
    syslog_goodpri: Syslog priority to use when user authenticates successfully
    syslog_badpri: Syslog priority to use when user authenticates unsuccessfully
    long_otp_prompt: Put OTP prompt on its own line
    ignore_dot: Ignore ‘.’ in $PATH
    mail_always: Always send mail when sudo is run
    mail_badpass: Send mail if user authentication fails
    mail_no_user: Send mail if the user is not in sudoers
    mail_no_host: Send mail if the user is not in sudoers for this host
    mail_no_perms: Send mail if the user is not allowed to run a command
    tty_tickets: Use a separate timestamp for each user/tty combo
    lecture: Lecture user the first time they run sudo
    lecture_file: File containing the sudo lecture
    authenticate: Require users to authenticate by default
    root_sudo: Root may run sudo
    log_host: Log the hostname in the (non-syslog) log file
    log_year: Log the year in the (non-syslog) log file
    shell_noargs: If sudo is invoked with no arguments, start a shell
    set_home: Set $HOME to the target user when starting a shell with -s
    always_set_home: Always set $HOME to the target user’s home directory
    path_info: Allow some information gathering to give useful error messages
    fqdn: Require fully-qualified hostnames in the sudoers file
    insults: Insult the user when they enter an incorrect password
    requiretty: Only allow the user to run sudo if they have a tty
    env_editor: Visudo will honor the EDITOR environment variable
    rootpw: Prompt for root’s password, not the users’s
    runaspw: Prompt for the runas_default user’s password, not the users’s
    targetpw: Prompt for the target user’s password, not the users’s
    use_loginclass: Apply defaults in the target user’s login class if there is one
    set_logname: Set the LOGNAME and USER environment variables
    stay_setuid: Only set the effective uid to the target user, not the real uid
    preserve_groups: Don’t initialize the group vector to that of the target user
    loglinelen: Length at which to wrap log file lines (0 for no wrap)
    timestamp_timeout: Authentication timestamp timeout
    passwd_timeout: Password prompt timeout
    passwd_tries: Number of tries to enter a password
    umask: Umask to use or 0777 to use user’s
    logfile: Path to log file
    mailerpath: Path to mail program
    mailerflags: Flags for mail program
    mailto: Address to send mail to
    mailfrom: Address to send mail from
    mailsub: Subject line for mail messages
    badpass_message: Incorrect password message
    timestampdir: Path to authentication timestamp dir
    timestampowner: Owner of the authentication timestamp dir
    exempt_group: Users in this group are exempt from password and PATH requirements
    passprompt: Default password prompt
    passprompt_override: If set, passprompt will override system prompt in all cases.
    runas_default: Default user to run commands as
    secure_path: Value to override user’s $PATH with
    editor: Path to the editor for use by visudo
    listpw: When to require a password for ‘list’ pseudocommand
    verifypw: When to require a password for ‘verify’ pseudocommand
    noexec: Preload the dummy exec functions contained in ‘noexec_file’
    noexec_file: File containing dummy exec functions
    ignore_local_sudoers: If LDAP directory is up, do we ignore local sudoers file
    closefrom: File descriptors >= %d will be closed before executing a command
    closefrom_override: If set, users may override the value of `closefrom’ with the -C option
    setenv: Allow users to set arbitrary environment variables
    env_reset: Reset the environment to a default set of variables
    env_check: Environment variables to check for sanity
    env_delete: Environment variables to remove
    env_keep: Environment variables to preserve
    role: SELinux role to use in the new security context
    type: SELinux type to use in the new security context
    askpass: Path to the askpass helper program
    env_file: Path to the sudo-specific environment file
    sudoers_locale: Locale to use while parsing sudoers
    visiblepw: Allow sudo to prompt for a password even if it would be visisble
    pwfeedback: Provide visual feedback at the password prompt when there is user input
    fast_glob: Use faster globbing that is less accurate but does not access the filesystem
    umask_override: The umask specified in sudoers will override the user’s, even if it is more permissive
    以root权限执行上一条命令
    $ sudo !!
    以特定用户身份进行编辑文本
    $ sudo -u uggc vi ~www/index.html
    //以 uggc 用户身份编辑 home 目录下www目录中的 index.html 文件
    列出目前的权限
    sudo -l
    列出 sudo 的版本资讯
    sudo -V

    gitps Linux gitps命令用于报告程序状况。
    gitps(gnu interactive tools process status)是用来报告并管理程序执行的指令,基本上它就是通过ps指令来报告,管理程序,也能通过gitps指令随时中断,删除不必要的程序。因为gitps指令会去执行ps指令,所以其参数和ps指令相当类似。
    语法
    gitps [acefgjlnrsSTuvwxX][p <程序识别码>][t <终端机编号>][U <帐号名称>]
    参数说明:
    • a  显示 现行终端机下的所有程序,包括其他用户的程序。
    • c  列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或是常驻服务的标示.
    • e  列出程序时,显示每个程序所使用的环境变量。
    • f  用ASCII字符显示树状结构,表达程序间的相互关系。
    • g  显示现行终端机下的所有程序,包括群组领导者的程序。
    • j  采用工作控制的格式来显示程序状况。
    • l  采用纤细的格式来显示程序状况。
    • n  以数字来表示USER和WCHAN栏位。
    • p<程序识别码>  指定程序识别码,并列出该程序的状况。
    • r  只列出现行终端机正在执行中的程序。
    • s  采用程序信号的格式显示程序状况。
    • S  列出程序时,包括已中断的子程序信息。
    • t<终端机机标号>  指定终端机编号,并列出属于该终端机的程序的状况。
    • T  显示现行终端机下的所有程序。
    • u  以用户为主的格式来显示程序状况。
    • U<帐号名称>  列出属于该用户的程序的状况。
    • v  采用虚拟内存的格式显示程序状况。
    • w  采用宽阔的格式来显示程序状况。
    • x  显示所有程序,不以终端机来区分。
    • X  采用旧试的Linux i386登陆格式显示程序状况。
    实例
    显示指定用户信息

    gitps hnlinux

    Swatch Linux swatch命令用于系统监控程序。
    swatch可用来监控系统记录文件,并在发现特定的事件时,执行指定的动作。swatch所监控的事件以及对应事件的动作都存放在swatch的配置文件中。预设的配置文件为拥护根目录下的.swatchrc。然而在Red Hat Linux的预设用户根目录下并没有.swatchrc配置文件,您可将/usr/doc/swatch-2.2/config_files/swatchrc.personal文件复制到用户根目录下的.swatchrc,然后修改.swatchrc所要监控的事件及执行的动作。
    语法
    swatch [-A <分隔字符>][-c <设置文件>][-f <记录文件>][-I <分隔字符>][-P <分隔字符>][-r <时间>][-t <记录文件>]
    参数说明:
    • -A<分隔字符>  预设配置文件中,动作的分隔字符,预设为逗号。
    • -c<设置文件>  指定配置文件,而不使用预设的配置文件。
    • -f<记录文件>  检查指定的记录文件,检查完毕后不会继续监控该记录文件。
    • -I<分隔字符>  指定输入记录的分隔字符,预设为换行字符。
    • -P<分隔字符>  指定配置文件中,事件的分隔字符,预设为逗号。
    • -r<时间>  在指定的时间重新启动。
    • -t<记录文件>  检查指定的记录文件,并且会监控加入记录文件中的后继记录。
    实例
    开启系统监视

    swatch

    Tload Linux tload命令用于显示系统负载状况。
    tload指令使用ASCII字符简单地以文字模式显示系统负载状态。假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形。
    语法
    tload [-V][-d <间隔秒数>][-s <刻度大小>][终端机编号]
    参数说明:
    • -d<间隔秒数>  设置tload检测系统负载的间隔时间,单位以秒计算。
    • -s<刻度大小>  设置图表的垂直刻度大小,单位以列计算。
    • -V  显示版本信息。
    实例
    显示系统负载

    tload

    Uname Linux uname(英文全拼:unix name)命令用于显示系统信息。
    uname 可显示电脑以及操作系统的相关信息。
    语法
    uname [-amnrsv][–help][–version]
    参数说明:
    • -a或–all  显示全部的信息。
    • -m或–machine  显示电脑类型。
    • -n或-nodename  显示在网络上的主机名称。
    • -r或–release  显示操作系统的发行编号。
    • -s或–sysname  显示操作系统名称。
    • -v  显示操作系统的版本。
    • --help  显示帮助。
    • --version  显示版本信息。
    实例
    显示系统信息:

    uname -a

    Linux iZbp19byk2t6khuqj437q6Z 4.11.0-14-generic #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    显示计算机类型:

    uname -m

    x86_64
    显示计算机名:

    uname -n

    runoob-linux
    显示操作系统发行编号:

    uname -r

    4.11.0-14-generic
    显示操作系统名称:

    uname -s

    Linux
    显示系统版本与时间:

    uname -v

    #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017

    Userconf Linux userconf命令用于用户帐号设置程序
    userconf实际上为linuxconf的符号连接,提供图形界面的操作方式,供管理员建立与管理各类帐号。若不加任何参数,即进入图形界面。
    语法
    userconf [–addgroup <群组>][–adduser <用户ID><群组><用户名称>][–delgroup <群组>][–deluser <用户ID>][–help]
    参数说明:
    • --addgroup<群组>  新增群组。
    • --adduser<用户ID><群组><用户名称>  新增用户帐号。
    • --delgroup<群组>  删除群组。
    • --deluser<用户ID>  删除用户帐号。
    • --help  显示帮助。
    实例
    新增用户

    userconf --adduser 666 tt lord /bin/bash //新增用户账号

    Userdel Linux userdel命令用于删除用户帐号。
    userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。
    语法
    userdel [-r][用户帐号]
    参数说明:
    • -r  删除用户登入目录以及目录中所有文件。
    实例
    删除用户账号

    userdel hnlinux

    Usermod Linux usermod命令用于修改用户帐号。
    usermod可用来修改用户帐号的各项设定。
    语法
    usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s ][-u ][用户帐号]
    参数说明:
    • -c<备注>  修改用户帐号的备注文字。
    • -d登入目录>  修改用户登入时的目录。
    • -e<有效期限>  修改帐号的有效期限。
    • -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
    • -g<群组>  修改用户所属的群组。
    • -G<群组>  修改用户所属的附加群组。
    • -l<帐号名称>  修改用户帐号名称。
    • -L  锁定用户密码,使密码无效。
    • -s  修改用户登入后所使用的shell。
    • -u  修改用户ID。
    • -U  解除密码锁定。
    实例
    更改登录目录

    usermod -d /home/hnlinux root

    改变用户的uid

    usermod -u 777 root

    Who Linux who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。

    使用权限:所有使用者都可使用。
    语法
    who - [husfV] [user]
    参数说明:
    • -H 或 --heading:显示各栏位的标题信息列;
    • -i 或 -u 或 --idle:显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串;
    • -m:此参数的效果和指定"am i"字符串相同;
    • -q 或–count:只显示登入系统的帐号名称和总人数;
    • -s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;
    • -w 或-T或–mesg或–message或–writable:显示用户的信息状态栏;
    • --help:在线帮助;
    • --version:显示版本信息。
    实例
    显示当前登录系统的用户

    who //显示当前登录系统的用户

    root tty7 2014-05-13 12:12 (:0)
    root pts/0 2014-05-14 17:09 (:0.0)
    root pts/1 2014-05-14 18:51 (192.168.1.17)
    root pts/2 2014-05-14 19:48 (192.168.1.17)
    显示标题栏

    who -H

    NAME LINE TIME COMMENT
    root tty7 2014-05-13 12:12 (:0)
    root pts/0 2014-05-14 17:09 (:0.0)
    root pts/1 2014-05-14 18:51 (192.168.1.17)
    root pts/2 2014-05-14 19:48 (192.168.1.17)
    显示用户登录来源

    who -l -H

    NAME LINE TIME IDLE PID COMMENT
    LOGIN tty4 2014-05-13 12:11 852 id=4
    LOGIN tty5 2014-05-13 12:11 855 id=5
    LOGIN tty2 2014-05-13 12:11 862 id=2
    LOGIN tty3 2014-05-13 12:11 864 id=3
    LOGIN tty6 2014-05-13 12:11 867 id=6
    LOGIN tty1 2014-05-13 12:11 1021 id=1
    显示终端属性

    who -T -H

    NAME LINE TIME COMMENT
    root + tty7 2014-05-13 12:12 (:0)
    root + pts/0 2014-05-14 17:09 (:0.0)
    root - pts/1 2014-05-14 18:51 (192.168.1.17)
    root - pts/2 2014-05-14 19:48 (192.168.1.17)
    只显示当前用户

    who -m -H

    NAME LINE TIME COMMENT
    root pts/1 2014-05-14 18:51 (192.168.1.17)
    精简模式显示

    who -q

    root root root root

    users=4

    Whoami Linux whoami命令用于显示自身用户名称
    显示自身的用户名称,本指令相当于执行"id -un"指令。
    语法
    whoami [–help][–version]
    参数说明:
    • --help  在线帮助。
    • --version  显示版本信息。
    实例
    显示用户名

    whoami

    root

    whois Linux whois命令用于查找并显示用户信息。
    whois指令会去查找并显示指定帐号的用户相关信息,因为它是到Network Solutions的WHOIS数据库去查找,所以该帐号名称必须在上面注册方能寻获,且名称没有大小写的差别。
    语法
    whois [帐号名称]
    实例
    显示指定用户信息

    whois root

    //查找root用户信息
    查询域名描述信息

    whois .Lx138.COm

    Whois Server Version 2.0

    Domain names in the .com and .net domains can now be registered
    with many different competing registrars. Go to http://www.internic.net
    for detailed information.

    …省略部分内容
    查询域名信息

    whois Lx138.COm

    The Registry database contains ONLY .COM, .NET, .EDU domains and
    Registrars.
    Domain Name … Lx138.COm
    Name Server … dns15.hichina.com
    dns16.hichina.com
    Registrant ID … hc937242545-cn

    …省略部分内容
    查询域名信息省略法律声明

    whois -H Lx138.COm

    …省略内容
    指定端口查询

    whois -p 80 Lx138.COm

    …省略内容

    Newgrp Linux newgrp 命令用于登入另一个群组。
    newgrp 指令类似 login 指令,当它是以相同的帐号,另一个群组名称,再次登入系统。欲使用 newgrp 指令切换群组,您必须是该群组的用户,否则将无法登入指定的群组。单一用户要同时隶属多个群组,需利用交替用户的设置。若不指定群组名称,则 newgrp 指令会登入该用户名称的预设群组。
    语法
    newgrp [群组名称]
    实例
    改变群组

    newgrp root

    Su Linux su(英文全拼:swith user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码
    使用权限:所有使用者。
    语法
    su [-fmp] [-c command] [-s shell] [–help] [–version] [-] [USER [ARG]]
    参数说明:
    • -f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
    • -m -p 或 --preserve-environment 执行 su 时不改变环境变数
    • -c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
    • -s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
    • --help 显示说明文件
    • --version 显示版本资讯
    • - -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
    • USER 欲变更的使用者帐号
    • ARG 传入新的 shell 参数
    实例
    变更帐号为 root 并在执行 ls 指令后退出变回原使用者
    su -c ls root
    变更帐号为 root 并传入 -f 参数给新执行的 shell
    su root -f
    变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir)
    su - clsung
    切换用户
    hnlinux@runoob.com:~$ whoami //显示当前用户
    hnlinux
    hnlinux@runoob.com:~$ pwd //显示当前目录
    /home/hnlinux
    hnlinux@runoob.com:~$ su root //切换到root用户
    密码:
    root@runoob.com:/home/hnlinux# whoami
    root
    root@runoob.com:/home/hnlinux# pwd
    /home/hnlinux
    切换用户,改变环境变量
    hnlinux@runoob.com:~$ whoami //显示当前用户
    hnlinux
    hnlinux@runoob.com:~$ pwd //显示当前目录
    /home/hnlinux
    hnlinux@runoob.com:~$ su - root //切换到root用户
    密码:
    root@runoob.com:/home/hnlinux# whoami
    root
    root@runoob.com:/home/hnlinux# pwd //显示当前目录
    /root

    Skill Linux skill命令送个讯号给正在执行的程序,预设的讯息为 TERM (中断),较常使用的讯息为 HUP、INT、KILL、STOP、CONT 和 0。
    讯息有三种写法:分别为 -9、-SIGKILL、-KILL,可以使用 -l 或 -L 已列出可使用的讯息。
    使用权限:所有使用者。
    其他相关的命令:kill
    语法
    skill [signal to send] [options] 选择程序的规则
    一般参数:
    • -f 快速模式/尚未完成
    • -i 互动模式/ 每个动作将要被确认
    • -v 详细输出/ 列出所选择程序的资讯
    • -w 智能警告讯息/ 尚未完成
    • -n 没有动作/ 显示程序代号
    参数:选择程序的规则可以是:终端机代号、使用者名称、程序代号、命令名称。
    • -t 终端机代号 ( tty 或 pty )
    • -u 使用者名称
    • -p 程序代号 ( pid )
    • -c 命令名称可使用的讯号
    以下列出已知的讯号名称、讯号代号、功能。
    名称(代号) 功能/描述
    ALRM 14 离开
    HUP 1 离开
    INT 2 离开
    KILL 9 离开/强迫关闭
    PIPE 13 离开
    POLL 离开
    PROF 离开
    TERM 15 离开
    USR1 离开
    USR2 离开
    VTALRM 离开
    STKFLT 离开/只适用于i386、m68k、arm 和 ppc 硬件
    UNUSED 离开/只适用于i386、m68k、arm 和 ppc 硬件
    TSTP 停止/产生与内容相关的行为
    TTIN 停止/产生与内容相关的行为
    TTOU 停止/产生与内容相关的行为
    STOP 停止/强迫关闭
    CONT 重新启动/如果在停止状态则重新启动,否则忽略
    PWR 忽略/在某些系统中会离开
    WINCH 忽略
    CHLD 忽略
    ABRT 6 核心
    FPE 8 核心
    ILL 4 核心
    QUIT 3 核心
    SEGV 11 核心
    TRAP 5 核心
    SYS 核心/或许尚未实作
    EMT 核心/或许尚未实作
    BUS 核心/核心失败
    XCPU 核心/核心失败
    XFSZ 核心/核心失败
    实例
    停止所有在 PTY 装置上的程序
    skill -KILL -v pts/*
    停止三个使用者 user1、user2、user3
    skill -STOP user1 user2 user3

    w Linux w命令用于显示目前登入系统的用户信息。
    执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序。
    单独执行 w 指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
    语法
    w [-fhlsuV][用户名称]
    参数说明:
    • -f  开启或关闭显示用户从何处登入系统。
    • -h  不显示各栏位的标题信息列。
    • -l  使用详细格式列表,此为预设值。
    • -s  使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
    • -u  忽略执行程序的名称,以及该程序耗费CPU时间的信息。
    • -V  显示版本信息。
    实例
    显示当前用户
    w //显示当前用户,不显示登录位置
    19:50:14 up 9:27, 4 users, load average: 0.31, 0.26, 0.18
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root tty7 :0 Thu12 31:39m 10:10 0.60s gnome-session
    root pts/0 :0.0 17:09 2:18m 15.26s 0.15s bash
    root pts/1 192.168.1.17 18:51 1.00s 1.24s 0.14s -bash
    root pts/2 192.168.1.17 19:48 60.00s 0.05s 0.05s -bash
    不显示登录位置
    w -f
    19:53:59 up 9:31, 4 users, load average: 0.05, 0.16, 0.15
    USER TTY LOGIN@ IDLE JCPU PCPU WHAT
    root tty7 Thu12 31:43m 10:10 0.60s gnome-session
    root pts/0 17:09 2:21m 15.26s 0.15s bash
    root pts/1 18:51 0.00s 1.04s 0.14s -bash
    root pts/2 19:48 4:45 0.05s 0.05s -bash
    以精简模式显示
    w -s
    19:54:37 up 9:31, 4 users, load average: 0.24, 0.19, 0.16
    USER TTY FROM IDLE WHAT
    root tty7 :0 31:43m gnome-session
    root pts/0 :0.0 2:22m bash
    root pts/1 192.168.1.17 0.00s -bash
    root pts/2 192.168.1.17 5:23 -bash
    不显示标题
    w -h
    root tty7 :0 Thu12 31:44m 10:10 0.60s gnome-session
    root pts/0 :0.0 17:09 2:23m 15.26s 0.15s bash
    root pts/1 192.168.1.17 18:51 0.00s 1.05s 0.14s -bash
    root pts/2 192.168.1.17 19:48 5:54 0.05s 0.05s -bash

    id Linux id命令用于显示用户的ID,以及所属群组的ID。
    id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。
    语法
    id [-gGnru][–help][–version][用户名称]
    参数说明:
    • -g或–group  显示用户所属群组的ID。
    • -G或–groups  显示用户所属附加群组的ID。
    • -n或–name  显示用户,所属群组或附加群组的名称。
    • -r或–real  显示实际ID。
    • -u或–user  显示用户ID。
    • -help  显示帮助。
    • -version  显示版本信息。
    实例
    显示当前用户信息

    id //显示当前用户ID

    uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t
    显示用户群组的ID

    id -g

    0
    显示所有群组的ID

    id -g

    0 1 2 3 4 5 6 10
    显示指定用户信息

    id hnlinux

    Groupadd groupadd 命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
    相关文件:
    • /etc/group 组账户信息。
    • /etc/gshadow 安全组账户信息。
    • /etc/login.defs Shadow密码套件配置。
    语法
    groupadd 命令 语法格式如下:
    groupadd [-g gid [-o]] [-r] [-f] group
    参数说明:
    • -g:指定新建工作组的 id;
    • -r:创建系统工作组,系统工作组的组ID小于 500;
    • -K:覆盖配置文件 “/ect/login.defs”;
    • -o:允许添加组 ID 号不唯一的工作组。
    • -f,–force: 如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)。
    实例
    创建一个新的组,并添加组 ID。
    #groupadd -g 344 runoob
    此时在 /etc/group 文件中产生一个组 ID(GID)是 344 的项目。

    Free 用于显示内存状态
    free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
    语法
    free [-bkmotV][-s <间隔秒数>]
    参数说明:
    • -b  以Byte为单位显示内存使用情况。
    • -k  以KB为单位显示内存使用情况。
    • -m  以MB为单位显示内存使用情况。
    • -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:
    • B = bytes
    • K = kilos
    • M = megas
    • G = gigas
    T = teras
    • -o  不显示缓冲区调节列。
    • -s<间隔秒数>  持续观察内存使用状况。
    • -t  显示内存总和列。
    • -V  显示版本信息。
    实例
    显示内存使用情况

    free //显示内存使用信息

    total used free shared buffers cached
    Mem: 254772 184568 70204 0 5692 89892
    -/+ buffers/cache: 88984 165788
    Swap: 524280 65116 459164
    以总和的形式显示内存的使用信息

    free -t //以总和的形式查询内存的使用信息

    total used free shared buffers cached
    Mem: 254772 184868 69904 0 5936 89908
    -/+ buffers/cache: 89024 165748
    Swap: 524280 65116 459164
    Total: 779052 249984 529068
    周期性的查询内存使用信息

    free -s 10 //每10s 执行一次命令

    total used free shared buffers cached
    Mem: 254772 187628 67144 0 6140 89964
    -/+ buffers/cache: 91524 163248
    Swap: 524280 65116 459164

    total used free shared buffers cached
    Mem: 254772 187748 67024 0 6164 89940
    -/+ buffers/cache: 91644 163128
    Swap: 524280 65116 459164

    系统设置
    Clear Linux clear命令用于清除屏幕。
    语法
    clear
    实例
    清屏
    #clear

    Crontab Linux crontab是用来定期执行程序的命令。
    当安装完成操作系统之后,默认便会启动此任务调度命令。
    crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
    注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
    而 linux 任务调度的工作主要分为以下两类:
    • 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
    • 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
    语法
    crontab [ -u user ] file

    crontab [ -u user ] { -l | -r | -e }
    说明:
    crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
    -u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
    参数说明:
    • -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
    • -r : 删除目前的时程表
    • -l : 列出目前的时程表
    时间格式如下:
    f1 f2 f3 f4 f5 program
    • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
    • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
    • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
    • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
    • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推



    | | | | |
    | | | | ±---- 星期中星期几 (0 - 7) (星期天 为0)
    | | | ±--------- 月份 (1 - 12)
    | | ±-------------- 一个月中的第几天 (1 - 31)
    | ±------------------- 小时 (0 - 23)
    ±------------------------ 分钟 (0 - 59)
    使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间。
    实例
    每一分钟执行一次 /bin/ls:

            • /bin/ls
              在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:
              0 6-12/3 * 12 * /usr/bin/backup
              周一到周五每天下午 5:00 寄一封信给 alex@domain.name:
              0 17 * * 1-5 mail -s “hi” alex@domain.name < /tmp/maildata
              每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “haha”:
              20 0-23/2 * * * echo “haha”
              下面再看看几个具体的例子:
              0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache

    50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务

    50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务

    0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘

    1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件

    00 03 * * 1-5 find /home ".xxx" -mtime +4 -exec rm {} ; 每周一至周五3点钟,在目录/home中,查找文件名为.xxx的文件,并删除4天前的文件。

    30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令
    注意:当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:
    20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh > /dev/null 2>&1
    脚本无法执行问题
    如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。
    解决方法:
    • 1、所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。
    • 2、在 shell 脚本开头使用以下代码:
    • #!/bin/sh

    • . /etc/profile
    . ~/.bash_profile
    3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:
    20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh

    Depmod Linux depmod命令用于分析可载入模块的相依性。
    depmod(depend module)可检测模块的相依性,供modprobe在安装模块时使用。
    语法
    depmod [-adeisvV][-m <文件>][–help][模块名称]
    参数说明:
    • -a或–all  分析所有可用的模块。
    • -d或debug  执行排错模式。
    • -e  输出无法参照的符号。
    • -i  不检查符号表的版本。
    • -m<文件>或system-map<文件>  使用指定的符号表文件。
    • -s或–system-log  在系统记录中记录错误。
    • -v或–verbose  执行时显示详细的信息。
    • -V或–version  显示版本信息。
    • --help  显示帮助。
    实例
    显示可用模块

    depmod -a //显示可用模块

    Export Linux export 命令用于设置或显示环境变量。
    在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
    语法
    export [-fnp][变量名称]=[变量设置值]
    参数说明:
    • -f  代表[变量名称]中为函数名称。
    • -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
    • -p  列出所有的shell赋予程序的环境变量。
    实例
    列出当前所有的环境变量

    export -p //列出当前的环境变量值

    declare -x HOME=“/root“
    declare -x LANG=“zh_CN.UTF-8“
    declare -x LANGUAGE=“zh_CN:zh“
    declare -x LESSCLOSE=“/usr/bin/lesspipe %s %s“
    declare -x LESSOPEN=“| /usr/bin/lesspipe %s“
    declare -x LOGNAME=“root“
    declare -x LS_COLORS=““
    declare -x MAIL=“/var/mail/root“
    declare -x OLDPWD
    declare -x PATH=“/opt/toolchains/arm920t-eabi/bin:/opt/toolchains/arm920t-eabi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games“
    declare -x PWD=“/root“
    declare -x SHELL=“/bin/bash“
    declare -x SHLVL=“1“
    declare -x SPEECHD_PORT=“6560“
    declare -x SSH_CLIENT=“192.168.1.65 1674 22“
    declare -x SSH_CONNECTION=“192.168.1.65 1674 192.168.1.3 22“
    declare -x SSH_TTY=“/dev/pts/2“
    declare -x TERM=“XTERM“
    declare -x USER=“root“
    declare -x XDG_SESSION_COOKIE=“93b5d3d03e032c0cf892a4474bebda9f-1273864738.954257-340206484“
    定义环境变量

    export MYENV //定义环境变量

    export -p //列出当前的环境变量

    declare -x HOME=“/root“
    declare -x LANG=“zh_CN.UTF-8“
    declare -x LANGUAGE=“zh_CN:zh“
    declare -x LESSCLOSE=“/usr/bin/lesspipe %s %s“
    declare -x LESSOPEN=“| /usr/bin/lesspipe %s“
    declare -x LOGNAME=“root“
    declare -x LS_COLORS=““
    declare -x MAIL=“/var/mail/root“
    declare -x MYENV
    declare -x OLDPWD
    declare -x PATH=“/opt/toolchains/arm920t-eabi/bin:/opt/toolchains/arm920t-eabi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games“
    declare -x PWD=“/root“
    declare -x SHELL=“/bin/bash“
    declare -x SHLVL=“1“
    declare -x SPEECHD_PORT=“6560“
    declare -x SSH_CLIENT=“192.168.1.65 1674 22“
    declare -x SSH_CONNECTION=“192.168.1.65 1674 192.168.1.3 22“
    declare -x SSH_TTY=“/dev/pts/2“
    declare -x TERM=“XTERM“
    declare -x USER=“root“
    declare -x XDG_SESSION_COOKIE=“93b5d3d03e032c0cf892a4474bebda9f-1273864738.954257-340206484“
    定义环境变量赋值

    export MYENV=7 //定义环境变量并赋值

    export -p

    declare -x HOME=“/root“
    declare -x LANG=“zh_CN.UTF-8“
    declare -x LANGUAGE=“zh_CN:zh“
    declare -x LESSCLOSE=“/usr/bin/lesspipe %s %s“
    declare -x LESSOPEN=“| /usr/bin/lesspipe %s“
    declare -x LOGNAME=“root“
    declare -x LS_COLORS=““
    declare -x MAIL=“/var/mail/root“
    declare -x MYENV=“7“
    declare -x OLDPWD
    declare -x PATH=“/opt/toolchains/arm920t-eabi/bin:/opt/toolchains/arm920t-eabi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games“
    declare -x PWD=“/root“
    declare -x SHELL=“/bin/bash“
    declare -x SHLVL=“1“
    declare -x SPEECHD_PORT=“6560“
    declare -x SSH_CLIENT=“192.168.1.65 1674 22“
    declare -x SSH_CONNECTION=“192.168.1.65 1674 192.168.1.3 22“
    declare -x SSH_TTY=“/dev/pts/2“
    declare -x TERM=“XTERM“
    declare -x USER=“root“
    declare -x XDG_SESSION_COOKIE=“93b5d3d03e032c0cf892a4474bebda9f-1273864738.954257-340206484“

    rpm Linux rpm 命令用于管理套件。

    rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
    语法
    rpm [-acdhilqRsv][-b<完成阶段><套间档>+][-e<套件挡>][-f<文件>+][-i<套件档>][-p<套件档>+][-U<套件档>][-vv][–addsign<套件档>+][–allfiles][–allmatches][–badreloc][–buildroot<根目录>][–changelog][–checksig<套件档>+][–clean][–dbpath<数据库目录>][–dump][–excludedocs][–excludepath<排除目录>][–force][–ftpproxy<主机名称或IP地址>][–ftpport<通信端口>][–help][–httpproxy<主机名称或IP地址>][–httpport<通信端口>][–ignorearch][–ignoreos][–ignoresize][–includedocs][–initdb][justdb][–nobulid][–nodeps][–nofiles][–nogpg][–nomd5][–nopgp][–noorder][–noscripts][–notriggers][–oldpackage][–percent][–pipe<执行指令>][–prefix<目的目录>][–provides][–queryformat<档头格式>][–querytags][–rcfile<配置档>][–rebulid<套件档>][–rebuliddb][–recompile<套件档>][–relocate<原目录>=<新目录>][–replacefiles][–replacepkgs][–requires][–resign<套件档>+][–rmsource][–rmsource<文件>][–root<根目录>][–scripts][–setperms][–setugids][–short-circuit][–sign][–target=<安装平台>+][–test][–timecheck<检查秒数>][–triggeredby<套件档>][–triggers][–verify][–version][–whatprovides<功能特性>][–whatrequires<功能特性>]
    参数说明:
    • -a  查询所有套件。
    • -b<完成阶段><套件档>+或-t <完成阶段><套件档>+  设置包装套件的完成阶段,并指定套件档的文件名称。
    • -c  只列出组态配置文件,本参数需配合"-l"参数使用。
    • -d  只列出文本文件,本参数需配合"-l"参数使用。
    • -e<套件档>或–erase<套件档>  删除指定的套件。
    • -f<文件>+  查询拥有指定文件的套件。
    • -h或–hash  套件安装时列出标记。
    • -i  显示套件的相关信息。
    • -i<套件档>或–install<套件档>  安装指定的套件档。
    • -l  显示套件的文件列表。
    • -p<套件档>+  查询指定的RPM套件档。
    • -q  使用询问模式,当遇到任何问题时,rpm指令会先询问用户。
    • -R  显示套件的关联性信息。
    • -s  显示文件状态,本参数需配合"-l"参数使用。
    • -U<套件档>或–upgrade<套件档> 升级指定的套件档。
    • -v  显示指令执行过程。
    • -vv  详细显示指令执行过程,便于排错。
    • -addsign<套件档>+  在指定的套件里加上新的签名认证。
    • --allfiles  安装所有文件。
    • --allmatches  删除符合指定的套件所包含的文件。
    • --badreloc  发生错误时,重新配置文件。
    • --buildroot<根目录>  设置产生套件时,欲当作根目录的目录。
    • --changelog  显示套件的更改记录。
    • --checksig<套件档>+  检验该套件的签名认证。
    • --clean  完成套件的包装后,删除包装过程中所建立的目录。
    • --dbpath<数据库目录>  设置欲存放RPM数据库的目录。
    • --dump  显示每个文件的验证信息。本参数需配合"-l"参数使用。
    • --excludedocs  安装套件时,不要安装文件。
    • --excludepath<排除目录>  忽略在指定目录里的所有文件。
    • --force  强行置换套件或文件。
    • --ftpproxy<主机名称或IP地址>  指定FTP代理服务器。
    • --ftpport<通信端口>  设置FTP服务器或代理服务器使用的通信端口。
    • --help  在线帮助。
    • --httpproxy<主机名称或IP地址>  指定HTTP代理服务器。
    • --httpport<通信端口>  设置HTTP服务器或代理服务器使用的通信端口。
    • --ignorearch  不验证套件档的结构正确性。
    • --ignoreos  不验证套件档的结构正确性。
    • --ignoresize  安装前不检查磁盘空间是否足够。
    • --includedocs  安装套件时,一并安装文件。
    • --initdb  确认有正确的数据库可以使用。
    • --justdb  更新数据库,当不变动任何文件。
    • --nobulid  不执行任何完成阶段。
    • --nodeps  不验证套件档的相互关联性。
    • --nofiles  不验证文件的属性。
    • --nogpg  略过所有GPG的签名认证。
    • --nomd5  不使用MD5编码演算确认文件的大小与正确性。
    • --nopgp  略过所有PGP的签名认证。
    • --noorder  不重新编排套件的安装顺序,以便满足其彼此间的关联性。
    • --noscripts  不执行任何安装Script文件。
    • --notriggers  不执行该套件包装内的任何Script文件。
    • --oldpackage  升级成旧版本的套件。
    • --percent  安装套件时显示完成度百分比。
    • --pipe<执行指令>  建立管道,把输出结果转为该执行指令的输入数据。
    • --prefix<目的目录>  若重新配置文件,就把文件放到指定的目录下。
    • --provides  查询该套件所提供的兼容度。
    • --queryformat<档头格式>  设置档头的表示方式。
    • --querytags  列出可用于档头格式的标签。
    • --rcfile<配置文件>  使用指定的配置文件。
    • --rebulid<套件档>  安装原始代码套件,重新产生二进制文件的套件。
    • --rebuliddb  以现有的数据库为主,重建一份数据库。
    • --recompile<套件档>  此参数的效果和指定"–rebulid"参数类似,当不产生套件档。
    • --relocate<原目录>=<新目录>  把本来会放到原目录下的文件改放到新目录。
    • --replacefiles  强行置换文件。
    • --replacepkgs  强行置换套件。
    • --requires  查询该套件所需要的兼容度。
    • --resing<套件档>+  删除现有认证,重新产生签名认证。
    • --rmsource  完成套件的包装后,删除原始代码。
    • --rmsource<文件>  删除原始代码和指定的文件。
    • --root<根目录>  设置欲当作根目录的目录。
    • --scripts  列出安装套件的Script的变量。
    • --setperms  设置文件的权限。
    • --setugids  设置文件的拥有者和所属群组。
    • --short-circuit  直接略过指定完成阶段的步骤。
    • --sign  产生PGP或GPG的签名认证。
    • --target=<安装平台>+  设置产生的套件的安装平台。
    • --test  仅作测试,并不真的安装套件。
    • --timecheck<检查秒数>  设置检查时间的计时秒数。
    • --triggeredby<套件档>  查询该套件的包装者。
    • --triggers  展示套件档内的包装Script。
    • --verify  此参数的效果和指定"-q"参数相同。
    • --version  显示版本信息。
    • --whatprovides<功能特性>  查询该套件对指定的功能特性所提供的兼容度。
    • --whatrequires<功能特性>  查询该套件对指定的功能特性所需要的兼容度。
    实例
    安装软件

    rpm -hvi dejagnu-1.4.2-10.noarch.rpm

    警告:dejagnu-1.4.2-10.noarch.rpm: V3 DSA 签名:NOKEY, key ID db42a60e
    准备…
    ########################################### [100%]
    显示软件安装信息

    rpm -qi dejagnu-1.4.2-10.noarch.rpm

    【第1次更新 教程、类似命令关联】

    Insmod Linux insmod(英文全拼:install module)命令用于载入模块。
    Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。
    语法
    insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称 = 符号值]
    参数说明:
    • -f  不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。
    • -k  将模块设置为自动卸除。
    • -m  输出模块的载入信息。
    • -o<模块名称>  指定模块的名称,可使用模块文件的文件名。
    • -p  测试模块是否能正确地载入kernel。
    • -s  将所有信息记录在系统记录文件中。
    • -v  执行时显示详细的信息。
    • -x  不要汇出模块的外部符号。
    • -X  汇出模块所有的外部符号,此为预设置。
    实例
    加载模块

    insmod led.o

    //向内核加载模块

    Set Linux set命令用于设置shell。
    set指令能设置所使用shell的执行方式,可依照不同的需求来做设置。
    语法
    set [±abCdefhHklmnpPtuvx]
    参数说明:
    • -a  标示已修改的变量,以供输出至环境变量。
    • -b  使被中止的后台程序立刻回报执行状态。
    • -C  转向所产生的文件无法覆盖已存在的文件。
    • -d  Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
    • -e  若指令传回值不等于0,则立即退出shell。
    • -f   取消使用通配符。
    • -h  自动记录函数的所在位置。
    • -H Shell  可利用"!"加<指令编号>的方式来执行history中记录的指令。
    • -k  指令所给的参数都会被视为此指令的环境变量。
    • -l  记录for循环的变量名称。
    • -m  使用监视模式。
    • -n  只读取指令,而不实际执行。
    • -p  启动优先顺序模式。
    • -P  启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
    • -t  执行完随后的指令,即退出shell。
    • -u  当执行时使用到未定义过的变量,则显示错误信息。
    • -v  显示shell所读取的输入值。
    • -x  执行指令后,会先显示该指令及所下的参数。
    • +<参数>  取消某个set曾启动的参数。
    实例
    显示环境变量

    set

    BASH=/bin/bash
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_LINENO=()
    BASH_SOURCE=()
    BASH_VERSINFO=([0]=“3” [1]=“00” [2]=“15” [3]=“1” [4]=“release” [5]=“i386-redhat-linux-gnu”)
    BASH_VERSION=‘3.00.15(1)-release’
    COLORS=/etc/DIR_COLORS.xterm
    COLUMNS=99
    DIRSTACK=()
    EUID=0
    GROUPS=()
    G_BROKEN_FILENAMES=1
    HISTFILE=/root/.bash_history
    HISTFILESIZE=1000
    HISTSIZE=1000
    HOME=/root
    HOSTNAME=hnlinux
    HOSTTYPE=i386
    IFS=$’ ’
    INPUTRC=/etc/inputrc
    KDEDIR=/usr
    LANG=zh_CN.GB2312
    LESSOPEN=’|/usr/bin/lesspipe.sh %s’
    LINES=34
    L
    MAIL=/var/spool/mail/root
    MAILCHECK=60
    OLDPWD=/home/uptech
    OPTERR=1
    OPTIND=1
    OSTYPE=linux-gnu
    PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/crosstools/gcc-3.4.6-glibc-2.3.6/bin
    PIPESTATUS=([0]=“2”)
    PPID=26005
    PROMPT_COMMAND='echo -ne "

    Passwd Linux passwd命令用来更改使用者的密码
    语法
    passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
    必要参数:
    • -d 删除密码
    • -f 强迫用户下次登录时必须修改口令
    • -w 口令要到期提前警告的天数
    • -k 更新只能发送在过期之后
    • -l 停止账号使用
    • -S 显示密码信息
    • -u 启用已被停止的账户
    • -x 指定口令最长存活期
    • -g 修改群组密码
    • 指定口令最短存活期
    • -i 口令过期后多少天停用账户
    选择参数:
    • --help 显示帮助信息
    • --version 显示版本信息
    实例
    修改用户密码

    passwd runoob //设置runoob用户的密码

    Enter new UNIX password: //输入新密码,输入的密码无回显
    Retype new UNIX password: //确认密码
    passwd: password updated successfully

    显示账号密码信息

    passwd -S runoob

    runoob P 05/13/2010 0 99999 7 -1
    删除用户密码

    passwd -d lx138

    passwd: password expiry information changed.

    rdate Linux rdate命令用于显示其他主机的日期与时间。
    执行rdate指令,向其他主机询问系统时间并显示出来。
    语法
    rdate [-ps][主机名称或IP地址…]
    参数:
    • -p  显示远端主机的日期与时间。
    • -s  把从远端主机收到的日期和时间,回存到本地主机的系统时间。
    • -u 传输协议使用UDP协议
    • -l 使用syslog显示错误信息
    • -t<时间> 设置超时时间

    Rmmod Linux rmmod(英文全拼:remove module)命令用于删除模块。
    执行 rmmod 指令,可删除不需要的模块。Linux 操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。
    语法
    rmmod [-as][模块名称…]
    参数:
    • -a  删除所有目前不需要的模块。
    • -s  把信息输出至syslog常驻服务,而非终端机界面。
    实例
    显示已安装的模块

    lsmod

    Module Size Used by
    cramfs 39042 1
    nfsd 238935 11
    lockd 64849 1 nfsd
    nfs_acl 2245 1 nfsd
    auth_rpcgss 33735 1 nfsd
    sunrpc 193181 10 nfsd,lockd,nfs_acl,auth_rpcgss
    exportfs 3437 1 nfsd
    xt_TCPMSS 2931 0
    xt_tcpmss 1197 0
    xt_tcpudp 2011 0
    iptable_mangle 2771 0
    ip_tables 9991 1 iptable_mangle
    x_tables 14299 4

    ……省略部分结果
    pppoe 8943 0
    pppox 2074 1 pppoe
    binfmt_misc 6587 1
    snd_ens1371 18814 0
    gameport 9089 1 snd_ens1371
    snd_ac97_codec 100646 1 snd_ens1371
    ac97_bus 1002 1 snd_ac97_codec
    snd_pcm_oss 35308 0
    卸载模块

    rmmod -v pppoe //卸载模块pppoe

    Checking ppoe for persistent data
    安装模块

    insmod -v pppoe >1.log //安装模块

    ~# tail -b 30 1.log //显示文件信息

    Time Linux time命令的用途,在于量测特定指令执行时所需消耗的时间及系统资源等资讯。
    例如 CPU 时间、记忆体、输入输出等等。需要特别注意的是,部分资讯在 Linux 上显示不出来。这是因为在 Linux 上部分资源的分配函式与 time 指令所预设的方式并不相同,以致于 time 指令无法取得这些资料。
    语法
    time [options] COMMAND [arguments]
    参数:
    • -o 或 --output=FILE:设定结果输出档。这个选项会将 time 的输出写入 所指定的档案中。如果档案已经存在,系统将覆写其内容。
    • -a 或 --append:配合 -o 使用,会将结果写到档案的末端,而不会覆盖掉原来的内容。
    • -f FORMAT 或 --format=FORMAT:以 FORMAT 字串设定显示方式。当这个选项没有被设定的时候,会用系统预设的格式。不过你可以用环境变数 time 来设定这个格式,如此一来就不必每次登入系统都要设定一次。
    time 指令可以显示的资源有四大项,分别是:
    • Time resources
    • Memory resources
    • IO resources
    • Command info
    详细的内容如下:
    1、Time Resources
    E 执行指令所花费的时间,格式是:[hour]:minute:second。请注意这个数字并不代表实际的 CPU 时间。
    e 执行指令所花费的时间,单位是秒。请注意这个数字并不代表实际的 CPU 时间。
    S 指令执行时在核心模式(kernel mode)所花费的时间,单位是秒。
    U 指令执行时在使用者模式(user mode)所花费的时间,单位是秒。
    P 执行指令时 CPU 的占用比例。其实这个数字就是核心模式加上使用者模式的 CPU 时间除以总时间。
    2、Memory Resources
    M 执行时所占用的实体记忆体的最大值。单位是 KB
    t 执行时所占用的实体记忆体的平均值,单位是 KB
    K 执行程序所占用的记忆体总量(stack+data+text)的平均大小,单位是 KB
    D 执行程序的自有资料区(unshared data area)的平均大小,单位是 KB
    p 执行程序的自有堆叠(unshared stack)的平均大小,单位是 KB
    X 执行程序间共享内容(shared text)的平均值,单位是 KB
    Z 系统记忆体页的大小,单位是 byte。对同一个系统来说这是个常数
    3、IO Resources
    F 此程序的主要记忆体页错误发生次数。所谓的主要记忆体页错误是指某一记忆体页已经置换到置换档(swap file)中,而且已经分配给其他程序。此时该页的内容必须从置换档里再读出来。
    R 此程序的次要记忆体页错误发生次数。所谓的次要记忆体页错误是指某一记忆体页虽然已经置换到置换档中,但尚未分配给其他程序。此时该页的内容并未被破坏,不必从置换档里读出来
    W 此程序被交换到置换档的次数
    c 此程序被强迫中断(像是分配到的 CPU 时间耗尽)的次数
    w 此程序自愿中断(像是在等待某一个 I/O 执行完毕,像是磁碟读取等等)的次数
    I 此程序所输入的档案数
    O 此程序所输出的档案数
    r 此程序所收到的 Socket Message
    s 此程序所送出的 Socket Message
    k 此程序所收到的信号 ( Signal )数量
    4、Command Info
    C 执行时的参数以及指令名称
    x 指令的结束代码 ( Exit Status )
    -p or --portability:这个选项会自动把显示格式设定成为:
    real %e user %Usys %S:这么做的目的是为了与 POSIX 规格相容。
    -v or --verbose:这个选项会把所有程序中用到的资源通通列出来,不但如一般英文语句,还有说明。对不想花时间去熟习格式设定或是刚刚开始接触这个指令的人相当有用。
    实例

    1. time date

    2. Sun Mar 26 22:45:34 GMT-8 2006
    3. real 0m0.136s
    4. user 0m0.010s
    5. sys 0m0.070s

    在以上实例中,执行命令"time date"(见第1行)。
    系统先执行命令"date",第2行为命令"date"的执行结果。
    第3-6行为执行命令"date"的时间统计结果,其中第4行"real"为实际时间,第5行"user"为用户CPU时间,第6行"sys"为系统CPU时间。
    以上三种时间的显示格式均为MMmNN[.FFF]s。
    利用下面的指令
    time -v ps -aux
    我们可以获得执行 ps -aux 的结果和所花费的系统资源。如下面所列的资料:
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.4 1096 472 ? S Apr19 0:04 init
    root 2 0.0 0.0 0 0 ? SW Apr19 0:00 [kflushd]
    root 3 0.0 0.0 0 0 ? SW Apr19 0:00 [kpiod]

    root 24269 0.0 1.0 2692 996 pts/3 R 12:16 0:00 ps -aux
    Command being timed: “ps -aux”
    User time (seconds): 0.05
    System time (seconds): 0.06
    Percent of CPU this job got: 68%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.16
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 0
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 238
    Minor (reclaiming a frame) page faults: 46
    Voluntary context switches: 0
    Involuntary context switches: 0
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

    Setup Linux setup命令设置公用程序,是一个启动图形设置系统的命令
    setup 命令:用来配置X,打印设置,时区设置,系统服务,网络配置,配置,防火墙配置,验证配置,鼠标配置。
    语法
    setup
    setup是一个设置公用程序,提供图形界面的操作方式。在setup中可设置7类的选项:
    • 1.登陆认证方式
    • 2.键盘组态设置
    • 3.鼠标组态设置
    • 4.开机时所要启动的系统服务
    • 5.声卡组态设置
    • 6.时区设置
    • 7.X Windows组态设置

    Gpasswd Linux gpasswd 是 Linux 下工作组文件 /etc/group 和 /etc/gshadow 管理工具,用于将一个用户添加到组或者从组中删除。
    语法
    gpasswd [可选项] 组名
    可选项参数:
    • -a:添加用户到组;
    • -d:从组删除用户;
    • -A:指定管理员;
    • -M:指定组成员和-A的用途差不多;
    • -r:删除密码;
    • -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
    实例
    如系统有个 peter 账户,该账户本身不是 groupname 群组的成员,使用 newgrp 需要输入密码即可。
    gpasswd groupname
    让使用者暂时加入成为该组成员,之后 peter 建立的文件 group 也会是 groupname。所以该方式可以暂时让 peter 建立文件时使用其他的组,而不是 peter 本身所在的组。
    所以使用 gpasswd groupname 设定密码,就是让知道该群组密码的人可以暂时切换具备 groupname 群组功能的。
    gpasswd -A peter users
    这样 peter 就是 users 群组的管理员,就可以执行下面的操作:
    gpasswd -a mary users
    gpasswd -a allen users
    注意:添加用户到某一个组 可以使用 usermod -G group_name user_name 这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉。
    所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用 gpasswd 这个命令来添加操作用户:
    gpasswd -a user_name group_name

    备份压缩
    Ar Linux ar命令用于建立或修改备存文件,或是从备存文件中抽取文件
    ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限。
    语法
    ar[-dmpqrtx][cfosSuvV][a<成员文件>][b<成员文件>][i<成员文件>][备存文件][成员文件]
    参数:
    必要参数:
    • -d  删除备存文件中的成员文件。
    • -m  变更成员文件在备存文件中的次序。
    • -p  显示备存文件中的成员文件内容。
    • -q  将文件附加在备存文件末端。
    • -r  将文件插入备存文件中。
    • -t  显示备存文件中所包含的文件。
    • -x  自备存文件中取出成员文件。
    选项参数:
    • a<成员文件>  将文件插入备存文件中指定的成员文件之后。
    • b<成员文件>  将文件插入备存文件中指定的成员文件之前。
    • c  建立备存文件。
    • f  为避免过长的文件名不兼容于其他系统的ar指令指令,因此可利用此参数,截掉要放入备存文件中过长的成员文件名称。
    • i<成员文件>  将文件插入备存文件中指定的成员文件之前。
    • o  保留备存文件中文件的日期。
    • s  若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。
    • S  不产生符号表。
    • u  只将日期较新文件插入备存文件中。
    • v  程序执行时显示详细的信息。
    • V  显示版本信息。
    实例
    打包文件
    [root@runoob.com ~]# ls //显示当前目录文件
    a.c b.c d.c install.log qte
    anaconda-ks.cfg c.c Desktop

    [root@runoob.com ~]# ar rv one.bak a.c b.c //打包 a.c b.c文件
    ar: 正在创建 one.bak
    a - a.c
    a - b.c
    [root@runoob.com ~]#
    打包多个文件
    [root@runoob.com ~]# ar rv two.bak *.c //打包以.c结尾的文件
    ar: 正在创建 two.bak
    a - a.c
    a - b.c
    a - c.c
    a - d.c
    [root@runoob.com ~]#
    显示打包文件的内容
    [root@runoob.com ~]# ar t two.bak
    a.c
    b.c
    c.c
    d.c
    [root@runoob.com ~]#
    删除打包文件的成员文件
    [root@runoob.com ~]# ar d two.bak a.c b.c c.c
    [root@runoob.com ~]# ar t two.bak
    d.c

    bunzip2 Linux bunzip2命令是.bz2文件的解压缩程序。
    bunzip2可解压缩.bz2格式的压缩文件。bunzip2实际上是bzip2的符号连接,执行bunzip2与bzip2 -d的效果相同。
    语法:bunzip2 [-fkLsvV][.bz2压缩文件]
    参数:
    • -f或–force  解压缩时,若输出的文件与现有文件同名时,预设不会覆盖现有的文件。若要覆盖,请使用此参数。
    • -k或–keep  在解压缩后,预设会删除原来的压缩文件。若要保留压缩文件,请使用此参数。
    • -s或–small  降低程序执行时,内存的使用量。
    • -v或–verbose  解压缩文件时,显示详细的信息。
    • -L,–license,-V或–version  显示版本信息。
    实例
    解压.bz2文件

    bunzip2 -v temp.bz2 //解压文件显示详细处理信息

    bzip2 Linux bzip2命令是.bz2文件的压缩程序。
    bzip2采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
    语法
    bzip2 [-cdfhkLstvVz][–repetitive-best][–repetitive-fast][- 压缩等级][要压缩的文件]
    参数:
    • -c或–stdout  将压缩与解压缩的结果送到标准输出。
    • -d或–decompress  执行解压缩。
    • -f或–force  bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数。
    • -h或–help  显示帮助。
    • -k或–keep  bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。
    • -s或–small  降低程序执行时内存的使用量。
    • -t或–test  测试.bz2压缩文件的完整性。
    • -v或–verbose  压缩或解压缩文件时,显示详细的信息。
    • -z或–compress  强制执行压缩。
    • -L,–license,
    • -V或–version  显示版本信息。
    • --repetitive-best  若文件中有重复出现的资料时,可利用此参数提高压缩效果。
    • --repetitive-fast  若文件中有重复出现的资料时,可利用此参数加快执行速度。
    • -压缩等级  压缩时的区块大小。
    实例
    解压.bz2文件
    [root@w3cschool.cc ~]# bzip2 -v temp.bz2 //解压文件显示详细处理信息
    压缩文件
    [root@w3cschool.cc ~]# bzip2 -c a.c b.c c.c
    检查文件完整性
    [root@w3cschool.cc ~]# bzip2 -t temp.bz2

    bzip2recover Linux bzip2recover命令用来修复损坏的.bz2文件。
    bzip2是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区块损坏时,便可利用bzip2recover,试着将文件中的区块隔开来,以便解压缩正常的区块。通常只适用在压缩文件很大的情况。
    语法
    bzip2recover [.bz2 压缩文件]
    实例
    修复.bz2文件

    bzip2recover col.bz2

    Gunzip Linux gunzip命令用于解压文件
    gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为".gz"。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。
    语法
    参数:
    gunzip [-acfhlLnNqrtvV][-s <压缩字尾字符串>][文件…] 或 gunzip [-acfhlLnNqrtvV][-s <压缩字尾字符串>][目录]
    • -a或–ascii  使用ASCII文字模式。
    • -c或–stdout或–to-stdout  把解压后的文件输出到标准输出设备。
    • -f或-force  强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
    • -h或–help  在线帮助。
    • -l或–list  列出压缩文件的相关信息。
    • -L或–license  显示版本与版权信息。
    • -n或–no-name  解压缩时,若压缩文件内含有远来的文件名称及时间戳记,则将其忽略不予处理。
    • -N或–name  解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上。
    • -q或–quiet  不显示警告信息。
    • -r或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
    • -S<压缩字尾字符串>或–suffix<压缩字尾字符串>  更改压缩字尾字符串。
    • -t或–test  测试压缩文件是否正确无误。
    • -v或–verbose  显示指令执行过程。
    • -V或–version 显示版本信息。
    实例

    解压文件

    # gunzip ab.gz 
    

    Unarj Linux unarj命令用于解压缩.arj文件
    unarj为.arj压缩文件的压缩程序。
    语法
    unarj [eltx][.arj压缩文件]
    参数:
    • e 解压缩.arj文件。
    • l 显示压缩文件内所包含的文件。
    • t 检查压缩文件是否正确。
    • x 解压缩时保留原有的路径。
    实例
    解压.arj文件

    unarj e test.arj

    Cpio Linux cpio命令用于备份文件。
    cpio 是用来建立,还原备份档的工具程序,它可以加入,解开 cpio 或 tar 备份档内的文件。
    语法
    cpio [-0aABckLovV][-C <输入/输出大小>][-F <备份档>][-H <备份格式>][-O <备份档>][–block-size=<区块大小>][–force-local][–help][–quiet][–version] 或 cpio [-bBcdfikmnrsStuvV][-C <输入/输出大小>][-E <范本文件>][-F <备份档>][-H <备份格式>][-I <备份档>][-M <回传信息>][-R <拥有者><:/.><所属群组>][–block-size=<区块大小>][–force-local][–help][–no-absolute-filenames][–no-preserve-owner][–only-verify-crc][–quiet][–sparse][–version][范本样式…] 或 cpio [-0adkiLmpuvV][-R <拥有者><:/.><所属群组>][–help][–no-preserve-owner][–quiet][–sparse][–version][目的目]
    参数:
    • -0或–null  接受新增列控制字符,通常配合find指令的"-print0"参数使用。
    • -a或–reset-access-time  重新设置文件的存取时间。
    • -A或–append  附加到已存在的备份档中,且这个备份档必须存放在磁盘上,而不能放置于磁带机里。
    • -b或–swap  此参数的效果和同时指定"-sS"参数相同。
    • -B  将输入/输出的区块大小改成5210 Bytes。
    • -c  使用旧ASCII备份格式。
    • -C<区块大小>或–io-size=<区块大小>  设置输入/输出的区块大小,单位是Byte。
    • -d或–make-directories  如有需要cpio会自行建立目录。
    • -E<范本文件>或–pattern-file=<范本文件>  指定范本文件,其内含有一个或多个范本样式,让cpio解开符合范本条件的文件,格式为每列一个范本样式。
    • -f或–nonmatching  让cpio解开所有不符合范本条件的文件。
    • -F<备份档>或–file=<备份档>  指定备份档的名称,用来取代标准输入或输出,也能借此通过网络使用另一台主机的保存设备存取备份档。
    • -H<备份格式>  指定备份时欲使用的文件格式。
    • -i或–extract  执行copy-in模式,还原备份档。
    • -l<备份档>  指定备份档的名称,用来取代标准输入,也能借此通过网络使用另一台主机的保存设备读取备份档。
    • -k  此参数将忽略不予处理,仅负责解决cpio不同版本间的兼容性问题。
    • -l或–link  以硬连接的方式取代复制文件,可在copy-pass模式下运用。
    • -L或–dereference  不建立符号连接,直接复制该连接所指向的原始文件。
    • -m或preserve-modification-time  不去更换文件的更改时间。
    • -M<回传信息>或–message=<回传信息>  设置更换保存媒体的信息。
    • -n或–numeric-uid-gid  使用"-tv"参数列出备份档的内容时,若再加上参数"-n",则会以用户识别码和群组识别码替代拥有者和群组名称列出文件清单。
    • -o或–create  执行copy-out模式,建立备份档。
    • -O<备份档>  指定备份档的名称,用来取代标准输出,也能借此通过网络 使用另一台主机的保存设备存放备份档。
    • -p或–pass-through  执行copy-pass模式,略过备份步骤,直接将文件复制到目的目录。
    • -r或–rename  当有文件名称需要更动时,采用互动模式。
    • -R<拥有者><:/.><所属群组>或
    • ----owner<拥有者><:/.><所属群组>  在copy-in模式还原备份档,或copy-pass模式复制文件时,可指定这些备份,复制的文件的拥有者与所属群组。
    • -s或–swap-bytes  交换每对字节的内容。
    • -S或–swap-halfwords  交换每半个字节的内容。
    • -t或–list  将输入的内容呈现出来。
    • -u或–unconditional  置换所有文件,不论日期时间的新旧与否,皆不予询问而直接覆盖。
    • -v或–verbose  详细显示指令的执行过程。
    • -V或–dot  执行指令时,在每个文件的执行程序前面加上"."号
    • --block-size=<区块大小>  设置输入/输出的区块大小,假如设置数值为5,则区块大小为2500,若设置成10,则区块大小为5120,依次类推。
    • --force-local  强制将备份档存放在本地主机。
    • --help  在线帮助。
    • --no-absolute-filenames  使用相对路径建立文件名称。
    • --no-preserve-owner  不保留文件的拥有者,谁解开了备份档,那些文件就归谁所有。
    • -only-verify-crc  当备份档采用CRC备份格式时,可使用这项参数检查备份档内的每个文件是否正确无误。
    • --quiet  不显示复制了多少区块。
    • --sparse  倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
    • --version  显示版本信息。
    实例
    制作备份文件
    [root@runoob.com var]# ll //显示当前目录下的文件
    总用量 164
    drwxr-xr-x 2 root root 4096 2008-03-30 account
    drwxr-xr-x 9 root root 4096 2008-03-30 cache
    drwxr-xr-x 3 netdump netdump 4096 2008-03-30 crash
    drwxr-xr-x 3 root root 4096 2008-03-30 db
    drwxr-xr-x 3 root root 4096 2008-03-30 empty
    drwxr-xr-x 3 root root 4096 2008-03-30 ftp
    drwxrwx–T 2 root gdm 4096 4月 9 20:17 gdm
    drwxr-xr-x 25 root root 4096 2008-03-30 lib
    drwxr-xr-x 2 root root 4096 2004-08-13 local
    drwxrwxr-x 6 root lock 4096 5月 8 15:25 lock
    drwxr-xr-x 14 root root 4096 5月 8 15:14 log
    lrwxrwxrwx 1 root root 10 2008-03-30 mail -> spool/mail
    drwxr-xr-x 2 root root 4096 2004-08-13 nis
    drwxr-xr-x 2 root root 4096 2004-08-13 opt
    drwxr-xr-x 2 root root 4096 2004-08-13 preserve
    drwxr-xr-x 16 root root 4096 5月 8 15:14 run
    drwxr-xr-x 16 root root 4096 2008-03-30 spool
    drwxrwxrwt 3 root root 4096 1月 13 18:53 tmp
    drwx------ 2 root root 4096 2004-07-08 tux
    drwxr-xr-x 8 root root 4096 1月 19 19:39 www
    drwxr-xr-x 3 root root 4096 2008-03-30 yp
    [root@runoob.com var]# ls | cpio -o >123.cpio //制作备份文件
    25 blocks
    [root@runoob.com var]# ll //显示当前目录下的文件
    总用量 172
    -rw-r–r-- 1 root root 1024 5月 24 13:06 123.cpio
    drwxr-xr-x 2 root root 4096 2008-03-30 account
    drwxr-xr-x 9 root root 4096 2008-03-30 cache
    drwxr-xr-x 3 netdump netdump 4096 2008-03-30 crash
    drwxr-xr-x 3 root root 4096 2008-03-30 db
    drwxr-xr-x 3 root root 4096 2008-03-30 empty
    drwxr-xr-x 3 root root 4096 2008-03-30 ftp
    drwxrwx–T 2 root gdm 4096 4月 9 20:17 gdm
    drwxr-xr-x 25 root root 4096 2008-03-30 lib
    drwxr-xr-x 2 root root 4096 2004-08-13 local
    drwxrwxr-x 6 root lock 4096 5月 8 15:25 lock
    drwxr-xr-x 14 root root 4096 5月 8 15:14 log
    lrwxrwxrwx 1 root root 10 2008-03-30 mail -> spool/mail
    drwxr-xr-x 2 root root 4096 2004-08-13 nis
    drwxr-xr-x 2 root root 4096 2004-08-13 opt
    drwxr-xr-x 2 root root 4096 2004-08-13 preserve
    drwxr-xr-x 16 root root 4096 5月 8 15:14 run
    drwxr-xr-x 16 root root 4096 2008-03-30 spool
    drwxrwxrwt 3 root root 4096 1月 13 18:53 tmp
    drwx------ 2 root root 4096 2004-07-08 tux
    drwxr-xr-x 8 root root 4096 1月 19 19:39 www
    drwxr-xr-x 3 root root 4096 2008-03-30 yp
    [root@runoob.com var]#
    解压备份文件
    [root@runoob.com var]# ls | cpio -i -l 123.cpio
    解压缩备份文件,并列出详细信息
    [root@runoob.com var]# cpio -t -I 123.cpio
    123.cpio
    a.c
    b.c
    c.c
    ……省略部分结果
    强制解压缩
    [root@runoob.com var]# cpio -i -u -I 123.cpio
    解压缩时进行反向匹配,指定不解压的文件
    [root@runoob.com var]# cpio -i -I 123.cpio -f *.c

    //不解压.c结尾的文件
    向指定的.cpio文件添加文件
    [root@runoob.com var]# ls
    123.cpio crash ftp local mail preserve tmp yp
    account db gdm lock nis run tux
    cache empty lib log opt spool www
    [root@runoob.com var]# cpio -o -O 123.cpio -A
    db //用户输入 按下Ctrl+D结束输入
    1 block
    [root@runoob.com var]#
    从标准输入备份文件
    [root@runoob.com test]# ls
    a. a.c b.c c.c d.c f.c
    [root@runoob.com test]# cpio -o >123.cpio
    a.c //用户输入
    b.c
    c.c //按下Ctrl+D完成输入
    3 block
    [root@runoob.com test]#
    复制文件
    [root@runoob.com test]# cpio -p /root
    a.c //用户输入
    b.c
    c.c //按下Ctrl+D完成输入
    3 block

    Dump Linux dump命令用于备份文件系统。
    dump为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。
    语法
    dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d <密度>][-f <设备名称>][-h <层级>][-s <磁带长度>][-T <日期>][目录或文件系统] 或 dump [-wW]
    参数:
    • -0123456789  备份的层级。
    • -b<区块大小>  指定区块的大小,单位为KB。
    • -B<区块数目>  指定备份卷册的区块数目。
    • -c  修改备份磁带预设的密度与容量。
    • -d<密度>  设置磁带的密度。单位为BPI。
    • -f<设备名称>  指定备份设备。
    • -h<层级>  当备份层级等于或大于指定的层级时,将不备份用户标示为"nodump"的文件。
    • -n  当备份工作需要管理员介入时,向所有"operator"群组中的使用者发出通知。
    • -s<磁带长度>  备份磁带的长度,单位为英尺。
    • -T<日期>  指定开始备份的时间与日期。
    • -u  备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期与时间等。
    • -w  与-W类似,但仅显示需要备份的文件。
    • -W  显示需要备份的文件及其最后一次备份的层级,时间与日期。
    实例
    备份文件到磁带

    dump -0 -u /dev/tape /home/

    其中"-0"参数指定的是备份等级"-u"要求备份完毕之后将相应的信息存储到文件 /etc/dumpdates 留作记录

    Uuencode
    Gzexe Linux gzexe命令用于压缩执行文件。
    gzexe是用来压缩执行文件的程序。当您去执行被压缩过的执行文件时,该文件会自动解压然后继续执行,和使用一般的执行文件相同。
    语法
    gzexe [-d][执行文件…]
    参数:
    • -d  解开压缩文件。
    实例
    压缩可执行文件

    gzexe abc

    Gzip Linux gzip命令用于压缩文件。
    gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。
    语法
    gzip [-acdfhlLnNqrtvV][-S <压缩字尾字符串>][-<压缩效率>][–best/fast][文件…] 或 gzip [-acdfhlLnNqrtvV][-S <压缩字尾字符串>][-<压缩效率>][–best/fast][目录]
    参数:
    • -a或–ascii  使用ASCII文字模式。
    • -c或–stdout或–to-stdout  把压缩后的文件输出到标准输出设备,不去更动原始文件。
    • -d或–decompress或----uncompress  解开压缩文件。
    • -f或–force  强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
    • -h或–help  在线帮助。
    • -l或–list  列出压缩文件的相关信息。
    • -L或–license  显示版本与版权信息。
    • -n或–no-name  压缩文件时,不保存原来的文件名称及时间戳记。
    • -N或–name  压缩文件时,保存原来的文件名称及时间戳记。
    • -q或–quiet  不显示警告信息。
    • -r或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
    • -S<压缩字尾字符串>或----suffix<压缩字尾字符串>  更改压缩字尾字符串。
    • -t或–test  测试压缩文件是否正确无误。
    • -v或–verbose  显示指令执行过程。
    • -V或–version  显示版本信息。
    • -<压缩效率>  压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。
    • --best  此参数的效果和指定"-9"参数相同。
    • --fast  此参数的效果和指定"-1"参数相同。
    实例
    压缩文件
    [root@runoob.com a]# ls //显示当前目录文件
    a.c b.h d.cpp
    [root@runoob.com a]# gzip * //压缩目录下的所有文件
    [root@runoob.com a]# ls //显示当前目录文件
    a.c.gz b.h.gz d.cpp.gz
    [root@runoob.com a]#
    接范例1, 列出详细的信息
    [root@runoob.com a]# gzip -dv * //解压文件,并列出详细信息
    a.c.gz: 0.0% – replaced with a.c
    b.h.gz: 0.0% – replaced with b.h
    d.cpp.gz: 0.0% – replaced with d.cpp
    [root@runoob.com a]#
    接范例1,显示压缩文件的信息
    [root@runoob.com a]# gzip -l *
    compressed uncompressed ratio uncompressed_name
    24 0 0.0% a.c
    24 0 0.0% b.h
    26 0 0.0% d.cpp

    Lha Linux lha命令用于压缩或解压缩文件。
    lha是从lharc演变而来的压缩程序,文件经它压缩后,会另外产生具有".lzh"扩展名的压缩文件。
    语法
    lha [-acdfglmnpqtuvx][-a <0/1/2>/u</0/1/2>][-<a/c/u>d][-<e/x>i][-<a/u>o][-<e/x>w=<目的目录>][-<a/u>z][压缩文件][文件…] 或 lha [-acdfglmnpqtuvx][-a <0/1/2>/u</0/1/2>][-<a/c/u>d][-<e/x>i][-<a/u>o][-<e/x>w=<目的目录>][-<a/u>z][压缩文件][目录…]
    参数:
    • -a或a 压缩文件,并加入到压缩文件内。
    • -a<0/1/2>/u</0/1/2> 压缩文件时,采用不同的文件头。
    • -c或c 压缩文件,重新建构新的压缩文件后,再将其加入。
    • -d或d 从压缩文件内删除指定的文件。
    • -<a/c/u>d或<a/c/u>d 压缩文件,然后将其加入,重新建构,更新压缩文件或,删除原始文件,也就是把文件移到压缩文件中。
    • -e或e 解开压缩文件。
    • -f或f 强制执行lha命令,在解压时会直接覆盖已有的文件而不加以询问。
    • -g或g 使用通用的压缩格式,便于解决兼容性的问题。
    • -<e/x>i或<e/x>i 解开压缩文件时,忽略保存在压缩文件内的文件路径,直接将其解压后存放在现行目录下或是指定的目录中。
    • -l或l 列出压缩文件的相关信息。
    • -m或m 此参数的效果和同时指定"-ad"参数相同。
    • -n或n 不执行指令,仅列出实际执行会进行的动作。
    • -<a/u>o或<a/u>o 采用lharc兼容格式,将压缩后的文件加入,更新压缩文件。
    • -p或p 从压缩文件内输出到标准输出设备。
    • -q或q 不显示指令执行过程。
    • -t或t 检查备份文件内的每个文件是否正确无误。
    • -u或u 更换较新的文件到压缩文件内。
    • -u</0/1/2>或u</0/1/2> 在文件压缩时采用不同的文件头,然后更新到压缩文件内。
    • -v或v 详细列出压缩文件的相关信息。
    • -<e/x>w=<目的目录>或<e/x>w=<目的目录> 指定解压缩的目录。
    • -x或x 解开压缩文件。
    • -<a/u>z或<a/u>z 不压缩文件,直接把它加入,更新压缩文件。
    实例
    缩文件

    lha -a abc.lhz a.b //压缩a.b文件,压缩后生成 abc.lhz文件

    压缩目录

    lha -a abc2 /home/hnlinux

    解压文件到当前目录

    lha -xiw=agis abc //解压文件abc

    Restore Linux restore命令用来还原由dump操作所备份下来的文件或整个文件系统(一个分区)。
    restore 指令所进行的操作和dump指令相反,dump操作可用来备份文件,而restore操作则是写回这些已备份的文件。
    语法
    restore [-cCvy][-b <区块大小>][-D <文件系统>][-f <备份文件>][-s <文件编号>] 或 restore [-chimvy][-b <区块大小>][-f <备份文件>][-s <文件编号>] 或 restore [-crvy][-b <区块大小>][-f <备份文件>][-s <文件编号>] 或 restore [-cRvy][-b <区块大小>][-D <文件系统>][-f <备份文件>][-s <文件编号>] 或 restore [chtvy][-b <区块大小>][-D <文件系统>][-f <备份文件>][-s <文件编号>][文件…] 或 restore [-chmvxy][-b <区块大小>][-D <文件系统>][-f <备份文件>][-s <文件编号>][文件…]
    参数:
    • -b<区块大小> 设置区块大小,单位是Byte。
    • -c 不检查dump操作的备份格式,仅准许读取使用旧格式的备份文件。
    • -C 使用对比模式,将备份的文件与现行的文件相互对比。
    • -D<文件系统> 允许用户指定文件系统的名称。
    • -f<备份文件> 从指定的文件中读取备份数据,进行还原操作。
    • -h 仅解出目录而不包括与该目录相关的所有文件。
    • -i 使用互动模式,在进行还原操作时,restore指令将依序询问用户。
    • -m 解开符合指定的inode编号的文件或目录而非采用文件名称指定。
    • -r 进行还原操作。
    • -R 全面还原文件系统时,检查应从何处开始进行。
    • -s<文件编号> 当备份数据超过一卷磁带时,您可以指定备份文件的编号。
    • -t 指定文件名称,若该文件已存在备份文件中,则列出它们的名称。
    • -v 显示指令执行过程。
    • -x 设置文件名称,且从指定的存储媒体里读入它们,若该文件已存在在备份文件中,则将其还原到文件系统内。
    • -y 不询问任何问题,一律以同意回答并继续执行指令。

    Tar Linux tar(英文全拼:tape archive )命令用于备份文件 压缩文件。
    tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
    语法
    tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][–after-date=<日期时间>][–atime-preserve][–backuup=<备份方式>][–checkpoint][–concatenate][–confirmation][–delete][–exclude=<范本样式>][–force-local][–group=<群组名称>][–help][–ignore-failed-read][–new-volume-script=<Script文件>][–newer-mtime][–no-recursion][–null][–numeric-owner][–owner=<用户名称>][–posix][–erve][–preserve-order][–preserve-permissions][–record-size=<区块数目>][–recursive-unlink][–remove-files][–rsh-command=<执行指令>][–same-owner][–suffix=<备份字尾字符串>][–totals][–use-compress-program=<执行指令>][–version][–volno-file=<编号文件>][文件或目录…]
    参数:
    • -A或–catenate 新增文件到已存在的备份文件。
    • -b<区块数目>或–blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
    • -B或–read-full-records 读取数据时重设区块大小。
    • -c或–create 建立新的备份文件。
    • -C<目的目录>或–directory=<目的目录> 切换到指定的目录。
    • -d或–diff或–compare 对比备份文件内和文件系统上的文件的差异。
    • -f<备份文件>或–file=<备份文件> 指定备份文件。
    • -F<Script文件>或–info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
    • -g或–listed-incremental 处理GNU格式的大量备份。
    • -G或–incremental 处理旧的GNU格式的大量备份。
    • -h或–dereference 不建立符号连接,直接复制该连接所指向的原始文件。
    • -i或–ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
    • -k或–keep-old-files 解开备份文件时,不覆盖已有的文件。
    • -K<文件>或–starting-file=<文件> 从指定的文件开始还原。
    • -l或–one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
    • -L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
    • -m或–modification-time 还原文件时,不变更文件的更改时间。
    • -M或–multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
    • -N<日期格式>或–newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
    • -o或–old-archive或–portability 将资料写入备份文件时使用V7格式。
    • -O或–stdout 把从备份文件里还原的文件输出到标准输出设备。
    • -p或–same-permissions 用原来的文件权限还原文件。
    • -P或–absolute-names 文件名使用绝对名称,不移除文件名称前的"/“号。
    • -r或–append 新增文件到已存在的备份文件的结尾部分。
    • -R或–block-number 列出每个信息在备份文件中的区块编号。
    • -s或–same-order 还原文件的顺序和备份文件内的存放顺序相同。
    • -S或–sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
    • -t或–list 列出备份文件的内容。
    • -T<范本文件>或–files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
    • -u或–update 仅置换较备份文件内的文件更新的文件。
    • -U或–unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
    • -v或–verbose 显示指令执行过程。
    • -V<卷册名称>或–label=<卷册名称> 建立使用指定的卷册名称的备份文件。
    • -w或–interactive 遭遇问题时先询问用户。
    • -W或–verify 写入备份文件后,确认文件正确无误。
    • -x或–extract或–get 从备份文件中还原文件。
    • -X<范本文件>或–exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
    • -z或–gzip或–ungzip 通过gzip指令处理备份文件。
    • -Z或–compress或–uncompress 通过compress指令处理备份文件。
    • -<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
    • --after-date=<日期时间> 此参数的效果和指定”-N"参数相同。
    • --atime-preserve 不变更文件的存取时间。
    • --backup=<备份方式>或–backup 移除文件前先进行备份。
    • --checkpoint 读取备份文件时列出目录名称。
    • --concatenate 此参数的效果和指定"-A"参数相同。
    • --confirmation 此参数的效果和指定"-w"参数相同。
    • --delete 从备份文件中删除指定的文件。
    • --exclude=<范本样式> 排除符合范本样式的文件。
    • --group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
    • --help 在线帮助。
    • --ignore-failed-read 忽略数据读取错误,不中断程序的执行。
    • --new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
    • --newer-mtime 只保存更改过的文件。
    • --no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
    • --null 从null设备读取文件名称。
    • --numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
    • --owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
    • --posix 将数据写入备份文件时使用POSIX格式。
    • --preserve 此参数的效果和指定"-ps"参数相同。
    • --preserve-order 此参数的效果和指定"-A"参数相同。
    • --preserve-permissions 此参数的效果和指定"-p"参数相同。
    • --record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
    • --recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
    • --remove-files 文件加入备份文件后,就将其删除。
    • --rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
    • --same-owner 尝试以相同的文件拥有者还原文件。
    • --suffix=<备份字尾字符串> 移除文件前先行备份。
    • --totals 备份文件建立后,列出文件大小。
    • --use-compress-program=<执行指令> 通过指定的指令处理备份文件。
    • --version 显示版本信息。
    • --volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。
    实例
    压缩文件 非打包

    touch a.c

    tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz

    a.c
    列出压缩文件内容

    tar -tzvf test.tar.gz

    -rw-r–r-- root/root 0 2010-05-24 16:51:59 a.c
    解压文件

    tar -xzvf test.tar.gz

    a.c

    unzip Linux unzip命令用于解压缩zip文件
    unzip为.zip压缩文件的解压缩程序。
    语法
    unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]
    参数:
    • -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
    • -f 更新现有的文件。
    • -l 显示压缩文件内所包含的文件。
    • -p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
    • -t 检查压缩文件是否正确。
    • -u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
    • -v 执行是时显示详细的信息。
    • -z 仅显示压缩文件的备注文字。
    • -a 对文本文件进行必要的字符转换。
    • -b 不要对文本文件进行字符转换。
    • -C 压缩文件中的文件名称区分大小写。
    • -j 不处理压缩文件中原有的目录路径。
    • -L 将压缩文件中的全部文件名改为小写。
    • -M 将输出结果送到more程序处理。
    • -n 解压缩时不要覆盖原有的文件。
    • -o 不必先询问用户,unzip执行后覆盖原有文件。
    • -P<密码> 使用zip的密码选项。
    • -q 执行时不显示任何信息。
    • -s 将文件名中的空白字符转换为底线字符。
    • -V 保留VMS的文件版本信息。
    • -X 解压缩时同时回存文件原来的UID/GID。
    • [.zip文件] 指定.zip压缩文件。
    • [文件] 指定要处理.zip压缩文件中的哪些文件。
    • -d<目录> 指定文件解压缩后所要存储的目录。
    • -x<文件> 指定不要处理.zip压缩文件中的哪些文件。
    • -Z unzip -Z等于执行zipinfo指令。
    实例
    查看压缩文件中包含的文件:

    unzip -l abc.zip

    Archive: abc.zip
    Length Date Time Name


    94618 05-21-10 20:44 a11.jpg
    202001 05-21-10 20:44 a22.jpg
    16 05-22-10 15:01 11.txt
    46468 05-23-10 10:30 w456.JPG
    140085 03-14-10 21:49 my.asp


    483188 5 files
    -v 参数用于查看压缩文件目录信息,但是不解压该文件。

    unzip -v abc.zip

    Archive: abc.zip
    Length Method Size Ratio Date Time CRC-32 Name


    94618 Defl:N 93353 1% 05-21-10 20:44 9e661437 a11.jpg
    202001 Defl:N 201833 0% 05-21-10 20:44 1da462eb a22.jpg
    16 Stored 16 0% 05-22-10 15:01 ae8a9910 ? ±|¥±? (11).txt
    46468 Defl:N 39997 14% 05-23-10 10:30 962861f2 w456.JPG
    140085 Defl:N 36765 74% 03-14-10 21:49 836fcc3f my.asp


    483188 371964 23% 5 files

    Zip Linux zip 命令用于压缩文件。
    zip 是个使用广泛的压缩程序,压缩后的文件后缀名为 .zip。
    语法
    zip [-AcdDfFghjJKlLmoqrSTuvVwXyz][b<>][ll][n<>][t<>][<>][][...][i<>][x<>]Ab<>cdDfFgh线i<>jJk使MSDOSlLFLF+CRllLF+CRLFLmn<>oqrSt<>TufvVVMSwVMSx<>XyUNIXz][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>] 参数: • -A 调整可执行的自动解压缩文件。 • -b<工作目录> 指定暂时存放文件的目录。 • -c 替每个被压缩的文件加上注释。 • -d 从压缩文件内删除指定的文件。 • -D 压缩文件内不建立目录名称。 • -f 更新现有的文件。 • -F 尝试修复已损坏的压缩文件。 • -g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。 • -h 在线帮助。 • -i<范本样式> 只压缩符合条件的文件。 • -j 只保存文件名称及其内容,而不存放任何目录名称。 • -J 删除压缩文件前面不必要的数据。 • -k 使用MS-DOS兼容格式的文件名称。 • -l 压缩文件时,把LF字符置换成LF+CR字符。 • -ll 压缩文件时,把LF+CR字符置换成LF字符。 • -L 显示版权信息。 • -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。 • -n<字尾字符串> 不压缩具有特定字尾字符串的文件。 • -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。 • -q 不显示指令执行过程。 • -r 递归处理,将指定目录下的所有文件和子目录一并处理。 • -S 包含系统和隐藏文件。 • -t<日期时间> 把压缩文件的日期设成指定的日期。 • -T 检查备份文件内的每个文件是否正确无误。 • -u 与 -f 参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。 • -v 显示指令执行过程或显示版本信息。 • -V 保存VMS操作系统的文件属性。 • -w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。 • -x<范本样式> 压缩时排除符合条件的文件。 • -X 不保存额外的文件属性。 • -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。 • -z 替压缩文件加上注释。 • - 保存第一个被压缩文件所在磁盘的卷册名称。
    • -<压缩效率> 压缩效率是一个介于1-9的数值。
    实例
    将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:
    zip -q -r html.zip /home/html
    如果在我们在 /home/html 目录下,可以执行以下命令:
    zip -q -r html.zip *
    从压缩文件 cp.zip 中删除文件 a.c
    zip -dv cp.zip a.c

    zipinfo Linux zipinfo命令用于列出压缩文件信息。
    执行zipinfo指令可得知zip压缩文件的详细信息。
    语法
    zipinfo [-12hlmMstTvz][压缩文件][文件…][-x <范本样式>]
    参数:
    • -1 只列出文件名称。
    • -2 此参数的效果和指定"-1"参数类似,但可搭配"-h","-t"和"-z"参数使用。
    • -h 只列出压缩文件的文件名称。
    • -l 此参数的效果和指定"-m"参数类似,但会列出原始文件的大小而非每个文件的压缩率。
    • -m 此参数的效果和指定"-s"参数类似,但多会列出每个文件的压缩率。
    • -M 若信息内容超过一个画面,则采用类似more指令的方式列出信息。
    • -s 用类似执行"ls -l"指令的效果列出压缩文件内容。
    • -t 只列出压缩文件内所包含的文件数目,压缩前后的文件大小及压缩率。
    • -T 将压缩文件内每个文件的日期时间用年,月,日,时,分,秒的顺序列出。
    • -v 详细显示压缩文件内每一个文件的信息。
    • -x<范本样式> 不列出符合条件的文件的信息。
    • -z 如果压缩文件内含有注释,就将注释显示出来。
    实例
    显示压缩文件信息
    [root@w3cschool.cc a]# zipinfo cp.zip
    Archive: cp.zip 486 bytes 4 files
    -rw-r–r-- 2.3 unx 0 bx stor 24-May-10 18:54 a.c
    -rw-r–r-- 2.3 unx 0 bx stor 24-May-10 18:54 b.c
    -rw-r–r-- 2.3 unx 0 bx stor 24-May-10 18:54 c.c
    -rw-r–r-- 2.3 unx 0 bx stor 24-May-10 18:54 e.c
    4 files, 0 bytes uncompressed, 0 bytes compressed: 0.0%
    [root@w3cschool.cc a]#
    显示压缩文件中每个文件的信息
    [root@w3cschool.cc a]# zipinfo -v cp.zip
    Archive: cp.zip 486 bytes 4 files

    End-of-central-directory record:

    Actual offset of end-of-central-dir record: 464 (000001D0h)
    Expected offset of end-of-central-dir record: 464 (000001D0h)
    (based on the length of the central directory and its expected offset)

    This zipfile constitutes the sole disk of a single-part archive; its
    central directory contains 4 entries. The central directory is 248
    (000000F8h) bytes long, and its (expected) offset in bytes from the
    beginning of the zipfile is 216 (000000D8h).

    There is no zipfile comment.

    Central directory entry #1:

    a.c

    offset of local header from start of archive: 0 (00000000h) bytes
    file system or operating system of origin: Unix
    version of encoding software: 2.3
    minimum file system compatibility required: MS-DOS, OS/2 or NT FAT
    minimum software version required to extract: 1.0
    compression method: none (stored)
    file security status: not encrypted
    extended local header: no
    file last modified on (DOS date/time): 2010 May 24 18:54:26
    file last modified on (UT extra field modtime): 2010 May 24 18:54:26 local
    file last modified on (UT extra field modtime): 2010 May 24 10:54:26 UTC
    32-bit CRC value (hex): 00000000
    compressed size: 0 bytes
    uncompressed size: 0 bytes
    length of filename: 3 characters
    length of extra field: 13 bytes
    length of file comment: 0 characters
    disk number on which file begins: disk 1
    apparent file type: binary
    Unix file attributes (100644 octal): -rw-r–r--
    MS-DOS file attributes (00 hex): none

    The central-directory extra field contains:

    • A subfield with ID 0x5455 (universal time) and 5 data bytes.
      The local extra field has UTC/GMT modification/access times.
    • A subfield with ID 0x7855 (Unix UID/GID) and 0 data bytes.

    There is no file comment.

    Central directory entry #2:

    b.c

    offset of local header from start of archive: 54 (00000036h) bytes
    file system or operating system of origin: Unix
    version of encoding software: 2.3
    minimum file system compatibility required: MS-DOS, OS/2 or NT FAT
    minimum software version required to extract: 1.0
    compression method: none (stored)
    file security status: not encrypted
    extended local header: no
    file last modified on (DOS date/time): 2010 May 24 18:54:26
    file last modified on (UT extra field modtime): 2010 May 24 18:54:26 local
    file last modified on (UT extra field modtime): 2010 May 24 10:54:26 UTC
    32-bit CRC value (hex): 00000000
    compressed size: 0 bytes
    uncompressed size: 0 bytes
    length of filename: 3 characters
    length of extra field: 13 bytes
    length of file comment: 0 characters
    disk number on which file begins: disk 1
    apparent file type: binary
    Unix file attributes (100644 octal): -rw-r–r--
    MS-DOS file attributes (00 hex): none

    The central-directory extra field contains:

    • A subfield with ID 0x5455 (universal time) and 5 data bytes.
      The local extra field has UTC/GMT modification/access times.
    • A subfield with ID 0x7855 (Unix UID/GID) and 0 data bytes.

    There is no file comment.

    Central directory entry #3:

    c.c

    offset of local header from start of archive: 108 (0000006Ch) bytes
    file system or operating system of origin: Unix
    version of encoding software: 2.3
    minimum file system compatibility required: MS-DOS, OS/2 or NT FAT
    minimum software version required to extract: 1.0
    compression method: none (stored)
    file security status: not encrypted
    extended local header: no
    file last modified on (DOS date/time): 2010 May 24 18:54:26
    file last modified on (UT extra field modtime): 2010 May 24 18:54:26 local
    file last modified on (UT extra field modtime): 2010 May 24 10:54:26 UTC
    32-bit CRC value (hex): 00000000
    compressed size: 0 bytes
    uncompressed size: 0 bytes
    length of filename: 3 characters
    length of extra field: 13 bytes
    length of file comment: 0 characters
    disk number on which file begins: disk 1
    apparent file type: binary
    Unix file attributes (100644 octal): -rw-r–r--
    MS-DOS file attributes (00 hex): none

    The central-directory extra field contains:

    • A subfield with ID 0x5455 (universal time) and 5 data bytes.
      The local extra field has UTC/GMT modification/access times.
    • A subfield with ID 0x7855 (Unix UID/GID) and 0 data bytes.

    There is no file comment.

    Central directory entry #4:

    e.c

    offset of local header from start of archive: 162 (000000A2h) bytes
    file system or operating system of origin: Unix
    version of encoding software: 2.3
    minimum file system compatibility required: MS-DOS, OS/2 or NT FAT
    minimum software version required to extract: 1.0
    compression method: none (stored)
    file security status: not encrypted
    extended local header: no
    file last modified on (DOS date/time): 2010 May 24 18:54:26
    file last modified on (UT extra field modtime): 2010 May 24 18:54:26 local
    file last modified on (UT extra field modtime): 2010 May 24 10:54:26 UTC
    32-bit CRC value (hex): 00000000
    compressed size: 0 bytes
    uncompressed size: 0 bytes
    length of filename: 3 characters
    length of extra field: 13 bytes
    length of file comment: 0 characters
    disk number on which file begins: disk 1
    apparent file type: binary
    Unix file attributes (100644 octal): -rw-r–r--
    MS-DOS file attributes (00 hex): none

    The central-directory extra field contains:

    • A subfield with ID 0x5455 (universal time) and 5 data bytes.
      The local extra field has UTC/GMT modification/access times.
    • A subfield with ID 0x7855 (Unix UID/GID) and 0 data bytes.

    There is no file comment.

    设备管理
    Poweroff poweroff 命令命令用于关闭计算器并切断电源
    使用权限:系统管理者。
    语法
    poweroff [-n] [-w] [-d] [-f] [-i] [-h]
    参数说明:
    • -n : 在关机前不做将记忆体资料写回硬盘的动作
    • -w : 并不会真的关机,只是把记录写到 /var/log/wtmp 档案里
    • -d : 不把记录写到 /var/log/wtmp 文件里
    • -i : 在关机之前先把所有网络相关的装置先停止
    • -p : 关闭操作系统之前将系统中所有的硬件设置为备用模式。
    实例
    关闭系统

    poweroff

    展开全文
  • 又搜到他写的《Visual C++ 中操纵 MS Word 123》。在源代码中,介绍了我一直不太摸得着头脑的CComVariant, COleVariant, _variant_t变量,所以摘记于此,方便查阅。 Visual C++ 中操纵 MS Word 123 步步为营: ...

    对杨老师佩服不已!

    又搜到他写的《Visual C++ 中操纵 MS Word 123》。在源代码中,介绍了我一直不太摸得着头脑的CComVariant, COleVariant, _variant_t变量,所以摘记于此,方便查阅。

    Visual C++ 中操纵 MS Word 123

    步步为营:

    Step1:如何启动和关闭 WORD,及 VARIANT 的最基本的使用方法

    Step2:和 Step1 同样功能,用 CComVariant 改进了 VARIANT 的使用方式

    Step3:在 Step2 的基础上,新建一个 WORD 文档,并从程序中传送一些字符到 WORD

    Step4:在 Step3 的基础上,保存 WORD 文档

    Step5:一个小应用举例,把输入的汉字按照“笔画”排序

    Step6:一个小应用举例,盗窃正在使用的 WORD 文档

    以上这6个小程序中,都有详细的注释。大家阅读后慢慢体会并实验,你就可以自由地操纵任何一个 Office 啦。

    参考:Microsoft Office Development with Visual Studio


    Step1:

    #include "msword9.h"//为了使代码集中,方便阅读,所以把头文件放到了这里
    void CStep1Dlg::OnOK() 
    {

    _Application app;//定义一个WORD的应用对象

    if(!app.CreateDispatch(_T("Word.Application")))//启动WORD

    {

    AfxMessageBox(_T("居然你连OFFICE都没有安装吗?"));

    return;

    }


    AfxMessageBox(_T("WORD 已经运行启动啦,你可以用Ctrl+Alt+Del查看"));

    app.SetVisible(TRUE);//设置WORD可见。

    //当然,如果你想要悄悄地调用WORD的功能,则注释掉这条语句

    AfxMessageBox(_T("现在你已经看到WORD的程序界面了吧"));


    AfxMessageBox(_T("WORD准备要退出啦"));

    VARIANT SaveChanges,OriginalFormat,RouteDocument;//定义调用QUIT时使用的参数

    SaveChanges.vt=VT_BOOL;//设置退出WORD时候的保存参数

    SaveChanges.boolVal=VARIANT_FALSE;//为不保存任何文档,模板及设置


    ::VariantInit(&OriginalFormat);//清空变量

    RouteDocument.vt=VT_EMPTY;//清空变量的另一种方法


    //调用Quit退出WORD应用程序。当然不调用也可以,那样的话WORD还在运行着那

    app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);

    app.ReleaseDispatch();//释放对象指针。切记,必须调用

    AfxMessageBox(_T("Step1执行完成。接着请学习Setp2"));

    }

    Step2:

    #include "msword9.h"
    #include <AtlBase.h> //新增加了一个头文件,为使用CComVariant替代VARIANT做准备

    void CStep2Dlg::OnOK() 
    {

    //以下3行代码,同Step1。就不解释啦

    _Application app;

    //为了简单,没有判断返回值。如果没有成功,记得检查你有没有AfxOleInit()呀?

    app.CreateDispatch(_T("Word.Application"));

    app.SetVisible(TRUE);


    AfxMessageBox(_T("WORD已经启动,现在要退出啦"));

    AfxMessageBox(_T("怎么和Step1没有什么区别呀?"));

    AfxMessageBox(_T("嘿嘿,是没什么区别,但是使用方式简单了很多呀。看看源程序吧"));


    //准备调用_Application::Quit函数了,需要定义3个参数。

    //但是,这次我们使用CComVariant,这是一个模板类。

    //在定义的时候直接调用带参数的构造函数,比VARIANT使用简单多了吧

    CComVariant SaveChanges(false),OriginalFormat,RouteDocument;

    //使用 CComVariant 的不带参数的构造函数,默认就是使用VT_EMPTY,设置为空类型

    //另外,除了CComVariant,你还可以使用COleVariant和_variant_t,但我个人最喜欢前者

    app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);

    app.ReleaseDispatch();

    AfxMessageBox(_T("下面该学习Setp3了"));

    }

    Step3:

    #include "msword9.h"
    #include <AtlBase.h>

    void CStep3Dlg::OnOK() 
    {

    // 这次,我们要控制在WORD中输入一些字符了 /

    /************* WORD 录制的宏,新建一个空文档,然后输入一些文字 ************

        Documents.Add Template:= _

            "C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates\Normal.dot" _

            , NewTemplate:=False, DocumentType:=0

        Selection.TypeText Text:="HELLO"

        Selection.TypeParagraph

        Selection.TypeText Text:="大家好"

    ***************************************************************************/

    _Application app;

    app.CreateDispatch(_T("Word.Application"));

    app.SetVisible(TRUE);


    AfxMessageBox(_T("看好了,就要新建一个空白文档了"));

    //通过WORD宏可以知道,由于要使用Documents,于是我们定义一个并从app中取得

    Documents docs=app.GetDocuments();

    //准备调用Documents::Add函数了,需要定义4个参数。

    //从WORD宏可以看出来3个参数的类型为:

    //Template字符,NewTemplate布尔,DocumentType数值

    //但Add函数还需要一个参数是Visible,傻子也能看出来这个值表示是否显示出新文档

    //并且可以给默认值(VT_EMPTY)

    CComVariant Template(_T(""));//为了简单,没有使用WORD的文档模板

    CComVariant NewTemplate(false),DocumentType(0),Visible;

    docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);


    AfxMessageBox(_T("下面,程序要向WORD发送字符啦"));

    //通过WORD宏可以知道,由于要使用Selection,于是我们定义一个并从app中取得

    //Selection表示输入点,即光标闪烁的那个地方

    Selection sel=app.GetSelection();

    //调用函数Selection::TypeText 向WORD发送字符

    sel.TypeText(_T("HELLO\r\n大家好呀"));


    AfxMessageBox(_T("看见了吗?我要退出啦"));


    sel.ReleaseDispatch();//Selection 不用了,一定要释放

    docs.ReleaseDispatch();//Documents 也不用了


    CComVariant SaveChanges(false),OriginalFormat,RouteDocument;

    app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);

    app.ReleaseDispatch();

    AfxMessageBox(_T("下面该学习Setp4了"));

    }

    Step4:

    #include "msword9.h"
    #include <AtlBase.h>

    void CStep4Dlg::OnOK() 
    {

    _Application app;

    app.CreateDispatch(_T("Word.Application"));

    app.SetVisible(TRUE);


    Documents docs=app.GetDocuments();

    CComVariant Template(_T(""));

    CComVariant NewTemplate(false),DocumentType(0),Visible;

    docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);


    Selection sel=app.GetSelection();

    sel.TypeText(_T("HELLO\r\n大家好呀"));


    AfxMessageBox(_T("好了,我要保存到c:\\hello.doc中了"));

    /**************** 这是在WORD中录制的新建文档直到另存的宏 *************

        Documents.Add Template:= _

            "C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates\Normal.dot" _

            , NewTemplate:=False, DocumentType:=0

        Selection.TypeText Text:="Hello"

        Selection.TypeParagraph

        Selection.TypeText Text:="大家好"

        ChangeFileOpenDirectory "C:\"

        ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _

            , LockComments:=False, Password:="", AddToRecentFiles:=True, _

            WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _

             SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _

            False

    *********************************************************************/


    /**************** 程序思路 ******************************************

    另存为的函数是ActiveDocument.SaveAs,显然表示的是对当前活跃的文档进行保存,

    在我们的类中没有ActiveDocument,其实它对应的是_Document,而这个可以由

    _Application 的GetActiveDocument()得到。你一定会提问:“你怎么知道的?”

    呵呵,怎么说那,我怎么知道的那?答案是:猜。其实如果使用的多了,分析、猜

    查找都是办法。如果想得到确切的方法,其实可以在VBA的书或微软的网站中搜索

    *********************************************************************/


    _Document doc=app.GetActiveDocument();//得到ActiveDocument

    CComVariant FileName(_T("c:\\Hello.doc"));//文件名

    CComVariant FileFormat(0);//重点,看下面的说明

    CComVariant LockComments(false),Password(_T(""));

    CComVariant AddToRecentFiles(true),WritePassword(_T(""));

    CComVariant ReadOnlyRecommended(false),EmbedTrueTypeFonts(false);

    CComVariant SaveNativePictureFormat(false),SaveFormsData(false);

    CComVariant SaveAsAOCELetter(false);

    /*************** FileFormat 文件格式说明 ****************************

    参数FileFormat,在WORD的宏中,使用的是 wdFormatDocument,这是什么那?

    其实这是WORD宏中所使用的常量,由匈牙利命名可以知道wd其实是DWORD的意思

    知道了是一个正数,那么它到底是多少那?其实有一个办法可以知道,那就是在

    WORD宏程序中,加一条语句:MsgBox wdFormatDocument 这样你再运行宏程序,

    就能看到这个常量是多少了。呵呵,这个常量是0,我够聪明吧^_^

    *********************************************************************/


    doc.SaveAs(&FileName,&FileFormat,&LockComments,&Password,

    &AddToRecentFiles,&WritePassword,&ReadOnlyRecommended,

    &EmbedTrueTypeFonts,&SaveNativePictureFormat,&SaveFormsData,

    &SaveAsAOCELetter);


    sel.ReleaseDispatch();

    doc.ReleaseDispatch();

    docs.ReleaseDispatch();


    CComVariant SaveChanges(false),OriginalFormat,RouteDocument;

    app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);

    app.ReleaseDispatch();

    AfxMessageBox(_T("请检查c:\\hello.doc是否正常产生了。下面该学习Setp5了"));

    }


    Step5:

    BOOL CStep5Dlg::OnInitDialog()
    {

    CDialog::OnInitDialog();


    // Set the icon for this dialog.  The framework does this automatically

    //  when the application's main window is not a dialog

    SetIcon(m_hIcon, TRUE);// Set big icon

    SetIcon(m_hIcon, FALSE);// Set small icon


    // TODO: Add extra initialization here

    SetDlgItemText(IDC_EDIT1,_T("中华人民共和国"));

    return TRUE;  // return TRUE  unless you set the focus to a control

    }

    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.

    void CStep5Dlg::OnPaint() 
    {

    if (IsIconic())

    {

    CPaintDC dc(this); // device context for painting

    SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

    // Center icon in client rectangle

    int cxIcon = GetSystemMetrics(SM_CXICON);

    int cyIcon = GetSystemMetrics(SM_CYICON);

    CRect rect;

    GetClientRect(&rect);

    int x = (rect.Width() - cxIcon + 1) / 2;

    int y = (rect.Height() - cyIcon + 1) / 2;

    // Draw the icon

    dc.DrawIcon(x, y, m_hIcon);

    }

    else

    {

    CDialog::OnPaint();

    }

    }


    // The system calls this to obtain the cursor to display while the user drags
    //  the minimized window.

    HCURSOR CStep5Dlg::OnQueryDragIcon()
    {

    return (HCURSOR) m_hIcon;

    }

    /***************** WORD 中录制的宏,按笔画排序(全部选择,菜单表格\排序) ********
        MsgBox wdSortFieldStroke    '5      使用了常量,所以使用MsgBox得到具体的数值
        MsgBox wdSortOrderAscending '0
        MsgBox wdSortFieldSyllable  '3
    MsgBox wdSeparateByTabs     '1
        MsgBox wdSimplifiedChinese  '2052
        
        Selection.WholeStory '全选
        Selection.Sort ExcludeHeader:=False, FieldNumber:="段落数", SortFieldType:= _
            wdSortFieldStroke, SortOrder:=wdSortOrderAscending, FieldNumber2:="", _
            SortFieldType2:=wdSortFieldSyllable, SortOrder2:=wdSortOrderAscending, _
            FieldNumber3:="", SortFieldType3:=wdSortFieldSyllable, SortOrder3:= _
            wdSortOrderAscending, Separator:=wdSortSeparateByTabs, SortColumn:=False, _
             CaseSensitive:=False, LanguageID:=wdSimplifiedChinese
        Selection.Copy '把排序后的结果,复制到剪贴板
    *********************************************************************************/


    #include "msword9.h"
    #include <AtlBase.h>

    void CStep5Dlg::OnOK() 
    {

    CString str;

    GetDlgItemText(IDC_EDIT1,str);

    str.TrimLeft();str.TrimRight();

    if(str.IsEmpty())return;


    ::CoInitialize(NULL);

    _Application app;

    app.CreateDispatch(_T("Word.Application"));

    //app.SetVisible(FALSE);//这次不调用显示,因为我们要偷偷摸摸的转换:)

    Documents docs=app.GetDocuments();

    CComVariant Template(""),NewTemplate(false),DocumentType(0),Visible;

    docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);

    Selection sel=app.GetSelection();


    for(int i=0;i<str.GetLength()/2;i++)

    { //这里只考虑了输入为纯汉字的情况,你自己修改为可以支持中英文混合的情况

    sel.TypeText(str.Mid(i*2,2)+"\r\n");//2个字符表示一个汉字,用回车换行分隔

    }

    sel.WholeStory();//全部选择


    CComVariant ExcludeHeader(false);

    CComVariant FieldNumber(_T("段落数")),SortFieldType(5),SortOrder(0);

    CComVariant FieldNumber2(_T("")),SortFieldType2(3),SortOrder2(0);

    CComVariant FieldNumber3(_T("")),SortFieldtype3(3),SortOrder3(0);

    CComVariant SortColumn(false),Separator(1),LanguageID(2052);

    CComVariant CaseSensitive(false),BidiSort,IgnoreThe;

    CComVariant IgnoreKashida,IgnoreDiacritics,IgnoreHe;

    //排序

    sel.Sort(&ExcludeHeader,&FieldNumber,&SortFieldType,&SortOrder,

    &FieldNumber2,&SortFieldType2,&SortOrder2,&FieldNumber3,

    &SortFieldtype3,&SortOrder3,&SortColumn,&Separator,

    &CaseSensitive,&BidiSort,&IgnoreThe,&IgnoreKashida,

    &IgnoreDiacritics,&IgnoreHe,&LanguageID);


    //其实,这里可以直接调用sel.GetText()取得文本。

    //但现在选择复制到剪贴板的方式。


    sel.Copy(); //复制到剪贴板


    if(OpenClipboard())

    { //从剪贴板取出排序后的文字

    HGLOBAL hMem=::GetClipboardData(CF_TEXT);

    LPCTSTR lp=(LPCTSTR)::GlobalLock(hMem);

    str=lp;

    ::GlobalUnlock(hMem);

    CloseClipboard();

    str.Replace("\r\n","");//删除回车换行

    SetDlgItemText(IDC_EDIT2,str);

    }

    sel.ReleaseDispatch();

    docs.ReleaseDispatch();


    CComVariant SaveChanges(false),OriginalFormat,RouteDocument;

    app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);

    app.ReleaseDispatch();


    ::CoUninitialize();

    }


    Step6:

    #include "msword9.h"

    void CStep6Dlg::OnOK() 
    {

    CLSID clsid;

    HRESULT hr;

    hr=::CLSIDFromProgID(L"Word.Application",&clsid);//通过ProgID取得CLSID

    if(FAILED(hr))

    {

    AfxMessageBox(_T("不会吧,竟然没有安装OFFICE"));

    return;

    }

    IUnknown *pUnknown=NULL;

    IDispatch *pDispatch=NULL;

    _Application app=NULL;

    Selection sel=NULL;


    hr=::GetActiveObject(clsid,NULL,&pUnknown);//查找是否有WORD程序在运行

    if(FAILED(hr))

    {

    AfxMessageBox(_T("没有正在运行中的WORD应用程序"));

    return;

    }


    try

    {

    hr=pUnknown->QueryInterface(IID_IDispatch,(LPVOID *)&app);

    if(FAILED(hr))throw(_T("没有取得IDispatchPtr"));

    pUnknown->Release();pUnknown=NULL;


    sel=app.GetSelection();

    if(!sel) throw(_T("没有正在编辑的文档"));

    sel.WholeStory();//全部选择

    CString str=sel.GetText();//取得文本

    SetDlgItemText(IDC_EDIT1,str);//显示到编辑窗中

    }

    catch(LPCTSTR lpErr)

    {

    AfxMessageBox(lpErr);

    }

    if(pUnknown) pUnknown->Release();

    if(sel) sel.ReleaseDispatch();

    if(app) sel.ReleaseDispatch();

    }

    展开全文
  • Visual C++ 中操纵 MS Word 123

    千次阅读 2009-04-17 14:04:00
    你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序.........

    Visual C++ 中操纵 MS Word 123
    VC
    知识库出品 转帖

      使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doctxtHTMLrtf文件转换、中文简繁体转换、拼音或笔画排序......只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并下载源文件进行参考,你就可以一步一步地掌握这个技术。祝朋友们学习快乐。

    一、概念
      Microsoft Office 产品中,都提供了OLE Automation 自动化程序的接口。如果你使用VBVBA Script 脚本调用 Office 功能的话,其实比使用 VC 调用要简单的多。比如在 WORD 中,调出菜单工具(T)/(M)/录制新宏(R)”,这时候它开始记录你在 WORD 中任何菜单和键盘的操作,把你的操作过程保存起来,以便再次重复调用。而保存这些操作的记录,其实就是使用了 VBA 程序(Visual Basic for Application)。而我们下面要实现的功能,也同样要参考 VBA 的方法。

    二、结构层次
      为了更有逻辑,更有层次地操作 OfficeMicrosoft 把应用(Application)按逻辑功能划分为如下的树形结构

    Application(WORD
    为例,只列出一部分)
      Documents(所有的文档)
            Document
    (一个文档)
                ......
      Templates(所有模板)
            Template
    (一个模板)
                ......
      Windows(所有窗口)
            Window
            Selection
            View
      Selection(编辑对象)
            Font
            Style
            Range
            ......
      ......

    只有了解了逻辑层次,我们才能正确的操纵 Office。举例来讲,如果给出一个VBScript语句是:
          application.ActiveDocument.SaveAs "c:/abc.doc"
    那么,我们就知道了,这个操作的过程是:第一步,取得Application;第二步,从Application中取得ActiveDocument;第三步,调用 Document 的函数 SaveAs,参数是一个字符串型的文件名。

    三、基本步骤
    1)创建(或打开已有的)一个 MFC 的程序工程
    2Ctrl+W 执行 ClassWizard(本文按照 VC6 操作,例子程序也是在VC6 下编写测试的)
    3Add Class.../From a type Library... Office 目录中,找到你想使用的类型库。(我使用的是 Office2000,其Word 的类型库文件,保存在 C:/Program Files/Microsoft Office/Office/MSWORD9.OLB)根据你 Office 的版本,可以使用下表列出的类型库文件

    Office 版本和类型

    类型库文件

    Office 版本和类型

    类型库文件

    Access 97

    Msacc8.olb

    PowerPoint 2000

    Msppt9.olb

    Jet Database

    3.5 DAO350.dll

    Word 2000

    Msword9.olb

    Binder 97

    Msbdr8.olb

    Access 2002

    Msacc.olb

    Excel 97

    Excel8.olb

    Excel 2002

    Excel.exe

    Graph 97

    Graph8.olb

    Graph 2002

    Graph.exe

    Office 97

    Mso97.dll

    Office 2002

    MSO.dll

    Outlook 97

    Msoutl97.olb

    Outlook 2002

    MSOutl.olb

    PowerPoint 97

    Msppt8.olb

    PowerPoint 2002

    MSPpt.olb

    Word 97

    Msword8.olb

    Word 2002

    MSWord.olb

    Access 2000

    Msacc9.olb

    Office Access 2003

    Msacc.olb

    Jet Database 3.51

    DAO360.dll

    Office Excel 2003

    Excel.exe

    Binder 2000

    Msbdr9.olb

    Graph 2003

    Graph.exe

    Excel 2000

    Excel9.olb

    Office 2003

    MSO.dll

    Graph 2000

    Graph9.olb

    Office Outlook 2003

    MSOutl.olb

    Office 2000

    Mso9.dll

    Office PowerPoint 2003

    MSPpt.olb

    Outlook 2000

    Msoutl9.olb

    Office Word 2003

    MSWord.olb

    4)选择类型库文件后,在弹出的对话窗中继续选择要添加的类。具体选择什么类,要看你将来在程序中打算调用什么功能。当然,你也可以不用考虑这么多,用鼠标和Shift键配合,全部选择也可以。
    5)初始化COM。方法一,找到AppInitInstance()函数,在其中添加 AfxOleInit()函数的调用;方法二,在需要调用COM功能的地方 CoInitialize(NULL),调用完毕后 CoUninitialize()
    6)在你需要调用 Office 功能函数的 cpp 文件中
         #include <atlbase.h>  //
    为了方便操作 VARIANT 类型变量,使用 CComVariant 模板类
         #include "
    头文件.h"   // 具体的头文件名,是由装载类型库的文件名决定的。(鼠标双点包装类的文件,就可以看到)
                               //
    比如使用 msword9.olb类型库,那么头文件是 msword9.h
    7)好了,现在开始写程序吧。另外要说明的是,步骤34,其实也可以使用 #import 方式引入类型库。

    四、实现技巧
        在书写调用 Office 函数的过程中,最困难的是确定函数的参数,一般情况下,参数都是 VARIANT 类型的变量指针。那么到底具体我们应该怎么写那?推荐两个方法,其一是阅读有关 VBA 的书籍;其二,是使用 Office 中自带的功能。强烈推荐大家使用第二个方法,把你要完成的功能,在 Office 的操作环境中,用宏录制下来,然后观察分析录制后的函数和参数,就可以在 VC 中使用了。举一个例子:

          ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _

            , LockComments:=False, Password:="", AddToRecentFiles:=True, _

            WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _

             SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _

            False

    以上是在 Word 中录制的一个保存文件的宏,而在 VC 中对应的函数原型为

          void _Document::SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments,

            VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword,

            VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts, VARIANT* SaveNativePictureFormat,

           VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter)

    分析对照后,我们就能看出,参数 FileName 是字符串 VARIANT(VT_BSTR),参数 LockComments 是布尔VARIANT(VT_BOOL),等等。参数 FileFormat := wdFormatDocument 是什么类型那?其实这是一个表示保存的时候指定文件类型的常量,而且显然是 DWORD 类型VARIANT(VT_I4)。那么常量的数值又是多少那?很简单,写一个宏,调用函数 MsgBox 显示一下不就都知道啦?!

    五、步步为营
      特别提示一:编译执行前,一定要先关闭 KV 实时监视病毒的功能(KV 的程序会干扰我们的调用,瑞星的则没关系)。
       特别提示二:在例子程序中,为了表现程序的关键部分,没有或很少使用了条件判断。为了实现你程序的健壮性,请自己加上条件判断和异常处理。

    Step1
    :如何启动和关闭 WORD,及 VARIANT 的最基本的使用方法
    Step2
    :和 Step1 同样功能,用 CComVariant 改进了 VARIANT 的使用方式
    Step3
    :在 Step2 的基础上,新建一个 WORD 文档,并从程序中传送一些字符到 WORD
    Step4
    :在 Step3 的基础上,保存 WORD 文档
    Step5
    :一个小应用举例,把输入的汉字按照笔画排序
    Step6
    :一个小应用举例,盗窃正在使用的 WORD 文档
      以上这6个小程序中,都有详细的注释。大家阅读后慢慢体会并实验,你就可以自由地操纵任何一个 Office 啦。

    六、参考:Microsoft Office Development with Visual Studio

    展开全文
  • 1. hibernate4.3.0只需要lib目录下的required目录里的所有包,视频里面的hibernate3的其他包不需要导入。 2. struts对应action层;hibernate对应dao层;spring贯穿在整个过程当中,spring帮action把service注入到...
  • 40. to_number()函数:将字符串转换成数字 select sal from emp where sal > to_number(‘$1,250.00’,‘$9,999.99’); 41. nvl()函数:处理空值 select ename,sal*12+nvl(comm,0) from emp;如果为空,则用0...
  • word使用技巧大全

    热门讨论 2011-03-18 20:37:53
    使Word中的字体变清晰Word文档中使用“仿宋”字体很淡,可按以下方法使字体更清晰: 84 四十一、word和execl使用技巧 84 1、Word下如何使用着重号 84 2、让Word表格快速一分为二 84 3、Word中巧用Alt键 85 4、巧用...
  • 利用word漏洞清除word保护密码

    千次阅读 2008-10-07 14:35:00
    在使用Word进行文件保护时,我们经常会使用到窗体保护(工具->保护文档),用窗体保护最为彻底,用户无法编辑,也无法进行Copy&Paste操作,前几天发布的Word文档的漏洞可以让你用很简单的方法去掉这个密码。...
  • 现代向量化表示挑战创建有效的文档嵌入,捕捉所有类型的文档,使其通过使用嵌入在文档级别进行搜索。 例如“蝙蝠是冠状病毒的来源”、“穿山甲中的冠状病毒”,由介词、形容词等连接一个或多个名词短语的短序列。这些...
  • 8种排序我已经整理成word文档,有兴趣的同学可以下载:http://download.csdn.net/detail/pzhtpf/4313015     7、归并排序   (1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的...
  • 经典Office 2003专升本复习题(Word、Excel、PowerPoint) 一、Word 2003 1. 启动 Word 是指: 将 Word 从硬盘中调入主存执行 2. 菜单栏: 文件( F )、编辑( E )、视图( V )、插入( I )、格式( O )、...
  • WORD经典实用!

    千次阅读 2016-07-21 17:30:31
    WORD经典实用!较全面!
  • word编辑技巧

    千次阅读 2010-05-10 18:04:00
    1.2 编辑排版技巧(1)1.2.1 页面设置快速进行调整要对Word进行页面调整,通常大家采用的方法是选择“文件→页面设置”选项的方法进行,请问有没有更快速方便的方法呢?答:有,如果要进行“页面设置”,只需用鼠标...
  • HBase 官方文档中文版

    千次阅读 2016-11-17 16:46:14
    HBase 官方文档中文版
  • Visual C++ 中操纵 MS Word

    2008-09-03 16:38:00
    你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序.........
  • word题库!

    千次阅读 2007-05-12 21:12:00
    adv_username = "makemoney1";adv_gid = "makemoney1_default";adtype = "728x90"; word全真试题库 1 试述如何在窗口中打开“艺术字”工具栏。
  • Hbase官方文档中文版

    千次阅读 2018-05-15 11:02:13
    版权声明:本文为博主原创文章,转载请标注博主...这是 Apache HBase (TM)的官方文档。 HBase是一个分布式,版本化,面向列的数据库,构建在 Apache Hadoop和 Apache ZooKeeper之上。   目录 序 1. 入门 1....
  • Visual C++ 中操纵 MS Word

    2012-01-26 20:58:46
    转载来源于... Visual C++ 中操纵 MS Word 123 ...你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报
  • ExMobi文档

    千次阅读 2015-07-04 11:25:43
    EXmobi官方文档 ExMobi®从入门到精通         本书电子版和示例代码请访问GIT仓库: https://github.com/nandy007/ExMobiBeginnerBook       ExMobi门户:http://www.exmobi.cn ExMobi...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,798
精华内容 2,719
关键字:

word文档数字123排序取消