<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Cách sử dụng lệnh Tee trong Linux</title>
<meta name="description" content="Cách sử dụng lệnh Tee trong Linux - Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;www.nguoicodonvn2008.info&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;kien-thuc-may-tinh&#x002F;cach-su-dung-lenh-tee-trong-linux-368.html">
<meta name="author" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :.">
<meta name="copyright" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :. [admin@nguoicodonvn2008.info]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Cách sử dụng lệnh Tee trong Linux">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;www.nguoicodonvn2008.info&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;kien-thuc-may-tinh&#x002F;cach-su-dung-lenh-tee-trong-linux-368.html">
<meta property="og:site_name" content=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.">
<meta property="og:url" content="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-su-dung-lenh-tee-trong-linux-368.html">
<link rel="shortcut icon" href="https://nguoicodonvn2008.info/favicon.ico">
<link rel="canonical" href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-su-dung-lenh-tee-trong-linux-368.html">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/karaoke-dual/" title="Tin Tức - Karaoke Dual" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/nhac-tre/" title="Tin Tức - Nhạc trẻ" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tru-tinh/" title="Tin Tức - Trữ tình" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/nuoc-ngoai/" title="Tin Tức - Nước ngoài" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/remix/" title="Tin Tức - Remix" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tam-su-tinh-yeu/" title="Tin Tức - Tâm sự tình yêu" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tho-suu-tam/" title="Tin Tức - Thơ sưu tầm" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/cuoc-song/" title="Tin Tức - Cuộc sống" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/phan-mem/" title="Tin Tức - Phần mềm" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/kien-thuc-may-tinh/" title="Tin Tức - Kiến thức máy tính" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/hoc-tap/" title="Tin Tức - Học tập" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tai-lieu/" title="Tin Tức - Tài liệu" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/style.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://nguoicodonvn2008.info/themes/default/css/news.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">.&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.</h2>
		<p class="pull-right"><a title=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;." href="https://nguoicodonvn2008.info/">https://nguoicodonvn2008.info</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Cách sử dụng lệnh Tee trong Linux</h1>
		<ul class="list-inline">
			<li>Thứ năm - 04/07/2019 01:19</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
		</div>
				<div class="imghome">
			<img alt="Cách sử dụng lệnh Tee trong Linux" src="https://st.quantrimang.com/photos/image/2019/07/03/cach-dung-lenh-tee-trong-linux-1.jpg" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p style="text-align: justify;">Nếu đã từng sử dụng&nbsp;pipe&nbsp;và redirection trong Linux shell, đôi khi bạn cũng sẽ cần phải sử dụng tiện ích&nbsp;<code>tee</code>.</p>

<h2 style="text-align: justify;">Tee giữ nhiệm vụ gì?</h2>

<p style="text-align: justify;">Một lệnh như&nbsp;<code>ls</code>&nbsp;sẽ hiển thị nội dung của thư mục hiện hành. Nói cách khác, nó hiển thị các nội dung này thành một stdout (standard output - đầu ra tiêu chuẩn), thường là màn hình của bạn, hoặc chính xác hơn là màn hình terminal ảo.</p>

<p style="text-align: justify;">Một lệnh như&nbsp;<code>ls &gt; file123</code>&nbsp;sẽ không hiển thị gì trên màn hình. Đó là vì dấu&nbsp;<code>&gt;</code>&nbsp;chuyển hướng tất cả đầu ra thành một file thay vì hiển thị nó thành stdout. Bây giờ&nbsp;<strong>file123</strong>&nbsp;sẽ được lấp đầy bằng các nội dung được hiển thị trước đó trên màn hình.</p>

<p style="text-align: justify;">Để hiển thị nội dung của thư mục trên màn hình và ghi nó vào một file, bạn phải sử dụng hai lệnh. Nhưng với&nbsp;<code>tee</code>, bạn có thể làm cả hai điều này cùng một lúc.</p>

<pre id="pre0">
<code>ls | tee file123</code></pre>

<div style="text-align: justify;">&nbsp;</div>

<h2 style="text-align: justify;">Tại sao nên sử dụng Tee khi bạn có thể chạy một lệnh tương tự hai lần?</h2>

<p style="text-align: justify;">Trong ví dụ trên, rõ ràng là bạn không cần&nbsp;<code>tee</code>&nbsp;nếu bạn có thể thực thi&nbsp;<code>ls</code>&nbsp;bình thường, sau đó thực hiện lại và chuyển hướng đầu ra thành một file. Tuy nhiên, bạn sẽ gặp các tình huống trong đó đầu ra là duy nhất. Hãy tưởng tượng tình huống bạn đang cố gắng chẩn đoán một vấn đề. Bạn chạy:</p>

<pre id="pre1">
<code>diagnose | tee error.log</code></pre>

<p style="text-align: justify;">Các lỗi bạn nhận được có thể là duy nhất. Bạn muốn chúng được hiển thị trên màn hình để bạn có thể thấy những gì đang diễn ra khi kiểm tra mọi thứ. Nhưng bạn cũng muốn những lỗi đó được lưu vào một file, để xem lại sau đó hoặc dán đầu ra vào một diễn đàn thảo luận và tham khảo ý kiến mọi người về nó.</p>

<p style="text-align: justify;">Một tình huống khác thường gặp phải mà bạn có thể cần đến&nbsp;<code>tee</code>, đó là khi bạn muốn đưa đầu ra của lệnh đến một vị trí mà chỉ người dùng root mới có thể đọc hoặc ghi. Lệnh sau không hoạt động:</p>

<pre id="pre2">
<code>/sbin/blkid &gt; /root/somefile</code></pre>

<p style="text-align: justify;">Sau đó, bạn có thể nghĩ, chỉ cần sử dụng&nbsp;<code>sudo</code>! Nhưng bạn sẽ ngạc nhiên khi lệnh này cũng không hoạt động:</p>

<pre id="pre3">
<code>sudo blkid &gt; /root/somefile</code></pre>

<p style="text-align: justify;">Đó là vì sau khi&nbsp;<code>sudo blkid</code>&nbsp;thực thi, bạn vẫn đăng nhập với tư cách không phải là người dùng root. Và shell của bạn (thường là bash) cố gắng ghi vào&nbsp;<strong>/root/somefile</strong>&nbsp;với thông tin người dùng thông thường của bạn. Để giải quyết điều này, bạn có thể sử dụng&nbsp;<code>tee</code>:</p>

<pre id="pre4">
<code>/sbin/blkid | sudo tee /root/somefile</code></pre>

<h2 style="text-align: justify;">Nối văn bản và chuyển hướng lỗi</h2>

<p style="text-align: justify;"><code>Tee</code>&nbsp;là một lệnh hữu ích nhưng đơn giản. Một lệnh&nbsp;<code>command | tee somefile</code>&nbsp;cơ bản thường đủ dùng trong hầu hết mọi tình huống. Tuy nhiên, có 2 trường hợp mà bạn sẽ cần đến những lời khuyên này.</p>

<p style="text-align: justify;">Điều đầu tiên cần biết là&nbsp;<code>tee</code>, theo mặc định, luôn ghi đè lên một file. Nếu bạn chạy:</p>

<pre id="pre5">
<code>ls | tee somefile</code></pre>

<p style="text-align: justify;">Rồi sau đó chạy:</p>

<pre id="pre6">
<code>ls /tmp | tee somefile</code></pre>

<p style="text-align: justify;">Lệnh thứ hai sẽ ghi đè lên nội dung của&nbsp;<strong>somefile</strong>&nbsp;và bạn sẽ chỉ thấy nội dung của lệnh cuối cùng được thực thi. Để thay đổi hành vi này, bạn có thể tạo văn bản nối thêm&nbsp;<code>tee</code>&nbsp;thay vì ghi đè. Để làm như vậy, chỉ cần sử dụng switch lệnh&nbsp;<strong>-a</strong>.</p>

<pre id="pre7">
<code>ls | tee -a somefile</code></pre>

<p style="text-align: justify;">Điều thứ hai cần biết là không phải tất cả đầu ra đều giống nhau. Các thông báo lỗi được xử lý khác nhau và mặc dù xuất hiện trên màn hình, nhưng chúng không được coi là stdout, mà được coi là stderr và không được&nbsp;<code>tee</code>&nbsp;xử lý. Sau đây là một ví dụ về&nbsp;<code>grep</code>.</p>

<pre id="pre8">
<code>grep -r L2TP /etc | tee somefile</code></pre>

<p style="text-align: justify;">Kết quả được hiển thị sẽ giống như hình ảnh sau đây:</p>

<p style="text-align: justify;"><img alt="Ví dụ về grep" data-i="0" data-src="https://st.quantrimang.com/photos/image/2019/07/03/cach-dung-lenh-tee-trong-linux-1.jpg" data-was-processed="true" height="354" src="https://st.quantrimang.com/photos/image/2019/07/03/cach-dung-lenh-tee-trong-linux-1.jpg" width="550" /></p>

<p style="text-align: justify;">Thông báo&nbsp;<strong>Permission denied</strong>&nbsp;được viết thành stderr. Điều duy nhất được viết thành stdout là phần văn bản được highlight. Đó là lý do tại sao bạn nhận thấy rằng nội dung của&nbsp;<strong>“somefile”</strong>&nbsp;là những gì được hiển thị trong hình ảnh dưới đây:</p>

<p style="text-align: justify;"><img alt="Nội dung của “somefile”" data-i="1" data-src="https://st.quantrimang.com/photos/image/2019/07/03/cach-dung-lenh-tee-trong-linux-2.jpg" data-was-processed="true" height="102" src="https://st.quantrimang.com/photos/image/2019/07/03/cach-dung-lenh-tee-trong-linux-2.jpg" width="550" /></p>

<p style="text-align: justify;">Trong trường hợp này,&nbsp;<code>grep</code>&nbsp;được sử dụng để tìm kiếm văn bản và rất hữu ích khi các thông báo lỗi không được chuyển hướng đến file. Các thông báo lỗi chỉ lấp đầy file với những thông tin không cần thiết. Bạn chỉ muốn xem kết quả tìm được. Nhưng khi bạn cần thông báo lỗi, hãy sử dụng&nbsp;<code>2&gt;&amp;1</code>, để chuyển hướng stderr thành stdout.</p>

<pre id="pre9">
<code>grep -r L2TP /etc 2&gt;&amp;1 | tee somefile</code></pre>

<p style="text-align: justify;">Với lệnh này, bạn sẽ nhận thấy rằng&nbsp;<strong>somefile</strong>&nbsp;bây giờ cũng chứa các thông báo lỗi.</p>

<p style="text-align: justify;">Hy vọng rằng, hướng dẫn này bao gồm mọi thứ bạn cần để tận dụng tối đa lệnh&nbsp;<code>tee</code>. Nhưng nếu bạn gặp phải tình huống khó xử lý nào đó với&nbsp;<code>tee</code>, hãy để lại ý kiến trong phần bình luận bên dưới để mọi người cùng chia sẻ.</p>

<p style="text-align: justify;">Chúc bạn sử dụng lệnh&nbsp;<code>tee</code>&nbsp;thành công!</p>
		</div>
				<div id="author">
						<p>
				<strong>Nguồn tin:</strong>
				Quantrimang.com
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-su-dung-lenh-tee-trong-linux-368.html" title="Cách sử dụng lệnh Tee trong Linux">https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-su-dung-lenh-tee-trong-linux-368.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; .&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.
		</div>
		<div id="contact">
			<a href="mailto:admin@nguoicodonvn2008.info">admin@nguoicodonvn2008.info</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://nguoicodonvn2008.info/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
		</script>
		<div class="car-top">
  <span><img src="https://nguoicodonvn2008.info/themes/default/images/car.png" alt=""></span>
</div>
<div id="run_cronjobs" style="visibility:hidden;display:none;"><img alt="cron" src="/index.php?second=cronjobs&amp;p=v0t26FHA" width="1" height="1" /></div>
<script src="https://nguoicodonvn2008.info/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4c_e856T",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://nguoicodonvn2008.info/assets/js/language/vi.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/global.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/site.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/news.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/main.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://nguoicodonvn2008.info",
            "logo": "https://nguoicodonvn2008.info/uploads/angel.gif"
        }
        </script>
<script src="https://nguoicodonvn2008.info/themes/default/js/bootstrap.min.js"></script>
<script type="text/javascript">
var $scrolltop = $('.car-top');
$scrolltop.on('click', function () {
    $('html,body').animate({
        scrollTop: 0
    }, 800);
    $(this).addClass("car-run");
    setTimeout(function(){ $scrolltop.removeClass('car-run');}, 1000);
    return false;
});
$(window).on('scroll', function ()
{ 
    if($(window).scrollTop() >= 200)
    {
        $scrolltop.addClass("show");
        $scrolltop.addClass("car-down");
    }
    else
    {
       $scrolltop.removeClass("show");
       setTimeout(function(){ $scrolltop.removeClass('car-down');}, 300);
    }
});
</script>
</body>
</html>